{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.CdQRYhzI/b1/linuxcnc_2.9.1-2_amd64.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.CdQRYhzI/b2/linuxcnc_2.9.1-2_amd64.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,9 +1,9 @@\n \n- 69bcffeedf1b7f0b4f5ac426a6a6641a 26223064 misc optional linuxcnc-doc-de_2.9.1-2_all.deb\n- 77a28f89878dd605e1504a3c036909fa 27122164 misc optional linuxcnc-doc-en_2.9.1-2_all.deb\n- db46017940c28036070fa580c7a346af 26265960 misc optional linuxcnc-doc-es_2.9.1-2_all.deb\n- f8e95ff505df2d25efb80f9459640ed8 26172504 misc optional linuxcnc-doc-fr_2.9.1-2_all.deb\n- 8462fc08aeb25942482ffc9025413d4e 26222512 misc optional linuxcnc-doc-zh-cn_2.9.1-2_all.deb\n+ 93adb456e8e0d91feaf38d805b907ed1 26222300 misc optional linuxcnc-doc-de_2.9.1-2_all.deb\n+ 30896a81524c5190595547b1ecbbd05c 27120816 misc optional linuxcnc-doc-en_2.9.1-2_all.deb\n+ c22e54cecd7f993939a695966e208d7a 26266140 misc optional linuxcnc-doc-es_2.9.1-2_all.deb\n+ 29b6974f3081f50fad146ac4ddbccfd8 26171384 misc optional linuxcnc-doc-fr_2.9.1-2_all.deb\n+ 2ef10fa1faad843633026dbe9ee4dbd0 26221124 misc optional linuxcnc-doc-zh-cn_2.9.1-2_all.deb\n 5dea1a0598f4bce8bfd985bae9a75e39 11241000 debug optional linuxcnc-uspace-dbgsym_2.9.1-2_amd64.deb\n d1b4462d894ea585b7fed3da0e89e02e 261484 devel optional linuxcnc-uspace-dev_2.9.1-2_amd64.deb\n- 010531c80a64c2abb16897ead616ca3c 26972836 misc optional linuxcnc-uspace_2.9.1-2_amd64.deb\n+ b63267de4423887ae06967780eacd52a 26970756 misc optional linuxcnc-uspace_2.9.1-2_amd64.deb\n"}, {"source1": "linuxcnc-doc-de_2.9.1-2_all.deb", "source2": "linuxcnc-doc-de_2.9.1-2_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2023-11-05 11:59:16.000000 debian-binary\n--rw-r--r-- 0 0 0 1080 2023-11-05 11:59:16.000000 control.tar.xz\n--rw-r--r-- 0 0 0 26221792 2023-11-05 11:59:16.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 1076 2023-11-05 11:59:16.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 26221032 2023-11-05 11:59:16.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./control", "source2": "./control", "unified_diff": "@@ -1,13 +1,13 @@\n Package: linuxcnc-doc-de\n Source: linuxcnc\n Version: 2.9.1-2\n Architecture: all\n Maintainer: LinuxCNC Developers \n-Installed-Size: 26953\n+Installed-Size: 26952\n Recommends: xdg-utils\n Suggests: pdf-viewer\n Provides: linuxcnc-doc\n Section: misc\n Priority: optional\n Multi-Arch: foreign\n Homepage: https://linuxcnc.org/\n"}, {"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -4,18 +4,18 @@\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/applications/\n -rw-r--r-- 0 root (0) root (0) 340 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-documentation_de.desktop\n -rw-r--r-- 0 root (0) root (0) 367 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-gcoderef_de.desktop\n -rw-r--r-- 0 root (0) root (0) 381 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-gettingstarted_de.desktop\n -rw-r--r-- 0 root (0) root (0) 370 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-integratorinfo_de.desktop\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/\n--rw-r--r-- 0 root (0) root (0) 822939 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Developer_de.pdf\n--rw-r--r-- 0 root (0) root (0) 26132773 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Documentation_de.pdf\n+-rw-r--r-- 0 root (0) root (0) 822888 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Developer_de.pdf\n+-rw-r--r-- 0 root (0) root (0) 26131949 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Documentation_de.pdf\n -rw-r--r-- 0 root (0) root (0) 404716 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_de.pdf\n--rw-r--r-- 0 root (0) root (0) 150052 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Integrator_de.pdf\n+-rw-r--r-- 0 root (0) root (0) 150033 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Integrator_de.pdf\n -rw-r--r-- 0 root (0) root (0) 14667 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/gcode_de.html\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc-doc-de/\n -rw-r--r-- 0 root (0) root (0) 10751 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc-doc-de/changelog.Debian.gz\n -rw-r--r-- 0 root (0) root (0) 42238 2023-10-08 12:02:22.000000 ./usr/share/doc/linuxcnc-doc-de/copyright\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc-base/\n -rw-r--r-- 0 root (0) root (0) 327 2023-10-08 12:02:22.000000 ./usr/share/doc-base/linuxcnc-doc-de.linuxcnc-doc-de\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/lintian/\n"}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_de.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_de.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_de.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_de.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Developer Manual V2.9.1, 04 Nov 2023'\n+Title: 'Developer Manual V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Developer Manual V2.9.1, 04 Nov 2023\n+Developer Manual V2.9.1, 06 Nov 2023\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n ii\n \n Contents\n 1 Introduction\n \n 1\n@@ -117,15 +117,15 @@\n \n 15\n \n 3.8.3.1 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 16\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n iii\n \n 3.8.3.2 Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 16\n \n@@ -281,15 +281,15 @@\n \n 19\n \n 3.8.16.1Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 20\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n iv\n \n 3.8.16.2Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 20\n \n@@ -449,15 +449,15 @@\n \n 3.21.3Process line\n \n 27\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n v\n \n 3.21.4Configuration Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 28\n \n@@ -625,15 +625,15 @@\n \n 40\n \n 4.14Others . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 40\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n vi\n \n 5 Coding Style\n \n 41\n \n@@ -781,15 +781,15 @@\n \n 8.4.1 LinuxCNC official Git repo\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 52\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n vii\n \n 8.4.2 Use of Git in the LinuxCNC project . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 53\n \n@@ -876,15 +876,15 @@\n 10.2GNU Free Documentation License\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 63\n 63\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 1 / 67\n \n Chapter 1\n \n Introduction\n \n@@ -904,15 +904,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 2 / 67\n \n Chapter 2\n \n HAL General Reference\n 2.1 HAL Entity Names\n@@ -941,15 +941,15 @@\n functional blocks, each block might have several channels, and each channel has one or more pins.\n This results in a structure that resembles a directory tree. Even though halcmd doesn\u2019t recognize the\n tree structure, proper choice of naming conventions will let it group related items together (since it\n sorts the names). In addition, higher level tools can be designed to recognize such structure, if the\n names provide the necessary information. To do that, all HAL components should follow these rules:\n \u2022 Dots (\u201c.\u201d) separate levels of the hierarchy. This is analogous to the slash (\u201c/\u201d) in a filename.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 3 / 67\n \n \u2022 Hyphens (\u201c-\u201d) separate words or fields in the same level of the hierarchy.\n \u2022 HAL components should not use underscores or \u201cMixedCase\u201d. 1\n \u2022 Use only lowercase letters and numbers in names.\n \n@@ -991,15 +991,15 @@\n number.\n 1 Underlined characters have been removed, but there are still a few cases of broken mixture, for example pid.0.Pgain in\n place of pid.0.p-gain.\n 2 One exception to the \u201dchannel numbers start at zero\u201d rule is the parallel port. Its HAL pins are numbered with the\n corresponding pin number on the DB-25 connector. This is convenient for wiring, but inconsistent with other drivers. There is\n some debate over whether this is a bug or a feature.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 4 / 67\n \n \n An individual I/O channel might have just a single HAL pin associated with it, but most have more\n than one. For example, a digital input has two pins, one is the state of the physical pin, the other\n is the same thing inverted. That allows the configurator to choose between active high and active\n@@ -1041,15 +1041,15 @@\n ppmc.0.write\n Writes all outputs (step generators, pwm, DACs, and digital) on the first Pico Systems ppmc\n board.\n 3 Note to driver programmers: Do NOT implement separate functions for different I/O types unless they are interruptible\n and can work in independent threads. If interrupting an encoder read, reading digital inputs, and then resuming the encoder\n read will cause problems, then implement a single function that does everything.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 5 / 67\n \n Chapter 3\n \n Code Notes\n 3.1 Intended audience\n@@ -1080,15 +1080,15 @@\n \u2022 JOINT - A joint is one of the movable parts of the machine. Joints are distinct from axes, although\n the two terms are sometimes (mis)used to mean the same thing. In LinuxCNC, a joint is a physical\n thing that can be moved, not a coordinate in space. For example, the quill, knee, saddle, and table\n of a Bridgeport mill are all joints. The shoulder, elbow, and wrist of a robot arm are joints, as are\n the linear actuators of a hexapod. Every joint has a motor or actuator of some type associated with\n it. Joints do not necessarily correspond to the X, Y, and Z axes, although for machines with trivial\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 6 / 67\n \n 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\n their distinct meanings. Unfortunately that isn\u2019t necessarily true everywhere else. In particular,\n GUIs for machines with trivial kinematics may gloss over or completely hide the distinction between\n joints and axes. In addition, the INI file uses the term axis for data that would more accurately be\n@@ -1118,19 +1118,19 @@\n 3.4 Architecture overview\n There are four components contained in the LinuxCNC Architecture: a motion controller (EMCMOT),\n a discrete IO controller (EMCIO), a task executor which coordinates them (EMCTASK) and several\n text-mode and graphical User Interfaces. Each of them will be described in the current document,\n both from the design point of view and from the developers point of view (where to find needed data,\n how to easily extend/modify things, etc.).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 7 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 8 / 67\n \n 3.4.1 LinuxCNC software architecture\n At the coarsest level, LinuxCNC is a hierarchy of three controllers: the task level command handler\n and program interpreter, the motion controller, and the discrete I/O controller. The discrete I/O controller is implemented as a hierarchy of controllers, in this case for spindle, coolant, and auxiliary\n (e.g., estop, lube) subsystems. The task controller coordinates the actions of the motion and discrete\n@@ -1161,19 +1161,19 @@\n processes. For realtime motion control, the script first loads the default tpmod and homemod modules\n and then loads the kinematics and motion modules according to settings in halfiles specified by the\n INI file.\n Custom (user-built) homing or trajectory-planning modules can be used in place of the default modules\n via INI file settings or command line options. Custom modules must implement all functions used by\n the default modules. The halcompile utility can be used to create a custom module.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 9 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 10 / 67\n \n 3.6 Block diagrams and Data Flow\n The following figure is a block diagram of a joint controller. There is one joint controller per joint.\n The joint controllers work at a lower level than the kinematics, a level where all joints are completely\n independent. All the data for a joint is in a single joint structure. Some members of that structure are\n@@ -1187,15 +1187,15 @@\n mode, it is determined by the traj planner? In free mode, it is either copied from actualPos, or\n generated by applying forward kins to (2) or (3).\n \u2022 emcmotStatus->joints[n].coarse_pos - This is the desired position, in joint coordinates, but before\n interpolation. It is updated at the traj rate, not the servo rate. In coord mode, it is generated by\n applying inverse kins to (1) In teleop mode, it is generated by applying inverse kins to (1) In free\n mode, it is copied from (3), I think.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 11 / 67\n \n \u2022 \u2019emcmotStatus->joints[n].pos_cmd - This is the desired position, in joint coords, after interpolation.\n A new set of these coords is generated every servo period. In coord mode, it is generated from (2)\n by the interpolator. In teleop mode, it is generated from (2) by the interpolator. In free mode, it is\n generated by the free mode traj planner.\n@@ -1214,26 +1214,26 @@\n because one or more axes aren\u2019t homed. In that case, the options are: A) fake it by copying (1), or\n B) admit that we don\u2019t really know the Cartesian coordinates, and simply don\u2019t update actualPos.\n Whatever approach is used, I can see no reason not to do it the same way regardless of the operating\n mode. I would propose the following: If there are forward kins, use them, unless they don\u2019t work\n because of unhomed axes or other problems, in which case do (B). If no forward kins, do (A), since\n otherwise actualPos would never get updated.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 12 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 3.7 Homing\n 3.7.1 Homing state diagram\n \n 13 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 14 / 67\n \n 3.7.2 Another homing diagram\n \n 3.8 Commands\n The commands are implemented by a large switch statement in the function emcmotCommandHandler(), which is called at the servo rate. More on that function later.\n@@ -1250,15 +1250,15 @@\n The ABORT command simply stops all motion. It can be issued at any time, and will always be accepted. It does not disable the motion controller or change any state information, it simply cancels\n any motion that is currently in progress.1\n 1 It seems that the higher level code (TASK and above) also use ABORT to clear faults. Whenever there is a persistent fault\n (such as being outside the hardware limit switches), the higher level code sends a constant stream of ABORTs to the motion\n controller trying to make the fault go away. Thousands of them\u2026. That means that the motion controller should avoid persistent\n faults. This needs to be looked into.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 15 / 67\n \n 3.8.1.1 Requirements\n None. The command is always accepted and acted on immediately.\n 3.8.1.2 Results\n In free mode, the free mode trajectory planners are disabled. That results in each joint stopping as fast\n@@ -1290,15 +1290,15 @@\n machine is based on Cartesian coordinates using kinematics, rather than on individual joints as in free\n mode. However the trajectory planner per se is not used, instead movement is controlled by a velocity\n vector. Movement in teleop mode is much like jogging, except that it is done in Cartesian space instead\n of joint space. On a machine with trivial kinematics, there is little difference between teleop mode\n and free mode, and GUIs for those machines might never even issue this command. However for nontrivial machines like robots and hexapods, teleop mode is used for most user commanded jog type\n movements.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 16 / 67\n \n 3.8.3.1 Requirements\n The command handler will reject the TELEOP command with an error message if the kinematics\n cannot be activated because the one or more joints have not been homed. In addition, if any joint is in\n motion (GET_MOTION_INPOS_FLAG() == FALSE), then the command will be ignored (with no error\n@@ -1334,15 +1334,15 @@\n None. The command can be issued at any time, and will always be accepted.\n 3.8.5.2 Results\n If the controller is already enabled, nothing. If not, the controller is enabled. Queues and interpolators\n are flushed. Any movement or homing operations are terminated. The amp-enable outputs associated\n with active joints are turned on. If forward kinematics are not available, the machine is switched to\n free mode.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 17 / 67\n \n 3.8.6 DISABLE\n The DISABLE command disables the motion controller.\n 3.8.6.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n@@ -1369,15 +1369,15 @@\n Currently, nothing. (A call to the old extAmpEnable function is currently commented out.) Eventually\n it will set the amp enable HAL pin false.\n \n 3.8.9 ACTIVATE_JOINT\n The ACTIVATE_JOINT command turns on all the calculations associated with a single joint, but does\n not change the joint\u2019s amp enable output pin.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 18 / 67\n \n 3.8.9.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.9.2 Results\n Calculations for the specified joint are enabled. The amp enable pin is not changed, however, any\n@@ -1404,15 +1404,15 @@\n The DISABLE_WATCHDOG command disables a hardware based watchdog (if present).\n 3.8.12.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.12.2 Results\n Currently nothing. The old watchdog was a strange thing that used a specific sound card. A new\n watchdog interface may be designed in the future.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 19 / 67\n \n 3.8.13 PAUSE\n The PAUSE command stops the trajectory planner. It has no effect in free or teleop mode. At this\n point I don\u2019t know if it pauses all motion immediately, or if it completes the current move and then\n pauses before pulling another move from the queue.\n@@ -1439,15 +1439,15 @@\n \n 3.8.16 SCALE\n The SCALE command scales all velocity limits and commands by a specified amount. It is used to\n implement feed rate override and other similar functions. The scaling works in free, teleop, and coord\n modes, and affects everything, including homing velocities, etc. However, individual joint velocity\n limits are unaffected.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 20 / 67\n \n 3.8.16.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.16.2 Results\n All velocity commands are scaled by the specified constant.\n@@ -1477,15 +1477,15 @@\n 3.8.19 JOG_CONT\n The JOG_CONT command initiates a continuous jog on a single joint. A continuous jog is generated\n by setting the free mode trajectory planner\u2019s target position to a point beyond the end of the joint\u2019s\n range of travel. This ensures that the planner will move constantly until it is stopped by either the\n joint limits or an ABORT command. Normally, a GUI sends a JOG_CONT command when the user\n presses a jog button, and ABORT when the button is released.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 21 / 67\n \n 3.8.19.1 Requirements\n The command handler will reject the JOG_CONT command with an error message if machine is not in\n free mode, or if any joint is in motion (GET_MOTION_INPOS_FLAG() == FALSE), or if motion is not\n enabled. It will also silently ignore the command if the joint is already at or beyond its limit and the\n@@ -1522,15 +1522,15 @@\n location, however they also stop when they hit a limit, or on an ABORT command.\n 3.8.21.1 Requirements\n The command handler will silently reject the JOG_ABS command if machine is not in free mode, or if\n any joint is in motion (GET_MOTION_INPOS_FLAG() == FALSE), or if motion is not enabled. It will\n also silently ignore the command if the joint is already at or beyond its limit and the commanded jog\n would make it worse.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 22 / 67\n \n 3.8.21.2 Results\n The free mode trajectory planner for the joint identified by emcmotCommand->axis is activated, the\n target position is set to emcmotCommand->offset, and the velocity limit is set to emcmotCommand>vel. The free mode trajectory planner will generate a smooth trapezoidal move from the present\n position to the target position. The planner can correctly handle changes in the target position that\n@@ -1563,15 +1563,15 @@\n (More later)\n \n 3.8.27 SET_xix\n There are approximately 15 SET_xxx commands, where xxx is the name of some configuration parameter. It is anticipated that there will be several more SET commands as more parameters are added.\n I would like to find a cleaner way of setting and reading configuration parameters. The existing methods require many lines of code to be added to multiple files each time a parameter is added. Much of\n that code is identical or nearly identical for every parameter.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 23 / 67\n \n 3.9 Backlash and Screw Error Compensation\n + FIXME Backlash and Screw Error Compensation\n \n 3.10 Task controller (EMCTASK)\n@@ -1589,15 +1589,15 @@\n iocontrol main loop process:\n \u2022 registers for SIGTERM and SIGINT signals from the OS.\n \u2022 checks to see it HAL inputs have changed\n \u2022 checks if read_tool_inputs() indicates the tool change is finished and set emcioStatus.status\n \u2022 checks for I/O related NML messages\n nml message numbers: from emc.hh:\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 24 / 67\n \n #define EMC_IO_INIT_TYPE\n ((NMLTYPE) 1601)\n #define EMC_TOOL_STAT_TYPE\n ((NMLTYPE) 1199)\n@@ -1644,15 +1644,15 @@\n Base class for producing a linked list - Purpose, to hold pointers to the previous and next nodes, pointer\n to the data, and the size of the data.\n No memory for data storage is allocated.\n \n 3.16 SharedMemory\n Provides a block of shared memory along with a semaphore (inherited from the Semaphore class). Creation and destruction of the semaphore is handled by the SharedMemory constructor and destructor.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 25 / 67\n \n 3.17 ShmBuffer\n Class for passing NML messages between local processes using a shared memory buffer. Much of\n internal workings are inherited from the CMS class.\n \n@@ -1686,15 +1686,15 @@\n message buffer or just buffer). This buffer may exist as a shared memory block accessed by other\n CMS/NML processes, or a local and private buffer for data being transferred by network or serial\n interfaces.\n The buffer is dynamically allocated at run time to allow for greater flexibility of the CMS/NML subsystem. The buffer size must be large enough to accommodate the largest message, a small amount\n for internal use and allow for the message to be encoded if this option is chosen (encoded data will\n be covered later). The following figure is an internal view of the buffer space.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 26 / 67\n \n CMS buffer The CMS base class is primarily responsible for creating the communications pathways\n and interfacing to the operating system.\n \n 3.21 Configuration file format\n@@ -1712,15 +1712,15 @@\n \u2022 neut - a boolean to indicate if the data in the buffer is encoded in a machine independent format, or\n raw.\n \u2022 RPC# - Obsolete - Place holder retained for backward compatibility only.\n \u2022 buffer# - A unique ID number used if a server controls multiple buffers.\n \u2022 max_procs - is the maximum processes allowed to connect to this buffer.\n \u2022 key - is a numerical identifier for a shared memory buffer\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 27 / 67\n \n 3.21.2 Type specific configs\n The buffer type implies additional configuration options whilst the host operating system precludes\n certain combinations. In an attempt to distill published documentation in to a coherent format, only\n the SHMEM buffer type will be covered.\n@@ -1754,15 +1754,15 @@\n \u2022 host - specifies where on the network this process is running.\n \u2022 ops - gives the process read only, write only, or read/write access to the buffer.\n \u2022 server - specifies if this process will running a server for this buffer.\n \u2022 timeout - sets the timeout characteristics for accesses to the buffer.\n \u2022 master - indicates if this process is responsible for creating and destroying the buffer.\n \u2022 c_num - an integer between zero and (max_procs -1)\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 28 / 67\n \n 3.21.4 Configuration Comments\n Some of the configuration combinations are invalid, whilst others imply certain constraints. On a\n Linux system, GLOBMEM is obsolete, whilst PHANTOM is only really useful in the testing stage of an\n application, likewise for FILEMEM. LOCMEM is of little use for a multi-process application, and only\n@@ -1799,15 +1799,15 @@\n Not to be confused with NMLmsg, RCS_STAT_MSG, or RCS_CMD_MSG.\n NML is responsible for parsing the config file, configuring the cms buffers and is the mechanism for\n routing messages to the correct buffer(s). To do this, NML creates several lists for:\n \u2022 cms buffers created or connected to.\n \u2022 processes and the buffers they connect to\n \u2022 a long list of format functions for each message type\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 29 / 67\n \n This last item is probably the nub of much of the malignment of libnml/rcslib and NML in general. Each\n message that is passed via NML requires a certain amount of information to be attached in addition to\n the actual data. To do this, several formatting functions are called in sequence to assemble fragments\n of the overall message. The format functions will include NML_TYPE, MSG_TYPE, in addition to the\n@@ -1846,15 +1846,15 @@\n is to be used.\n \n 3.23 Adding custom NML commands\n LinuxCNC is pretty awesome, but some parts need some tweaking. As you know communication\n is done through NML channels, the data sent through such a channel is one of the classes defined\n in emc.hh (implemented in emc.cc). If somebody needs a message type that doesn\u2019t exist, he should\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 30 / 67\n \n follow these steps to add a new one. (The Message I added in the example is called EMC_IO_GENERIC\n (inherits EMC_IO_CMD_MSG (inherits RCS_CMD_MSG)))\n 1. add the definition of the EMC_IO_GENERIC class to emc2/src/emc/nml_intf/emc.hh\n 2. add the type define: #define EMC_IO_GENERIC_TYPE ((NMLTYPE) 1605)\n@@ -1880,15 +1880,15 @@\n information is copied from the tool table\u2019s source pocket to pocket 0 (which represents the spindle),\n replacing whatever tool information was previously there.\n Note\n In LinuxCNC configured for nonrandom toolchanger, tool 0 (T0) has special meaning: \u201dno tool\u201d. T0\n may not appear in the tool table file, and changing to T0 will result in LinuxCNC thinking it has got\n an empty spindle.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 31 / 67\n \n 3.24.1.2 Random Toolchangers\n Random toolchanger hardware swaps the tool in the spindle (if any) with the requested tool on tool\n change. Thus the pocket that a tool resides in changes as it is swapped in and out of the spindle.\n An example of random toolchanger hardware is a carousel toolchanger.\n@@ -1925,15 +1925,15 @@\n spindle.\n diameter\n Diameter of the tool, in machine units.\n tool length offset\n Tool length offset (also called TLO), in up to 9 axes, in machine units. Axes that don\u2019t have a\n specified TLO get 0.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 32 / 67\n \n 3.24.3 G-codes affecting tools\n The G-codes that use or affect tool information are:\n 3.24.3.1 Txxx\n Tells the toolchanger hardware to prepare to switch to a specified tool xxx.\n@@ -1974,15 +1974,15 @@\n ii. load_tool() with a random toolchanger config swaps tool information between pocket\n 0 (the spindle) and the selected pocket, then saves the tool table.\n \n 2. Back in interp, settings->current_pocket is assigned the new tooldata index from settings->select\n (set by Txxx). The relevant numbered parameters (#5400-#5413) are updated with the new tool\n information from pocket 0 (spindle).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 33 / 67\n \n 3.24.3.3 G43/G43.1/G49\n Apply tool length offset. G43 uses the TLO of the currently loaded tool, or of a specified tool if the\n H-word is given in the block. G43.1 gets TLO from axis-words in the block. G49 cancels the TLO (it\n uses 0 for the offset for all axes).\n@@ -2024,15 +2024,15 @@\n to pocket 0 (the spindle) in interp\u2019s copy of the tool table, settings->tool_table. (This copy\n is not needed on random tool changer machines because there, tools don\u2019t have a home pocket\n and instead we just updated the tool in pocket 0 directly.). The relevant numbered parameters\n (#5400-#5413) are updated from the tool information in the spindle (by copying the information\n from interp\u2019s settings->tool_table to settings->parameters). (FIXME: this is a buglet, the\n params should only be updated if it was the current tool that was modified).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 34 / 67\n \n 5. If the modified tool is currently loaded in the spindle, and if the config is for a nonrandom\n toolchanger, then the new tool information is written to the tool table\u2019s pocket 0 as well, via\n a second call to SET_TOOL_TABLE_ENTRY(). (This second tool-table update is not needed on\n random toolchanger machines because there, tools don\u2019t have a home pocket and instead we\n@@ -2068,15 +2068,15 @@\n Tool number of the tool currently installed in the spindle. Exported on the HAL pin iocontrol.0.tool-n\n (s32).\n emcioStatus.tool.toolTable[]\n An array of CANON_TOOL_TABLE structures, CANON_POCKETS_MAX long. Loaded from the tool table\n file at startup and maintained there after. Index 0 is the spindle, indexes 1-(CANON_POCKETS_MAX1) are the pockets in the toolchanger. This is a complete copy of the tool information, maintained\n separately from Interp\u2019s settings.tool_table.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 35 / 67\n \n 3.24.4.2 interp\n \n settings is of type settings, defined as struct setup_struct in src/emc/rs274ngc/interp_internal.hh\n settings.selected_pocket\n@@ -2114,15 +2114,15 @@\n toolchanger pocket numbers are meaningful. On a nonrandom toolchanger pockets are meaningless; the pocket numbers in the tool table file are ignored and tools are assigned to tool_table\n slots sequentially.\n \n settings.tool_change_at_g30 , settings.tool_change_quill_up , settings.tool_change_with_spindle_\n These are set from INI variables in the [EMCIO] section, and determine how tool changes are\n performed.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 36 / 67\n \n 3.25 Reckoning of joints and axes\n 3.25.1 In the status buffer\n The status buffer is used by Task and the UIs.\n FIXME: axis_mask and axes overspecify the number of axes\n@@ -2150,15 +2150,15 @@\n 3.25.2 In Motion\n The Motion controller realtime component first gets the number of joints from the num_joints loadtime parameter. This determines how many joints worth of HAL pins are created at startup.\n Motion\u2019s number of joints can be changed at runtime using the EMCMOT_SET_NUM_JOINTS command\n from Task.\n The Motion controller always operates on EMCMOT_MAX_AXIS axes. It always creates nine sets of\n axis.*.* pins.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n Chapter 4\n \n NML Messages\n List of NML messages.\n For details see src/emc/nml_intf/emc.hh.\n \n@@ -2190,15 +2190,15 @@\n EMC_JOINT_UNHOME_TYPE\n EMC_JOINT_STAT_TYPE\n \n 4.3 AXIS\n \n 37 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n EMC_AXIS_STAT_TYPE\n \n 4.4 JOG\n EMC_JOG_CONT_TYPE\n EMC_JOG_INCR_TYPE\n EMC_JOG_ABS_TYPE\n@@ -2244,15 +2244,15 @@\n EMC_TRAJ_RIGID_TAP_TYPE\n EMC_TRAJ_STAT_TYPE\n \n 4.6 MOTION\n \n 38 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n EMC_MOTION_INIT_TYPE\n EMC_MOTION_HALT_TYPE\n EMC_MOTION_ABORT_TYPE\n EMC_MOTION_SET_AOUT_TYPE\n EMC_MOTION_SET_DOUT_TYPE\n EMC_MOTION_ADAPTIVE_TYPE\n@@ -2298,15 +2298,15 @@\n EMC_AUX_ESTOP_OFF_TYPE\n EMC_AUX_ESTOP_RESET_TYPE\n EMC_AUX_INPUT_WAIT_TYPE\n EMC_AUX_STAT_TYPE\n \n 39 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 4.10 SPINDLE\n EMC_SPINDLE_ON_TYPE\n EMC_SPINDLE_OFF_TYPE\n EMC_SPINDLE_INCREASE_TYPE\n EMC_SPINDLE_DECREASE_TYPE\n EMC_SPINDLE_CONSTANT_TYPE\n@@ -2345,15 +2345,15 @@\n EMC_HALT_TYPE\n EMC_ABORT_TYPE\n EMC_STAT_TYPE\n EMC_EXEC_PLUGIN_CALL_TYPE\n \n 40 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 41 / 67\n \n Chapter 5\n \n Coding Style\n This chapter describes the source code style preferred by the LinuxCNC team.\n@@ -2378,15 +2378,15 @@\n if (x) {\n // do something appropriate\n }\n \n The closing brace is on a line of its own, except in the cases where it is followed by a continuation of\n the same statement, i.e. a while in a do-statement or an else in an if-statement, like this:\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 42 / 67\n \n do {\n // something important\n } while (x > 0);\n \n@@ -2429,15 +2429,15 @@\n function.\n However, if you have a complex function, and you suspect that a less-than-gifted first-year high-school\n student might not even understand what the function is all about, you should adhere to the maximum\n limits all the more closely. Use helper functions with descriptive names (you can ask the compiler to\n in-line them if you think it\u2019s performance-critical, and it will probably do a better job of it that you\n would have done).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 43 / 67\n \n Another measure of the function is the number of local variables. They shouldn\u2019t exceed 5-10, or\n you\u2019re doing something wrong. Re-think the function, and split it into smaller pieces. A human brain\n can generally easily keep track of about 7 different things, anything more and it gets confused. You\n know you\u2019re brilliant, but maybe you\u2019d like to understand what you did 2 weeks from now.\n@@ -2475,15 +2475,15 @@\n class name. Rationale: Maintains a common style across C and C++ sources, e.g., get_foo_bar().\n However, boolean methods are easier to read if they avoid underscores and use an is prefix (not to be\n confused with methods that manipulate a boolean). Rationale: Identifies the return value as TRUE or\n FALSE and nothing else, e.g., isOpen, isHomed.\n Do NOT use Not in a boolean name, it leads only leads to confusion when doing logical tests, e.g.,\n isNotOnLimit or is_not_on_limit are BAD.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 44 / 67\n \n Variable names should avoid the use of upper case and underscores except for local or private names.\n The use of global variables should be avoided as much as possible. Rationale: Clarifies which are\n variables and which are methods. Public: e.g., axislimit Private: e.g., maxvelocity_ .\n \n@@ -2524,15 +2524,15 @@\n Use the PEP 8 style for Python code.\n \n 5.11 Comp coding standards\n In the declaration portion of a .comp file, begin each declaration at the first column. Insert extra blank\n lines when they help group related items.\n In the code portion of a .comp file, follow normal C coding style.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 45 / 67\n \n Chapter 6\n \n Building LinuxCNC\n 6.1 Introduction\n@@ -2563,15 +2563,15 @@\n This might fail too! Read this whole document, but especially the section on Setting up the test\n environment.\n \n 6.2 Supported Platforms\n The LinuxCNC project targets modern Debian-based distributions, including Debian, Ubuntu, and\n Mint.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 46 / 67\n \n We continuously test on the platforms listed at http://buildbot.linuxcnc.org.\n LinuxCNC builds on most other Linux distributions, though dependency management will be more\n manual and less automatic. Patches to improve portability to new platforms are always welcome.\n \n@@ -2606,15 +2606,15 @@\n within the build directory. Nothing is installed outside the build directory.\n This is quick and easy, and suitable for rapid iteration of changes.\n The LinuxCNC test suite runs only in a Run-In-Place build.\n Most LinuxCNC developers primarily build using this mode.\n Building for Run-In-Place follows the steps in the Quick Start section at the top of this document,\n possibly with different arguments to src/configure and make.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 47 / 67\n \n 6.3.1.1 src/configure arguments\n The src/configure script configures how the source code will be compiled. It takes many optional\n arguments.\n List all arguments to src/configure by running this:\n@@ -2651,15 +2651,15 @@\n Building just a specific target\n If you want to build just a specific part of LinuxCNC, you can name the thing you want to build\n on the make command line. For example, if you are working on a component named froboz, you\n can build its executable by running:\n $ cd linuxcnc-dev/src\n $ make ../bin/froboz\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 48 / 67\n \n 6.3.2 Building Debian Packages\n When building Debian packages, the LinuxCNC programs are compiled from source and then stored\n in a Debian package, complete with dependency information. This takes more time, and the programs\n can\u2019t be used until the Debian package is installed on a target machine.\n@@ -2698,15 +2698,15 @@\n It takes a single argument which specifies the realtime or non-realtime platform to build for. The\n normal values for this argument are:\n no-docs\n Skip building documentation.\n uspace\n Configure the Debian package for Preempt-RT realtime or for non-realtime (these two are compatible).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 49 / 67\n \n noauto , rtai , xenomai\n Normally, the lists of RTOSes for uspace realtime to support is detected automatically. However,\n if you wish, you may specify one or more of these after uspace to enable support for these RTOSes.\n Or, to disable autodetection, specify noauto.\n@@ -2744,15 +2744,15 @@\n installed yet. Install them all with sudo apt-get install, followed by the package names.\n You can rerun dpkg-checkbuilddeps any time you want, to list any missing packages.\n \n 6.5 Setting up the environment\n This section describes the special steps needed to set up a machine to run the LinuxCNC programs,\n including the tests.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 50 / 67\n \n 6.5.1 Increase the locked memory limit\n LinuxCNC tries to improve its realtime latency by locking the memory it uses into RAM. It does this\n in order to prevent the operating system from swapping LinuxCNC out to disk, which would have bad\n effects on latency.\n@@ -2782,15 +2782,15 @@\n at github, and use that to track and publish your changes.\n After creating your own github fork of LinuxCNC, clone it to your development machine and proceed\n with your hacking as usual.\n We of the LinuxCNC project hope that you will share your changes with us, so that the community\n can benefit from your work. Github makes this sharing very easy: after you polish your changes and\n push them to your github fork, send us a Pull Request.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 51 / 67\n \n Chapter 7\n \n Adding Configuration Selection Items\n Example Configurations can be added to the Configuration Selector by two methods:\n@@ -2801,15 +2801,15 @@\n \n \u2022 Runtime settings \u2014 the configuration selector can also offer configuration subdirectories specified\n at runtime using an exported environamental variable (LINUXCNC_AUX_CONFIGS). This variable\n should be a path list of one or more configuration directories separated by a (:). Typically, this\n variable would be set in a shell starting linuxcnc or in a user\u2019s ~/.profile startup script. Example:\n export LINUXCNC_AUX_CONFIGS=~/myconfigs:/opt/otherconfigs\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 52 / 67\n \n Chapter 8\n \n Contributing to LinuxCNC\n 8.1 Introduction\n@@ -2830,15 +2830,15 @@\n All of the LinuxCNC source is maintained in the Git revision control system.\n \n 8.4.1 LinuxCNC official Git repo\n The official LinuxCNC git repo is at https://github.com/linuxcnc/linuxcnc/\n Anyone can get a read-only copy of the LinuxCNC source tree via git:\n git clone https://github.com/linuxcnc/linuxcnc linuxcnc-dev\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 53 / 67\n \n If you are a developer with push access, then follow github\u2019s instructions for setting up a repository\n that you can push from.\n Note that the clone command put the local LinuxCNC repo in a directory called linuxcnc-dev, instead\n of the default linuxcnc. This is because the LinuxCNC software by default expects configs and G-code\n@@ -2873,15 +2873,15 @@\n 8.5 Overview of the process\n The high-level overview of how to contribute changes to the source goes like this:\n \u2022 Communicate with the project developers and let us know what you\u2019re hacking on. Explain what\n you are doing, and why.\n \u2022 Clone the git repo.\n \u2022 Make your changes in a local branch.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 54 / 67\n \n \u2022 Adding documentation and writing tests is an important part of adding a new feature. Otherwise,\n others won\u2019t know how to use your feature, and if other changes break your feature it can go\n unnoticed without a test.\n \u2022 Share your changes with the other project developers in one of these ways:\n@@ -2915,15 +2915,15 @@\n Use the first line as a summary of the intent of the change (almost like the subject line of an e-mail).\n Follow it with a blank line, then a longer message explaining the change. Example:\n \n 8.7.3 Commit to the proper branch\n Bugfixes should go on the oldest applicable branch. New features should go in the master branch. If\n you\u2019re not sure where a change belongs, ask on irc or on the mailing list.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 55 / 67\n \n 8.7.4 Use multiple commits to organize changes\n When appropriate, organize your changes into a branch (a series of commits) where each commit is\n a logical step towards your ultimate goal. For example, first factor out some complex code into a new\n function. Then, in a second commit, fix an underlying bug. Then, in the third commit, add a new\n@@ -2963,15 +2963,15 @@\n variable, and the declaration of that variable only follows in a later patch.\n While the branch HEAD will build, not every commit might build in such a case. That breaks git\n bisect - something somebody else might use later on to find the commit which introduced a bug. So\n beyond making sure your branch builds, it is important to assure every single commit builds as well.\n \n There\u2019s an automatic way to check a branch for each commit being buildable - see https://dustin.sallings.org/2010/03/28/git-test-sequence.html and the code at https://github.com/dustin/bindir/blob/master/gittest-sequence. Use as follows (in this case testing every commit from origin/master to HEAD, including running regression tests):\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n cd linuxcnc-dev\n git-test-sequence origin/master..\n \n 56 / 67\n \n \u2019(cd src && make && ../scripts/runtests)\u2019\n@@ -3002,15 +3002,15 @@\n 8.9 Other ways to contribute\n There are many ways to contribute to LinuxCNC, that are not addressed by this document. These\n ways include:\n \u2022 Answering questions on the forum, mailing lists, and in IRC\n \u2022 Reporting bugs on the bug tracker, forum, mailing lists, or in IRC\n \u2022 Helping test experimental features\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 57 / 67\n \n Chapter 9\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -3044,15 +3044,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 58 / 67\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -3097,15 +3097,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 59 / 67\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -3148,15 +3148,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 60 / 67\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -3200,15 +3200,15 @@\n Rapid\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum speed of the machine. It is often desirable to limit the rapid rate when testing a G-code\n program for the first time.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 61 / 67\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -3250,28 +3250,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 62 / 67\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 63 / 67\n \n Chapter 10\n \n Legal Section\n Translations of this file provided in the source tree are not legally binding.\n@@ -3298,15 +3298,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 64 / 67\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any\n such manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -3355,15 +3355,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front\n cover must present the full title with all words of the title equally prominent and visible. You may add\n other material on the covers in addition. Copying with changes limited to the covers, as long as they\n preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying\n in other respects.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 65 / 67\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access\n@@ -3409,15 +3409,15 @@\n Version. N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any\n Invariant Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 66 / 67\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -3458,15 +3458,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 67 / 67\n \n this License provided that you also include the original English version of this License. In case of a\n disagreement between the translation and the original English version of this License, the original\n English version will prevail.\n 9. TERMINATION\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_de.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_de.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_de.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_de.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'LinuxCNC V2.9.1, 04 Nov 2023'\n+Title: 'LinuxCNC V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-LinuxCNC V2.9.1, 04 Nov 2023\n+LinuxCNC V2.9.1, 06 Nov 2023\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ii\n \n Contents\n \n I Getting Started & Configuration\n \n@@ -118,15 +118,15 @@\n \n 9\n \n 1.3.5.1 Basic Tweaks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n iii\n \n 1.3.6 PREEMPT_RT Tweaks (x86/AMD64 only) . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 10\n \n@@ -284,15 +284,15 @@\n \n 1.6.6.2 The GUI Way . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 24\n \n 1.6.3 Terminal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1.6.6.3 Root Access\n \n iv\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -454,15 +454,15 @@\n \n 2.3.5 Coordinate Systems\n \n 46\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n v\n \n 2.3.5.1 G53 Machine Coordinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 47\n \n@@ -620,15 +620,15 @@\n \n 57\n \n 2.6.1 Lathe Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 57\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n vi\n \n 2.6.2 Lathe Tool Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 57\n \n@@ -782,15 +782,15 @@\n \n 76\n \n 2.7.14.3Float switch (input) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 76\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n vii\n \n 2.7.14.4Ohmic Sensor enable (output) . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 76\n \n@@ -944,15 +944,15 @@\n \n 97\n \n 3.1.11.1Operating without Limit Switches . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 98\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n viii\n \n 3.1.11.2Operating without Home Switches\n \n . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -1013,15 +1013,15 @@\n 4.2.1 What is latency? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134\n 4.2.2 Latency Tests\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135\n \n 4.2.2.1 Latency Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ix\n \n 4.2.2.2 Latency Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137\n 4.2.2.3 Latency Histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137\n 4.2.3 Latency tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138\n 4.2.3.1 Tuning the BIOS for latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139\n@@ -1087,15 +1087,15 @@\n 4.4.2.14[SPINDLE_] Section(s) . . . . . . . . . . . . . . . . . . . . . . . . . . . 166\n 4.4.2.15[EMCIO] Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167\n 4.5 Homing Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167\n 4.5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167\n 4.5.2 Prerequisite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168\n 4.5.3 Separate Home Switch Example Layout . . . . . . . . . . . . . . . . . . . . . . . . . . 168\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n x\n \n 4.5.4 Shared Limit/Home Switch Example Layout . . . . . . . . . . . . . . . . . . . . . . . . 169\n 4.5.5 Homing Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170\n 4.5.6 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172\n 4.5.6.1 HOME_SEARCH_VEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172\n@@ -1139,15 +1139,15 @@\n 4.8.6 Mechanical Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182\n 4.9 Stepper Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.2 Maximum step rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.3 Pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.3.1 Standard Pinout HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xi\n \n 4.9.3.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186\n 4.9.3.3 Changing the standard_pinout.hal . . . . . . . . . . . . . . . . . . . . . . . . . 186\n 4.9.3.4 Changing polarity of a signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187\n 4.9.3.5 Adding PWM Spindle Speed Control\n@@ -1194,15 +1194,15 @@\n 5.1.6 Timing Issues In HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202\n 5.2 HAL Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203\n 5.2.1 HAL Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203\n 5.2.1.1 loadrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204\n 5.2.1.2 addf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204\n 5.2.1.3 loadusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xii\n \n 5.2.1.4 net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206\n 5.2.1.5 setp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207\n 5.2.1.6 sets\n \n@@ -1268,15 +1268,15 @@\n 5.4.3.5 Saving the HAL configuration\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . 221\n \n 5.4.3.6 Exiting halrun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n 5.4.3.7 Restoring the HAL configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xiii\n \n 5.4.3.8 Removing HAL from memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n 5.4.4 Halmeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n 5.4.5 Stepgen Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225\n 5.4.5.1 Installing the components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225\n@@ -1318,15 +1318,15 @@\n 5.6.5 INI settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252\n 5.6.5.1 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252\n 5.7 HAL Component List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253\n 5.7.1 Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253\n 5.7.1.1 User Interfaces (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . 254\n 5.7.1.2 Motion (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xiv\n \n 5.7.1.3 Hardware Drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254\n 5.7.1.4 Mesa and other I/O Cards (Realtime) . . . . . . . . . . . . . . . . . . . . . . . 255\n 5.7.1.5 Utilities (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256\n 5.7.1.6 Signal processing (Realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256\n@@ -1370,15 +1370,15 @@\n 5.8.7 SigGen\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279\n \n 5.8.7.1 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279\n 5.8.7.2 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xv\n \n 5.8.7.3 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280\n 5.8.8 lut5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280\n 5.9 HAL Component Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281\n 5.9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281\n@@ -1423,15 +1423,15 @@\n 5.10.1Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295\n 5.10.2Haltcl Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295\n 5.10.3Haltcl INI-file variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295\n 5.10.4Converting HAL files to Tcl files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296\n 5.10.5Haltcl Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n 5.10.6Haltcl Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xvi\n \n 5.10.7Haltcl Interactive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298\n 5.10.8Haltcl Distribution Examples (sim)\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298\n@@ -1498,15 +1498,15 @@\n 5.13.3Create pins and parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309\n 5.13.3.1Changing the prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309\n 5.13.4Reading and writing pins and parameters . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.4.1Driving output (HAL_OUT) pins . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.4.2Driving bidirectional (HAL_IO) pins . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.5Exiting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xvii\n \n 5.13.6Helpful Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.7Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.8System Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311\n 5.14Canonical Device Interfaces\n@@ -1550,15 +1550,15 @@\n 6.1.1 Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324\n 6.1.2 PCI Port Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327\n 6.1.3 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328\n 6.1.4 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328\n 6.1.5 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328\n 6.1.6 Common problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xviii\n \n 6.1.7 Using DoubleStep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329\n 6.1.8 probe_parport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329\n 6.1.8.1 Installing probe_parport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329\n 6.2 AX5214H Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330\n@@ -1600,15 +1600,15 @@\n 6.3.7.3 DAC & ADC module\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348\n \n 6.3.7.4 Teach Pendant module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349\n 6.3.8 Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xix\n \n 6.3.8.1 GM6-PCI card Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350\n 6.4 GS2 VFD Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350\n 6.4.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350\n 6.4.2 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351\n@@ -1650,15 +1650,15 @@\n 6.7.8 PIN Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360\n 6.7.9 Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360\n 6.7.10HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360\n 6.7.11Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361\n 6.7.12GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n 6.7.12.1Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xx\n \n 6.7.12.2Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364\n 6.7.13StepGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364\n 6.7.13.1Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364\n 6.7.13.2Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365\n@@ -1700,15 +1700,15 @@\n 6.8.5.7 fnct_15_write_multiple_coils . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378\n 6.8.5.8 fnct_16_write_multiple_registers . . . . . . . . . . . . . . . . . . . . . . . . . . 378\n 6.9 Mitsub VFD Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378\n 6.9.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379\n 6.9.2 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379\n 6.9.3 HAL example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxi\n \n 6.9.4 Configuring the Mitsubishi VFD for serial usage . . . . . . . . . . . . . . . . . . . . . 380\n 6.9.4.1 Connecting the Serial Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380\n 6.9.4.2 Modbus setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380\n 6.10Motenc Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381\n@@ -1750,15 +1750,15 @@\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393\n \n 6.13.3.1Pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393\n 6.13.3.2Input latching and output updating . . . . . . . . . . . . . . . . . . . . . . . . 394\n 6.13.3.3Step Waveform Timings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxii\n \n 6.13.3.4HAL Functions, Pins and Parameters . . . . . . . . . . . . . . . . . . . . . . . 395\n 6.14Powermax Modbus Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395\n 6.14.1Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396\n 6.14.2Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396\n@@ -1798,15 +1798,15 @@\n 7.2.6 Spindle Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409\n 7.2.6.1 Spindle Synchronized Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409\n 7.2.6.2 Spindle At Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410\n 7.3 MPG Pendant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410\n 7.4 GS2 Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412\n 7.4.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxiii\n \n 8 ClassicLadder\n \n 414\n \n@@ -1851,15 +1851,15 @@\n \n 8.2.10.1MODBUS Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441\n 8.2.10.2Communication Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441\n 8.2.11Debugging modbus problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441\n 8.2.11.1Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443\n 8.2.11.2Error response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxiv\n \n 8.2.11.3Data response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445\n 8.2.11.4MODBUS Bugs\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446\n@@ -1906,15 +1906,15 @@\n 9.3.2 5-Axis Machine Tool Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485\n 9.3.3 Tool Orientation and Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485\n 9.3.4 Translation and Rotation Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486\n 9.3.5 Table Rotary/Tilting 5-Axis Configurations . . . . . . . . . . . . . . . . . . . . . . . . . 487\n 9.3.5.1 Transformations for a xyzac-trt machine tool with work offsets . . . . . . . 489\n 9.3.5.2 Transformations for a xyzac-trt machine with rotary axis offsets . . . . . . 493\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxv\n \n 9.3.5.3 Transformations for a xyzbc-trt machine with rotary axis offsets . . . . . . 496\n 9.3.6 Table Rotary/Tilting Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499\n 9.3.6.1 Vismach Simulation Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499\n 9.3.6.2 Tool-Length Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499\n@@ -1965,15 +1965,15 @@\n \n 9.6.2.2 Picking a code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514\n 9.6.2.3 Parameter handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515\n 9.6.2.4 Handling results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515\n 9.6.2.5 Execution sequencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515\n 9.6.2.6 An minimal example remapped code . . . . . . . . . . . . . . . . . . . . . . . 515\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxvi\n \n 9.6.3 Configuring Remapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516\n 9.6.3.1 The REMAP statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516\n 9.6.3.2 Useful REMAP option combinations . . . . . . . . . . . . . . . . . . . . . . . . 517\n 9.6.3.3 The argspec parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517\n@@ -2029,15 +2029,15 @@\n \n 9.6.11.4S (Set Speed) : setspeed_prolog and setspeed_epilog . . . . . . . . . . . 540\n 9.6.11.5F (Set Feed) : setfeed_prolog and setfeed_epilog . . . . . . . . . . . . . 540\n 9.6.11.6M61 Set tool number : settool_prolog and settool_epilog . . . . . . . . 541\n 9.6.12Remapped code execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541\n 9.6.12.1NGC procedure call environment during remaps . . . . . . . . . . . . . . . . 541\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxvii\n \n 9.6.12.2Nested remapped codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541\n 9.6.12.3Sequence number during remaps . . . . . . . . . . . . . . . . . . . . . . . . . 541\n 9.6.12.4Debugging flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541\n 9.6.12.5Debugging Embedded Python code . . . . . . . . . . . . . . . . . . . . . . . . 542\n@@ -2083,15 +2083,15 @@\n 9.6.18Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554\n 9.6.19Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554\n 9.6.20Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554\n 9.7 Moveoff Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554\n 9.7.1 Modifying an existing configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555\n 9.8 Stand Alone Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxviii\n \n 9.8.1 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559\n 9.8.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559\n 9.9 External Axis Offsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559\n 9.9.1 INI File Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560\n@@ -2141,15 +2141,15 @@\n \n 10.1AXIS GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570\n 10.1.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570\n 10.1.2Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571\n 10.1.2.1INI settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571\n 10.1.2.2A Typical Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 10.1.3AXIS Window\n \n xxix\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572\n \n@@ -2216,15 +2216,15 @@\n . . . . . . . . . . . . . . . . . . 595\n \n 10.1.14.5\n Read the INI file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596\n 10.1.14.6\n Read LinuxCNC Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxx\n \n 10.1.14.7\n Change the current view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596\n 10.1.14.8\n Creating new AXISUI HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . 596\n@@ -2275,15 +2275,15 @@\n 10.2.5.8User Created Message HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . 621\n 10.2.5.9Spindle Feedback Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622\n 10.2.5.10\n Pins to Indicate Program Progress Information . . . . . . . . . . . . . . . . . 622\n 10.2.5.11\n Tool Related Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxi\n \n 10.2.6Auto Tool Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624\n 10.2.6.1Provided Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625\n 10.2.6.2INI File Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625\n 10.2.6.3Needed Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626\n@@ -2339,15 +2339,15 @@\n 10.4.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647\n 10.4.1.1Glade File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652\n 10.4.1.2PyGTK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652\n 10.4.2GladeVCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653\n 10.4.2.1Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653\n 10.4.2.2Build a GladeVCP Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxii\n \n 10.4.3Building a simple clean-sheet custom screen . . . . . . . . . . . . . . . . . . . . . . . 655\n 10.4.4Handler file example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657\n 10.4.4.1Adding Keybindings Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 658\n 10.4.4.2Linuxcnc State Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658\n@@ -2396,15 +2396,15 @@\n 10.5.3Key Bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670\n 10.5.4Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671\n 10.5.5Virtual Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671\n 10.5.6HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671\n 10.5.7HAL files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672\n 10.5.8Manual Tool Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxiii\n \n 10.5.9Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672\n 10.5.10\n Auto Raise Z Axis on Spindle Pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673\n 10.5.11\n@@ -2474,15 +2474,15 @@\n 10.6.1Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695\n 10.6.2Demonstration Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696\n 10.6.3Library Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698\n 10.6.4Standalone Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699\n 10.6.4.1Standalone NGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699\n 10.6.4.2Standalone PyNGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxiv\n \n 10.6.5Embedding NGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700\n 10.6.5.1Embedding NGCGUI in AXIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700\n 10.6.5.2Embedding PyNGCGUI as a GladeVCP tab page in a GUI . . . . . . . . . . . 701\n 10.6.5.3Additional INI File items required for NCGUI or PyNGCGUI . . . . . . . . . 701\n@@ -2521,15 +2521,15 @@\n 10.8.4.2Package Installation (Buildbot) If The User Has Linux with LinuxCNC v2.8 722\n 10.8.4.3Run In Place Installation If The User Has Linux with LinuxCNC v2.8 . . . . 722\n 10.8.5Creating A QtPlasmaC Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722\n 10.8.5.1Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722\n 10.8.5.2Available I/Os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723\n 10.8.5.3Recommended Settings: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxv\n \n 10.8.5.4Configuring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725\n 10.8.5.5Qt Dependency Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730\n 10.8.5.6Initial Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730\n 10.8.6Migrating to QtPlasmac From PlasmaC (AXIS or GMOCCAPY)\n@@ -2579,15 +2579,15 @@\n 10.8.9.15\n Pause At End Of Cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770\n 10.8.9.16\n Multiple Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770\n 10.8.9.17\n Velocity Reduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxvi\n \n 10.8.9.18\n THC (Torch Height Controller) . . . . . . . . . . . . . . . . . . . . . . . . . . . 772\n 10.8.9.19\n Cutter Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773\n@@ -2662,15 +2662,15 @@\n 10.8.14\n Customizing QtPlasmaC GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800\n 10.8.14.1\n Add A Custom Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800\n 10.8.14.2\n Create A New Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxvii\n \n 10.8.14.3\n Returning To The Default Styling . . . . . . . . . . . . . . . . . . . . . . . . . 801\n 10.8.14.4\n Custom Python Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802\n@@ -2749,15 +2749,15 @@\n \n 10.9.4Index operations\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833\n \n 10.9.5Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxviii\n \n 11 G-code Programming\n \n 834\n \n@@ -2808,15 +2808,15 @@\n 11.3.4Stand Alone Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853\n 11.4G-code Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854\n 11.4.1Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854\n 11.4.2Format of a line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854\n 11.4.2.1/: Block Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855\n 11.4.2.2Line Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxix\n \n 11.4.2.3Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855\n 11.4.2.4Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856\n 11.4.3Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857\n 11.4.3.1Numbered Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858\n@@ -2877,15 +2877,15 @@\n 11.5.2G-Code Quick Reference Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876\n 11.5.3G0 Rapid Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877\n 11.5.3.1Rapid Velocity Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877\n 11.5.4G1 Linear Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877\n 11.5.5G2, G3 Arc Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878\n 11.5.5.1Center Format Arcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xl\n \n 11.5.5.2Center Format Examples\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880\n \n@@ -2966,15 +2966,15 @@\n 11.5.40\n G73 Drilling Cycle with Chip Breaking . . . . . . . . . . . . . . . . . . . . . . . . . . . 903\n 11.5.41\n G74 Left-hand Tapping Cycle with Dwell . . . . . . . . . . . . . . . . . . . . . . . . . . 903\n 11.5.42\n G76 Threading Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xli\n \n 11.5.43\n G80-G89 Canned Cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907\n 11.5.43.1\n Common Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907\n@@ -3052,15 +3052,15 @@\n 11.6.6.2Tool Changer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924\n 11.6.7M7, M8, M9 Coolant Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925\n 11.6.8M19 Orient Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925\n 11.6.9M48, M49 Speed and Feed Override Control . . . . . . . . . . . . . . . . . . . . . . . 926\n 11.6.10\n M50 Feed Override Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlii\n \n 11.6.11\n M51 Spindle Speed Override Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926\n 11.6.12\n M52 Adaptive Feed Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926\n@@ -3133,15 +3133,15 @@\n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941\n \n 11.9.1.2Slotting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942\n 11.9.1.3Grid Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942\n 11.9.1.4Smart Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943\n 11.9.1.5Tool Length Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xliii\n \n 11.9.1.6Hole Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944\n 11.9.1.7Cutter Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944\n 11.9.2Lathe Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945\n 11.9.2.1Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945\n@@ -3215,15 +3215,15 @@\n 12.1PyVCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952\n 12.1.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952\n 12.1.2Panel Construction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953\n 12.1.3Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954\n 12.1.4AXIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954\n 12.1.4.1Example Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xliv\n \n 12.1.5Stand Alone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956\n 12.1.6Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957\n 12.1.6.1Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957\n 12.1.6.2General Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957\n@@ -3280,15 +3280,15 @@\n . . . . . . . . . . . . . . . . . . . . . . . . . 995\n \n 12.3.3.5Integrating into AXIS, like PyVCP . . . . . . . . . . . . . . . . . . . . . . . . . 995\n 12.3.3.6Embedding as a Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996\n 12.3.3.7Integrating into Touchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996\n 12.3.4GladeVCP command line options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlv\n \n 12.3.5Understanding the GladeVCP startup process . . . . . . . . . . . . . . . . . . . . . . . 998\n 12.3.6HAL Widget reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999\n 12.3.6.1Widget and HAL pin naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999\n 12.3.6.2Python attributes and methods of HAL Widgets . . . . . . . . . . . . . . . . . 1000\n@@ -3356,15 +3356,15 @@\n 12.3.7.5A simple example: Execute MDI command on button press\n \n . . . . . . . . . 1036\n \n 12.3.7.6Parameter passing with Action_MDI and ToggleAction_MDI widgets . . . . 1036\n 12.3.7.7An advanced example: Feeding parameters to an O-word subroutine . . . 1037\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlvi\n \n 12.3.7.8Preparing for an MDI Action, and cleaning up afterwards . . . . . . . . . . 1037\n 12.3.7.9Using the LinuxCNC Stat object to deal with status changes . . . . . . . . . 1038\n 12.3.8GladeVCP Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039\n 12.3.8.1User Defined Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039\n@@ -3425,15 +3425,15 @@\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062\n \n 12.5.2.5Libraries Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063\n 12.5.2.6Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063\n 12.5.2.7Local Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.5.2.8Modifying Stock Screens\n \n xlvii\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064\n \n@@ -3477,15 +3477,15 @@\n 12.6.1.5test_led . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089\n 12.6.1.6test_panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090\n 12.6.1.7cam_align . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091\n 12.6.1.8sim_panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093\n 12.6.1.9tool_dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094\n 12.6.2vismach 3D Simulation Panels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlviii\n \n 12.6.2.1QtVCP vismach_mill_xyz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095\n 12.6.2.2QtVCP vismach_router_atc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096\n 12.6.2.3QtVCP vismach_scara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097\n 12.6.2.4QtVCP vismach_millturn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098\n@@ -3535,15 +3535,15 @@\n 12.7.2.1ActionButton - Machine Controller Action Control Widget . . . . . . . . . . 1114\n 12.7.2.2ActionToolButton - Optional Actions Menu Button Widget . . . . . . . . . 1117\n 12.7.2.3RoundButton - Round Shapped ActionButton Widget . . . . . . . . . . . . . 1117\n 12.7.2.4AxisToolButton - Select and Set Axis Widget . . . . . . . . . . . . . . . . . . 1117\n 12.7.2.5CamView - Workpiece Alignment and Origin Setting Widget . . . . . . . . . . 1118\n 12.7.2.6DROLabel - Axis Position Display Widget . . . . . . . . . . . . . . . . . . . . . 1118\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlix\n \n 12.7.2.7GcodeDisplay - G-code Text Display Widget . . . . . . . . . . . . . . . . . . . 1119\n 12.7.2.8GcodeEditor - G-code Program Editor Widget\n \n . . . . . . . . . . . . . . . . . 1120\n@@ -3614,15 +3614,15 @@\n 12.7.3.8EntryDialog - Edit Line Dialog Widget . . . . . . . . . . . . . . . . . . . . . . 1155\n 12.7.3.9CalculatorDialog - Calculator Dialog Widget . . . . . . . . . . . . . . . . . 1156\n 12.7.3.10\n RunFromLine - Run-From-Line Dialog Widget . . . . . . . . . . . . . . . . . . 1157\n 12.7.3.11\n VersaProbeDialog - Part Touch Probing Dialog Widget . . . . . . . . . . . . 1158\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n l\n \n 12.7.3.12\n MachineLogDialog - Machine and Debugging Logs Dialog Widget . . . . . 1159\n 12.7.4Other Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159\n 12.7.4.1NurbsEditor - NURBS Editing Widget . . . . . . . . . . . . . . . . . . . . . . 1160\n@@ -3659,15 +3659,15 @@\n 12.8.5.3Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176\n 12.8.6VCPWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176\n 12.8.6.1Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176\n 12.8.7Aux_program_loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177\n 12.8.7.1Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177\n 12.8.7.2Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n li\n \n 12.8.8Keylookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178\n 12.8.8.1Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178\n 12.8.8.2Key Defines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179\n 12.8.9Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181\n@@ -3736,15 +3736,15 @@\n 12.9.6.1Translating Model parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193\n 12.9.6.2Rotating Model Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193\n 12.9.7Animating Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194\n 12.9.7.1HalTranslate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194\n 12.9.7.2HalRotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194\n 12.9.7.3HalToolCylinder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n lii\n \n 12.9.7.4HalToolTriangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195\n 12.9.8Assembling the model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195\n 12.9.9Other functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196\n 12.9.10\n@@ -3819,15 +3819,15 @@\n 12.11.12\n Update/Read Objects Periodically . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223\n 12.11.13\n External Control With ZMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224\n 12.11.13.1\n ZMQ Messages Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n liii\n \n 12.11.13.2\n ZMQ Messages Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226\n 12.11.14\n Sending Messages To Status Bar Or Desktop Notify Dialogs . . . . . . . . . . . . . . 1226\n@@ -3890,15 +3890,15 @@\n 13.2.3.2The axis dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246\n 13.2.3.3The joint dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246\n 13.2.3.4The spindle dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248\n 13.2.4Preparing to send commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248\n 13.2.5Sending commands through linuxcnc.command . . . . . . . . . . . . . . . . . . . . . 1249\n 13.2.5.1linuxcnc.command attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n liv\n \n 13.2.5.2linuxcnc.command methods: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250\n 13.2.6Reading the error channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1253\n 13.2.7Reading INI file values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254\n 13.2.8The linuxcnc.positionlogger type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254\n@@ -3955,23 +3955,23 @@\n \n 1289\n \n 17.1Origin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1289\n 17.1.1Name Change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290\n 17.1.2Additional Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1 / 1290\n \n Part I\n \n Getting Started & Configuration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 2 / 1290\n \n Chapter 1\n \n Getting Started with LinuxCNC\n 1.1 About LinuxCNC\n@@ -3999,15 +3999,15 @@\n \u2022 It can simultaneously move up to 9 axes and supports a variety of interfaces.\n \u2022 The control can operate true servos (analog or PWM) with the feedback loop closed by the LinuxCNC\n software at the computer, or open loop with step-servos or stepper motors.\n \u2022 Motion control features include: cutter radius and length compensation, path deviation limited to\n a specified tolerance, lathe threading, synchronized axis motion, adaptive feedrate, operator feed\n override, and constant velocity control.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3 / 1290\n \n \u2022 Support for non-Cartesian motion systems is provided via custom kinematics modules. Available\n architectures include hexapods (Stewart platforms and similar concepts) and systems with rotary\n joints to provide motion such as PUMA or SCARA robots.\n \u2022 LinuxCNC runs on Linux using real time extensions.\n@@ -4044,15 +4044,15 @@\n You can subscribe to the emc-users mailing list at: https://lists.sourceforge.net/lists/listinfo/emc-users\n 1.1.3.3 Web Forum\n A web forum can be found at https://forum.linuxcnc.org or by following the link at the top of the\n linuxcnc.org home page.\n This is quite active but the demographic is more user-biased than the mailing list. If you want to be\n sure that your message is seen by the developers then the mailing list is to be preferred.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 4 / 1290\n \n 1.1.3.4 LinuxCNC Wiki\n A Wiki site is a user maintained web site that anyone can add to or edit.\n \n The user maintained LinuxCNC Wiki site contains a wealth of information and tips at: https://wiki.linuxcnc.or\n@@ -4085,15 +4085,15 @@\n LinuxCNC requires a kernel modified for realtime use to control real machine hardware. It can,\n however run on a standard kernel in simulation mode for purposes such as checking G-code, testing\n config files and learning the system. To work with these kernel versions there are two versions of\n LinuxCNC distributed. The package names are \u201dlinuxcnc\u201d and \u201dlinuxcnc-uspace\u201d.\n The realtime kernel options are preempt-rt, RTAI and Xenomai.\n You can discover the kernel version of your system with the command:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 5 / 1290\n \n uname -a\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n@@ -4124,15 +4124,15 @@\n Laptops are not generally suited to real time software step generation. Again a Latency Test run for\n an extended time will give you the info you need to determine suitability.\n 1.2.3.2 Video Cards\n If your installation pops up with 800 x 600 screen resolution then most likely Debian does not recognize\n your video card or monitor. This can sometimes be worked-around by installing drivers or creating /\n editing Xorg.conf files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 6 / 1290\n \n 1.3 Getting LinuxCNC\n This section describes how to install LinuxCNC version 2.9 on a PC already running Debian Bookworm (Debian 12). LinuxCNC requires the PREEMPT_RT real time kernel to ensure the strict timing\n required for CNC operations are met. We will also cover how to install Debian Bookworm optimised\n for LinuxCNC on the x86/AMD64 and ARM64 platforms for first time users. We will also cover some\n@@ -4168,15 +4168,15 @@\n That\u2019s it! You are done! You will find LinuxCNC under the CNC menu.\n \n 1.3.2 Install Debian Bookworm on a X86/AMD64 machine\n 1. Download Balena Etcher from https://etcher.balena.io/\n 2. Download a Debian Boookworm ISO. There are two versions to consider.\n a. The small netinst .ISO that requires a connection to the internet during the installation (recommended) https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.1.0-amd64netinst.iso\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 7 / 1290\n \n b. The much larger full live install that includes everything in Debian (use if you do not have an\n internet connection). https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-12.1.0-amd64-xfce.iso\n 3. Burn the Debian Image to a USB drive using Balena Etcher.\n 4. Connect the PC to install LinuxCNC on to a wired internet connection (only use wifi if you must).\n@@ -4209,15 +4209,15 @@\n 2. Ensure the Pi is connected to the internet. Boot the Pi. It will open a text based terminal.\n 3. Login using the root account (which does not have a password yet). Type:\n root\n \n and hit enter . Add a password to the root user account. Type:\n passwd\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 8 / 1290\n \n and allocate a password you will never forget!\n Add a new user and allocate a password. I used pi:\n adduser pi\n \n@@ -4257,15 +4257,15 @@\n a. Issue the configuration update command, which will take those changes and write them to the\n /boot/firmware/cmdline.txt and /boot/firmware/config.txt files:\n update-initramfs -u -k all\n \n 1. Install the XFCE graphical environment by typing\n apt install task-xfce-desktop\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 9 / 1290\n \n During the install you will need to select a keyboard layout/language, then tab to the \u201dOK\u201d and press\n Enter.\n Don\u2019t panic if the screen display appears corrupt, just wait until completed.\n Start the graphical environment\n@@ -4298,15 +4298,15 @@\n sudo geany /etc/lightdm/lightdm.conf\n \n scroll down to about line 126 and uncomment (remove #) both of the following lines and add YOUR\n login user name. Eg an example for user matt.\n autologin-user=matt\n autologin-user-timeout=0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 10 / 1290\n \n 1.3.6 PREEMPT_RT Tweaks (x86/AMD64 only)\n isolcpus can make a huge difference to latency on some systems, because it isolates specific CPU\n cores so they are purely used by real time threads (e.g. the LinuxCNC servo thread). The instructions\n below assume a 4 core CPU, e.g. Celeron, i3, i5, etc. Those with 2 cores or more than 4 cores need\n@@ -4348,15 +4348,15 @@\n address 10.10.10.1\n hardware-irq-coalesce-rx-usecs 0\n \n The last line is only required for Intel network cards. It seems to be ignored on non-applicable hardware.\n Save and close geany. Reboot to restart the network. Ping the mesa card to confirm it\u2019s all working:\n ping 10.10.10.10\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 11 / 1290\n \n 1.3.9 Updating LinuxCNC on Debian Bookworm (X86 only)\n The version of LinuxCNC in Bookworm is a bit dated because of the freeze process associated with\n the Debian release process. Fortunately, there is a LinuxCNC buildbot which rebuilds version 2.9\n packages whenever the code base changes. We can \u201dtrick\u201d Debian to get the LinuxCNC repositories\n@@ -4401,15 +4401,15 @@\n sudo apt upgrade\n \n The second last line updates Linux to look at our buildbot.\n The last line upgrades all Linux programs including our LinuxCNC files.\n Repeat running LinuxCNC and note the version. It should have changed to the latest version (which\n can change daily).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12 / 1290\n \n Now any time you wish to update your version of LinuxCNC (and any other Debian programs installed\n on your PC, just type:\n sudo apt update\n sudo apt upgrade\n@@ -4451,15 +4451,15 @@\n \n If you have not installed a later kernel as described above install linux-headers. Type:\n sudo apt install linux-headers-$(uname -r)\n \n You can now install the r8168 or R8125 driver. Depending on your driver Type:\n sudo apt install r8168-dkms\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 13 / 1290\n \n or type:\n sudo apt install r8125-dkms\n \n Reboot and check you still have a network driver with\n@@ -4496,15 +4496,15 @@\n \n 1.3.12 Alternate Install Methods\n The easiest, preferred way to install LinuxCNC is to use the Live/Install Image or Debian Bookworm\n as described above. Both methods are as simple and reliable as we can make it, and are suitable for\n novice users and experienced users alike. Both methods will typically replace any existing operating\n system on your hard drive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 14 / 1290\n \n Experienced users who are familiar with Debian system administration (finding install images, manipulating apt sources, changing kernel flavors, etc.) should note that new installations are supported on\n the platforms listed in the table below. \u201damd64\u201d refers to any 64-bit x86 system, i.e. the installation\n is not specific to AMD processors.\n Please be aware that in Debian Bookworm, the preempt_rt kernel is a dependency of linuxcnc-uspace.\n@@ -4597,15 +4597,15 @@\n Configuration Selector.\n The Configuration Selector offers a selection of configurations organized:\n \u2022 My Configurations - User configurations located in linuxcnc/configs in your home directory.\n \u2022 Sample Configurations - Sample configurations, when selected, are copied to linuxcnc/configs. Once\n a sample configuration was copied to your local directory, the launcher will offer it as My Configurations. The names under which these local configurations are presented correspond to the names\n of the directories within the configs/ directory:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 15 / 1290\n \n \u2013 sim - Configurations that include simulated hardware. These can be used for testing or learning\n how LinuxCNC works.\n \u2013 by_interface - Configurations organized by GUI.\n \u2013 by_machine - Configurations organized by machine.\n@@ -4638,15 +4638,15 @@\n \u2022 vigilant\n \u2022 vitalsystems\n Related hardware may be required to use these configurations as starting points for a system.\n The by_machine configurations are organized around complete, known systems like:\n \u2022 boss\n \u2022 cooltool\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 16 / 1290\n \n \u2022 scortbot erIII\n \u2022 sherline\n \u2022 smithy\n \u2022 tormach\n@@ -4665,15 +4665,15 @@\n \u2022 parport - Applications to test parport.\n \u2022 pyvcp - Example pyvcp applications.\n \u2022 xhc-hb04 - Applications to test an xhc-hb04 USB wireless MPG\n Note\n Under the Apps directory, only applications that are usefully modified by the user are offered for\n copying to the user\u2019s directory.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 17 / 1290\n \n Figure 1.1: LinuxCNC Configuration Selector\n Click any of the listed configurations to display specific information about it. Double-click a configuration or click OK to start the configuration.\n Select Create Desktop Shortcut and then click OK to add an icon on the Ubuntu desktop to directly\n launch this configuration without showing the Configuration Selector screen.\n@@ -4689,15 +4689,15 @@\n All configurations listed under Sample Configurations/sim are intended to run on any computer. No\n specific hardware is required and real-time support is not needed.\n These configurations are useful for studying individual capabilities or options. The sim configurations\n are organized according to the graphical user interface used in the demonstration. The directory for\n axis contains the most choices and subdirectories because it is the most tested GUI. The capabilities\n demonstrated with any specific GUI may be available in other GUIs as well.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 18 / 1290\n \n 1.4.5 Configuration Resources\n 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\n at least one INI file (iniflename.ini) that is used to describe a specific configuration.\n File resources within the copied directory will typically include one or more INI file (filename.ini)\n@@ -4739,15 +4739,15 @@\n The details will depend on which platform you\u2019re running on. Open a terminal then type lsb_release\n -ic to find this information out:\n lsb_release -ic\n Distributor ID: Debian\n Codename:\n Buster\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 19 / 1290\n \n You should be running on Debian Buster, Bullseye or Bookworm or Ubuntu 20.04 \u201dFocal Fossa\u201d or\n newer. LinuxCNC will not run on older distributions than these.\n You will also need to check which realtime kernel is being used:\n uname -r\n@@ -4784,15 +4784,15 @@\n deb https://linuxcnc.org buster base\n 2.9-rtpreempt\n deb https://linuxcnc.org bullseye base\n 2.9-uspace\n deb https://linuxcnc.org bookworm base\n 2.9-uspace\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 20 / 1290\n \n \u2022 Click Add Source, then Close in the Software Sources window. If it pops up a window informing\n you that the information about available software is out-of-date, click the Reload button.\n 1.5.1.2 Upgrading to the new version\n Now your computer knows where to get the new version of the software, next we need to install it.\n@@ -4809,15 +4809,15 @@\n will be automatically upgraded to the new one.\n 1.5.1.3 Ubuntu\n \u2022 Click on the Dash Home icon in the top left.\n \u2022 In the Search field, type \u201dupdate\u201d, then click on the Update Manager icon.\n \u2022 Click the Check button to fetch the list of packages available.\n \u2022 Click the Install Updates button to install the new versions of all packages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 21 / 1290\n \n 1.5.2 Updating without Network\n To update without a network connection you need to download the .deb then install it with dpkg. The\n .debs can be found in https://linuxcnc.org/dists/ .\n You have to drill down from the above link to find the correct deb for your installation. Open a terminal\n@@ -4852,15 +4852,15 @@\n In the extremely unlikely event that you are using canterp, know that the module has moved from\n /usr/lib/libcanterp.so to /usr/lib/linuxcnc/canterp.so, and the [TASK]INTERPRETER setting\n correspondingly needs to change from libcanterp.so to canterp.so.\n \n 1.5.4 Updating Configuration Files (for 2.9.x)\n No changes should be necessary to configuration files when moving from 2.8 to 2.9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 22 / 1290\n \n 1.5.4.1 Spindle limits in the INI\n It is now possible to add settings to the [SPINDLE] section of the INI file\n MAX_FORWARD_VELOCITY = 20000 The maximum spindle speed (in rpm)\n MIN_FORWARD_VELOCITY = 3000 The minimum spindle speed (in rpm)\n@@ -4893,15 +4893,15 @@\n 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 \n 1.6.1 Automatic Login\n 1.6.1.1 Debian\n Debian Stretch uses the Xfce desktop environment by default, with the lightDM display manager\n lightDM. To get automatic login with Stretch:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 23 / 1290\n \n \u2022 In a terminal, use the command:\n $ /usr/sbin/lightdm --show-config\n \n \u2022 Make a note of the absolute path to the configuration file lightdm.conf.\n@@ -4937,15 +4937,15 @@\n \n 1.6.4 Man Pages\n A man page (short for manual page) is a form of software documentation usually found on a Unix or\n Unix-like operating system like Linux.\n To view a man page open up a terminal to find out something about the find command in the terminal\n window type:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 24 / 1290\n \n man find\n \n Use the Page Up and Page Down keys to view the man page and the Q key to quit viewing.\n Note\n@@ -4977,15 +4977,15 @@\n 1. Right click on the desktop and select Create Launcher\n 2. Type a name in like sudo edit\n 3. Type gksudo \u201dgnome-open %u\u201d as the command and save the launcher to your desktop\n 4. Drag a file onto your launcher to open and edit\n 1.6.6.3 Root Access\n In Ubuntu you can become root by typing in \u201dsudo -i\u201d in a terminal window then typing in your password. Be careful, because you can really foul things up as root if you don\u2019t know what you\u2019re doing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 25 / 1290\n \n 1.6.7 Terminal Commands\n 1.6.7.1 Working Directory\n To find out the path to the present working directory in the terminal window type:\n pwd\n@@ -5021,15 +5021,15 @@\n pwd\n \n And pwd might return the following result:\n /home/joe\n \n With this information put the command together like this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 26 / 1290\n \n find /home/joe/linuxcnc -name \\*.ini -print\n \n The -name is the name of the file your looking for and the -print tells it to print out the result to the\n terminal window. The \\*.ini tells find to return all files that have the .ini extension. The backslash is\n@@ -5063,15 +5063,15 @@\n and Add. Give it a name and put gnome-terminal in the command box.\n \n 1.6.9 Hardware Problems\n 1.6.9.1 Hardware Info\n To find out what hardware is connected to your motherboard in a terminal window type:\n lspci -v\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 27 / 1290\n \n 1.6.9.2 Monitor Resolution\n During installation Ubuntu attempts to detect the monitor settings. If this fails you are left with a\n generic monitor with a maximum resolution of 800x600.\n Instructions for fixing this are located here:\n@@ -5084,15 +5084,15 @@\n is the same as f0, e.g., a file named f0 in the startup directory\n ../f1\n refers to a file f1 in the parent directory\n ../../f2\n refers to a file f2 in the parent of the parent directory\n ../../../f3 etc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 28 / 1290\n \n Chapter 2\n \n General User Information\n 2.1 User Foreword\n@@ -5121,15 +5121,15 @@\n The Composition rule allows us to build a predictable control system from the many modules available by making them connectable. We achieve connectability by setting up standard interfaces to sets\n of modules and following those standards.\n The Separation rule requires that we make distinct parts that do little things. By separating functions\n debugging is much easier and replacement modules can be dropped into the system and comparisons\n easily made.\n 1 Found at link:https://en.wikipedia.org/wiki/Separation_of_mechanism_and_policy, 2022-11-13\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 29 / 1290\n \n What does the Unix way mean for you as a user of LinuxCNC. It means that you are able to make\n choices about how you will use the system. Many of these choices are a part of machine integration,\n but many also affect the way you will use your machine. As you read you will find many places where\n you will need to make comparisons. Eventually you will make choices, \u201dI\u2019ll use this interface rather\n@@ -5164,15 +5164,15 @@\n \u2022 the high level controllers that coordinate the generation and execution of motion control of the CNC\n machine, namely the motion controller (EMCMOT), the discrete input/output controller (EMCIO)\n and the task executor (EMCTASK).\n The below illustration is a simple block diagram showing what a typical 3-axis CNC mill with stepper\n motors might look like:\n 2 Found at link:https://en.wikipedia.org/wiki/Unix_philosophy, 07/06/2008\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 30 / 1290\n \n Figure 2.1: Simple LinuxCNC Controlled Machine\n A computer running LinuxCNC sends a sequence of pulses via the parallel port to the stepper drives,\n each of which has one stepper motor connected to it. Each drive receives two independent signals;\n one signal to command the drive to move its associated stepper motor in a clockwise or anti-clockwise\n@@ -5194,15 +5194,15 @@\n The INI file contains all the basic hardware information regarding the operation of the CNC mill,\n such as the number of steps each stepper motor must turn to complete one full revolution, the\n maximum rate at which each stepper may operate at, the limits of travel of each axis or the\n configuration and behaviour of limit switches on each axis.\n \u2013 My_CNC.hal\n This HAL file contains information that tells LinuxCNC how to link the internal virtual signals to\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 31 / 1290\n \n physical connections beyond the computer. For example, specifying pin 4 on the parallel port to\n send out the Z axis step direction signal, or directing LinuxCNC to cease driving the X axis motor\n when a limit switch is triggered on parallel port pin 13.\n \u2013 custom.hal\n@@ -5229,85 +5229,85 @@\n 2.2.3 Graphical User Interfaces\n A graphical user interface is the part of the LinuxCNC that the machine tool operator interacts with.\n LinuxCNC comes with several types of user interfaces which may be chosen from by editing certain\n fields contained in the INI file:\n AXIS\n AXIS, the standard keyboard GUI interface. This is also the default GUI launched when a Configuration Wizard is used to create a desktop icon launcher:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 2.2: AXIS, the standard keyboard GUI interface\n \n Touchy\n Touchy, a touch screens GUI:\n \n 32 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 2.3: Touchy, a touch screen GUI\n \n Gscreen\n Gscreen, a user-configurable touch screen GUI:\n \n 33 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 34 / 1290\n \n Figure 2.4: Gscreen, a configurable base touch screen GUI\n \n GMOCCAPY\n GMOCCAPY, a touch screen GUI based on Gscreen. GMOCCAPY is also designed to work equally\n well in applications where a keyboard and mouse are the preferred methods of controlling the\n GUI:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 35 / 1290\n \n Figure 2.5: GMOCCAPY, a touch screen GUI based on Gscreen\n \n NGCGUI\n NGCGUI, a subroutine GUI that provides wizard-style programming of G code. NGCGUI may be\n run as a standalone program or embedded into another GUI as a series of tabs. The following\n screenshot shows NGCGUI embedded into AXIS:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 36 / 1290\n \n Figure 2.6: NGCGUI, a graphical interface integrated into AXIS\n \n TkLinuxCNC\n TkLinuxCNC, another interface based on Tcl/Tk. Once the most popular interface after AXIS.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 37 / 1290\n \n Figure 2.7: TkLinuxCNC graphical interface\n \n QtDragon\n QtDragon, a touch screen GUI based on QtVCP using the PyQt5 library. It comes in two versions\n QtDragon and QtDragon_hd. They are very similar in features but QtDragon_hd is made for\n larger monitors.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 38 / 1290\n \n Figure 2.8: QtDragon, a touch screen GUI based on QtVCP\n \n QtPlasmaC\n QtPlasmaC, a touch screen plasma cutting GUI based on QtVCP using the PyQt5 library. It comes\n in three aspect ratios, 16:9, 4:3, and 9:16.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 39 / 1290\n \n Figure 2.9: QtPlasmaC, a touch screen plasma cutting GUI based on QtVCP\n \n 2.2.4 User Interfaces\n These User interfaces are a way to interact with LinuxCNC outside of the graphical user interfaces.\n@@ -5321,41 +5321,41 @@\n add indicators, readouts, switches or sliders to the basic appearance of one of the GUIs for increased\n flexibility or functionality. Two styles of Virtual Control Panel are offered in LinuxCNC:\n PyVCP\n PyVCP, a Python-based virtual control panel that can be added to the AXIS GUI. PyVCP only\n utilises virtual signals contained within the Hardware Abstraction Layer, such as the spindle-atspeed indicator or the Emergency Stop output signal, and has a simple no-frills appearance. This\n makes it an excellent choice if the user wants to add a Virtual Control Panel with minimal fuss.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 40 / 1290\n \n Figure 2.10: PyVCP Example Embedded Into AXIS GUI\n \n GladeVCP\n GladeVCP, a Glade-based virtual control panel that can be added to the AXIS or Touchy GUIs.\n GladeVCP has the advantage over PyVCP in that it is not limited to the display or control of HAL\n virtual signals, but can include other external interfaces outside LinuxCNC such as window or\n network events. GladeVCP is also more flexible in how it may be configured to appear on the\n GUI:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 41 / 1290\n \n Figure 2.11: GladeVCP Example Embedded Into AXIS GUI\n \n QtVCP\n QtVCP, a PyQt5-based virtual control panel that can be added to most GUIs or run as a standalone\n panel. QtVCP has the advantage over PyVCP in that it is not limited to the display or control of\n HAL virtual signals, but can include other external interfaces outside LinuxCNC such as window\n or network events by extending with python code. QtVCP is also more flexible in how it may be\n configured to appear on the GUI with many special widgets:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 42 / 1290\n \n Figure 2.12: QtVCP Example Embedded Into QtDragon GUI\n \n 2.2.6 Languages\n LinuxCNC uses translation files to translate LinuxCNC User Interfaces into many languages including\n@@ -5370,15 +5370,15 @@\n the lessons learned. A beautiful finish, tight tolerances and caution during the work are evidence of\n lessons learned. No machine nor program can replace human experience.\n Now that you start working with the LinuxCNC software, you have to put yourself in the shoes of an\n operator. You must be in the role of someone in charge of a machine. It\u2019s a machine that will wait\n for your commands and then execute the orders that you will give it. In these pages, we will give the\n explanations which will help you to become a good CNC operator with LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 43 / 1290\n \n 2.2.8 Modes of Operation\n When LinuxCNC is running, there are three different major modes used for inputting commands.\n These are Manual, Auto, and Manual Data Input (MDI). Changing from one mode to another makes\n a big difference in the way that the LinuxCNC control behaves. There are specific things that can be\n@@ -5417,15 +5417,15 @@\n cam detector is not employed with G64 Pn.\n The basic acceleration and deceleration described above is not complex and there is no compromise\n to be made. In the INI file the specified machine constraints, such as maximum axis velocity and axis\n acceleration, must be obeyed by the trajectory planner.\n For more information on the Trajectory Planner INI options see the Trajectory Section in the INI\n chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 44 / 1290\n \n 2.3.1.2 Path Following\n A less straightforward problem is that of path following. When you program a corner in G-code, the\n trajectory planner can do several things, all of which are right in some cases:\n \u2022 It can decelerate to a stop exactly at the coordinates of the corner, and then accelerate in the new\n@@ -5466,15 +5466,15 @@\n backward compatibility for old G-code programs. See the G64 section of the G-code chapter.\n Blending without tolerance\n The controlled point will touch each specified movement at at least one point. The machine\n will never move at such a speed that it cannot come to an exact stop at the end of the current\n movement (or next movement, if you pause when blending has already started). The distance\n from the end point of the move is as large as it needs to be to keep up the best contouring feed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 45 / 1290\n \n Naive CAM Detector\n Successive G1 moves that involve only the XYZ axes that deviate less than Q- from a straight\n line are merged into a single straight line. This merged movement replaces the individual G1\n movements for the purposes of blending with tolerance. Between successive movements, the\n@@ -5507,15 +5507,15 @@\n the feed rate in units per second, the acceleration time is ta = F/A and the acceleration distance is\n da = F*ta /2. The deceleration time and distance are the same, making the critical distance d = da +\n dd = 2 * da = F2 /A.\n For example, for a feed rate of 1 inch per second and an acceleration of 10 inches/sec2 , the critical\n distance is 12 /10 = 1/10 = 0.1 inches.\n For a feed rate of 0.5 inch per second, the critical distance is 52 /100 = 25/100 = 0.025 inches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 46 / 1290\n \n 2.3.2 G-code\n 2.3.2.1 Defaults\n When LinuxCNC first starts up many G- and M-codes are loaded by default. The current active G- and\n M-codes can be viewed on the MDI tab in the Active G-codes: window in the AXIS interface. These\n@@ -5548,15 +5548,15 @@\n There are several options when doing manual tool changes. See the [EMCIO] section for information\n on configuration of these options. Also see the G28 and G30 section of the G-code chapter.\n \n 2.3.5 Coordinate Systems\n The Coordinate Systems can be confusing at first. Before running a CNC machine you must understand the basics of the coordinate systems used by LinuxCNC. In depth information on the LinuxCNC\n Coordinate Systems is in the Coordinate System section of this manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 47 / 1290\n \n 2.3.5.1 G53 Machine Coordinate\n When you home LinuxCNC you set the G53 Machine Coordinate System to 0 for each axis homed.\n No other coordinate systems or tool offsets are changed by homing.\n The only time you move in the G53 machine coordinate system is when you program a G53 on the\n@@ -5588,22 +5588,22 @@\n in relation to the material.\n Note also the position of the limit switches and the direction of activation of their cams. Several\n combinations are possible, for example it is possible (contrary to the drawing) to place a single fixed\n limit switch in the middle of the table and two mobile cams to activate it. In this case the limits will\n be reversed, +X will be on the right of the table and -X on the left. This inversion does not change\n anything from the point of view of the direction of movement of the tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 48 / 1290\n \n Figure 2.14: Typical Mill Configuration\n The following diagram shows a typical lathe showing direction of travel of the tool and limit switches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 2.15: Typical Lathe Configuration\n \n 2.4 Starting LinuxCNC\n 2.4.1 Running LinuxCNC\n LinuxCNC is started with the script file linuxcnc.\n linuxcnc [options] []\n@@ -5618,15 +5618,15 @@\n $ linuxcnc [Options] path/to/your_ini_file\n Name the configuration INI file using its path\n $ linuxcnc [Options] -l\n Use the previously used configuration INI file\n \n 49 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 50 / 1290\n \n Options:\n -d: Turn on \u201ddebug\u201d mode\n -v: Turn on \u201dverbose\u201d mode\n -r: Disable redirection of stdout and stderr to ~/linuxcnc_print.txt and\n@@ -5652,15 +5652,15 @@\n or GladeVCP objects with HAL pins you must use the postgui HAL file to make any connections to\n those pins. See the [HAL] section of the INI configuration for more information.\n 2.4.1.1 Configuration Selector\n If no INI file is passed to the linuxcnc script it loads the configuration selector so you can choose and\n save a sample configuration. Once a sample configuration has been saved it can be modified to suit\n your application. The configuration files are saved in linuxcnc/configs directory.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 51 / 1290\n \n 2.5 CNC Machine Overview\n This section gives a brief description of how a CNC machine is viewed from the input and output ends\n of the Interpreter.\n \n@@ -5675,15 +5675,15 @@\n with two motors for one axis is better handled by kinematics rather than by a second linear axis.\n Note\n If the motion of mechanical components is not independent, as with hexapod machines, the\n RS274/NGC language and the canonical machining functions will still be usable, as long as the lower\n levels of control know how to control the actual mechanisms to produce the same relative motion of\n tool and workpiece as would be produced by independent axes. This is called kinematics.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 52 / 1290\n \n Note\n With LinuxCNC, the case of the XYYZ gantry machine with two motors for one axis is better handled\n by the kinematics than by an additional linear axis.\n \n@@ -5714,15 +5714,15 @@\n \n 2.5.2 Control and Data Components\n 2.5.2.1 Linear Axes\n The X, Y, and Z axes form a standard right-handed coordinate system of orthogonal linear axes. Positions of the three linear motion mechanisms are expressed using coordinates on these axes.\n The U, V and W axes also form a standard right-handed coordinate system. X and U are parallel, Y\n and V are parallel, and Z and W are parallel (when A, B, and C are rotated to zero).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 53 / 1290\n \n 2.5.2.2 Rotational Axes\n The rotational axes are measured in degrees as wrapped linear axes in which the direction of positive\n rotation is counterclockwise when viewed from the positive end of the corresponding X, Y, or Z-axis.\n By wrapped linear axis, we mean one on which the angular position increases without limit (goes\n@@ -5762,15 +5762,15 @@\n revolution modes are being used, in which case see section G93-G94-G95-Mode).\n 1. If any of XYZ are moving, F is in units per minute in the XYZ cartesian system, and all other axes\n (ABCUVW) move so as to start and stop in coordinated fashion.\n 2. Otherwise, if any of UVW are moving, F is in units per minute in the UVW cartesian system, and\n all other axes (ABC) move so as to start and stop in coordinated fashion.\n 3 If the parallelism requirement is violated, the system builder will have to say how to distinguish clockwise from counterclockwise.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 54 / 1290\n \n 3. Otherwise, the move is pure rotary motion and the F word is in rotary units in the ABC pseudocartesian system.\n 2.5.2.6 Cooling\n Flood or droplets cooling can be enabled separately. RS274/NGC language stops them together. See\n section about cooling control.\n@@ -5797,15 +5797,15 @@\n machining center. The Z-axis is, of course, perpendicular to the XY-plane, the X-axis to the YZ-plane,\n and the Y-axis to the XZ-plane.\n 2.5.2.11 Tool Carousel\n Zero or one tool is assigned to each slot in the tool carousel.\n 2.5.2.12 Tool Change\n A machining center may be commanded to change tools.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 55 / 1290\n \n 2.5.2.13 Pallet Shuttle\n The two pallets may be exchanged by command.\n 2.5.2.14 Speed Override\n The speed override buttons can be activated (they function normally) or rendered inoperative (they no\n@@ -5836,15 +5836,15 @@\n 2.5.3.2 Block Delete Switch\n If the block delete switch is on, lines of G-code which start with a slash (the block delete character)\n are not interpreted. If the switch is off, such lines are interpreted. Normally the block delete switch\n should be set before starting the NGC program.\n 2.5.3.3 Optional Program Stop Switch\n If this switch is on and an M1 code is encountered, program execution is paused.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 56 / 1290\n \n 2.5.4 Tool Table\n A tool table is required to use the Interpreter. The file tells which tools are in which tool changer slots\n and what the size and type of each tool is. The name of the tool table is defined in the INI file:\n [EMCIO]\n@@ -5893,15 +5893,15 @@\n 0.0\n 0.0\n \n Comment\n G28 Home X\n G28 Home Y\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 57 / 1290\n \n See the Parameters section for more information.\n \n 2.6 Lathe User Information\n This chapter will provide information specific to lathes.\n@@ -5932,30 +5932,30 @@\n L1,L10,L11. There is also a built-in tool table editor in the AXIS display. The maximum number of\n entries in the tool table is 56. The maximum tool and pocket number is 99999.\n Earlier versions of LinuxCNC had two different tool table formats for mills and lathes, but since the\n 2.4.x release, one tool table format is used for all machines. Just ignore the parts of the tool table that\n don\u2019t pertain to your machine, or which you don\u2019t need to use. For more information on the specifics\n of the tool table format, see the Tool Table Section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 58 / 1290\n \n 2.6.3 Lathe Tool Orientation\n The following figure shows the lathe tool orientations with the center line angle of each orientation\n and info on FRONTANGLE and BACKANGLE.\n The FRONTANGLE and BACKANGLE are clockwise starting at a line parallel to Z+.\n \n Figure 2.16: Lathe Tool Orientations\n In AXIS the following figures show what the Tool Positions look like, as entered in the tool table.\n Tool Positions 1, 2, 3 & 4Tool Positions 123 & 4 23 & 4 3 & 4\n \n Tool Positions 5, 6, 7 & 8Tool Positions 567 & 8 67 & 8 7 & 8\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 59 / 1290\n \n 2.6.4 Tool Touch Off\n When running in lathe mode in AXIS you can set the X and Z in the tool table using the Touch Off\n window. If you have a tool turret you normally have Touch off to fixture selected when setting up your\n turret. When setting the material Z zero you have Touch off to material selected. For more information\n@@ -5981,15 +5981,15 @@\n The Z axis offsets can be a bit confusing at first because there are two elements to the Z offset. There\n is the tool table offset, and the machine coordinate offset. First we will look at the tool table offsets.\n One method is to use a fixed point on your lathe and set the Z offset for all tools from this point. Some\n use the spindle nose or chuck face. This gives you the ability to change to a new tool and set its Z\n offset without having to reset all the tools.\n A typical session might be:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 60 / 1290\n \n 1. Home each axis if not homed.\n 2. Make sure no offsets are in effect for the current coordinate system.\n 3. Set the current tool with Tn M6 G43 where n is the tool number.\n 4. Select the Z axis in the Manual Control window.\n@@ -6022,15 +6022,15 @@\n Constant Surface Speed CSS or Constant Surface Speed uses the machine X origin modified by\n the tool X offset to compute the spindle speed in RPM. CSS will track changes in tool offsets. The X\n machine origin should be when the reference tool (the one with zero offset) is at the center of rotation.\n For more information see the G96 Section.\n Feed per Revolution Feed per revolution will move the Z axis by the F amount per revolution. This\n is not for threading, use G76 for threading. For more information see the G95 Section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 61 / 1290\n \n 2.6.6 Arcs\n Calculating arcs can be mind challenging enough without considering radius and diameter mode on\n lathes as well as machine coordinate system orientation. The following applies to center format arcs.\n On a lathe you should include G18 in your preamble as the default is G17 even if you\u2019re in lathe mode,\n@@ -6058,15 +6058,15 @@\n The control point for the tool follows the programmed path. The control point is the intersection of a\n line parallel to the X and Z axis and tangent to the tool tip diameter, as defined when you touch off the\n X and Z axes for that tool. When turning or facing straight sided parts the cutting path and the tool\n edge follow the same path. When turning radius and angles the edge of the tool tip will not follow the\n programmed path unless cutter comp is in effect. In the following figures you can see how the control\n point does not follow the tool edge as you might assume.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 62 / 1290\n \n Figure 2.17: Control point\n \n 2.6.7.2 Cutting Angles without Cutter Comp\n Now imagine we program a ramp without cutter comp. The programmed path is shown in the following\n@@ -6074,29 +6074,29 @@\n same as long as we are moving in an X or Z direction only.\n \n Figure 2.18: Ramp Entry\n Now as the control point progresses along the programmed path the actual cutter edge does not follow\n the programmed path as shown in the following figure. There are two ways to solve this, cutter comp\n and adjusting your programmed path to compensate for tip radius.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 63 / 1290\n \n Figure 2.19: Ramp Path\n In the above example it is a simple exercise to adjust the programmed path to give the desired actual\n path by moving the programmed path for the ramp to the left the radius of the tool tip.\n 2.6.7.3 Cutting a Radius\n In this example we will examine what happens during a radius cut without cutter comp. In the next\n figure you see the tool turning the OD of the part. The control point of the tool is following the\n programmed path and the tool is touching the OD of the part.\n \n Figure 2.20: Turning Cut\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 64 / 1290\n \n In this next figure you can see as the tool approaches the end of the part the control point still follows\n the path but the tool tip has left the part and is cutting air. You can also see that even though a radius\n has been programmed the part will actually end up with a square corner.\n \n@@ -6104,15 +6104,15 @@\n Now you can see as the control point follows the radius programmed the tool tip has left the part and\n is now cutting air.\n \n Figure 2.22: Radius Cut\n In the final figure we can see the tool tip will finish cutting the face but leave a square corner instead\n of a nice radius. Notice also that if you program the cut to end at the center of the part a small amount\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 65 / 1290\n \n of material will be left from the radius of the tool. To finish a face cut to the center of a part you have\n to program the tool to go past center at least the nose radius of the tool.\n \n Figure 2.23: Face Cut\n@@ -6133,15 +6133,15 @@\n width.\n Plasma torches are similar in design to the automotive spark plug. They consist of negative and\n positive sections separated by a center insulator. Inside the torch, the pilot arc starts in the gap\n between the negatively charged electrode and the positively charged tip. Once the pilot arc has\n ionised the plasma gas, the superheated column of gas flows through the small orifice in the torch tip,\n which is focused on the metal to be cut.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 66 / 1290\n \n In a Plasma Cutting Torch a cool gas enters Zone B, where a pilot arc between the electrode and the\n torch tip heats and ionises the gas. The main cutting arc then transfers to the workpiece through the\n column of plasma gas in Zone C. By forcing the plasma gas and electric arc through a small orifice, the\n torch delivers a high concentration of heat to a small area. The stiff, constricted plasma arc is shown\n@@ -6157,15 +6157,15 @@\n works well, and starts quickly. But, because of the high frequency high voltage power that is required\n generated to ionise the air, it has some drawbacks. It often interferes with surrounding electronic\n circuitry, and can even damage components. Also a special circuit is needed to create a Pilot arc.\n Inexpensive models will not have a pilot arc, and require touching the consumable to the work to\n start. Employing a HF circuit also can increase maintenance issues, as there are usually adjustable\n points that must be cleaned and readjusted from time to time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 67 / 1290\n \n 2.7.2.2 Blowback Start\n This start type uses air pressure supplied to the cutter to force a small piston or cartridge inside the\n torch head back to create a small spark between the inside surface of the consumable, ionising the\n air, and creating a small plasma flame. This also creates a \u201dpilot arc\u201d that provides a plasma flame\n@@ -6190,15 +6190,15 @@\n If the torch is too high or too low then the edges can become excessively bevelled. It is also critical\n that the torch is held perpendicular to the surface.\n \u2022 Torch to work distance can impact edge bevel\n \n \u2022 Negative cut angle: torch too low, increase torch to work distance.\n \u2022 Positive cut angle: torch too high, decrease torch to work distance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 68 / 1290\n \n Note\n A slight variation in cut angles may be normal, as long as it is within tolerance.\n \n The ability to precisely control the cutting height in such a hostile and ever changing environment is\n@@ -6224,15 +6224,15 @@\n \u2022 Blowback start to minimise electrical noise to simplify construction\n \u2022 A Machine torch is preferred but many have used hand torches.\n \u2022 A fully shielded torch tip to allow ohmic sensing\n If you have the budget, a higher end machines will supply:\n \u2022 Manufacturer provided cut charts which will save many hours and material waste calibrating cut\n parameters\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 69 / 1290\n \n \u2022 Dry Contacts for ArcOK\n \u2022 Terminals for Arc On switch\n \u2022 Raw arc voltage or divided arc voltage output\n \u2022 Optionally a RS485 interface if using a Hypertherm plasma cutter and want to control it from the\n@@ -6276,15 +6276,15 @@\n A plasma table builder should connect one side of these pins to field power and the other to an input\n pin. This then allows the CNC controller to know when a valid arc is established and also when an\n arc is lost unexpectedly. There is a potential trap here when the input is a high impedance circuit\n such as a Mesa card. If the dry contacts are a simple relay, there is a high probability that the current\n passing through the relay is less than the minimum current specification. Under these conditions, the\n relay contacts can suffer from a buildup of oxide which over time can result in intermittent contact\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 70 / 1290\n \n operation. To prevent this from happening, a pull down resistor should be installed on the controller\n input pin. Care should be taken to ensure that this resistor is selected to ensure the minimum current\n passes through the relay and is of sufficient wattage to handle the power in the circuit. Finally, the\n resistor should be mounted in such a way that the generated heat does not damage anything whilst\n@@ -6324,15 +6324,15 @@\n of the material surface. This ohmic sensing circuit is operating in an extremely hostile environment\n so a number of failsafes need to be implemented to ensure safety of both the CNC electronics and\n the operator. In plasma cutting, the earth clamp attached to the material is positive and the torch is\n negative. It is recommended that:\n 1. Ohmic sensing only be implemented where the torch has a shield that is isolated from the torch\n tip that conveys the cutting arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 71 / 1290\n \n 2. The ohmic circuit uses a totally separate isolated power supply that activates an opto-isolated\n relay to enable the probing signal to be transmitted to the CNC controller.\n 3. The positive side of the circuit should be at the torch\n 4. Both sides of the circuit needs to be isolated by opto-isolated relays until probing is being undertaken\n@@ -6354,15 +6354,15 @@\n threshold above which it is deemed contact is made and an output is enabled. By monitoring the voltage, a lower \u201cbreak circuit\u201d threshold can be set to build in strong switch hysteresis. This minimises\n false triggering. In our testing, we found the material sensing using this method was more sensitive\n and robust as well as being simpler to implement the wiring. One further advantage is using software\n outputs instead of physical I/O pins is that it frees up pins to use for other purposes. This advantage\n is helpful to get the most out of the Mesa 7I96 which has limited I/O pins.\n The following circuit diagram shows how to implement a hypersensing circuit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 72 / 1290\n \n We used a 15 W Mean Well HDR-15 Ultra Slim DIN Rail Supply 24 V DIN rail based isolated power\n supply. This is a double insulated Isolation Class II device that will withstand any arc voltage that\n might be applied to the terminals.\n 2.7.7.4 Example HAL Code for Hypersensing\n@@ -6379,15 +6379,15 @@\n setp ohmicsense.thcad-fullscale\n \n 140200\n 988300\n 32\n 5\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 73 / 1290\n \n setp ohmicsense.volt-divider\n 4.9\n setp ohmicsense.ohmic-threshold\n 22.0\n@@ -6420,15 +6420,15 @@\n \n 2.7.10 Torch Breakaway\n It is recommended that a mechanism is provided to allow the torch to \u201cbreak away\u201d or fall off in the\n case of impact with the material or a cut part that has tipped up. A sensor should be installed to allow\n the CNC controller to detect if this has occurred and pause the running program. Usually a break\n away is implemented using magnets to secure the torch to the Z axis stage.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 74 / 1290\n \n 2.7.11 Corner Lock / Velocity Anti-Dive\n The LinuxCNC trajectory planner is responsible for translating velocity and acceleration commands\n into motion that obey the laws of physics. For example, motion will slow when negotiating a corner.\n Whilst this is not a problem with milling machines or routers, this poses a particular problem for\n@@ -6459,15 +6459,15 @@\n Hypertherm\u2019s True Hole Technology also look on PlasmaSpider, user seanp has posted extensively on\n his work using simple air plasma.\n The generally accepted method to get good holes from 37mm dia. and down to material thickness\n with minimal taper using an air plasma is:\n 1. Use recommended cutting current for consumables.\n 2. Use fixed (no THC) recommended cutting height for consumables.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 75 / 1290\n \n 3. Cut from 60% to 70% of the recommended feed rate of consumables and materials.\n 4. Start lead in at or near center of hole.\n 5. Use perpendicular lead in.\n 6. No lead out, either a slight over burn or early torch off depending on what works best for you.\n@@ -6504,15 +6504,15 @@\n 2.7.14.1 Arc OK (input)\n \u2022 Inverter closes dry contacts when a valid arc is established\n \u2022 Connect Field power to one Inverter ArcOK terminal.\n \u2022 Connect other Inverter Ok Terminal to input pin.\n \u2022 Usually connected to one of the \u0300 \u0300motion.digital- \u0300 <\n \u0300 nn> pins for use from G-code with M66\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 76 / 1290\n \n 2.7.14.2 Torch On (output)\n \u2022 Triggers a relay to close the torch on switch in the inverter.\n \u2022 Connect the torch on terminals on the inverter to the relay output terminals.\n \u2022 Connect one side of the coil to the output pin.\n@@ -6543,15 +6543,15 @@\n 2.7.14.5 Ohmic Sensing (input)\n \u2022 Take care to follow the ohmic sensing schematic shown previously.\n \u2022 An isolated power supply triggers a relay when the torch shield contacts the material.\n \u2022 Connect field power to one output terminal and the other to the input.\n \u2022 Take care to observe relay polarity if opto-coupled solid State relays are used.\n \u2022 Usually connected to motion.probe-input and may be or\u2019d with the float switch.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 77 / 1290\n \n As can be seen, plasma tables are pin intensive and we have already consumed about 15 inputs before\n the normal estops are added. Others have other views but it is the writer\u2019s opinion that the Mesa\n 7I76E is preferred over the cheaper 7I96 to allow for MPG\u2019s, scale and axis selection switch and other\n features you may wish to add over time. If your table uses servos, there are a number of alternatives.\n@@ -6594,15 +6594,15 @@\n G42.1 D#<_hal[plasmac_run.kerf-width-f]> for right of programmed path\n G40 to turn compensation off\n \n Note\n Integrators should familiarise themselves with the LinuxCNC documentation for the various LinuxCNC\n G-code commands mentioned above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 78 / 1290\n \n 2.7.16 External Offsets and Plasma Cutting\n External Offsets were introduced to LinuxCNC with version 2.8. By external, it means that we can\n apply an offset external to the G-code that the trajectory planner knows nothing about. It easiest\n to explain with an example. Picture a lathe with an external offset being applied by a mathematical\n@@ -6653,15 +6653,15 @@\n \u2022 Full scale\n \u2022 0V\n \n 928 kHz (928 kHz/32 = 29 kHz)\n \n 121.6 kHz (121.6 kHz/32 = 3.8 kHz)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 79 / 1290\n \n Because the full scale is 10 Volts, then the frequency per Volt is:\n (29000 Hz - 3800 Hz) / 10 V = 2520 Hz per Volt\n So assuming we have a 5 Volt input, the calculated frequency would be:\n (2520 Hz/V * 5 V) + 3800 Hz = 16400 Hz\n@@ -6694,15 +6694,15 @@\n as 24:1 (and 50:1 becomes 75:1). This is not a problem with more reputable brands (e.g., Thermal\n Dynamics, Hypertherm, ESAB etc). So if you are seeing lower than expected cutting voltages, it might\n be preferable to reconfigure the THCAD to read raw arc voltage.\n Remembering that plasma arc voltages are potentially lethal, here are some suggested criteria.\n Pilot Arc Start Because there is not likely to be any significant EMI, you should be able to safely\n install the THCAD in your control panel if you have followed our construction guidelines.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 80 / 1290\n \n \u2022 If you do not have a voltage divider, either install scaling resistors inside the plasma cutter and\n install the THCAD in the control panel or follow the suggestions for HF start machines.\n \u2022 If you have a voltage divider, install a THCAD-10 in your control panel. We\u2019ve had no problems with\n this configuration with a 120 A Thermal Dynamics plasma cutter.\n@@ -6740,15 +6740,15 @@\n located away from the electronics and the plasma machine. This hardware also allows the use of 24\n Volt logic systems which are much more noise tolerant. Components should be mounted in a metal\n enclosure connected to the mains earth. It is strongly recommended that an EMI filter is installed on\n the mains power connection. The simplest way is to use a EMI filtered mains power IEC connector\n commonly used on PC\u2019s and electric appliances which allows this to be achieved with no extra work.\n Plan the layout of components in the enclosure so that mains power, high voltage motor wires and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 81 / 1290\n \n logic signals are kept as separate as possible from each other. If they do have to cross, keep them at\n 90 degrees.\n Peter Wallace from Mesa Electronics suggests: \u201dIf you have a CNC compatible plasma source with a\n voltage divider, I would mount the THCAD inside your electronics enclosure with all the other motion\n@@ -6793,15 +6793,15 @@\n is relatively straightforward if you use the axis or joint position from one of the motion pins and the\n lincurve component to map downdraft zones to the correct output pin.\n \n 2.7.22 Designing For Speed And Acceleration\n In plasma cutting, speed and acceleration are king. The higher the acceleration, the less the machine\n needs to slow down when negotiating corners. This implies that the gantry should be as light as\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 82 / 1290\n \n possible without sacrificing torsional stiffness. A 100 mm x 100 mm x 2 mm aluminium box section\n has equivalent torsional stiffness to an 80 mm x 80 mm T slot extrusion yet is 62% lighter. So does the\n convenience of T slots outweigh the additional construction?\n \n@@ -6842,29 +6842,29 @@\n 2.7.26 Post Processors For Plasma Cutting\n CAM programs (Computer Aided Manufacture) are the bridge between CAD (Computer Aided Design)\n and the final CNC (Computer Numerical Control) operation. They often include a user configurable\n post processor to define the code that is generated for a specific machine or dialect of G-code.\n Many LinuxCNC users are perfectly happy with using Inkscape to convert SVG vector based files to\n G-code. If you are using a plasma cutter for hobby or home use, consider this option.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 83 / 1290\n \n However, if your needs are more complex, probably the best and most reasonably priced solution\n is SheetCam. SheetCam supports both Windows and Linux and post processors are available for it\n including the QtPlasmaC configuration. SheetCam allows you to nest parts over a full sheet of material\n and allows you to configure toolsets and code snippets to suit your needs. SheetCam post processors\n are text files written in the Lua programming language and are generally easy to modify to suit your\n exact requirements. For further information, consult the SheetCam web site and their support forum.\n Another popular post-processor is included with the popular Fusion360 package but the included\n post-processors will need some customisation.\n LinuxCNC is a CNC application and discussions of CAM techniques other than this introductory discussion are out of scope of LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 84 / 1290\n \n Chapter 3\n \n Configuration Wizards\n 3.1 Stepper Configuration Wizard\n@@ -6875,15 +6875,15 @@\n & direction.\n StepConf is installed when you install LinuxCNC and is in the CNC menu.\n StepConf places a file in the linuxcnc/config directory to store the choices for each configuration you\n create. When you change something, you need to pick the file that matches your configuration name.\n The file extension is .stepconf.\n The StepConf Wizard works best with at least 800 x 600 screen resolution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 85 / 1290\n \n 3.1.2 Start Page\n \n Figure 3.1: StepConf Entry Page\n The three first radio buttons are self-explanatory:\n@@ -6894,15 +6894,15 @@\n StepConf Wizard. StepConf will highlight the lastconf that was built.\n \u2022 Import - Import a Mach configuration file and attempt to convert it to a LinuxCNC config file. After\n the import, you will go though the pages of StepConf to confirm/modify the entries. The original\n mach XML file will not be changed.\n These next options will be recorded in a preference file for the next run of StepConf.\n \u2022 Create Desktop Shortcut - This will place a link on your desktop to the files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 86 / 1290\n \n \u2022 Create Desktop Launcher - This will place a launcher on your desktop to start your application.\n \u2022 Create Simulated Hardware - This allows you to build a config for testing, even if you don\u2019t have\n the actual hardware.\n \n@@ -6914,15 +6914,15 @@\n \u2022 Machine Name - Choose a name for your machine. Use only uppercase letters, lowercase letters,\n digits, - and _.\n \u2022 Axis Configuration - Choose XYZ (Mill), XYZA (4-axis mill) or XZ (Lathe).\n \u2022 Machine Units - Choose Inch or mm. All subsequent entries will be in the chosen units. Changing\n this also changes the default values in the Axes section. If you change this after selecting values in\n any of the axes sections, they will be over-written by the default values of the selected units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 87 / 1290\n \n \u2022 Driver Type - If you have one of the stepper drivers listed in the pull down box, choose it. Otherwise,\n select Other and find the timing values in your driver\u2019s data sheet and enter them as nano seconds\n in the Driver Timing Settings. If the data sheet gives a value in microseconds, multiply by 1000.\n For example, enter 4.5 \u00b5s as 4500 ns.\n@@ -6951,15 +6951,15 @@\n worst case numbers are. Run the test at least a few minutes. The longer you run the test the better it\n will be at catching events that might occur at less frequent intervals. This is a test for your computer\n only, so no hardware needs to be connected to run the test.\n \n Warning\n Do not attempt run LinuxCNC while the latency test is running.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 88 / 1290\n \n Figure 3.3: Latency Test\n Latency is how long it takes the PC to stop what it is doing and respond to an external request. In our\n case, the request is the periodic heartbeat that serves as a timing reference for the step pulses. The\n lower the latency, the faster you can run the heartbeat, and the faster and smoother the step pulses\n@@ -6975,15 +6975,15 @@\n If your Max Jitter number is less than about 15-20 \u00b5s (15000-20000 ns), the computer should give very\n nice results with software stepping. If the max latency is more like 30-50 \u00b5s, you can still get good\n results, but your maximum step rate might be a little disappointing, especially if you use microstepping\n or have very fine pitch leadscrews. If the numbers are 100 \u00b5s or more (100,000 ns), then the PC is not\n a good candidate for software stepping. Numbers over 1 millisecond (1,000,000 ns) mean the PC is\n not a good candidate for LinuxCNC, regardless of whether you use software stepping or not.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 89 / 1290\n \n 3.1.5 Parallel Port Setup\n \n Figure 3.4: Parallel Port Setup Page\n You may specify the address as a hexadecimal (often 0x378) or as linux\u2019s default port number (probably\n@@ -6992,15 +6992,15 @@\n if the signal is inverted (0V for true/active, 5V for false/inactive).\n \u2022 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).\n \u2022 Inputs and Outputs - If the input or output is not used set the option to Unused.\n \u2022 External E-Stop - This can be selected from an input pin drop down box. A typical E-Stop chain uses\n all normally closed contacts.\n \u2022 Homing & Limit Switches - These can be selected from an input pin drop down box for most configurations.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 90 / 1290\n \n \u2022 Charge Pump - If your driver board requires a charge pump signal select Charge Pump from the\n drop down list for the output pin you wish to connect to your charge pump input. The charge pump\n output is connected to the base thread by StepConf. The charge pump output will be about 1/2 of\n the maximum step rate shown on the Basic Machine Configuration page.\n@@ -7012,15 +7012,15 @@\n \n Figure 3.5: Parallel Port 2 Setup Page\n The second Parallel port (if selected) can be configured and It\u2019s pins assigned on this page. No step and\n direction signals can be selected. You may select in or out to maximizes the number of input/output\n pins that are available. You may specify the address as a hexadecimal (often 0x378) or as linux\u2019s\n default port number (probably 1).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 91 / 1290\n \n 3.1.7 Axis Configuration\n \n Figure 3.6: Axis Configuration Screen\n \u2022 Motor Steps Per Revolution - The number of full steps per motor revolution. If you know how many\n@@ -7031,15 +7031,15 @@\n If not, enter 1:1.\n \u2022 Leadscrew Pitch - Enter the pitch of the leadscrew here. If you chose Inch units, enter the number\n of threads per inch. If you chose mm units, enter the number of millimeters per revolution (e.g.,\n enter 2 for 2mm/rev). If the machine travels in the wrong direction, enter a negative number here\n instead of a positive number, or invert the direction pin for the axis.\n \u2022 Maximum Velocity - Enter the maximum velocity for the axis in units per second.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 92 / 1290\n \n \u2022 Maximum Acceleration - The correct values for these items can only be determined through experimentation. See Finding Maximum Velocity to set the speed and Finding Maximum Acceleration to\n set the acceleration.\n \u2022 Home Location - The position the machine moves to after completing the homing procedure for this\n axis. For machines without home switches, this is the location the operator manually moves the\n@@ -7068,15 +7068,15 @@\n Pulse rate at max speed determines the BASE_PERIOD. Values above 20000Hz may lead to slow\n response time or even lockups (the fastest usable pulse rate varies from computer to computer)\n \u2022 Axis SCALE - The number that will be used in the INI file [SCALE] setting. This is how many steps\n per user unit.\n \u2022 Test this axis - This will open a window to allow testing for each axis. This can be used after filling\n out all the information for this axis.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 93 / 1290\n \n Figure 3.7: Axis Test\n Test this axis is a basic tester that only outputs step and direction signals to try different values for\n acceleration and velocity.\n Important\n@@ -7099,15 +7099,15 @@\n If the machine did not obviously stall, click the Run button off. The axis now returns to the position\n where it started. If the position is incorrect, then the axis stalled or lost steps during the test. Reduce\n Velocity and start the test again.\n If the machine doesn\u2019t move, stalls, or loses steps, no matter how low you turn Velocity, verify the\n following:\n \u2022 Correct step waveform timings\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 94 / 1290\n \n \u2022 Correct pinout, including Invert on step pins\n \u2022 Correct, well-shielded cabling\n \u2022 Physical problems with the motor, motor coupling, leadscrew, etc.\n Once you have found a speed at which the axis does not stall or lose steps during this testing procedure,\n@@ -7119,15 +7119,15 @@\n Velocity. Once you have found a value at which the axis does not stall or lose steps during this testing\n procedure, reduce it by 10% and use that as the axis Maximum Acceleration.\n \n 3.1.8 Spindle Configuration\n \n Figure 3.8: Spindle Configuration Page\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 95 / 1290\n \n This page only appears when Spindle PWM is chosen in the Parallel Port Pinout page for one of the\n outputs.\n 3.1.8.1 Spindle Speed Control\n If Spindle PWM appears on the pinout, the following information should be entered:\n@@ -7172,29 +7172,29 @@\n Change the spindle speed by entering a different S-number: S800. Valid numbers (at this point) range\n from 1 to 1000.\n For two different S-numbers, measure the actual spindle speed in RPM. Record the S-numbers and\n actual spindle speeds. Run StepConf again. For Speed enter the measured speed, and for PWM enter\n the S-number divided by 1000.\n Because most spindle drivers are somewhat nonlinear in their response curves, it is best to:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 96 / 1290\n \n \u2022 Make sure the two calibration speeds are not too close together in RPM.\n \u2022 Make sure the two calibration speeds are in the range of speeds you will typically use while milling.\n For instance, if your spindle will go from 0 RPM to 8000 RPM, but you generally use speeds from 400\n RPM (10%) to 4000 RPM (100%), then find the PWM values that give 1600 RPM (40%) and 2800 RPM\n (70%).\n \n 3.1.9 Options\n \n Figure 3.9: Advanced Options Configuration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 97 / 1290\n \n \u2022 Include Halui - This will add the Halui user interface component. See the HALUI Chapter for more\n information on.\n \u2022 Include PyVCP - This option adds the PyVCP panel base file or a sample file to work on. See the\n PyVCP Chapter for more information.\n@@ -7219,15 +7219,15 @@\n Before the hard stop there is a limit switch. If the limit switch is encountered during normal operation,\n LinuxCNC shuts down the motor amplifier. The distance between the hard stop and limit switch must\n be long enough to allow an unpowered motor to coast to a stop.\n Before the limit switch there is a soft limit. This is a limit enforced in software after homing. If a MDI\n command or G-code program would pass the soft limit, it is not executed. If a jog would pass the soft\n limit, it is terminated at the soft limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 98 / 1290\n \n The home switch can be placed anywhere within the travel (between hard stops). As long as external\n hardware does not deactivate the motor amplifiers when the limit switch is reached, one of the limit\n switches can be used as a home switch.\n The zero position is the location on the axis that is 0 in the machine coordinate system. Usually the\n@@ -7255,15 +7255,15 @@\n LinuxCNC expects a TRUE value when a switch is closed, so the corresponding Invert box must be\n checked on the pinout configuration page. The pull up resistor show in the diagrams pulls the input\n high until the connection to ground is made and then the input goes low. Otherwise the input might\n float between on and off when the circuit is open. Typically for a parallel port you might use 47 k\u03a9;.\n \n Figure 3.11: Normally Closed Switches (N/C) wiring in series (simplified diagram)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 99 / 1290\n \n Figure 3.12: Normally Open Switches (N/O) wiring in parallel (simplified diagram)\n The following combinations of switches are permitted in StepConf:\n \u2022 Combine home switches for all axes\n \u2022 Combine limit switches for all axes\n@@ -7286,15 +7286,15 @@\n The other is to use PnCconf to build a config that is close to what you want and then hand edit everything to tailor it to your needs. This would be the choice if you need extensive modifications beyond\n PnCconf\u2019s scope or just want to tinker with / learn about LinuxCNC.\n You navigate the wizard pages with the forward, back, and cancel buttons there is also a help button\n that gives some help information about the pages, diagrams and an output page.\n Tip\n PnCconf\u2019s help page should have the most up to date info and has additional details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 100 / 1290\n \n 3.2.1 Step by Step Instructions\n \n Figure 3.13: PnCconf Splash\n \n@@ -7306,15 +7306,15 @@\n PnCconf places a note in those files. It also allows you to select desktop shortcut / launcher options.\n A desktop shortcut will place a folder icon on the desktop that points to your new configuration files.\n Otherwise you would have to look in your home folder under linuxcnc/configs.\n A Desktop launcher will add an icon to the desktop for starting your config directly. You can also\n launch it from the main menu by using the Configuration Selector LinuxCNC found in CNC menu and\n selecting your config name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 101 / 1290\n \n 3.2.3 Basic Machine Information\n \n Figure 3.14: PnCconf Basic\n \n@@ -7326,15 +7326,15 @@\n Tip\n Defaults are not converted when using metric so make sure they are sane values!\n \n Computer Response Time\n The servo period sets the heart beat of the system. Latency refers to the amount of time the\n computer can be longer then that period. Just like a railroad, LinuxCNC requires everything\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 102 / 1290\n \n on a very tight and consistent time line or bad things happen. LinuxCNC requires and uses a\n real time operating system, which just means it has a low latency ( lateness ) response time\n when LinuxCNC requires its calculations and when doing LinuxCNCs calculations it cannot be\n interrupted by lower priority requests (such as user input to screen buttons or drawing etc).\n@@ -7381,15 +7381,15 @@\n of the parport. You can either enter the Linux parallel port numbering system (0,1,or 2) or enter\n the actual address. The address for an on board parport is often 0x0278 or 0x0378 (written in\n hexadecimal) but can be found in the BIOS page. The BIOS page is found when you first start\n your computer you must press a key to enter it (such as F2). On the BIOS page you can find\n the parallel port address and set the mode such as SPP, EPP, etc on some computers this info is\n displayed for a few seconds during start up. For PCI parallel port cards the address can be found\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 103 / 1290\n \n by pressing the parport address search button. This pops up the help output page with a list of\n all the PCI devices that can be found. In there should be a reference to a parallel port device\n with a list of addresses. One of those addresses should work. Not all PCI parallel ports work\n properly. Either type can be selected as in (maximum amount of input pins) or out (maximum\n@@ -7417,15 +7417,15 @@\n \u2022 has no graphical window\n \u2022 look can be changed with custom themes\n QtPlasmaC\n \u2022 fully featured plasmac configuration based on the QtVCP infrastructure.\n \u2022 mouse/keyboard operation or touchscreen operation\n \u2022 no VCP integration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 104 / 1290\n \n 3.2.4 External Configuration\n This page allows you to select external controls such as for jogging or overrides.\n \n Figure 3.15: External Controls\n@@ -7436,15 +7436,15 @@\n switch based OEM joystick.\n Joystick jogging\n Requires a custom device rule to be installed in the system. This is a file that LinuxCNC uses to\n connect to Linux\u2019s device list. PnCconf will help to prepare this file.\n \u2022 Search for device rule will search the system for rules, you can use this to find the name of\n devices you have already built with PnCconf.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 105 / 1290\n \n \u2022 Add a device rule will allow you to configure a new device by following the prompts. You will\n need your device available.\n \u2022 test device allows you to load a device, see its pin names and check its functions with halmeter.\n joystick jogging uses HALUI and hal_input components.\n@@ -7461,15 +7461,15 @@\n PnCconf allows overrides of feed rates and/or spindle speed using a pulse generator (MPG) or\n switches (eg. rotary).\n \n 3.2.5 GUI Configuration\n Here you can set defaults for the display screens, add virtual control panels (VCP), and set some\n LinuxCNC options..\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 106 / 1290\n \n Figure 3.16: GUI Configuration\n \n Front-end GUI Options\n The default options allows general defaults to be chosen for any display screen.\n@@ -7480,15 +7480,15 @@\n Touchy defaults are options specific to Touchy. Most of Touchy\u2019s options can be changed while Touchy\n is running using the preference page. Touchy uses GTK to draw its screen, and GTK supports themes.\n Themes controls the basic look and feel of a program. You can download themes from the net or edit\n them yourself. There are a list of the current themes on the computer that you can pick from. To help\n some of the text to stand out PnCconf allows you to override the Themes\u2019s defaults. The position and\n force max options can be used to move Touchy to a second monitor if the system is capable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 107 / 1290\n \n QtPlasmaC options are specific to QtPlasmac, any common options that are not required will be disabled. If QtPlasmac is selected then the following screen will be a user button setup screen that is\n specific to QtPlasmaC and VCP options will not be available.\n VCP options\n Virtual Control Panels allow one to add custom controls and displays to the screen. AXIS and\n@@ -7528,15 +7528,15 @@\n You can select a GTK theme which sets the basic look and feel of the panel. You Usually want this to\n match the front-end screen. These options will be used if you press the Display sample button. With\n GladeVCP depending on the front-end screen, you can select where the panel will display.\n You can force it to be stand-alone or with AXIS it can be in the center or on the right side, with Touchy\n it can be in the center.\n Defaults and Options\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 108 / 1290\n \n \u2022 Require homing before MDI / Running\n \u2013 If you want to be able to move the machine before homing uncheck this checkbox.\n \u2022 Popup Tool Prompt\n \u2013 Choose between an on screen prompt for tool changes or export standard signal names for\n@@ -7552,15 +7552,15 @@\n custom HAL code to support tool changers.\n \n 3.2.6 Mesa Configuration\n The Mesa configuration pages allow one to utilize different firmwares. On the basic page you selected\n a Mesa card here you pick the available firmware and select what and how many components are\n available.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 109 / 1290\n \n Figure 3.17: Mesa Board Configuration\n Parport address is used only with Mesa parport card, the 7i43. An on board parallel port usually uses\n 0x278 or 0x378 though you should be able to find the address from the BIOS page. The 7i43 requires\n the parallel port to use the EPP mode, again set in the BIOS page. If using a PCI parallel port the\n@@ -7570,15 +7570,15 @@\n \n PDM PWM and 3PWM base frequency sets the balance between ripple and linearity. If using Mesa\n daughter boards the docs for the board should give recommendations.\n \n Important\n It\u2019s important to follow these to avoid damage and get the best performance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 110 / 1290\n \n The 7i33 requires PDM and a PDM base frequency of 6 MHz\n The 7i29 requires PWM and a PWM base frequency of 20 kHz\n The 7i30 requires PWM and a PWM base frequency of 20 kHz\n The 7i40 requires PWM and a PWM base frequency of 50 kHz\n@@ -7604,49 +7604,49 @@\n the I/O setup pages. Only I/O tabs will be shown for available connectors, depending on the Mesa\n board.\n \n 3.2.7 Mesa I/O Setup\n The tabs are used to configure the input and output pins of the Mesa boards. PnCconf allows one to\n create custom signal names for use in custom HAL files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 111 / 1290\n \n Figure 3.18: Mesa I/O C2 Setup\n On this tab with this firmware the components are setup for a 7i33 daughter board, usually used with\n closed loop servos. Note the component numbers of the encoder counters and PWM drivers are not\n in numerical order. This follows the daughter board requirements.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 112 / 1290\n \n Figure 3.19: Mesa I/O C3 Setup\n On this tab all the pins are GPIO. Note the 3 digit numbers - they will match the HAL pin number.\n GPIO pins can be selected as input or output and can be inverted.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 113 / 1290\n \n Figure 3.20: Mesa I/O C4 Setup\n On this tab there are a mix of step generators and GPIO. Step generators output and direction pins\n can be inverted. Note that inverting a Step Gen-A pin (the step output pin) changes the step timing.\n It should match what your controller expects.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3.2.8 Parallel port configuration\n \n The parallel port can be used for simple I/O similar to Mesa\u2019s GPIO pins.\n \n 114 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 115 / 1290\n \n 3.2.9 Axis Configuration\n \n Figure 3.21: Axis Drive Configuration\n This page allows configuring and testing of the motor and/or encoder combination. If using a servo\n@@ -7658,15 +7658,15 @@\n Handbook 1 standards or AXIS graphical display will not make much sense. Hopefully the help\n page and diagrams can help figure this out. Note that axis directions are based on TOOL movement not table movement. There is no acceleration ramping with the open loop test so start with\n lower DAC numbers. By moving the axis a known distance one can confirm the encoder scaling.\n The encoder should count even without the amp enabled depending on how power is supplied to\n the encoder.\n 1 \u201daxis nomenclature\u201d in the chapter \u201dNumerical Control\u201d in the \u201dMachinery\u2019s Handbook\u201d published by Industrial Press.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 116 / 1290\n \n Warning\n If the motor and encoder do not agree on counting direction then the servo will run away when\n using PID control.\n \n@@ -7712,15 +7712,15 @@\n \u2022 Note that we want raw output such that our measured result is identical to the commanded output.\n This means\n \u2013 cmd=a*raw+b\n \u2013 raw=(cmd-b)/a\n \u2022 As a result, the a and b coefficients from the linear fit can be used as the scale and offset for the\n controller directly.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 117 / 1290\n \n MAX OUTPUT\n 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\n scaling to raw output units. The value is applied symmetrically to both the plus and the minus\n side.\n@@ -7737,25 +7737,25 @@\n speed.\n Brushless Motor Control\n These options are used to allow low level control of brushless motors using special firmware and\n daughter boards. It also allows conversion of HALL sensors from one manufacturer to another.\n It is only partially supported and will require one to finish the HAL connections. Contact the\n mail-list or forum for more help.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 118 / 1290\n \n Figure 3.22: Axis Scale Calculation\n The scale settings can be directly entered or one can use the calculate scale button to assist. Use the\n check boxes to select appropriate calculations. Note that pulley teeth requires the number of teeth\n not the gear ratio. Worm turn ratio is just the opposite it requires the gear ratio. If your happy with\n the scale press apply otherwise push cancel and enter the scale directly.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 119 / 1290\n \n Figure 3.23: Axis Configuration\n Also refer to the diagram tab for two examples of home and limit switches. These are two examples\n of many different ways to set homing and limits.\n \n@@ -7766,15 +7766,15 @@\n Remember positive and negative directions refer to the TOOL not the table as per the Machinists\n handbook.\n On a typical knee or bed mill\n \u2022 when the TABLE moves out that is the positive Y direction\n \u2022 when the TABLE moves left that is the positive X direction\n \u2022 when the TABLE moves down that is the positive Z direction\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 120 / 1290\n \n \u2022 when the HEAD moves up that is the positive Z direction\n On a typical lathe\n \u2022 when the TOOL moves right, away from the chuck\n \u2022 that is the positive Z direction\n@@ -7819,15 +7819,15 @@\n will be zero.\n (machine) ORIGIN\n The Origin is the MACHINE zero point. (not the zero point you set your cutter / material at).\n LinuxCNC uses this point to reference everything else from. It should be inside the software\n limits. LinuxCNC uses the home switch location to calculate the origin position (when using\n home switches or must be manually set if not using home switches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 121 / 1290\n \n Travel distance\n This is the maximum distance the axis can travel in each direction. This may or may not be able\n to be measured directly from origin to limit switch. The positive and negative travel distances\n should add up to the total travel distance.\n@@ -7867,29 +7867,29 @@\n Use Compensation File\n Allows specifying a Comp filename and type. Allows sophisticated compensation. See AXIS\n Section of the INI chapter.\n Use Backlash Compensation\n Allows setting of simple backlash compensation. Can not be used with Compensation File. See\n AXIS Section of the INI chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 122 / 1290\n \n Figure 3.24: AXIS Help Diagram\n The diagram should help to demonstrate an example of limit switches and standard axis movement\n directions. In this example the Z axis was two limit switches, the positive switch is shared as a home\n switch. The MACHINE ORIGIN (zero point) is located at the negative limit. The left edge of the carriage is the negative trip pin and the right the positive trip pin. We wish the FINAL HOME POSITION\n to be 4 inches away from the ORIGIN on the positive side. If the carriage was moved to the positive\n limit we would measure 10 inches between the negative limit and the negative trip pin.\n \n 3.2.10 Spindle Configuration\n If you select spindle signals then this page is available to configure spindle control.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 123 / 1290\n \n Tip\n Many of the option on this page will not show unless the proper option was selected on previous\n pages!\n \n@@ -7901,15 +7901,15 @@\n \u2022 If you picked a VCP spindle display option then spindle-at-speed scale and filter settings may be\n shown.\n \u2022 Spindle-at-speed allows LinuxCNC to wait till the spindle is at the requested speed before moving\n the axis. This is particularly handy on lathes with constant surface feed and large speed diameter\n changes. It requires either encoder feedback or a digital spindle-at-speed signal typically connected\n to a VFD drive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 124 / 1290\n \n \u2022 If using encoder feedback, you may select a spindle-at-speed scale setting that specifies how close\n the actual speed must be to the requested speed to be considered at-speed.\n \u2022 If using encoder feedback, the VCP speed display can be erratic - the filter setting can be used to\n smooth out the display. The encoder scale must be set for the encoder count / gearing used.\n@@ -7924,25 +7924,25 @@\n HALUI Chapter for more info on using custom halcmds. There are several ladder program options.\n The Estop program allows an external ESTOP switch or the GUI frontend to throw an Estop. It also\n has a timed lube pump signal. The Z auto touch-off is with a touch-off plate, the GladeVCP touch-off\n button and special HALUI commands to set the current user origin to zero and rapid clear. The serial\n modbus program is basically a blank template program that sets up ClassicLadder for serial modbus.\n See the ClassicLadder Chapter in the manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 125 / 1290\n \n Figure 3.26: PnCconf, advanced options\n \n 3.2.12 HAL Components\n On this page you can add additional HAL components you might need for custom HAL files. In this\n way one should not have to hand edit the main HAL file, while still allowing user needed components.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 126 / 1290\n \n Figure 3.27: HAL Components\n The first selection is components that pncconf uses internally. You may configure pncconf to load\n extra instances of the components for your custom HAL file.\n Select the number of instances your custom file will need, PnCconf will add what it needs after them.\n@@ -7953,15 +7953,15 @@\n heading Thread command. The components will be added to the thread between reading of\n inputs and writing of outputs, in the order you write them in the thread command.\n \n 3.2.13 Advanced Usage Of PnCconf\n PnCconf does its best to allow flexible customization by the user. PnCconf has support for custom\n signal names, custom loading of components, custom HAL files and custom firmware.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 127 / 1290\n \n There are also signal names that PnCconf always provides regardless of options selected, for user\u2019s\n custom HAL files With some thought most customizations should work regardless if you later select\n different options in PnCconf.\n Eventually if the customizations are beyond the scope of PnCconf\u2019s frame work you can use PnCconf\n@@ -7993,15 +7993,15 @@\n Loading Custom Firmware\n PnCconf searches for firmware on the system and then looks for the XML file that it can convert\n to what it understands. These XML files are only supplied for officially released firmware from\n the LinuxCNC team. To utilize custom firmware one must convert it to an array that PnCconf\n understands and add its file path to PnCconf\u2019s preference file. By default this path searches the\n desktop for a folder named custom_firmware and a file named firmware.py.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 128 / 1290\n \n The hidden preference file is in the user\u2019s home file, is named .pncconf-preferences and require one\n to select show hidden files in your file manager to see and edit it or on the command line you use ls\n with the -a option. The contents of this file can be seen when you first load PnCconf - press the help\n button and look at the output page.\n@@ -8012,15 +8012,15 @@\n \u2022 custom.hal is for HAL commands that don\u2019t have to be run after the GUI frontend loads. It is\n run after the configuration-named HAL file.\n \u2022 custom_postgui.hal is for commands that must be run after AXIS loads or a standalone PyVCP\n display loads.\n \u2022 custom_gvcp.hal is for commands that must be run after GladeVCP is loaded.\n \u2022 shutdown.hal is for commands to run when LinuxCNC shuts down in a controlled manner.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 129 / 1290\n \n Chapter 4\n \n Configuration\n 4.1 Integrator Concepts\n@@ -8040,15 +8040,15 @@\n \u2022 /home/fred/linuxcnc/nc_files\n \u2022 /home/fred/linuxcnc/configs/mill\n \u2013 /home/fred/linuxcnc/configs/mill/mill.ini\n \u2013 /home/fred/linuxcnc/configs/mill/mill.hal\n \u2013 /home/fred/linuxcnc/configs/mill/mill.var\n \u2013 /home/fred/linuxcnc/configs/mill/tool.tbl\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 130 / 1290\n \n 4.1.1.2 Command Line\n If you run LinuxCNC from the command line and specify the name and location of the INI file the file\n locations can be in a different place. To view the options for running LinuxCNC from the command\n line run linuxcnc -h.\n@@ -8083,15 +8083,15 @@\n drive requirements affect the shortest period you can use.\n Worst case latencies might only happen a few times a minute, and the odds of bad latency happening\n just as the motor is changing direction are low. So you can get very rare errors that ruin a part every\n once in a while and are impossible to troubleshoot.\n 1 This section refers to using stepgen, LinuxCNC\u2019s built-in step generator. Some hardware devices have their own step\n generator and do not use LinuxCNC\u2019s built-in one. In that case, refer to your hardware manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 131 / 1290\n \n The simplest way to avoid this problem is to choose a BASE_PERIOD that is the sum of the longest timing requirement of your drive, and the worst case latency of your computer. This is not always the best\n choice. For example, if you are running a drive with a 20 \u00b5s direction signal hold time requirement,\n and your latency test said you have a maximum latency of 11 \u00b5s , then if you set the BASE_PERIOD\n to 20+11 = 31 \u00b5s you get a not-so-nice 32,258 steps per second in one mode and 16,129 steps per\n@@ -8122,15 +8122,15 @@\n system might. These differences exist because servos are a closed loop system, unlike stepper motors\n which are generally run open loop. What does closed loop mean? Let\u2019s look at a simplified diagram\n of how a servomotor system is connected.\n 2 steplen refers to a parameter that adjusts the performance of LinuxCNC\u2019s built-in step generator, stepgen, which is a HAL\n component. This parameter adjusts the length of the step pulse itself. Keep reading, all will be explained eventually.\n 3 dirhold refers to a parameter that adjusts the length of the direction hold time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 132 / 1290\n \n Figure 4.1: Servo Loop\n This diagram shows that the input signal (and the feedback signal) drive the summing amplifier, the\n summing amplifier drives the power amplifier, the power amplifier drives the motor, the motor drives\n the load (and the feedback device), and the feedback device (and the input signal) drive the motor.\n@@ -8148,15 +8148,15 @@\n They are three common mathematical techniques that are applied to the task of getting a working\n process to follow a set point. In the case of LinuxCNC the process we want to control is actual axis\n position and the set point is the commanded axis position.\n 4 If it helps, the closest equivalent to this in the digital world are state machines, sequential machines and so forth, where\n what the outputs are doing now depends on what the inputs (and the outputs) were doing before. If it doesn\u2019t help, then\n nevermind.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 133 / 1290\n \n Figure 4.2: PID Loop\n By tuning the three constants in the PID controller algorithm, the controller can provide control action\n designed for specific process requirements. The response of the controller can be described in terms\n of the responsiveness of the controller to an error, the degree to which the controller overshoots the\n@@ -8184,15 +8184,15 @@\n 4.1.4.4 Derivative term\n The rate of change of the process error is calculated by determining the slope of the error over time\n (i.e., its first derivative with respect to time) and multiplying this rate of change by the derivative gain.\n The derivative term slows the rate of change of the controller output and this effect is most noticeable\n close to the controller set point. Hence, derivative control is used to reduce the magnitude of the\n overshoot produced by the integral component and improve the combined controller-process stability.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 134 / 1290\n \n 4.1.4.5 Loop tuning\n If the PID controller parameters (the gains of the proportional, integral and derivative terms) are\n chosen incorrectly, the controlled process input can be unstable, i.e., its output diverges, with or\n without oscillation, and is limited only by saturation or mechanical breakage. Tuning a control loop\n@@ -8229,15 +8229,15 @@\n stepping).\n Latency is far more important than CPU speed. A lowly Pentium II that responds to interrupts within\n 10 microseconds each and every time can give better results than the latest and fastest P4 Hyperthreading beast.\n The CPU isn\u2019t the only factor in determining latency. Motherboards, video cards, USB ports, and a\n number of other things can hurt the latency. The best way to find out what you are dealing with is to\n run the latency test.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 135 / 1290\n \n Generating step pulses in software has one very big advantage - it\u2019s free. Just about every PC has a\n parallel port that is capable of outputting step pulses that are generated by the software. However,\n software step pulses also have some disadvantages:\n \u2022 limited maximum step rate\n@@ -8261,15 +8261,15 @@\n \n This will start the latency test with a base-thread period of 50uS and a servo-thread period of 1mS.\n For available options, on the command line enter:\n latency-test -h\n \n After starting a latency test you should see something like this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 136 / 1290\n \n Figure 4.3: HAL Latency Test\n While the test is running, you should abuse the computer. Move windows around on the screen. Surf\n the web. Copy some large files around on the disk. Play some music. Run an OpenGL program such\n as glxgears. The idea is to put the PC through its paces while the latency test checks to see what the\n@@ -8293,15 +8293,15 @@\n (several milliseconds) when using the onboard video. But a $5 used video card solved the problem.\n LinuxCNC does not require bleeding edge hardware.\n \n For more information on stepper tuning see the Stepper Tuning Chapter.\n Additional command line tools are available for examining latency when LinuxCNC is not\n running.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 137 / 1290\n \n 4.2.2.2 Latency Plot\n latency-plot makes a strip chart recording for a base and a servo thread. It may be useful to see spikes\n in latency when other applications are started or used. Usage:\n latency-plot --help\n@@ -8343,15 +8343,15 @@\n 25000, min: 5000)\n (servo thread interval, default: 1000000, min: 25000)\n (base bin size, default: 100\n (servo bin size, default: 100\n (base bins, default: 200\n (servo bins, default: 200\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n --logscale\n --text\n --show\n --nobase\n --verbose\n --nox\n@@ -8380,15 +8380,15 @@\n and they all may benefit from tuning for optimal latency.\n A primary goal in tuning the system for LinuxCNC is to reserve a CPU for the exclusive use of LinuxCNC\u2019s realtime tasks, so that other tasks (both user programs and kernel threads) do not interfere\n with LinuxCNC\u2019s access to that CPU.\n When specific tuning options are believed to be universally helpful LinuxCNC does this tuning automatically at startup, but many tuning options are machine-specific and cannot be done automatically.\n The person installing LinuxCNC will need to experimentally determine the optimal tuning for their\n system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 139 / 1290\n \n 4.2.3.1 Tuning the BIOS for latency\n PC BIOSes vary wildly in their latency behavior.\n Tuning the BIOS is tedious because you have to reboot the computer, make one small tweak in the\n BIOS, boot Linux, and run the latency test (potentially for a long time) to see what effects your BIOS\n@@ -8424,15 +8424,15 @@\n parallel port that is capable of outputting step pulses that are generated by the software. However,\n software step pulses also have some disadvantages:\n \u2022 limited maximum step rate\n \u2022 jitter in the generated pulses\n \u2022 loads the CPU\n This chapter has some steps that can help you get the best results from software generated steps.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 140 / 1290\n \n 4.3.1.1 Run a Latency Test\n The CPU is not the only factor determining latency. Motherboards, graphics cards, USB ports and\n many other things can degrade it. The best way to know what to expect from a PC is to run the RT\n latency tests.\n@@ -8472,15 +8472,15 @@\n Step Pulse \u201d0\u201d Time: 2.0 \u00b5s min (Step on rising edge)\n Step Pulse \u201d1\u201d Time: 1.0 \u00b5s min\n Direction Setup:\n 200 ns (0.2 \u00b5s) before step pulse rising edge\n 200 ns (0.2 \u00b5s) hold after step pulse rising edge\n From the Xylotex datasheet:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 141 / 1290\n \n Minimum DIR setup time before rising edge of STEP Pulse 200 ns Minimum\n DIR hold time after rising edge of STEP pulse 200 ns\n Minimum STEP pulse high time 2.0 \u00b5s\n Minimum STEP pulse low time 1.0 \u00b5s\n@@ -8525,15 +8525,15 @@\n will lock up. If you are aiming for periods of less than 25 \u00b5s, you should start at 25 \u00b5s or more, run\n LinuxCNC, and see how things respond. If all is well, you can gradually decrease the period. If the\n mouse pointer starts getting sluggish, and everything else on the PC slows down, your period is a\n little too short. Go back to the previous value that let the computer run smoothly.\n In this case, suppose you started at 25 \u00b5s, trying to get to 13 \u00b5s, but you find that around 16 \u00b5s is the\n limit - any less and the computer doesn\u2019t respond very well. So you use 16 \u00b5s. With a 16 \u00b5s period and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 142 / 1290\n \n 11 \u00b5s latency, the shortest output time will be 16-11 = 5 \u00b5s. The drive only needs 2 \u00b5s, so you have\n some margin. Margin is good - you don\u2019t want to lose steps because you cut the timing too close.\n What is the maximum step rate? Remember, two periods to make a step. You settled on 16 \u00b5s for the\n period, so a step takes 32 \u00b5s. That works out to a not bad 31,250 steps per second.\n@@ -8575,15 +8575,15 @@\n step rate that you will be able to generate.\n I\u2019ve added a few things to the spreadsheet to calculate max speed and stepper electrical calculations.\n \n 4.4 INI Configuration\n 4.4.1 The INI File Components\n A typical INI file follows a rather simple layout that includes;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 143 / 1290\n \n \u2022 comments\n \u2022 sections\n \u2022 variables\n Each of these elements is separated on single lines. Each end of line or newline character creates a\n@@ -8622,15 +8622,15 @@\n \u2022 [RS274NGC] settings used by the G-code interpreter\n \u2022 [EMCMOT] settings used by the real time motion controller\n \u2022 [TASK] settings used by the task controller\n \u2022 [HAL] specifies .hal files\n \u2022 [HALUI] MDI commands used by HALUI\n \u2022 [APPLICATIONS] Other applications to be started by LinuxCNC\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 144 / 1290\n \n \u2022 [TRAJ] additional settings used by the real time motion controller\n \u2022 [JOINT_n] individual joint variables\n \u2022 [AXIS_l] individual axis variables\n \u2022 [KINS] kinematics variables\n@@ -8668,15 +8668,15 @@\n TYPE = LINEAR\n ...\n SCALE = 16000\n \n To introduce a custom section with its own variables, add the section and variables to the INI file.\n Custom Section Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 145 / 1290\n \n [PROBE]\n Z_FEEDRATE = 50\n Z_OFFSET = 12\n Z_SAFE_DISTANCE = -10\n@@ -8716,15 +8716,15 @@\n #INCLUDE /home/myusername/myincludes/display.inc\n #INCLUDE ~/linuxcnc/myincludes/rs274ngc.inc\n \n The #INCLUDE directives are supported for one level of expansion only \u2014 an included file may not\n include additional files. The recommended file extension is .inc. Do not use a file extension of .ini for\n included files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 146 / 1290\n \n 4.4.2 INI File Sections\n 4.4.2.1 [EMC] Section\n \u2022 VERSION = 1.1 - The version number for the configuration. Any value other than 1.1 will cause the\n configuration checker to run and try to update the configuration to the new style joint axes type of\n@@ -8757,15 +8757,15 @@\n value.\n \u2022 CONE_BASESIZE = .25 - Override the default cone/tool base size of .5 in the graphics display.\n \u2022 MAX_FEED_OVERRIDE = 1.2 - The maximum feed override the user may select. 1.2 means 120% of\n the programmed feed rate.\n \u2022 MIN_SPINDLE_OVERRIDE = 0.5 - The minimum spindle override the user may select. 0.5 means 50%\n of the programmed spindle speed. (This is used to set the minimum spindle speed.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 147 / 1290\n \n \u2022 MIN_SPINDLE_0_OVERRIDE = 0.5 - The minimum spindle override the user may select. 0.5 means\n 50% of the programmed spindle speed. (This is used to set the minimum spindle speed.) On multi\n spindle machine there will be entries for each spindle number. Only used by the QtVCP based user\n interfaces.\n@@ -8801,15 +8801,15 @@\n powered CPU may see improvement with a longer setting. Usually the default is fine.\n \u2022 PREVIEW_TIMEOUT = 5 - Timeout (in seconds) for loading graphical preview of G-code. Currently\n AXIS only.\n Note\n The following [DISPLAY] items are used by GladeVCP and PyVCP, see the embedding a tab section of\n the GladeVCP Chapter or the PyVCP Chapter for more information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 148 / 1290\n \n \u2022 EMBED_TAB_NAME = GladeVCP demo\n \n \u2022 EMBED_TAB_COMMAND = halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID\\} -u ./glad\n ./gladevcp/manual-example.ui\n@@ -8847,15 +8847,15 @@\n \u2022 LATHE = 1 - Any non-empty value (including \u201d0\u201d) causes axis to use \u201dlathe mode\u201d with a top view\n and with Radius and Diameter on the DRO.\n \u2022 BACK_TOOL_LATHE = 1 - Any non-empty value (including \u201d0\u201d) causes axis to use \u201dback tool lathe\n mode\u201d with inverted X axis.\n \u2022 FOAM = 1 - Any non-empty value (including \u201d0\u201d) causes axis to change the display for foam-cutter\n mode.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 149 / 1290\n \n \u2022 GEOMETRY = XYZABCUVW - Controls the preview and backplot of motion. This item consists of a\n sequence of axis letters and control characters, optionally preceded with a \u201d-\u201d sign:\n 1. The letters X, Y, Z specify translation along the named coordinate.\n 2. The letters A, B, C specify rotation about the corresponding axes X, Y, Z.\n@@ -8897,15 +8897,15 @@\n configurations on one computer.\n \u2022 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\n third, and left and right bracket to the fourth. If unspecified, the default is determined from the\n [TRAJ]COORDINATES, [DISPLAY]LATHE and [DISPLAY]FOAM values.\n \u2022 JOG_INVERT = - For each axis letter, the jog direction is inverted. The default is \u201dX\u201d for lathes and\n blank otherwise.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 150 / 1290\n \n Note\n The settings for JOG_AXES and JOG_INVERT apply to world mode jogging by axis coordinate letter\n and are in effect while in world mode after successful homing. When operating in joint mode prior\n to homing, keyboard jog keys are assigned in a fixed sequence: left/right: joint0, up/down: joint1,\n@@ -8944,15 +8944,15 @@\n The program file associated with an extension must have either the full path to the program or be\n located in a directory that is on the system path.\n \n It is also possible to specify an interpreter:\n PROGRAM_EXTENSION = .py Python Script\n py = python\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 151 / 1290\n \n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle. Many more G-code generators are on the LinuxCNC Wiki site\n https://wiki.linuxcnc.org/.\n@@ -8994,15 +8994,15 @@\n \u2022 PARAMETER_FILE = myfile.var - The file located in the same directory as the INI file which contains\n the parameters used by the interpreter (saved between runs).\n \u2022 ORIENT_OFFSET = 0 - A float value added to the R word parameter of an M19 Orient Spindle operation. Used to define an arbitrary zero position regardless of encoder mount orientation.\n \u2022 RS274NGC_STARTUP_CODE = G17 G20 G40 G49 G64 P0.001 G80 G90 G92.1 G94 G97 G98 - A string\n of NC codes that the interpreter is initialized with. This is not a substitute for specifying modal Gcodes at the top of each NGC file, because the modal codes of machines differ, and may be changed\n by G-code interpreted earlier in the session.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 152 / 1290\n \n \u2022 SUBROUTINE_PATH = ncsubroutines:/tmp/testsubs:lathesubs:millsubs - Specifies a colon (:)\n separated list of up to 10 directories to be searched when single-file subroutines are specified in Gcode. These directories are searched after searching [DISPLAY]PROGRAM_PREFIX (if it is specified)\n and before searching [WIZARD]WIZARD_ROOT (if specified). The paths are searched in the order\n that they are listed. The first matching subroutine file found in the search is used. Directories are\n@@ -9054,15 +9054,15 @@\n \u2022 OWORD_WARNONLY = 0 (Default: 0)\n Warn rather than error in case of errors in O-word subroutines.\n \u2022 DISABLE_G92_PERSISTENCE = 0 (Default: 0) Allow to clear the G92 offset automatically when config\n start-up.\n \u2022 DISABLE_FANUC_STYLE_SUB = 0 (Default: 0) If there is reason to disable Fanuc subroutines set it to\n 1.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 153 / 1290\n \n Note\n The above six options were controlled by the FEATURES bitmask in versions of LinuxCNC prior to 2.8.\n This INI tag will no longer work.\n For reference:\n@@ -9097,15 +9097,15 @@\n (home_parms) may be included if supported by the named module. The setting may be overridden\n from the command line using the -m option ($ linuxcnc -h).\n 4.4.2.6 [TASK] Section\n \u2022 TASK = milltask - Specifies the name of the task executable. The task executable does various\n things, such as\n \u2013 communicate with the UIs over NML,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 154 / 1290\n \n \u2013 communicate with the realtime motion planner over non-HAL shared memory, and\n \u2013 interpret G-code. Currently there is only one task executable that makes sense for 99.9% of users,\n milltask.\n \u2022 CYCLE_TIME = 0.010 - The period, in seconds, at which TASK will run. This parameter affects the\n@@ -9143,15 +9143,15 @@\n HALFILE = LIB:halcheck.tcl [nopopup]\n \n Note\n The LIB:halcheck.tcl line should be the last [HAL]HALFILE. Specify the nopopup option to suppress\n the popup message and allow immediate starting. Connections made using a POSTGUI_HALFILE are\n not checked.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 155 / 1290\n \n \u2022 TWOPASS = ON - Use twopass processing for loading HAL components. With TWOPASS processing,\n lines of files specified in [HAL]HALFILE are processed in two passes. In the first pass (pass0), all\n HALFILES are read and multiple appearances of loadrt and loadusr commands are accumulated.\n These accumulated load commands are executed at the end of pass0. This accumulation allows\n@@ -9190,15 +9190,15 @@\n (first character is / or ~), a relative filename (first characters of filename are ./), or as a file in the\n INI file directory. If no executable file is found using these names, then the user search PATH is\n used to find the application.\n Examples:\n \u2013 Simulate inputs to HAL pins for testing (using sim_pin \u2014 a simple GUI to set inputs to parameters,\n unconnected pins, or signals with no writers):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 156 / 1290\n \n APP = sim_pin motion.probe-input halui.abort motion.analog-in-00\n \n \u2013 Invoke halshow with a previuosly saved watchlist. Since LinuxCNC sets the working directory to\n the directory for the INI file, you can refer to files in that directory (example: my.halshow):\n@@ -9241,15 +9241,15 @@\n 10 / (2.0 * 100 * 0.001) = 50 segments to always reach maximum velocity along the fastest axis.\n In practice, this number isn\u2019t that important to tune, since the look ahead rarely needs the full depth\n unless you have lots of very short segments. If during testing, you notice strange slowdowns and\n can\u2019t figure out where they come from, first try increasing this depth using the formula above.\n If you still see strange slowdowns, it may be because you have short segments in the program. If\n this is the case, try adding a small tolerance for Naive CAM detection. A good rule of thumb is this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 157 / 1290\n \n # min_length ~= v_req * t_c\n # where:\n # v_req = desired velocity in UU / sec\n # t_c = servo period (seconds)\n@@ -9294,15 +9294,15 @@\n Finally, no amount of tweaking will speed up a tool path with lots of small, tight corners, since you\u2019re\n limited by cornering acceleration.\n \u2022 SPINDLES = 3 - The number of spindles to support. It is imperative that this number matches the\n \u201dnum_spindles\u201d parameter passed to the motion module.\n \u2022 COORDINATES = X Y Z - The names of the axes being controlled. Only X, Y, Z, A, B, C, U, V, W are\n valid. Only axes named in COORDINATES are accepted in G-code. It is permitted to write an axis\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 158 / 1290\n \n name more than once (e.g., X Y Y Z for a gantry machine). For the common trivkins kinematics,\n joint numbers are assigned in sequence according to the trivkins parameter coordinates=. So, for\n trivkins coordinates=xz, joint0 corresponds to X and joint1 corresponds to Z. See the kinematics\n man page ($ man kins) for information on trivkins and other kinematics modules.\n@@ -9345,15 +9345,15 @@\n \u2022 TPMOD = alternate_trajectory_planning module [tp_parms=value]\n The TPMOD variable is optional. If specified, use a specified (user-built) module instead of the default\n (tpmod). Module parameters (tp_parms) may be included if supported by the named module. The\n setting may be overridden from the command line using the -t option ($ linuxcnc -h).\n \u2022 NO_PROBE_JOG_ERROR = 0 - Allow to bypass probe tripped check when you jog manually.\n \u2022 NO_PROBE_HOME_ERROR = 0 - Allow to bypass probe tripped check when homing is in progress.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 159 / 1290\n \n 4.4.2.11 [KINS] Section\n \u2022 JOINTS = 3 - Specifies the number of joints (motors) in the system. For example, a trivkins XYZ\n machine with a single motor for each axis has 3 joints. A gantry machine with one motor on each\n of two of the axes, and two motors on the third axis, has 4 joints. (This config variable may be used\n@@ -9391,15 +9391,15 @@\n offsets:\n axis..eoffset-enable\n axis..eoffset-count\n axis..eoffset-scale\n \n See the chapter: External Axis Offsets for usage information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 160 / 1290\n \n 4.4.2.13 [JOINT_] Sections\n The specifies the joint number 0 \u2026 (num_joints-1) The value of num_joints is set by [KINS]JOINTS=.\n The [JOINT_0], [JOINT_1], etc. sections contains general parameters for the individual components\n in the joint control module. The joint section names begin numbering at 0, and run through the number\n@@ -9437,15 +9437,15 @@\n by a space. The first value is the nominal value (the commanded position). The second and third\n values depend on the setting of COMP_FILE_TYPE. Points in between nominal values are interpolated\n between the two nominals. Compensation files must start with the smallest nominal and be in\n ascending order to the largest value of nominals. File names are case sensitive and can contain\n letters and/or numbers. Currently the limit inside LinuxCNC is for 256 triplets per joint.\n If COMP_FILE is specified for a joint, BACKLASH is not used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 161 / 1290\n \n \u2022 COMP_FILE_TYPE = 0 or 1 - Specifies the type of compensation file. The first value is the nominal\n (commanded) position for both types.\n A COMP_FILE_TYPE must be specified for each COMP_FILE.\n \u2013 Type 0: The second value specifies the actual position as the joint is moving in the positive direction (increasing value). The third value specifies the actual position as the joint is moving in the\n@@ -9487,15 +9487,15 @@\n produce a ramp of error trip points. You could think of this as a graph where one dimension is speed\n and the other is permitted following error. As speed increases the amount of following error also\n increases toward the FERROR value.\n \u2022 FERROR = 1.0 - FERROR is the maximum allowable following error, in machine units. If the difference\n 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\n file, velocity-proportional following errors are used. Here, the maximum allowable following error\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 162 / 1290\n \n is proportional to the speed, with FERROR applying to the rapid rate set by [TRAJ]MAX_VELOCITY, and\n proportionally smaller following errors for slower speeds. The maximum allowable following error\n will always be greater than MIN_FERROR. This prevents small following errors for stationary axes\n from inadvertently aborting motion. Small following errors will always be present due to vibration,\n@@ -9535,15 +9535,15 @@\n Additional sequences may be specified with numbers increasing by 1 (in absolute value). Skipping\n of sequence numbers is not allowed. If a HOME_SEQUENCE is omitted, the joint will not be homed\n by the \u201dHome All\u201d function. More than one joint can be homed at the same time by specifying the\n same sequence number for more than one joint. A negative sequence number is used to defer the\n final move for all joints having that (negative or positive) sequence number. For additional info, see:\n HOME SEQUENCE.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 163 / 1290\n \n \u2022 VOLATILE_HOME = 0 - When enabled (set to 1) this joint will be unhomed if the Machine Power is\n off or if E-Stop is on. This is useful if your machine has home switches and does not have position\n feedback such as a step and direction driven machine.\n These parameters are relevant to joints controlled by servos.\n@@ -9577,15 +9577,15 @@\n for the motor amplifier. The units on the I gain are volts per machine unit second, e.g.,\n \u2022 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.\n The units on the D gain are volts per machine unit per second, e.g.,\n \u2022 FF0 = 0 - The 0th order feed forward gain. This number is multiplied by the commanded position,\n resulting in a contribution to the computed voltage for the motor amplifier. The units on the FF0\n gain are volts per machine unit, e.g.,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 164 / 1290\n \n \u2022 FF1 = 0 - The 1st order feed forward gain. This number is multiplied by the change in commanded\n position per second, resulting in a contribution to the computed voltage for the motor amplifier. The\n units on the FF1 gain are volts per machine unit per second, e.g.,\n \u2022 FF2 = 0 - The 2nd order feed forward gain. This number is multiplied by the change in commanded\n@@ -9625,15 +9625,15 @@\n -10\n -9\n \n Measured\n -9.93\n -8.83\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 165 / 1290\n \n Table 4.1: (continued)\n Raw\n 0\n 1\n@@ -9672,15 +9672,15 @@\n section. For stepper systems, this is the number of step pulses issued per machine unit. For a linear\n joint one machine unit will be equal to the setting of LINEAR_UNITS. For an angular joint one unit is\n equal to the setting in ANGULAR_UNITS. For servo systems, this is the number of feedback pulses per\n machine unit. A second number, if specified, is ignored.\n For example, on a 1.8 degree stepper motor with half-stepping, and 10 revs/inch gearing, and desired\n machine units of inch, we have:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 166 / 1290\n \n Note\n Old INI and HAL files used INPUT_SCALE for this value.\n \n \u2022 ENCODER_SCALE = 20000 (Optionally used in PnCconf built configs) - Specifies the number of pulses\n@@ -9717,15 +9717,15 @@\n must not be run in reverse. In this context \u201dmax\u201d refers to the absolute magnitude of the spindle\n speed.\n \u2022 MIN_REVERSE_VELOCITY = 3000 \u0300This setting is equivalent to MIN_FORWARD_VELOCITY but for reverse spindle rotation. It will default to the MIN_FORWARD_VELOCITY if omitted.\n \u2022 INCREMENT = 200 Sets the step size for spindle speed increment / decrement commands. This can\n have a different value for each spindle. This setting is effective with AXIS and Touchy but note that\n some control screens may handle things differently.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 167 / 1290\n \n \u2022 HOME_SEARCH_VELOCITY = 100 - FIXME: Spindle homing not yet working. Sets the homing speed\n (rpm) for the spindle. The spindle will rotate at this velocity during the homing sequence until the\n spindle index is located, at which point the spindle position will be set to zero. Note that it makes\n no sense for the spindle home position to be any value other than zero, and so there is no provision\n@@ -9763,15 +9763,15 @@\n absolute encoders. Homing seems simple enough - just move each joint to a known location, and set\n LinuxCNC\u2019s internal variables accordingly. However, different machines have different requirements,\n and homing is actually quite complicated.\n Note\n While it is possible to use LinuxCNC without homing switches/home procedures or limit switches, It\n defeats the extra security of the soft limits.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 168 / 1290\n \n 4.5.2 Prerequisite\n Homing relies on some fundamental machine assumptions.\n \u2022 The negative and positive directions are based on Tool Movement which can be different from the\n actual machine movement. I.e., on a mill typically the table moves rather then the tool.\n@@ -9798,15 +9798,15 @@\n While it is possible to use LinuxCNC with the G53 machine origin outside the soft machine limits, if\n you use G28 or G30 without setting the parameters it goes to the origin by default. This would trip\n the limit switches before getting to position.\n \n 4.5.3 Separate Home Switch Example Layout\n This example shows minimum and maximum limit switches with a separate home switch.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 169 / 1290\n \n Figure 4.6: Demonstrative Separate Switch Layout\n \u2022 A is the negative soft limit\n \u2022 B is the G53 machine coordinate Origin\n \u2022 C is the home switch trip point\n@@ -9825,15 +9825,15 @@\n Homing sets the G53 coordinate system, while the machine origin (zero point) can be anywhere,\n setting the zero point at the negative soft limit makes all G53 coordinates positive, which is probably\n easiest to remember. Do this by setting MIN_LIMIT = 0 and make sure MAX_LIMIT is positive.\n \n 4.5.4 Shared Limit/Home Switch Example Layout\n This example shows a maximum limit switch and a combined minimum limit/home switch.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 170 / 1290\n \n Figure 4.7: Demonstrative Shared Switch Layout\n \u2022 A is the negative soft limit.\n \u2022 B is the G53 machine coordinate Origin.\n \u2022 C is the home switch trip point shared with (-L) minimum limit trip.\n@@ -9852,21 +9852,21 @@\n 4.5.5 Homing Sequence\n \n There are four possible homing sequences defined by the sign of HOME_SEARCH_VEL and HOME_LATCH_V\n along with the associated configuration parameters as shown in the following table. Two basic conditions exist, HOME_SEARCH_VEL and HOME_LATCH_VEL are the same sign or they are opposite\n signs. For a more detailed description of what each configuration parameter does, see the following\n section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 171 / 1290\n \n Figure 4.8: Homing Sequences\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 172 / 1290\n \n 4.5.6 Configuration\n The following determines exactly how the home sequence behaves. They are defined in an [JOINT_n]\n section of the INI file.\n Homing Type\n@@ -9920,15 +9920,15 @@\n value is zero.\n 4.5.6.3 HOME_FINAL_VEL\n This variable has units of machine-units per second.\n It specifies the speed that LinuxCNC uses when it makes its move from HOME_OFFSET to the HOME\n position. If the HOME_FINAL_VEL is missing from the INI file, then the maximum joint speed is used\n to make this move. The value must be a positive number.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 173 / 1290\n \n 4.5.6.4 HOME_IGNORE_LIMITS\n Can hold the values YES / NO. The default value for this parameter is NO. This flag determines whether\n LinuxCNC will ignore the limit switch input for this joint while homing. This setting will not ignore\n limit inputs for other joints. If you do not have a separate home switch set this to YES and connect the\n@@ -9963,15 +9963,15 @@\n of that point to HOME_OFFSET, LinuxCNC makes a move to HOME as the final step of the homing\n process. The default value is zero. Note that even if this parameter is the same as HOME_OFFSET,\n the joint will slightly overshoot the latched position as it stops. Therefore there will always be a\n small move at this time (unless HOME_SEARCH_VEL is zero, and the entire search/latch stage was\n skipped). This final move will be made at the joint\u2019s maximum velocity unless HOME_FINAL_VEL has\n been set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 174 / 1290\n \n Note\n The distinction between HOME_OFFSET and HOME is that HOME_OFFSET first establishes the origin\n location and scale on the machine by applying the HOME_OFFSET value to the location where home\n was found, and then HOME says where the joint should move to on that scale.\n@@ -10007,15 +10007,15 @@\n The initial HOME_SEQUENCE number may be 0, 1 (or -1). The absolute value of sequence numbers must increment by one \u2014 skipping sequence numbers is not supported. If a sequence number is\n omitted, HOME ALL homing will stop upon completion of the last valid sequence number.\n Negative HOME_SEQUENCE values indicate that joints in the sequence should synchronize the\n final move to [JOINT_n]HOME by waiting until all joints in the sequence are ready. If any joint has a\n negative HOME_SEQUENCE value, then all joints with the same absolute value (positive or negative)\n of the HOME_SEQUENCE item value will synchronize the final move.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 175 / 1290\n \n A negative HOME_SEQUENCE also applies to commands to home a single joint. If the HOME_SEQUENCE\n value is negative, all joints having the same absolute value of that HOME_SEQUENCE will be homed\n together with a synchronized final move. If the HOME_SEQUENCE value is zero or positive, a\n command to home the joint will home only the specified joint.\n@@ -10059,15 +10059,15 @@\n 4.5.6.13 LOCKING_INDEXER\n If this joint is a locking rotary indexer, it will unlock before homing, and lock afterward.\n 4.5.6.14 Immediate Homing\n If a joint does not have home switches or does not have a logical home position like a rotary joint and\n you want that joint to home at the current position when the \u201dHome All\u201d button is pressed in the AXIS\n GUI, then the following INI entries for that joint are needed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 176 / 1290\n \n HOME_SEARCH_VEL = 0\n HOME_LATCH_VEL = 0\n HOME_USE_INDEX = NO\n HOME_OFFSET = 0 (Or the home position offset (HOME))\n@@ -10113,15 +10113,15 @@\n net hsequence_select => motion.homing-inhibit\n \n Note\n INI HAL pins (like ini.N.home_sequence) are not available until milltask starts so execution of the\n above HAL commands should be deferred using a postgui HAL file or a delayed [APPLICATION]APP=\n script.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 177 / 1290\n \n Note\n Realtime synchronization of joint jogging for multiple joints requires additional HAL connections for the Manual-Pulse-Generator (MPG) type jog pins (joint.N.enable, joint.N.scale,\n joint.N.counts).\n \n@@ -10154,15 +10154,15 @@\n \n 4.6.2 Usage\n INI file options:\n [EMCIO] section\n PROTOCOL_VERSION = 2\n Defaults to 2. Setting to 1 will emulate old iocontrol behaviour.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 178 / 1290\n \n EMCIO = iov2 -support-start-change\n You need to explicitly enable the start-change protocol by adding the -support-start-change option; otherwise the start-change pin remains low and start-change-ack is ignored. The reason for\n this is better backwards compatibility.\n [TASK] section\n@@ -10195,15 +10195,15 @@\n \u2022 iocontrol.0.user-request-enable (bit, out) TRUE when the user has requested that E-stop be cleared\n Additional pins added by I/O Control V2\n \u2022 emc-abort: (bit, out) signals emc-originated abort to toolchanger.\n \u2022 emc-abort-ack: (bit, in) Acknowledge line from toolchanger for previous signal, or jumpered to\n abort-tool-change if not used in toolchanger. NB: after signaling an emc-abort, iov2 will block until\n emc-abort-ack is raised.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 179 / 1290\n \n \u2022 emc-reason: (S32, out) convey cause for EMC-originated abort to toolchanger. Usage: UI informational. Valid during emc-abort TRUE.\n \u2022 start-change: (bit, out) asserted at the very beginning of an M6 operation, before any spindle-off,\n quill-up, or move-to-toolchange-position operations are executed.\n \u2022 start-change-ack: (bit, in) acknowledgment line for start-change.\n@@ -10239,15 +10239,15 @@\n \u2022 EMC_ABORT_AUX_ESTOP = 2,\n \u2022 EMC_ABORT_MOTION_OR_IO_RCS_ERROR = 3,\n \u2022 EMC_ABORT_TASK_STATE_OFF = 4,\n \u2022 EMC_ABORT_TASK_STATE_ESTOP_RESET = 5,\n \u2022 EMC_ABORT_TASK_STATE_ESTOP = 6,\n \u2022 EMC_ABORT_TASK_STATE_NOT_ON = 7,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 180 / 1290\n \n \u2022 EMC_ABORT_TASK_ABORT = 8,\n \u2022 EMC_ABORT_USER = 100\n iov2 adds one more code, namely EMC_ABORT_BY_TOOLCHANGER_FAULT = 101 which is signaled\n when an M6 aborts due to the toolchanger-faulted pin being TRUE.\n@@ -10284,15 +10284,15 @@\n [DISPLAY]\n DISPLAY = axis\n LATHE = 1\n ...\n [KINS]\n KINEMATICS = trivkins\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 181 / 1290\n \n JOINTS = 3\n [TRAJ]\n COORDINATES = X Z\n ...\n@@ -10335,15 +10335,15 @@\n hardware can interrupt the processing which could cause missed steps when running a CNC machine.\n This is the first thing you need to do. Follow the instructions here to run the latency test.\n \n 4.8.2 Sherline\n If you have a Sherline several predefined configurations are provided. This is on the main menu\n CNC/EMC then pick the Sherline configuration that matches yours and save a copy.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 182 / 1290\n \n 4.8.3 Xylotex\n If you have a Xylotex you can skip the following sections and go straight to the Stepper Config Wizard.\n LinuxCNC has provided quick setup for the Xylotex machines.\n \n@@ -10442,15 +10442,15 @@\n \n Leadscrew\n Teeth\n \n Leadscrew\n Pitch\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Axis\n \n Steps/Rev.\n \n 183 / 1290\n \n@@ -10500,15 +10500,15 @@\n Leadscrew Pitch =\n 5.00 mm per turn\n From the above information: - The leadscrew moves 5.00 mm per turn. - The motor turns 3.000 times\n per 1 leadscrew turn. - The drive takes 8 microstep inputs to make the stepper step once. - The drive\n needs 1600 steps to turn the stepper one revolution.\n So the scale needed is:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 184 / 1290\n \n 4.9 Stepper Configuration\n 4.9.1 Introduction\n The preferred way to set up a standard stepper machine is with the Step Configuration Wizard. See\n the Stepper Configuration Wizard Chapter.\n@@ -10546,15 +10546,15 @@\n The ones relevant for our pinout are:\n signals: Xstep, Xdir & Xen\n pins: parport.0.pin-XX-out & parport.0.pin-XX-in\n \n Depending on what you have chosen in your INI file you are using either standard_pinout.hal or xylotex_pinout.hal. These are two files that instruct the HAL how to link the various signals & pins.\n Further on we\u2019ll investigate the standard_pinout.hal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 4.9.3.1 Standard Pinout HAL\n This file contains several HAL commands, and usually looks like this:\n # standard pinout config file for 3-axis steppers\n # using a parport for I/O\n #\n # first load the parport driver\n@@ -10600,15 +10600,15 @@\n ### that\u2019s ok, hook the same signal to all the axes, but be sure to\n ### set HOME_IS_SHARED and HOME_SEQUENCE in the INI file.\n ###\n # net homeswitches <= parport.0.pin-10-in\n \n 185 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 186 / 1290\n \n # net homeswitches => joint.0.home-sw-in\n # net homeswitches => joint.1.home-sw-in\n # net homeswitches => joint.2.home-sw-in\n ###\n@@ -10644,15 +10644,15 @@\n net Xstep parport.0.pin-02-out\n net Xdir parport.0.pin-03-out\n \n or basically any other out pin you like.\n Hint: make sure you don\u2019t have more than one signal connected to the same pin.\n 5 The fastest thread in the LinuxCNC setup, usually the code gets executed every few tens of microseconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 187 / 1290\n \n 4.9.3.4 Changing polarity of a signal\n If external hardware expects an \u201dactive low\u201d signal, set the corresponding -invert parameter. For\n instance, to invert the spindle control signal:\n setp parport.0.pin-09-invert TRUE\n@@ -10686,15 +10686,15 @@\n 4.10 Stepper Diagnostics\n If what you get is not what you expect many times you just got some experience. Learning from the\n experience increases your understanding of the whole. Diagnosing problems is best done by divide\n and conquer. By this I mean if you can remove 1/2 of the variables from the equation each time you\n will find the problem the fastest. In the real world this is not always the case, but it\u2019s usually a good\n place to start.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 188 / 1290\n \n 4.10.1 Common Problems\n 4.10.1.1 Stepper Moves One Step\n The most common reason in a new installation for a stepper motor not to move is that the step and\n direction signals are exchanged. If you press the jog forward and jog backward keys, alternately , and\n@@ -10724,15 +10724,15 @@\n If you added backlash you need to increase the STEPGEN_MAXACCEL up to double the MAX_ACCELERATIO\n in the AXIS section of the INI file for each axis you added backlash to. LinuxCNC uses \u201dextra acceleration\u201d at a reversal to take up the backlash. Without backlash correction, step generator acceleration\n can be just a few percent above the motion planner acceleration.\n 4.10.2.2 RTAPI Error\n When you get this error:\n RTAPI: ERROR: Unexpected realtime delay on task n\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 189 / 1290\n \n This error is generated by rtapi based on an indication from RTAI that a deadline was missed. It is\n usually an indication that the BASE_PERIOD in the [EMCMOT] section of the ini file is set too low. You\n should run the Latency Test for an extended period of time to see if you have any delays that would\n cause this problem. If you used the Stepconf Wizard, run it again, and test the Base Period Jitter\n@@ -10778,15 +10778,15 @@\n G0 Z1.000\n G0 Z0.500\n #1000 = [#1000 - 1]\n o101 endwhile\n ( msg, Done...Z should be exactly .5\u201d above table )\n M2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 190 / 1290\n \n 4.11 Filter Programs\n 4.11.1 Introduction\n Most of LinuxCNC\u2019s screens have the ability to send loaded files through a filter program or use the\n filter program to make G-code. Such a filter can do any desired task: Something as simple as making\n@@ -10808,15 +10808,15 @@\n PROGRAM_EXTENSION = .py Python Script\n py = python\n \n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 191 / 1290\n \n Figure 4.9: Circular Holes\n If the filter program sends lines to stderr of the form:\n FILTER_PROGRESS=10\n \n@@ -10836,15 +10836,15 @@\n time.sleep(.1)\n # output a line of G-code\n print(\u2019G0 X1\u2019, file=sys.stdout)\n # update progress\n print(\u2019FILTER_PROGRESS={}\u2019.format(i), file=sys.stderr)\n except:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 192 / 1290\n \n # This causes an error message\n print(\u2019Error; But this was only a test\u2019, file=sys.stderr)\n raise SystemExit(1)\n \n@@ -10887,15 +10887,15 @@\n raise SystemExit(1)\n def process(self):\n try:\n # get next line of code\n codeLine = self.temp[self.line]\n # process the line somehow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 193 / 1290\n \n # push out processed code\n print(codeLine, file=sys.stdout)\n self.line +=1\n # update progress\n@@ -10917,15 +10917,15 @@\n else:\n path = None\n app = QApplication(sys.argv)\n w = CustomDialog(path=path)\n w.show()\n sys.exit( app.exec_() )\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 194 / 1290\n \n Chapter 5\n \n HAL (Hardware Abstraction Layer)\n 5.1 HAL Introduction\n@@ -10949,15 +10949,15 @@\n reminiscent of what CNC machines need to do, or space craft.\n Any machine controller needs to know:\n \u2022 about its internal state and how this maps to the environment (machine coordinates, state of switches/regulators),\n \u2022 how actuators are expected to change that state,\n \u2022 how allow for updates of the internal state by sensors (encoders, probes).\n The HAL layer consists of parts (referred to as \u201dcomponents\u201d) that\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 195 / 1290\n \n \u2022 are connected with each other, e.g., to update position data or have the planning algorithm tell the\n motors about the next step.\n \u2022 may know how to communicate with hardware,\n \u2022 may simply process incoming data and provide data outputs to other components,\n@@ -10991,15 +10991,15 @@\n but none of these interfaces are HAL itself.\n HAL itself is not a program, it consists of one or more lists of loaded programs (the components) that\n are periodically executed (in strict sequence), and an area of shared-memory that these components\n use to interchange data. The main HAL script runs only once at machine startup, setting up the\n realtime threads and the shared-memory locations, loading the components and setting up the data\n links between them (the \u201dsignals\u201d and \u201dpins\u201d).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 196 / 1290\n \n In principle multiple machines could share a common HAL to allow them to inter-operate, however\n the current implementation of LinuxCNC is limited to a single interpreter and a single Task module.\n Currently this is almost always a G-code interpreter and \u201dmilltask\u201d (which was found to also work well\n for lathes and adequately for robots) but these modules are selectable at load-time. With an increasing\n@@ -11040,15 +11040,15 @@\n number of components that know a lot about CNC and present that information via pins. There are\n pins representing\n \u2022 static information about the machine\n \u2022 the current state of the machine\n \u2013 end switches\n \u2013 positions counted by steppers or as measured by encoders\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 197 / 1290\n \n \u2022 recipients for instructions\n \u2013 manual control of machine position (\u201djogging\u201d)\n \u2013 positions that stepper motors should take next\n In a analogy to electronic cables, pins can be wired, so the value changing in one pin serves as input\n@@ -11088,15 +11088,15 @@\n \u2013 developing over time.\n \n 5.1.3 HAL System Design\n HAL is based on traditional system design techniques. HAL is based on the same principles that\n are used to design hardware circuits and systems, so it is useful to examine those principles first. Any\n system, including a CNC machine, consists of interconnected components. For the CNC machine,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 198 / 1290\n \n those components might be the main controller, servo amps or stepper drives, motors, encoders, limit\n switches, pushbutton pendants, perhaps a VFD for the spindle drive, a PLC to run a toolchanger, etc.\n The machine builder must aselect, mount and wire these pieces together to make a complete system.\n \n@@ -11118,15 +11118,15 @@\n black boxes. During the design stage, he decides which parts he is going to use - steppers or servos,\n which brand of servo amp, what kind of limit switches and how many, etc. The integrator\u2019s decisions\n about which specific components to use is based on what that component does and the specifications\n supplied by the manufacturer of the device. The size of a motor and the load it must drive will affect\n the choice of amplifier needed to run it. The choice of amplifier may affect the kinds of feedback\n needed by the amp and the velocity or position signals that must be sent to the amp from a control.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 199 / 1290\n \n In the HAL world, the integrator must decide what HAL components are needed. Usually every interface card will require a driver. Additional components may be needed for software generation of step\n pulses, PLC functionality, and a wide variety of other tasks.\n 5.1.3.2 Interconnection Design\n The designer of a hardware system not only selects the parts, he also decides how those parts will be\n@@ -11152,15 +11152,15 @@\n HAL provides the software equivalents of a voltmeter, oscilloscope, signal generator, and other tools\n needed for testing and tuning a system. The same commands used to build the system can be used to\n make changes as needed.\n 5.1.3.5 Summary\n This document is aimed at people who already know how to do this kind of hardware system integration, but who do not know how to connect the hardware to LinuxCNC. See the Remote Start Example\n section in the HAL UI Examples documentation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 200 / 1290\n \n Figure 5.2: Remote Start Example (Schema)\n The traditional hardware design as described above ends at the edge of the main control. Outside the\n control are a bunch of relatively simple boxes, connected together to do whatever is needed. Inside,\n the control is a big mystery \u2014 one huge black box that we hope works.\n@@ -11185,15 +11185,15 @@\n because these terms are not arranged in alphabetical order. They are arranged by their relationship\n or flow in the HAL way of things.\n Component\n When we talked about hardware design, we referred to the individual pieces as parts, building\n blocks, black boxes, etc. The HAL equivalent is a component or HAL component. This document\n uses HAL component when there is likely to be confusion with other kinds of components, but\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 201 / 1290\n \n normally just uses component. A HAL component is a piece of software with well-defined inputs,\n outputs, and behavior, that can be installed and interconnected as needed. + + Many HAL\n Components model the behaviour of a tangible part of a machine, and a pin may indeed be\n meant to be connected to a physical pin on the device to communicate with it, hence the names.\n@@ -11235,15 +11235,15 @@\n Currently there are 4 types, as follows:\n \u2022 bit - a single TRUE/FALSE or ON/OFF value\n \u2022 float - a 64 bit floating point value, with approximately 53 bits of resolution and over 1000 bits\n of dynamic range.\n \u2022 u32 - a 32 bit unsigned integer, legal values are 0 to 4,294,967,295\n \u2022 s32 - a 32 bit signed integer, legal values are -2,147,483,647 to +2,147,483,647\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 202 / 1290\n \n Function\n Real hardware components tend to act immediately on their inputs. For example, if the input\n voltage to a servo amp changes, the output also changes automatically. However software components cannot act automatically. Each component has specific code that must be executed to\n do whatever that component is supposed to do. In some cases, that code simply runs as part\n@@ -11287,15 +11287,15 @@\n de-energizes the coil. So the relay still switches rapidly between on and off, but at a rate determined\n by how often the PLC evaluates the rung.\n In HAL, the function is the code that evaluates the rung(s). In fact, the HAL-aware realtime version\n of ClassicLadder exports a function to do exactly that. Meanwhile, a thread is the thing that runs the\n function at specific time intervals. Just like you can choose to have a PLC evaluate all its rungs every\n 10 ms, or every second, you can define HAL threads with different periods.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 203 / 1290\n \n What distinguishes one thread from another is not what the thread does - that is determined by which\n functions are connected to it. The real distinction is simply how often a thread runs.\n In LinuxCNC you might have a 50 \u00b5s thread and a 1 ms thread. These would be created based on\n BASE_PERIOD and SERVO_PERIOD, the actual times depend on the values in your INI file.\n@@ -11310,15 +11310,15 @@\n 5.2.1 HAL Commands\n More detailed information can be found in the man page for halcmd: run man halcmd in a terminal\n window.\n To see the HAL configuration and check the status of pins and parameters use the HAL Configuration\n window on the Machine menu in AXIS. To watch a pin status open the Watch tab and click on each\n pin you wish to watch and it will be added to the watch window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 204 / 1290\n \n Figure 5.3: HAL Configuration Window\n \n 5.2.1.1 loadrt\n The command loadrt loads a real time HAL component. Real time component functions need to be\n@@ -11332,15 +11332,15 @@\n The addf command adds a function to a real-time thread. If the StepConf wizard was used to create\n the configuration, two threads have been created ( \u0300 \u0300base-thread \u0300 \u0300 and \u0300 \u0300servo-thread \u0300 \u0300).\n addf adds function functname to thread threadname. Default is to add the function in the order they\n are in the file. If position is specified, adds the function to that spot in the thread. A negative position\n indicates the position with respect to the end of the thread. For example 1 is start of thread, -1 is the\n end of the thread, -3 is third from the end.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 205 / 1290\n \n For some functions it is important to load them in a certain order, like the parport read and write\n functions. The function name is usually the component name plus a number. In the following example\n the component or2 is loaded and show function shows the name of the or2 function.\n $ halrun\n@@ -11405,15 +11405,15 @@\n the same name as the first argument of the command.\n \n -Wn \n \n to wait for the component, which will have the given . This only\n applies if the component has a name option.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n -w\n \n to wait for the program to exit\n \n -i\n \n@@ -11448,15 +11448,15 @@\n A pin can be connected to a signal if it obeys the following rules:\n \u2022 An IN pin can always be connected to a signal.\n \u2022 An IO pin can be connected unless there\u2019s an OUT pin on the signal.\n \u2022 An OUT pin can be connected only if there are no other OUT or IO pins on the signal.\n The same signal-name can be used in multiple net commands to connect additional pins, as long as\n the rules above are obeyed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 207 / 1290\n \n Figure 5.4: Signal Direction\n This example shows the signal xStep with the source being stepgen.0.out and with two readers,\n parport.0.pin-02-out and parport.0.pin-08-out. Basically the value of stepgen.0.out is sent to\n the signal xStep and that value is then sent to parport.0.pin-02-out and parport.0.pin-08-out.\n@@ -11479,15 +11479,15 @@\n 5.2.1.5 setp\n The command setp sets the value of a pin or parameter. The valid values will depend on the type of\n the pin or parameter. It is an error if the data types do not match.\n Some components have parameters that need to be set before use. Parameters can be set before use\n or while running as needed. You cannot use setp on a pin that is connected to a signal.\n Syntax and Examples of setp\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 208 / 1290\n \n setp \n setp parport.0.pin-08-out TRUE\n \n 5.2.1.6 sets\n@@ -11524,15 +11524,15 @@\n linkps parport.0.pin-02-out X-Step\n \n The linkps command has been superseded by the net command.\n the command newsig creates a new HAL signal by the name and the data type of .\n Type must be bit, s32, u32 or float. Error if already exists.\n Syntax and Examples of newsig\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 209 / 1290\n \n newsig \n newsig Xstep bit\n \n More information can be found in the HAL manual or the man pages for halrun.\n@@ -11561,15 +11561,15 @@\n you used the Stepper Config Wizard.\n \u2022 custom.hal This file is loaded next and before the GUI loads. This is where you put your custom\n HAL commands that you want loaded before the GUI is loaded.\n \u2022 custom_postgui.hal This file is loaded after the GUI loads. This is where you put your custom HAL\n commands that you want loaded after the GUI is loaded. Any HAL commands that use PyVCP\n widgets need to be placed here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 210 / 1290\n \n 5.2.4 HAL Parameter\n Two parameters are automatically added to each HAL component when it is created. These parameters allow you to scope the execution time of a component.\n .time\n \n@@ -11616,15 +11616,15 @@\n \n out\n False\n False\n False\n True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 211 / 1290\n \n 5.2.5.2 not\n The not component is a bit inverter.\n Syntax\n not [count=n] | [names=name1[,name2...]]\n@@ -11674,15 +11674,15 @@\n \n out\n True\n True\n True\n False\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 212 / 1290\n \n 5.2.5.4 xor2\n The xor2 component is a two input xor (exclusive or)-gate.\n Syntax\n xor2[count=n] | [names=name1[,name2...]]\n@@ -11731,15 +11731,15 @@\n 5.2.7.1 weighted_sum\n The weighted sum converts a group of bits into an integer. The conversion is the sum of the weights\n of the bits present plus any offset. It\u2019s similar to binary coded decimal but with more options. The\n hold bit interrupts the input processing, so that the sum value no longer changes.\n Syntax for loading component weighted_sum\n loadrt weighted_sum wsum_sizes=size[,size,...]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 213 / 1290\n \n Creates groups of \u0300 \u0300weighted_sum \u0300 \u0300s, each with the given number of input bits (size).\n To update the weighted_sum, the process_wsums must be attached to a thread.\n Add process_wsums to servo thread\n addf process_wsums servo-thread\n@@ -11828,15 +11828,15 @@\n loadrt and2 count=3\n \n Configurations are more readable if you specify with the names= option for components where it is\n supported, e.g.:\n Example load command resulting in explicitly named components aa, ab, ac.\n loadrt and2 names=aa,ab,ac\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 214 / 1290\n \n It can be a maintenance problem to keep track of the components and their names, since when you\n add (or remove) a component, you must find and update the single loadrt directive applicable to the\n component.\n TWOPASS processing is enabled by including an INI file parameter in the [HAL] section,\n@@ -11878,15 +11878,15 @@\n you use a derivative component to estimate the velocities and accelerations on each (x,y,z) coordinate,\n using the count= method will give arcane component names like ddt.0, ddt.1, ddt.2, etc.\n Alternatively, using the names= option like:\n loadrt ddt names=xvel,yvel,zvel\n ...\n loadrt ddt names=xaccel,yaccel,zaccel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 215 / 1290\n \n results in components sensibly named xvel, yvel, zvel, xaccel, yaccel, zaccel.\n Many comps supplied with the distribution are created with the halcompile utility and support the\n names= option. These include the common logic components that are the glue of many LinuxCNC\n configurations.\n@@ -11929,15 +11929,15 @@\n are expected. More complex parameter items included in specialized LinuxCNC components may not\n be handled properly.\n A .hal file may be excluded from TWOPASS processing by including a magic comment line anywhere in\n the .hal file. The magic comment line must begin with the string: #NOTWOPASS. Files specified with this\n magic comment are sourced by halcmd using the -k (keep going if failure) and -v (verbose) options.\n This exclusion provision can be used to isolate problems or for loading any special LinuxCNC component that does not require or benefit from TWOPASS processing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 216 / 1290\n \n Ordinarily, the loadrt ordering of realtime components is not critical, but loadrt ordering for special\n components can be enforced by placing the such loadrt directives in an excluded file.\n Note\n While the order of loadrt directives is not usually critical, ordering of addf directives is often very\n@@ -11975,15 +11975,15 @@\n \n 5.4.2 Halcmd\n halcmd is a command line tool for manipulating HAL. A more complete man page exists for halcmd and\n installed together with LinuxCNC, from source or from a package. If LinuxCNC has been compiled as\n run-in-place, the man page is not installed but is accessible in the LinuxCNC main directory with the\n following command:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 217 / 1290\n \n $ man -M docs/man halcmd\n \n 5.4.2.1 Notation\n For this tutorial, commands for the operating system are typically shown without the prompt provided\n@@ -12024,15 +12024,15 @@\n 5.4.3 A Simple Example\n 5.4.3.1 Loading a component\n For this tutorial, we are going to assume that you have successfully installed the Live CD and, if using\n a RIP 1 , invoke the rip-environment script to prepare your shell. In that case, all you need to do is load\n 1 Run In Place, when the source files have been downloaded to a user directory and are compiled and executed directly from\n there.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 218 / 1290\n \n the required RTOS and RTAPI modules into memory. Just run the following command from a terminal\n window:\n Loading HAL\n cd linuxcnc\n@@ -12113,15 +12113,15 @@\n siggen.0.frequency\n siggen.0.offset\n siggen.0.sawtooth\n siggen.0.sine\n siggen.0.square\n siggen.0.triangle\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 219 / 1290\n \n This command displays all of the pins in the current HAL. A complex system could have dozens or\n hundreds of pins. But right now there are only nine pins. Of these pins eight are floating point and\n one is bit (boolean). Six carry data out of the siggen component and three are used to transfer settings\n into the component. Since we have not yet executed the code contained within the component, some\n@@ -12197,15 +12197,15 @@\n \n Time, Max-Time )\n 0,\n 0 )\n \n 2 CodeAddr and Arg fields were used during development and should probably disappear.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 220 / 1290\n \n It did. The period is not exactly 1,000,000 ns because of hardware limitations, but we have a thread\n that runs at approximately the correct rate, and which can handle floating point functions. The next\n step is to connect the function to the thread:\n Add Function\n@@ -12313,15 +12313,15 @@\n 3 float OUT\n 3 float OUT\n \n We did two show pin commands in quick succession, and you can see that the outputs are no longer\n zero. The sine, cosine, sawtooth, and triangle outputs are changing constantly. The square output is\n also working, however it simply switches from +1.0 to -1.0 every cycle.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 221 / 1290\n \n 5.4.3.4 Changing Parameters\n The real power of HAL is that you can change things. For example, we can use the setp command to\n set the value of a parameter. Let\u2019s change the amplitude of the signal generator from 1.0 to 5.0:\n Set Pin\n@@ -12405,15 +12405,15 @@\n # realtime thread/function links\n addf siggen.0.update test-thread\n \n The output of the save command is a sequence of HAL commands. If you start with an empty HAL\n and run all these commands, you will get the configuration that existed when the save command was\n issued. To save these commands for later use, we simply redirect the output to a file:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 222 / 1290\n \n Save configuration to a file with halcmd\n halcmd: save all saved.hal\n \n 5.4.3.6 Exiting halrun\n@@ -12448,15 +12448,15 @@\n halmeter\n \n Two windows will appear. The selection window is the largest and includes three tabs:\n \u2022 One lists all the pins currently defined in HAL,\n \u2022 one lists all the signals,\n \u2022 one lists all the parameters.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 223 / 1290\n \n Click on a tab, then click on one of the items to select it. The small window will show the name and\n value of the selected item. The display is updated approximately 10 times per second. To free screen\n space, the selection window can be closed with the Close button. On the little window, hidden under\n the selection window at program launch, the Select button, re-opens the selection window and the\n@@ -12483,27 +12483,27 @@\n \n At this point we have the siggen component loaded and running. It\u2019s time to start halmeter.\n Starting Halmeter\n halcmd: loadusr halmeter\n \n The first window you will see is the \u201dSelect Item to Probe\u201d window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 224 / 1290\n \n Figure 5.5: Halmeter Select Window\n This dialog has three tabs. The first tab displays all of the HAL pins in the system. The second one\n displays all the signals, and the third displays all the parameters. We would like to look at the pin\n siggen.0.cosine first, so click on it then click the \u201dClose\u201d button. The probe selection dialog will\n close, and the meter looks something like the following figure.\n \n Figure 5.6: Halmeter Window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 225 / 1290\n \n To change what the meter displays press the \u201dSelect\u201d button which brings back the \u201dSelect Item to\n Probe\u201d window.\n You should see the value changing as siggen generates its cosine wave. Halmeter refreshes its display\n about 5 times per second.\n@@ -12577,15 +12577,15 @@\n siggen.0.sawtooth\n siggen.0.sine\n siggen.0.square\n siggen.0.triangle\n stepgen.0.counts\n stepgen.0.dir\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3\n 3\n 3\n 3\n 3\n 3\n@@ -12751,15 +12751,15 @@\n the velocity input of the first step pulse generator. The first step is to connect the signal to the signal\n generator output. To connect a signal to a pin we use the net command.\n net command\n halcmd: net X-vel <= siggen.0.cosine\n \n To see the effect of the net command, we show the signals again.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 227 / 1290\n \n halcmd: show sig\n Signals:\n Type\n float\n@@ -12838,15 +12838,15 @@\n Every time it is executed, it calculates the values of the sine, cosine, triangle, and square outputs. To\n make smooth signals, it needs to run at specific intervals.\n The other three functions are related to the step pulse generators.\n The first one, stepgen.capture_position, is used for position feedback. It captures the value of an\n internal counter that counts the step pulses as they are generated. Assuming no missed steps, this\n counter indicates the position of the motor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 228 / 1290\n \n The main function for the step pulse generator is stepgen.make_pulses. Every time make_pulses\n runs it decides if it is time to take a step, and if so sets the outputs accordingly. For smooth step\n pulses, it should run as frequently as possible. Because it needs to run so fast, make_pulses is highly\n optimized and performs only a few calculations. Unlike the others, it does not need floating point\n@@ -12921,15 +12921,15 @@\n fine, we want the table speed to vary from +1 to -1 inches per second. However the scaling of the step\n pulse generator isn\u2019t quite right. By default, it generates an output frequency of 1 step per second\n with an input of 1.0. It is unlikely that one step per second will give us one inch per second of table\n movement. Let\u2019s assume instead that we have a 5 turn per inch leadscrew, connected to a 200 step\n per rev stepper with 10x microstepping. So it takes 2000 steps for one revolution of the screw, and\n 5 revolutions to travel one inch. That means the overall scaling is 10000 steps per inch. We need\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 229 / 1290\n \n to multiply the velocity input to the step pulse generator by 10000 to get the proper output. That\n is exactly what the parameter stepgen.n.velocity-scale is for. In this case, both the X and Y axis\n have the same scaling, so we set the scaling parameters for both to 10000.\n halcmd: setp stepgen.0.position-scale 10000\n@@ -12966,24 +12966,24 @@\n halcmd loadusr halscope\n \n If LinuxCNC is not running or the autosave.halscope file does not match the pins available in the\n current running LinuxCNC the scope GUI window will open, immediately followed by a Realtime\n function not linked dialog that looks like the following figure. To change the sample rate left click on\n the samples box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 230 / 1290\n \n Figure 5.7: Realtime function not linked dialog\n This dialog is where you set the sampling rate for the oscilloscope. For now we want to sample once\n per millisecond, so click on the 989 \u00b5s thread slow and leave the multiplier at 1. We will also leave\n the record length at 4000 samples, so that we can use up to four channels at one time. When you\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 231 / 1290\n \n select a thread and then click OK, the dialog disappears, and the scope window looks something like\n the following figure.\n \n Figure 5.8: Initial scope window\n@@ -12995,33 +12995,33 @@\n length - more channels means shorter records, since the memory available for the record is fixed at\n approximately 16,000 samples.\n The channel buttons run across the bottom of the halscope screen. Click button 1, and you will see the\n Select Channel Source dialog as shown in the following figure. This dialog is very similar to the one\n used by Halmeter. We would like to look at the signals we defined earlier, so we click on the Signals\n tab, and the dialog displays all of the signals in the HAL (only two for this example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 232 / 1290\n \n Figure 5.9: Select Channel Source\n To choose a signal, just click on it. In this case, we want channel 1 to display the signal X-vel. Click\n on the Signals tab then click on X-vel and the dialog closes and the channel is now selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 233 / 1290\n \n Figure 5.10: Select Signal\n The channel 1 button is pressed in, and channel number 1 and the name X-vel appear below the row\n of buttons. That display always indicates the selected channel - you can have many channels on the\n screen, but the selected one is highlighted, and the various controls like vertical position and scale\n always work on the selected one.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 234 / 1290\n \n Figure 5.11: Halscope\n To add a signal to channel 2, click the 2 button. When the dialog pops up, click the Signals tab, then\n click on Y-vel. We also want to look at the square and triangle wave outputs. There are no signals\n connected to those pins, so we use the Pins tab instead. For channel 3, select siggen.0.triangle\n@@ -13032,15 +13032,15 @@\n have a 4000 sample record length, and are acquiring 1000 samples per second, it will take halscope\n about 2 seconds to fill half of its buffer. During that time a progress bar just above the main screen\n will show the buffer filling. Once the buffer is half full, the scope waits for a trigger. Since we haven\u2019t\n configured one yet, it will wait forever. To manually trigger it, click the Force button in the Trigger\n section at the top right. You should see the remainder of the buffer fill, then the screen will display\n the captured waveforms. The result will look something like the following figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 235 / 1290\n \n Figure 5.12: Captured Waveforms\n The Selected Channel box at the bottom tells you that the purple trace is the currently selected one,\n channel 4, which is displaying the value of the pin siggen.0.square. Try clicking channel buttons 1\n through 3 to highlight the other three traces.\n@@ -13048,30 +13048,30 @@\n The traces are rather hard to distinguish since all four are on top of each other. To fix this, we use\n the Vertical controls in the box to the right of the screen. These controls act on the currently selected\n channel. When adjusting the gain, notice that it covers a huge range - unlike a real scope, this one\n can display signals ranging from very tiny (pico-units) to very large (Tera-units). The position control\n moves the displayed trace up and down over the height of the screen only. For larger adjustments the\n offset button should be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 236 / 1290\n \n Figure 5.13: Vertical Adjustment\n The large Selected Channel button at the bottom indicates that channel 1 is currently selected channel\n and that it matches the X-vel signal. Try clicking on the other channels to put their traces in evidence\n and to be able to move them with the Pos cursor.\n 5.4.6.4 Triggering\n Using the Force button is a rather unsatisfying way to trigger the scope. To set up real triggering,\n click on the Source button at the bottom right. It will pop up the Trigger Source dialog, which is\n simply a list of all the probes that are currently connected. Select a probe to use for triggering by\n clicking on it. For this example we will use channel 3, the triangle wave as shown in the following\n figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 237 / 1290\n \n Figure 5.14: Trigger Source Dialog\n After setting the trigger source, you can adjust the trigger level and trigger position using the sliders\n in the Trigger box along the right edge. The level can be adjusted from the top to the bottom of the\n screen, and is displayed below the sliders. The position is the location of the trigger point within\n@@ -13081,15 +13081,15 @@\n point is visible as a vertical line in the progress box above the screen. The trigger polarity can be\n changed by clicking the button just below the trigger level display. It will then become descendant.\n Note that changing the trigger position stops the scope once the position has been adjusted, you\n relaunch the scope by clicking on the Normal button of Run mode the group.\n Now that we have adjusted the vertical controls and triggering, the scope display looks something\n like the following figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 238 / 1290\n \n Figure 5.15: Waveforms with Triggering\n \n 5.4.6.5 Horizontal Adjustments\n To look closely at part of a waveform, you can use the zoom slider at the top of the screen to expand the\n@@ -13097,15 +13097,15 @@\n visible. However, sometimes simply expanding the waveforms isn\u2019t enough and you need to increase\n the sampling rate. For example, we would like to look at the actual step pulses that are being generated in our example. Since the step pulses may be only 50 \u00b5s long, sampling at 1 kHz isn\u2019t fast enough.\n To change the sample rate, click on the button that displays the number of samples and sample rate\n to bring up the Select Sample Rate dialog figure. For this example, we will click on the 50 \u00b5s thread,\n fast, which gives us a sample rate of about 20 kHz. Now instead of displaying about 4 seconds worth\n of data, one record is 4000 samples at 20 kHz, or about 0.20 seconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 239 / 1290\n \n Figure 5.16: Sample Rate Dialog\n \n 5.4.6.6 More Channels\n Now let\u2019s look at the step pulses. Halscope has 16 channels, but for this example we are using only 4\n@@ -13114,15 +13114,15 @@\n if off, and do the same for channel 4. Even though the channels are turned off, they still remember\n what they are connected to, and in fact we will continue to use channel 3 as the trigger source.\n To add new channels, select channel 5, and choose pin stepgen.0.dir, then channel 6, and select\n stepgen.0.step. Then click run mode Normal to start the scope, and adjust the horizontal zoom to\n 5 ms per division. You should see the step pulses slow down as the velocity command (channel 1)\n approaches zero, then the direction pin changes state and the step pulses speed up again. You might\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 240 / 1290\n \n want toincrease the gain on channel 1 to about 20 milli per division to better see the change in the\n velocity command. The result should look like the following figure.\n \n Figure 5.17: Step Pulses\n@@ -13134,15 +13134,15 @@\n If the scope_rt component was not already loaded, halscope will load it and request 80000 total samples, so that when sampling 4 channels at a time there will be 20000 samples per channel. (If scope_rt\n was already loaded, the numeric argument to halscope will have no effect).\n \n 5.5 HAL Examples\n All of these examples assume you are starting with a StepConf-based configuration and have two\n threads base-thread and servo-thread. The StepConf wizard will create an empty custom.hal and a\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 241 / 1290\n \n custom_postgui.hal file. The custom.hal file will be loaded after the configuration HAL file and the\n custom_postgui.hal file is loaded after the GUI has been loaded.\n \n 5.5.1 Connecting Two Outputs\n@@ -13204,15 +13204,15 @@\n pin. From the direction arrow you can see that the button is and output and the or2.0.in0 is an input.\n The output from or2 goes to the input of the LED.\n \n 5.5.2 Manual Toolchange\n In this example it is assumed that you\u2019re rolling your own configuration and wish to add the HAL\n Manual Toolchange window. The HAL Manual Toolchange is primarily useful if you have presettable\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 242 / 1290\n \n tools and you store the offsets in the tool table. If you need to touch off for each tool change then it is\n best just to split up your G-code. To use the HAL Manual Toolchange window you basically have to\n 1. load the hal_manualtoolchange component,\n 2. then send the iocontrol tool change to the hal_manualtoolchange change and\n@@ -13252,15 +13252,15 @@\n Make the connections.\n setp mult2.in1 60\n net xpos-cmd ddt.0.in\n net X-IPS mult2.0.in0 <= ddt.0.out\n net X-ABS abs.0.in <= mult2.0.out\n net X-IPM abs.0.out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 243 / 1290\n \n In this last section we are setting the mult2.0.in1 to 60 to convert the inch per second to inch per\n minute (IPM) that we get from the ddt.0.out.\n The xpos-cmd sends the commanded position to the ddt.0.in. The ddt computes the derivative of the\n change of the input.\n@@ -13274,15 +13274,15 @@\n 5.5.4 Soft Start Details\n This example shows how the HAL components lowpass, limit2 or limit3 can be used to limit how fast\n a signal changes.\n In this example we have a servo motor driving a lathe spindle. If we just used the commanded\n spindle speeds on the servo it will try to go from present speed to commanded speed as fast as it\n can. This could cause a problem or damage the drive. To slow the rate of change we can send the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 244 / 1290\n \n spindle.N.speed-out through a limiter before the PID, so that the PID command value changes to\n new settings more slowly.\n Three built-in components that limit a signal are:\n \u2022 limit2 limits the range and first derivative of a signal.\n@@ -13321,15 +13321,15 @@\n Next to set up a trigger signal click on the Source None button and select square. The button will\n change to Source Chan 1.\n Next click on Single in the Run Mode radio buttons box. This will start a run and when it finishes you\n will see your traces.\n To separate the signals so you can see them better click on a channel then use the Pos slider in the\n Vertical box to set the positions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 245 / 1290\n \n To see the effect of changing the set point values of any of the components you can change them in\n the terminal window. To see what different gain settings do for lowpass just type the following in the\n terminal window and try different settings.\n setp lowpass.0.gain *.01\n@@ -13343,15 +13343,15 @@\n 5.5.5 Stand Alone HAL\n In some cases you might want to run a GladeVCP screen with just HAL. For example say you had a\n stepper driven device that all you need is to run a stepper motor. A simple Start/Stop interface is all\n you need for your application so no need to load up and configure a full blown CNC application.\n In the following example we have created a simple GladeVCP panel with one stepper.\n Basic Syntax\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 246 / 1290\n \n # load the winder.glade GUI and name it winder\n loadusr -Wn winder gladevcp -c winder -u handler.py winder.glade\n # load realtime components\n loadrt threads name1=fast period1=50000 fp1=0 name2=slow period2=1000000\n@@ -13390,15 +13390,15 @@\n default is 4 each. The number of Spindles is set with num_spindles, default is 1.\n Pin and parameter names starting with axis.L and joint.N are read and updated by the motion-controller\n function.\n Motion is loaded with the motmod command. A kins should be loaded before motion.\n loadrt motmod base_period_nsec=[\u2019period\u2019] servo_period_nsec=[\u2019period\u2019]\n traj_period_nsec=[\u2019period\u2019] num_joints=[\u20190-9\u2019]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 247 / 1290\n \n num_dio=[\u20191-64\u2019] num_aio=[\u20191-16\u2019] unlock_joints_mask=[\u20190xNN\u2019]\n num_spindles=[\u20191-8\u2019]\n \n \u2022 base_period_nsec = 50000 - the Base task period in nanoseconds. This is the fastest thread in the\n@@ -13436,15 +13436,15 @@\n \u2022 motion.adaptive-feed - (float, in) When adaptive feed is enabled with M52 P1 , the commanded\n velocity is multiplied by this value. This effect is multiplicative with the NML-level feed override\n value and motion.feed-hold. As of version 2.9 of LinuxCNC it is possible to use a negative adaptive\n feed value to run the G-code path in reverse.\n \u2022 motion.analog-in-00 - (float, in) These pins (00, 01, 02, 03 or more if configured) are controlled by\n M66.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 248 / 1290\n \n \u2022 motion.analog-out-00 - (float, out) These pins (00, 01, 02, 03 or more if configured) are controlled\n by M67 or M68.\n \u2022 motion.coord-error - (bit, out) TRUE when motion has encountered an error, such as exceeding a\n soft limit\n@@ -13482,15 +13482,15 @@\n 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\n adjustments.\n \u2022 motion.teleop-mode - (bit, out) TRUE when motion is in teleop mode, as opposed to coordinated\n mode\n \u2022 motion.tooloffset.x \u2026 motion.tooloffset.w - (float, out, one per axis) shows the tool offset in effect;\n it could come from the tool table (G43 active), or it could come from the G-code (G43.1 active)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 249 / 1290\n \n \u2022 motion.on-soft-limit - (bit, out) TRUE when the machine is on a soft limit.\n \u2022 motion.probe-input - (bit, in) G38.n uses the value on this pin to determine when the probe has made\n contact. TRUE for probe contact closed (touching), FALSE for probe contact open.\n \u2022 motion.program-line - (s32, out) The current program line while executing. Zero if not running or\n@@ -13521,15 +13521,15 @@\n to determine whether the realtime motion controller is meeting its timing constraints\n \u2022 motion.servo.last-period-ns - (float, RO)\n 5.6.1.4 Functions\n Generally, these functions are both added to the servo-thread in the order shown.\n \u2022 motion-command-handler - Receives and processes motion commands\n \u2022 motion-controller - Runs the LinuxCNC motion controller\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 250 / 1290\n \n 5.6.2 Spindle\n LinuxCNC can control upto eight spindles. Motion will produce the following pins: The N (integer\n between 0 and 7) substitutes the spindle number.\n 5.6.2.1 Pins\n@@ -13566,15 +13566,15 @@\n \u2022 spindle.N.orient-angle - (float,out) Desired spindle orientation for M19. Value of the M19 R word\n parameter plus the value of the [RS274NGC]ORIENT_OFFSET INI parameter.\n \u2022 spindle.N.orient-mode - (s32,out) Desired spindle rotation mode M19. Default 0.\n \u2022 spindle.N.orient - (out,bit) Indicates start of spindle orient cycle. Set by M19. Cleared by any of\n M3, M4, or M5. If spindle-orient-fault is not zero during spindle-orient true, the M19 command fails\n with an error message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 251 / 1290\n \n \u2022 spindle.N.is-oriented - (in, bit) Acknowledge pin for spindle-orient. Completes orient cycle. If\n spindle-orient was true when spindle-is-oriented was asserted, the spindle-orient pin is cleared and\n the spindle-locked pin is asserted. Also, the spindle-brake pin is asserted.\n \u2022 spindle.N.orient-fault - (s32, in) Fault code input for orient cycle. Any value other than zero will\n@@ -13613,15 +13613,15 @@\n See the motion man page motion(9) for details on the pins and parameters.\n \n 5.6.4 iocontrol\n iocontrol - accepts non-realtime I/O commands via NML, interacts with HAL .\n iocontrol\u2019s HAL pins are turned on and off in non-realtime context. If you have strict timing requirements or simply need more I/O, consider using the realtime synchronized I/O provided by motion\n instead.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 252 / 1290\n \n 5.6.4.1 Pins\n \u2022 iocontrol.0.coolant-flood (bit, out) TRUE when flood coolant is requested.\n \u2022 iocontrol.0.coolant-mist (bit, out) TRUE when mist coolant is requested.\n \u2022 iocontrol.0.emc-enable-in (bit, in) Should be driven FALSE when an external E-Stop condition exists.\n@@ -13651,15 +13651,15 @@\n \u2022 ini.N.home_offset - (float, in) [JOINT_N]HOME_OFFSET\n \u2022 ini.N.home_offset - (s32, in) [JOINT_N]HOME_SEQUENCE\n \u2022 ini.L.min_limit - (float, in) [AXIS_L]MIN_LIMIT\n \u2022 ini.L.max_limit - (float, in) [AXIS_L]MAX_LIMIT\n \u2022 ini.L.max_velocity - (float, in) [AXIS_L]MAX_VELOCITY\n \u2022 ini.L.max_acceleration - (float, in) [AXIS_L]MAX_ACCELERATION\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 253 / 1290\n \n Note\n The per-axis min_limit and max_limit pins are honored continuously after homing. The per-axis\n ferror and min_ferror pins are honored when the machine is on and not in position. The per-axis\n max_velocity and max_acceleration pins are sampled when the machine is on and the motion_state\n@@ -13692,15 +13692,15 @@\n If you do not find the man page or the name of the man page is already taken by another UNIX tool\n with the LinuxCNC man page residing in another section, then try to explicitly specify the section, as\n in man _sectionno_ axis, with sectionno = 1 for non-realtime and 9 for realtime components.\n Note\n See also the Man Pages section of the docs main page or the directory listing. To search in the man\n pages, use the UNIX tool apropos.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 254 / 1290\n \n 5.7.1.1 User Interfaces (non-realtime)\n axis\n axis-remote\n gmoccapy\n@@ -13781,15 +13781,15 @@\n gs2_vfd\n hy_gt_vfd\n \n Communicate with Mesa ethernet cards\n HAL non-realtime component for Automation Direct GS2 VFDs\n HAL non-realtime component for Huanyang GT-series VFDs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n hy_vfd\n mb2hal\n mitsub_vfd\n monitorxhc-hb04\n pi500_vfd\n pmx485\n@@ -13872,15 +13872,15 @@\n Pluto-P driver for the parallel port FPGA, for steppers\n serport\n Hardware driver for the digital I/O bits of the 8250 and 16550 serial port\n sserial\n hostmot2 - Smart Serial LinuxCNC HAL driver for the Mesa Electronics\n HostMot2 Smart-Serial remote cards\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n thc\n \n 256 / 1290\n \n Torch Height Control using a Mesa THC card or any analog to velocity input\n \n@@ -13963,15 +13963,15 @@\n Toggles between a specified number of output bits\n Inverter\n One-shot pulse generator\n Two-input OR gate\n 8-bit binary match detector.\n IEC TOF timer - delay falling edge on a signal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 257 / 1290\n \n toggle\n toggle2nist\n ton\n timedelay\n@@ -14062,15 +14062,15 @@\n updown\n Counts up or down, with optional limits and wraparound behavior.\n wcomp\n Window comparator.\n weighted_sumConvert a group of bits to an integer.\n xhc_hb04_util xhc-hb04 convenience utility\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 258 / 1290\n \n bin2gray\n Converts a number to the gray-code representation\n bitslice\n Converts an unsigned-32 input into individual bits\n@@ -14138,15 +14138,15 @@\n \n Accepts NML motion commands, interacts with HAL in realtime\n \n 3 When the input is a position, this means that the position is limited.\n 4 When the input is a position, this means that position and velocity are limited.\n 5 When the input is a position, this means that the position, velocity, and acceleration are limited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 259 / 1290\n \n 5.7.1.9 Motor control (Realtime)\n at_pid\n bldc\n clarke2\n@@ -14217,15 +14217,15 @@\n hal_exit.3hal\n hal_export_funct.3hal\n hal_float_t.3hal\n hal_get_lock.3hal\n hal_init.3hal\n hal_link.3hal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n hal_malloc.3hal\n hal_param_bit_new.3hal\n hal_param_bit_newf.3hal\n hal_param_float_new.3hal\n hal_param_float_newf.3hal\n hal_param_new.3hal\n@@ -14276,15 +14276,15 @@\n rtapi_exit.3rtapi\n rtapi_get_clocks.3rtapi\n rtapi_get_msg_level.3rtapi\n rtapi_get_time.3rtapi\n \n 260 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 261 / 1290\n \n rtapi_inb.3rtapi\n rtapi_init.3rtapi\n rtapi_module_param.3rtapi\n RTAPI_MP_ARRAY_INT.3rtapi\n@@ -14329,21 +14329,21 @@\n limits. It is a realtime component only, and depending on CPU speed, etc., is capable of maximum step\n rates of 10 kHz to perhaps 50 kHz. The step pulse generator block diagram shows three block diagrams, each is a single step pulse generator. The first diagram is for step type 0, (step and direction).\n The second is for step type 1 (up/down, or pseudo-PWM), and the third is for step types 2 through\n 14 (various stepping patterns). The first two diagrams show position mode control, and the third one\n shows velocity mode. Control mode and step type are set independently, and any combination can be\n selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 5.19: Step Pulse Generator Block Diagram position mode\n \n 262 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 263 / 1290\n \n Loading stepgen component\n halcmd: loadrt stepgen step_type= [ctrl_type=]\n \n \n@@ -14393,15 +14393,15 @@\n \u2022 (bit) stepgen. \u0300\n ____.phase-C \u0300 - Phase C output (step types 3-14 only).\n \u2022 (bit) stepgen. \u0300\n ____.phase-D \u0300 - Phase D output (step types 5-14 only).\n \u2022 (bit) stepgen. \u0300\n ____.phase-E \u0300 - Phase E output (step types 11-14 only).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 264 / 1290\n \n 5.8.1.2 Parameters\n \u2022 (float) stepgen. \u0300\n ____.position-scale \u0300 - Steps per position unit. This parameter is used for\n both output and feedback.\n@@ -14450,15 +14450,15 @@\n takes effect the first time the code runs. Since one step requires steplen ns high and stepspace ns low,\n the maximum frequency is 1,000,000,000 divided by (steplen + stepspace)\u2019. If maxfreq is set higher\n than that limit, it will be lowered automatically. If maxfreq is zero, it will remain zero, but the output\n frequency will still be limited.\n When using the parallel port driver the step frequency can be doubled using the parport reset function\n together with StepGen\u2019s doublefreq setting.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 265 / 1290\n \n Figure 5.20: Step and Direction Timing\n Step Type 1 Step type 1 has two outputs, up and down. Pulses appear on one or the other, depending\n on the direction of travel. Each pulse is steplen ns long, and the pulses are separated by at least\n stepspace ns. The maximum frequency is the same as for step type 0. If maxfreq is set higher than\n@@ -14470,33 +14470,33 @@\n \n Step Type 2 - 14 Step types 2 through 14 are state based, and have from two to five outputs. On\n each step, a state counter is incremented or decremented. The Two-and-Three-Phase, Four-Phase,\n and Five-Phase show the output patterns as a function of the state counter. The maximum frequency\n is 1,000,000,000 divided by steplen, and as in the other modes, maxfreq will be lowered if it is above\n the limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 5.21: Two-and-Three-Phase Step Types\n \n 266 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 267 / 1290\n \n Figure 5.22: Four-Phase Step Types\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 268 / 1290\n \n Figure 5.23: Five-Phase Step Types\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 269 / 1290\n \n 5.8.1.4 Functions\n The component exports three functions. Each function acts on all of the step pulse generators running different generators in different threads is not supported.\n \u2022 (funct) stepgen.make-pulses - High speed function to generate and count pulses (no floating point).\n \u2022 (funct) stepgen.update-freq - Low speed function does position to velocity conversion, scaling and\n@@ -14530,15 +14530,15 @@\n is no default value, if is not not specified, no PWM generator will be installed. The\n maximum number of frequency generators is 8 (as defined by MAX_CHAN in pwmgen.c). Each generator is independent, but all are updated by the same function(s), at the same time. In the descriptions\n that follow, is the number of specific generators. The numbering of PWM generators starts\n at 0.\n Unloading PWMgen\n unloadrt pwmgen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 270 / 1290\n \n 5.8.2.1 Output Types\n The PWM generator supports three different output types.\n \u2022 Output type 0 - PWM output pin only. Only positive commands are accepted, negative values are\n treated as zero (and will be affected by the parameter min-dc if it is non-zero).\n@@ -14583,15 +14583,15 @@\n to zero when disabled, regardless of this setting).\n \u2022 (float) pwmgen. \u0300\n ____.max-dc \u0300 - Maximum duty cycle, between 0.0 and 1.0.\n \u2022 (float) pwmgen. \u0300\n ____.curr-dc \u0300 - Current duty cycle - after all limiting and rounding (read\n only).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 271 / 1290\n \n 5.8.2.4 Functions\n The component exports two functions. Each function acts on all of the PWM generators - running\n different generators in different threads is not supported.\n \u2022 (funct) pwmgen.make-pulses - High speed function to generate PWM waveforms (no floating point).\n@@ -14612,15 +14612,15 @@\n The base thread should be 1/2 count speed to allow for noise and timing variation. For example if you\n have a 100 pulse per revolution encoder on the spindle and your maximum RPM is 3000 the maximum\n base thread should be 25 \u00b5s. A 100 pulse per revolution encoder will have 400 counts. The spindle\n speed of 3000 RPM = 50 RPS (revolutions per second). 400 * 50 = 20,000 counts per second or 50 \u00b5s\n between counts.\n The Encoder Counter Block Diagram is a block diagram of one channel of an encoder counter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 272 / 1290\n \n Figure 5.24: Encoder Counter Block Diagram\n Loading Encoder\n halcmd: loadrt encoder [num_chan=]\n \n@@ -14634,15 +14634,15 @@\n \n 5.8.3.1 Pins\n \u2022 encoder.__.counter-mode (bit, I/O) (default: FALSE) - Enables counter mode. When true,\n the counter counts each rising edge of the phase-A input, ignoring the value on phase-B. This is\n useful for counting the output of a single channel (non-quadrature) sensor. When false, it counts in\n quadrature mode.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 273 / 1290\n \n \u2022 encoder.__.missing-teeth (s32, In) (default: 0) - Enables the use of missing-tooth index.\n This allows a single IO pin to provide both position and index information. If the encoder wheel has\n 58 teeth with two missing, spaced as if there were 60(common for automotive crank sensors) then\n the position-scale should be set to 60 and missing-teeth to 2. To use this mode counter-mode should\n@@ -14681,15 +14681,15 @@\n pulse.\n \u2022 encoder.__.reset (bit, In) - When True, force counts and position to zero immediately.\n \u2022 encoder.__.velocity (float, Out) - Velocity in scaled units per second. encoder uses an\n algorithm that greatly reduces quantization noise as compared to simply differentiating the position\n output. When the magnitude of the true velocity is below min-speed-estimate, the velocity output\n is 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 274 / 1290\n \n \u2022 encoder.__.x4-mode (bit, I/O) (default: TRUE) - Enables times-4 mode. When true, the\n counter counts each edge of the quadrature waveform (four counts per full cycle). When false, it\n only counts once per full cycle. In counter-mode, this parameter is ignored. The 1x mode is useful\n for some jogwheels.\n@@ -14706,15 +14706,15 @@\n \n 5.8.4 PID\n This component provides Proportional/Integral/Derivative control loops. It is a realtime component\n only. For simplicity, this discussion assumes that we are talking about position loops, however this\n component can be used to implement other feedback loops such as speed, torch height, temperature,\n etc. The PID Loop Block Diagram is a block diagram of a single PID loop.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 275 / 1290\n \n Figure 5.25: PID Loop Block Diagram\n Loading PID\n halcmd: loadrt pid [num_chan=] [debug=1]\n \n@@ -14727,15 +14727,15 @@\n cluttering the pin list.\n Unloading PID\n halcmd: unloadrt pid\n \n 5.8.4.1 Pins\n The three most important pins are\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 276 / 1290\n \n \u2022 (float) pid. \u0300\n ____.command \u0300 - The desired position, as commanded by another system\n component.\n \u2022 (float) pid. \u0300\n@@ -14773,15 +14773,15 @@\n \u2022 (float) pid..deadband - Amount of error that will be ignored\n \u2022 (float) pid..maxerror - Limit on error\n \u2022 (float) pid..maxerrorI - Limit on error integrator\n \u2022 (float) pid..maxerrorD - Limit on error derivative\n \u2022 (float) pid..maxcmdD - Limit on command derivative\n \u2022 (float) pid..maxcmdDD - Limit on command 2nd derivative\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 277 / 1290\n \n \u2022 (float) pid..maxoutput - Limit on output value\n All max* limits are implemented so that if the value of this parameter is zero, there is no limit.\n If debug=1 was specified when the component was installed, four additional pins will be exported:\n \u2022 (float) pid..errorI - Integral of error.\n@@ -14814,15 +14814,15 @@\n ____.phase-A \u0300 - Quadrature output.\n \u2022 (bit) sim-encoder. \u0300\n ____.phase-B \u0300 - Quadrature output.\n \u2022 (bit) sim-encoder. \u0300\n ____.phase-Z \u0300 - Index pulse output.\n When .speed is positive, .phase-A leads .phase-B.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 278 / 1290\n \n 5.8.5.2 Parameters\n \u2022 (u32) sim-encoder. \u0300\n ____.ppr \u0300 - Pulses Per Revolution.\n \u2022 (float) sim-encoder. \u0300\n@@ -14860,15 +14860,15 @@\n 5.8.6.1 Pins\n Each individual filter has two pins.\n \u2022 (bit) debounce. \u0300\n ____.____.in \u0300 - Input of filter in group .\n \u2022 (bit) debounce. \u0300\n ____.____.out \u0300 - Output of filter in group .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 279 / 1290\n \n 5.8.6.2 Parameters\n Each group of filters has one parameter6 .\n \u2022 (s32) debounce. \u0300\n ____.delay \u0300 - Filter delay for all filters in group .\n@@ -14907,15 +14907,15 @@\n \u2022 (float) siggen. \u0300\n ____.triangle \u0300 - Triangle wave output.\n \u2022 (float) siggen. \u0300\n ____.square \u0300 - Square wave output.\n 6 Each individual filter also has an internal state variable. There is a compile time switch that can export that variable as a\n parameter. This is intended for testing, and simply wastes shared memory under normal circumstances.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 280 / 1290\n \n All five outputs have the same frequency, amplitude, and offset.\n In addition to the output pins, there are three control pins:\n \u2022 (float) siggen. \u0300\n ____.frequency \u0300 - Sets the frequency in Hertz, default value is 1 Hz.\n@@ -14993,15 +14993,15 @@\n 0\n \n Output\n \n 7 Prior to version 2.1, frequency, amplitude, and offset were parameters. They were changed to pins to allow control by\n other components.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 281 / 1290\n \n Table 5.6: (continued)\n Bit 4\n 0\n 0\n@@ -15184,15 +15184,15 @@\n function is 0xa. The hexadecimal prefix is 0x.\n \n 5.9 HAL Component Generator\n 5.9.1 Introduction\n This section introduces to the compilation HAL components, i.e. the addition of some machinists\u2019\n knowledge on how to deal with the machine. It should be noted that such components do not nec-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 282 / 1290\n \n essarily deal with the hardware directly. They often do, but not necessarily, e.g. there could be a\n component to convert between imperial and metric scales, so this section does not require to dive\n into the interaction with hardware.\n Writing a HAL component can be a tedious process, most of it in setup calls to rtapi_ and hal_ functions\n@@ -15232,15 +15232,15 @@\n loadrt threads name1=servo-thread period1=1000000\n loadrt ddt\n addf ddt.0 servo-thread\n \n More information on loadrt and addf can be found in the HAL Basics.\n To test your component you can follow the examples in the HAL Tutorial.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 283 / 1290\n \n 5.9.4 Definitions\n \u2022 component - A component is a single real-time module, which is loaded with halcmd loadrt. One\n .comp file specifies one component. The component name and file name must match.\n \u2022 instance - A component can have zero or more instances. Each instance of a component is created\n@@ -15274,15 +15274,15 @@\n \u2022 option OPT (VALUE);\n \u2022 variable CTYPE STARREDNAME ([SIZE]);\n \u2022 description DOC;\n \u2022 examples DOC;\n \u2022 notes DOC;\n \u2022 see_also DOC;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 284 / 1290\n \n \u2022 license LICENSE;\n \u2022 author AUTHOR;\n \u2022 include HEADERFILE;\n Parentheses indicate optional items. A vertical bar indicates alternatives. Words in CAPITALS indicate\n@@ -15333,15 +15333,15 @@\n \u2022 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\n array is created its size will be CONDSIZE.\n \u2022 DOC - A string that documents the item. String can be a C-style \u201ddouble quoted\u201d string, like:\n \u201dSelects the desired edge: TRUE means falling, FALSE means rising\u201d\n \n or a Python-style \u201dtriple quoted\u201d string, which may include embedded newlines and quote characters, such as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 285 / 1290\n \n \u201d\u201d\u201dThe effect of this parameter, also known as \u201dthe orb of zot\u201d,\n will require at least two paragraphs to explain.\n Hopefully these paragraphs have allowed you to understand \u201dzot\u201d\n better.\u201d\u201d\u201d\n@@ -15379,15 +15379,15 @@\n items for numbered instances are named component-name..item-name.\n \u2022 option default_count number - (default: 1) Normally, the module parameter count defaults to 1. If\n specified, the count will default to this value instead.\n \u2022 option count_function yes - (default: no) Normally, the number of instances to create is specified in\n the module parameter count; if count_function is specified, the value returned by the function int\n get_count(void) is used instead, and the count module parameter is not defined.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 286 / 1290\n \n \u2022 option rtapi_app no - (default: yes) Normally, the functions rtapi_app_main() and rtapi_app_exit()\n are automatically defined. With option rtapi_app no, they are not, and must be provided in the C\n code. Use the following prototypes:\n \u2018int rtapi_app_main(void);\u2018\n@@ -15431,15 +15431,15 @@\n command-line with --extra-compile-args=\u201d-I\u2026..\u201d. This alternative provides a way to set extra flags\n in cases where the input file is a .c file rather than a .comp file.\n \u2022 option homemod yes - (default: no)\n Module is a custom Homing module loaded using [EMCMOT]HOMEMOD=modulename .\n \u2022 option tpmod yes - (default: no)\n Module is a custom Trajectory Planning (tp) module loaded using [TRAJ]TPMOD=modulename .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 287 / 1290\n \n If an option\u2019s VALUE is not specified, then it is equivalent to specifying option \u2026 yes.\n The result of assigning an inappropriate value to an option is undefined.\n The result of using any other option is undefined.\n \n@@ -15472,15 +15472,15 @@\n 5.9.8 Restrictions\n Though HAL permits a pin, a parameter, and a function to have the same name, halcompile does not.\n Variable and function names that can not be used or are likely to cause problems include:\n \u2022 Anything beginning with _comp.\n \u2022 comp_id\n \u2022 fperiod\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 288 / 1290\n \n \u2022 rtapi_app_main\n \u2022 rtapi_app_exit\n \u2022 extra_setup\n \u2022 extra_cleanup\n@@ -15517,15 +15517,15 @@\n they do in realtime functions.\n \n 5.9.10 Components with one function\n If a component has only one function and the string \u201dFUNCTION\u201d does not appear anywhere after ;;,\n then the portion after ;; is all taken to be the body of the component\u2019s single function. See the Simple\n Comp for an example of this.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 289 / 1290\n \n 5.9.11 Component Personality\n If a component has any pins or parameters with an \u201dif condition\u201d or \u201d[maxsize : condsize]\u201d, it is called a\n component with personality. The personality of each instance is specified when the module is loaded.\n Personality can be used to create pins only when needed. For instance, personality is used in the logic\n@@ -15560,15 +15560,15 @@\n \n Or, it can process and compile in one step, leaving example.ko (or example.so for the simulator) in the\n current directory:\n halcompile --compile rtexample.comp\n \n Or it can simply process, leaving example.c in the current directory:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 290 / 1290\n \n halcompile rtexample.comp\n \n halcompile can also compile and install a component written in C, using the --install and --compile\n options shown above:\n@@ -15606,15 +15606,15 @@\n pin out float out;\n param r float value = 1.0;\n function _;\n license \u201dGPL\u201d; // indicates GPL v2 or later\n ;;\n FUNCTION(_) { out = value; }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 291 / 1290\n \n 5.9.15.2 sincos\n This component computes the sine and cosine of an input angle in radians. It has different capabilities\n than the \u201dsine\u201d and \u201dcosine\u201d outputs of siggen, because the input is an angle, rather than running\n freely based on a \u201dfrequency\u201d parameter.\n@@ -15660,15 +15660,15 @@\n // set this I/O port to 0 so that EXTRA_CLEANUP does not release the IO\n // ports that were never requested.\n io[extra_arg] = 0;\n return -EBUSY;\n }\n ioaddr = io[extra_arg];\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 292 / 1290\n \n return 0;\n }\n EXTRA_CLEANUP() {\n int i;\n@@ -15710,15 +15710,15 @@\n ;;\n #include \n void user_mainloop(void) {\n while(1) {\n usleep(1000);\n FOR_ALL_INSTS() out = drand48();\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 293 / 1290\n \n }\n }\n \n 5.9.15.7 logic\n@@ -15764,15 +15764,15 @@\n logic.1.in-03, logic.1.in-04,\n \n \u2022 3-input AND and XOR gates: logic.2.and, logic.2.xor, logic.2.in-00, logic.2.in-01, logic.2.in-02\n 5.9.15.8 General Functions\n This example shows how to call functions from the main function. It also shows how to pass reference\n of HAL pins to those functions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 294 / 1290\n \n component example;\n pin in s32 in;\n pin out bit out1;\n pin out bit out2;\n@@ -15816,15 +15816,15 @@\n level languages.\n The haltcl facility provides a means to use Tcl scripting and its features for computation, looping,\n branching, procedures, etc. in INI files. To use this functionality, you use the Tcl language and the\n extension .tcl for HAL files.\n The .tcl extension is understood by the main script (linuxcnc) that processes INI files. Haltcl files\n are identified in the the HAL section of INI files (just like HAL files).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 295 / 1290\n \n Example\n [HAL]\n HALFILE = conventional_file.hal\n HALFILE = tcl_based_file.tcl\n@@ -15871,15 +15871,15 @@\n ...\n \n The INI file values are accessible by text substitution in HAL files using the form:\n [SECTION]ITEM\n \n The same INI file values are accessible in Tcl files using the form of a Tcl global array variable:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 296 / 1290\n \n $::SECTION(ITEM)\n \n For example, an INI file item like:\n [JOINT_0]\n@@ -15921,15 +15921,15 @@\n above. The process can be automated with scripts that convert using these substitutions.\n [SECTION]ITEM ---> $::SECTION(ITEM)\n gets\n ---> hal gets\n list\n ---> hal list\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 297 / 1290\n \n 5.10.5 Haltcl Notes\n In haltcl, the value argument for the sets and setp commands is implicitly treated as an expression in\n the Tcl language.\n Example\n@@ -15972,15 +15972,15 @@\n net ${axis}vel => ddt.$ddt.in\n net ${axis}acc <= ddt.$ddt.out\n incr ddt\n }\n puts [show sig *vel]\n puts [show sig *acc]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 298 / 1290\n \n 5.10.7 Haltcl Interactive\n The halrun command recognizes haltcl files. With the -T option, haltcl can be run interaactively as a\n Tcl interpreter. This capability is useful for testing and for standalone HAL applications.\n Example\n@@ -16016,15 +16016,15 @@\n ...\n \n When halui starts it will read the MDI_COMMAND fields in the INI and export pins from 00 to the number\n of MDI_COMMAND \u2019s found in the INI, up to a maximum of 64 commands. These pins can be connected\n like any HAL pins. A common method is to use buttons provided by virtual control panels like shown\n in the example Example for MDI_COMMAND connections.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 299 / 1290\n \n Example 5.1 Example for MDI_COMMAND connections\n HAL file\n net quill-up\n halui.mdi-command-00 <= pyvcp.quillup\n@@ -16064,15 +16064,15 @@\n \u2022 halui.estop.reset (bit, in) - pin for requesting E-Stop reset\n 5.11.4.3 Feed Override\n \u2022 halui.feed-override.count-enable (bit, in) - must be true for counts or direct-value to work.\n \u2022 halui.feed-override.counts (s32, in) - counts * scale = FO percentage. Can be used with an encoder\n or direct-value.\n \u2022 halui.feed-override.decrease (bit, in) - pin for decreasing the FO (-=scale)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 300 / 1290\n \n \u2022 halui.feed-override.increase (bit, in) - pin for increasing the FO (+=scale)\n \u2022 halui.feed-override.reset (bit, in) - pin for resetting the FO (scale=1.0)\n \u2022 halui.feed-override.direct-value (bit, in) - false when using encoder to change counts, true when\n setting counts directly.\n@@ -16096,15 +16096,15 @@\n \u2022 halui.lube.on (bit, in) - pin for requesting lube on\n 5.11.4.8 Machine\n \u2022 halui.machine.units-per-mm (float out) - pin for machine units-per-mm (inch:1/25.4, mm:1) according to inifile setting: [TRAJ]LINEAR_UNITS\n \u2022 halui.machine.is-on (bit, out) - indicates machine on\n \u2022 halui.machine.off (bit, in) - pin for requesting machine off\n \u2022 halui.machine.on (bit, in) - pin for requesting machine on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 301 / 1290\n \n 5.11.4.9 Max Velocity\n The maximum linear velocity can be adjusted from 0 to the MAX_VELOCITY that is set in the [TRAJ]\n section of the INI file.\n \u2022 halui.max-velocity.count-enable (bit, in) - must be true for counts or direct-value to work.\n@@ -16138,15 +16138,15 @@\n limit\n \u2022 halui.joint.N.on-soft-max-limit (bit out) - status pin telling that joint N is on the positive software\n limit\n \u2022 halui.joint.N.on-soft-min-limit (bit out) - status pin telling that joint N is on the negative software\n limit\n \u2022 halui.joint.N.override-limits (bit out) - status pin telling that joint N\u2019s limits are temporarily overridden\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 302 / 1290\n \n \u2022 halui.joint.N.unhome (bit in) - pin for unhoming joint N\n \u2022 halui.joint.selected (u32 out) - selected joint number (0 \u2026 num_joints-1)\n \u2022 halui.joint.selected.has-fault (bit out) - status pin selected joint is faulted\n \u2022 halui.joint.selected.home (bit in) - pin for homing the selected joint\n@@ -16179,15 +16179,15 @@\n \u2022 halui.joint.selected.increment (float in) - pin for setting the jog increment for the selected joint when\n using increment-plus/minus\n \u2022 halui.joint.selected.increment-minus (bit in) - a rising edge will will make the selected joint jog in\n the negative direction by the increment amount\n \u2022 halui.joint.selected.increment-plus (bit in) - a rising edge will will make the selected joint jog in the\n positive direction by the increment amount\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 303 / 1290\n \n \u2022 halui.joint.selected.minus (bit in) - pin for jogging the selected joint in negative direction at the\n halui.joint.jog-speed velocity\n \n \u2022 halui.joint.selected.plus (bit in) - pin for jogging the selected joint in positive direction at the halui.joint.jogspeed velocity\n@@ -16220,15 +16220,15 @@\n \u2022 halui.axis.selected.increment-plus (bit in) - a rising edge will will make the selected axis jog in the\n positive direction by the increment amount\n \u2022 halui.axis.selected.minus (bit in) - pin for jogging the selected axis in negative direction at the\n halui.axis.jog-speed velocity\n \u2022 halui.axis.selected.plus (pin in) - for jogging the selected axis bit in in positive direction at the\n halui.axis.jog-speed velocity\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 304 / 1290\n \n 5.11.4.15 Mode\n \u2022 halui.mode.auto (bit, in) - pin for requesting auto mode\n \u2022 halui.mode.is-auto (bit, out) - indicates auto mode is on\n \u2022 halui.mode.is-joint (bit, out) - indicates joint by joint jog mode is on\n@@ -16258,15 +16258,15 @@\n \u2022 halui.rapid-override.count-enable (bit in (default: TRUE)) - When TRUE, modify Rapid Override\n when counts changes.\n \u2022 halui.rapid-override.counts (s32 in) - counts X scale = Rapid Override percentage. Can be used\n with an encoder or direct-value.\n \u2022 halui.rapid-override.decrease (bit in) - pin for decreasing the Rapid Override (-=scale)\n \u2022 halui.rapid-override.direct-value (bit in) - pin to enable direct value Rapid Override input\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 305 / 1290\n \n \u2022 halui.rapid-override.increase (bit in) - pin for increasing the Rapid Override (+=scale)\n \u2022 halui.rapid-override.scale (float in) - pin for setting the scale on changing the Rapid Override\n \u2022 halui.rapid-override.value (float out) - current Rapid Override value\n \u2022 halui.rapid-override.reset (bit, in) - pin for resetting the Rapid Override value (scale=1.0)\n@@ -16291,15 +16291,15 @@\n \u2022 halui.spindle.N.is-on (bit, out) - indicates spindle is on (either direction)\n \u2022 halui.spindle.N.reverse (bit, in)- starts the spindle with a CCW motion\n \u2022 halui.spindle.N.runs-backward (bit, out) - indicates spindle is on, and in reverse\n \u2022 halui.spindle.N.runs-forward (bit, out) - indicates spindle is on, and in forward\n \u2022 halui.spindle.N.start (bit, in) - starts the spindle\n \u2022 halui.spindle.N.stop (bit, in) - stops the spindle\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 306 / 1290\n \n 5.11.4.20 Tool\n \u2022 halui.tool.length-offset.a (float out) - current applied tool length offset for the A axis\n \u2022 halui.tool.length-offset.b (float out) - current applied tool length offset for the B axis\n \u2022 halui.tool.length-offset.c (float out) - current applied tool length offset for the C axis\n@@ -16320,15 +16320,15 @@\n To connect a remote program start button to LinuxCNC you use the halui.program.run pin and the\n halui.mode.auto pin. You have to insure that it is OK to run first by using the halui.mode.is-auto\n pin. You do this with an and2 component. The following figure shows how this is done. When the\n Remote Run Button is pressed it is connected to both halui.mode.auto and and2.0.in0. If it is OK\n for auto mode the pin halui.mode.is-auto will be on. If both the inputs to the and2.0 component\n are on the and2.0.out will be on and this will start the program.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 307 / 1290\n \n Figure 5.26: Remote Start Example\n The hal commands needed to accomplish the above are:\n net program-start-btn halui.mode.auto and2.0.in0 <= \n net program-run-ok and2.0.in1 <= halui.mode.is-auto\n@@ -16351,15 +16351,15 @@\n Your input and output pins are connected to the pins wired to the other controller. They may be\n parallel port pins or any other I/O pins that you have access to.\n \n This system works in the following way. When an M0 is encountered in your G-code, the halui.program.is-p\n signal goes true. This turns on your output pin so that the external controller knows that LinuxCNC\n is paused.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 308 / 1290\n \n To resume the LinuxCNC G-code program, when the external controller is ready it will make its output\n true. This will signal LinuxCNC that it should resume executing G-code.\n Difficulties in timing\n \u2022 The \u201dresume\u201d input return signal should not be longer than the time required to get the G-code\n@@ -16409,15 +16409,15 @@\n Name\n passthrough.in\n passthrough.out\n \n halcmd: setp passthrough.in 3.14\n halcmd: show pin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Component Pins:\n Owner Type Dir\n 03\n float IN\n 03\n float OUT\n@@ -16475,15 +16475,15 @@\n h.ready()\n \n Once all the pins and parameters have been created, call the .ready() method.\n 5.13.3.1 Changing the prefix\n The prefix can be changed by calling the .setprefix() method. The current prefix can be retrieved by\n calling the .getprefix() method.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 310 / 1290\n \n 5.13.4 Reading and writing pins and parameters\n For pins and parameters which are also proper Python identifiers, the value may be accessed or set\n using the attribute syntax:\n h.out = h.in\n@@ -16519,15 +16519,15 @@\n \n 5.13.7 Constants\n Use these to specify details rather then the value they hold.\n \u2022 HAL_BIT\n \u2022 HAL_FLOAT\n \u2022 HAL_S32\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 311 / 1290\n \n \u2022 HAL_U32\n \u2022 HAL_IN\n \u2022 HAL_OUT\n \u2022 HAL_RO\n@@ -16559,15 +16559,15 @@\n 5.14.2.1 Pins\n \n (bit) in\n State of the hardware input.\n (bit) in-not\n Inverted state of the input.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 312 / 1290\n \n 5.14.2.2 Parameters\n None\n 5.14.2.3 Functions\n \n@@ -16593,15 +16593,15 @@\n The canonical analog input (I/O type: adcin). This is expected to be used for analog to digital converters, which convert e.g. voltage to a continuous range of values.\n 5.14.4.1 Pins\n \n (float) value\n The hardware reading, scaled according to the scale and offset parameters.\n value = ((input reading, in hardware-dependent units) * scale) - offset\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 313 / 1290\n \n 5.14.4.2 Parameters\n \n (float) scale\n The input voltage (or current) will be multiplied by scale before being output to value.\n@@ -16636,15 +16636,15 @@\n (float) scale\n This should be set so that an input of 1 on the value pin will cause the analog output pin to read\n 1 volt.\n (float) high_limit (optional)\n When calculating the value to output to the hardware, if value + offset is greater than high_limit,\n then high_limit will be used instead.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 314 / 1290\n \n (float) low_limit (optional)\n When calculating the value to output to the hardware, if value + offset is less than low_limit,\n then low_limit will be used instead.\n (float) bit_weight (optional)\n@@ -16684,15 +16684,15 @@\n lists will disappear, and the small window will display the name and value of the selected item. The\n display is updated approximately 10 times per second. If you click \u201dAccept\u201d instead of \u201dOK\u201d, the small\n window will display the name and value of the selected item, but the large window will remain on the\n screen. This is convenient if you want to look at a number of different items quickly.\n You can have many halmeters running at the same time, if you want to monitor several items. If\n you want to launch a halmeter without tying up a shell window, type halmeter & to run it in the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 315 / 1290\n \n background. You can also make halmeter start displaying a specific item immediately, by adding\n pin|sig|par[am] __ to the command line. It will display the pin, signal, or parameter \n as soon as it starts - if there is no such item, it will simply start normally. And finally, if you specify an\n item to display, you can add -s before the pin|sig|param to tell halmeter to use a small window. The\n@@ -16706,15 +16706,15 @@\n of your screen. For example:\n loadusr halmeter pin hm2.0.stepgen.00.velocity-fb -g 0 500\n \n See the man page for more options and the section Halmeter.\n \n Figure 5.27: Halmeter selection window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 316 / 1290\n \n Figure 5.28: Halmeter watch window\n \n 5.15.3 Halshow\n halshow (complete usage description) can be started from the command line to show details for selected components, pins, parameters, signals, functions, and threads of a running HAL. The WATCH\n@@ -16728,15 +16728,15 @@\n (this help)\n --fformat format_string_for_float\n --iformat format_string_for_int\n Notes:\n Create watchfile in halshow using: \u2019File/Save Watch List\u2019.\n LinuxCNC must be running for standalone usage.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 317 / 1290\n \n Figure 5.29: Halshow Watch Tab\n A watchfile created using the File/Save Watch List menu item is formatted as a single line with tokens\n \u201dpin+\u201d, \u201dparam+\u201d, \u201dsig=+\u201d, followed by the appropriate pin, param, or signal name. The token-name\n pairs are separated by a space character.\n@@ -16749,15 +16749,15 @@\n pin+joint.0.pos-hard-limit\n pin+joint.1.pos-hard-limit\n sig+estop-loop\n \n When loading a watchfile with the File/Load Watch List menu item, the token-name pairs may appear\n as single or multiple lines. Blank lines and lines beginning with a # character are ignored.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 318 / 1290\n \n 5.15.4 Halscope\n Halscope is an oscilloscope for the HAL. It lets you capture the value of pins, signals, and parameters\n as a function of time. Complete operating instructions should be located here eventually. For now,\n refer to section Section 5.4.6 in the tutorial chapter, which explains the basics.\n@@ -16808,15 +16808,15 @@\n For complete information, see the man page:\n man sim_pin\n \n sim_pin Example (with LinuxCNC running)\n halcmd loadrt mux2 names=example; halcmd net sig_example example.in0\n sim_pin example.sel example.in1 sig_example &\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 319 / 1290\n \n Figure 5.30: sim_pin Window\n \n 5.15.6 Simulate Probe\n simulate_probe is a simple GUI to simulate activation of the pin motion.probe-input. Usage:\n@@ -16824,15 +16824,15 @@\n \n Figure 5.31: simulate_probe Window\n \n 5.15.7 HAL Histogram\n hal-histogram is a command line utility to display histograms for HAL pins.\n Usage:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 320 / 1290\n \n hal-histogram --help | -?\n or\n hal-histogram [Options] [pinname]\n \n@@ -16872,15 +16872,15 @@\n 1. LinuxCNC (or another HAL application) must be running.\n 2. If no pinname is specified, default is: motion-command-handler.time.\n 3. This app may be opened for 5 pins.\n 4. Pintypes float, s32, u32, bit are supported.\n 5. The pin must be associated with a thread supporting floating point. For a base thread, this may\n require using loadrt motmod ... base_thread_fp=1 .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 321 / 1290\n \n Figure 5.32: hal-histogram Window\n \n 5.15.8 Halreport\n halreport is a command-line utility that generates a report about HAL connections for a running\n@@ -16891,15 +16891,15 @@\n 3. Each pin\u2019s component_function, thread, and addf-order.\n 4. Non-realtime component pins having non-ordered functions.\n 5. Identification of unknown functions for unhandled components.\n 6. Signals with no output.\n 7. Signals with no inputs.\n 8. Functions with no addf.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 322 / 1290\n \n 9. Warning tags for components marked as deprecated/obsolete in docs.\n 10. Real names for pins that use alias names.\n The report can be generated from the command line and directed to an output file (or stdout if no\n outfilename is specified):\n@@ -16975,15 +16975,15 @@\n \n servo-thread 004\n servo-thread 008\n \n In the example above, the HALFILE uses halcmd aliases to simplify pin names for an hostmot2 FPGA\n board with commands like:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 323 / 1290\n \n alias pin hm2_7i92.0.stepgen.00.position-fb h.00.position-fb\n \n Note\n Questionable component function detection may occur for\n@@ -16997,15 +16997,15 @@\n Component pins that cannot be associated with a known thread function report the function as \u201dUnknown\u201d.\n \n halreport generates a connections report (without pin types, and current values) for a running HAL\n application to aid in designing and verifying connections. This helps with the understanding what the\n source of a pin value is. Use this information with applications like halshow, halmeter, halscope or\n the halcmd show command in a terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 324 / 1290\n \n Chapter 6\n \n Hardware Drivers\n 6.1 Parallel Port Driver\n@@ -17038,15 +17038,15 @@\n The parport driver can control up to 8 ports (defined by MAX_PORTS in hal_parport.c). The ports are\n numbered starting at zero.\n \n 6.1.1 Loading\n The hal_parport driver is a real time component so it must be loaded into the real time thread with\n loadrt. The configuration string describes the parallel ports to be used, and (optionally) their types.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 325 / 1290\n \n If the configuration string does not describe at least one port, it is an error.\n loadrt hal_parport cfg=\u201dport [type] [port [type] ...]\u201d\n \n Specifying the Port Numbers below 16 refer to parallel ports detected by the system. This is the\n@@ -17070,15 +17070,15 @@\n 2 to 9 explicitly specified as outputs. Note that you must know the base address of the parallel ports\n to configure the drivers correctly. For ISA bus ports, this is usually not a problem, since the ports\n are almost always at a well-known address, such as 0x278 or 0x378 which are typically configured\n in the BIOS. The addresses of PCI bus cards are usually found with lspci -v in an I/O ports line, or\n in a kernel message after running sudo modprobe -a parport_pc. There is no default address, so if\n does not contain at least one address, it is an error.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 326 / 1290\n \n Figure 6.1: Parport block diagram\n Type For each parallel port handled by the hal_parport driver, a type can optionally be specified. The\n type is one of in, out, epp, or x.\n Table 6.1: Parallel Port Direction\n@@ -17138,15 +17138,15 @@\n out\n out\n in\n in\n in\n in\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 327 / 1290\n \n Table 6.1: (continued)\n Pin\n 14\n 15\n@@ -17209,15 +17209,15 @@\n direction.\n loadrt hal_parport cfg=\u201d0x378 0xc000\u201d\n \n Please note that your values will differ. The Netmos cards are Plug-N-Play, and might change their\n settings depending on which slot you put them into, so if you like to get under the hood and re-arrange\n things, be sure to check these values before you start LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 328 / 1290\n \n 6.1.3 Pins\n \u2022 parport.

.pin- \u0300\n ____-out \u0300 (bit) Drives a physical output pin.\n \u2022 parport.

.pin- \u0300\n@@ -17261,15 +17261,15 @@\n in the same thread as write. If -reset is TRUE, then the reset function will set the pin to the value\n of -out-invert. This can be used in conjunction with stepgen\u2019s doublefreq to produce one step per\n period. The stepgen stepspace for that pin must be set to 0 to enable doublefreq.\n The individual functions are provided for situations where one port needs to be updated in a very fast\n thread, but other ports can be updated in a slower thread to save CPU time. It is probably not a good\n idea to use both an -all function and an individual function at the same time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 329 / 1290\n \n 6.1.6 Common problems\n If loading the module reports\n insmod: error inserting \u2019/home/jepler/emc2/rtlib/hal_parport.ko\u2019:\n -1 Device or resource busy\n@@ -17311,15 +17311,15 @@\n \n Then use of this module will probably be necessary.\n Finally, HAL parport components should be loaded:\n loadrt probe_parport\n loadrt hal_parport ...\n 1 In the LinuxCNC packages for Ubuntu, the file /etc/modprobe.d/emc2 generally prevents parport_pc from being automatically loaded.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 330 / 1290\n \n 6.2 AX5214H Driver\n The Axiom Measurement & Control AX5214H is a 48 channel digital I/O board. It plugs into an ISA\n bus, and resembles a pair of 8255 chips. In fact it may be a pair of 8255 chips, but I\u2019m not sure.\n If/when someone starts a driver for an 8255 they should look at the ax5214 code, much of the work is\n@@ -17358,15 +17358,15 @@\n module, and FALSE drives it high, turning OFF the OPTO-22 module. If -invert is TRUE, then setting\n the HAL out- pin TRUE will drive the physical pin high and turn the module OFF.\n \n 6.2.4 Functions\n \u2022 (funct) ax5214..read \u2014 Reads all digital inputs on one board.\n \u2022 (funct) ax5214..write \u2014 Writes all digital outputs on one board.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 331 / 1290\n \n 6.3 General Mechatronics Driver\n General Mechatronics GM6-PCI card based motion control system\n For detailed description, please refer to the System integration manual.\n The GM6-PCI motion control card is based on an FPGA and a PCI bridge interface ASIC. A small\n@@ -17385,15 +17385,15 @@\n loadrt hal_gm\n \n During loading (or attempted loading) the driver prints some useful debugging messages to the kernel\n log, which can be viewed with dmesg.\n Up to 3 boards may be used in one system.\n The following connectors can be found on the GM6-PCI card:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 332 / 1290\n \n Figure 6.2: GM6-PCI card connectors and LEDs\n \n 6.3.1 I/O connectors\n \n@@ -17429,15 +17429,15 @@\n 2\n IOx/0\n \n Each pin can be configured as digital input or output. GM6-PCI motion control card has 4 general\n purpose I/O (GPIO) connectors, with eight configurable I/O on each. Every GPIO pin and parameter\n name begins as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 333 / 1290\n \n gm..gpio.\n \n where is from 0 to 3.\n State of the first pin of the first GPIO connector on the GM6-PCI card.\n@@ -17485,15 +17485,15 @@\n When True, pin value will be inverted.\n Used when pin is configured as output.\n \n 6.3.2 Axis connectors\n \n Figure 6.4: Pin numbering of axis connectors\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 334 / 1290\n \n Table 6.5: Pinout of axis connectors\n 1\n 2\n 3\n@@ -17521,15 +17521,15 @@\n modules to the axis connectors. Seven different system configurations are presented in the System integration manual for evaluating typical applications. Also the detailed description of the Axis modules\n can be found in the System integration manual.\n For evaluating the appropriate servo-drive structure the modules have to be connected as the following\n block diagram shows:\n \n Figure 6.5: Servo axis interfaces\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 335 / 1290\n \n 6.3.2.2 Encoder\n The GM6-PCI motion control card has six encoder modules. Each encoder module has three channels:\n \u2022 Channel-A\n \u2022 Channel-B\n@@ -17593,15 +17593,15 @@\n calculate velocity. It greatly reduces\n quantization noise as compared to\n simply differentiating the position\n output. When the measured velocity is\n below min-speed-estimate, the\n velocity output is 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 336 / 1290\n \n Table 6.7: Encoder parameters\n Parameters\n .counter-mode\n \n@@ -17676,15 +17676,15 @@\n example, if position-scale is 2000, then\n 1000 counts of the encoder will\n produce a position of 0.5 units.\n \n Setting encoder module of axis 0 to receive 500 CPR quadrature encoder signal and use\n reset to round position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 337 / 1290\n \n setp gm.0.encoder.0.counter-mode 0\n # 0: quad, 1: stepDir\n setp gm.0.encoder.0.index-mode 1\n # 0: reset pos at index, 1:round pos at index\n@@ -17755,15 +17755,15 @@\n \n Parameter description\n When 0, module produces Step/Dir signal.\n When 1, it produces Up/Down step signals.\n And when it is 2, it produces quadrature\n output signals.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 338 / 1290\n \n Table 6.9: (continued)\n Parameters\n .control-type\n \n@@ -17820,15 +17820,15 @@\n Minimum time between two step pulses in\n nano-seconds.\n Minimum time between step pulse and\n direction change in nanoseconds.\n \n For evaluating the appropriate values see the timing diagrams below:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 339 / 1290\n \n Figure 6.6: Reference signal timing diagrams\n Setting StepGen module of axis 0 to generate 1000 step pulse per position unit\n setp gm.0.stepgen.0.step-type 0\n setp gm.0.stepgen.0.control-type 0\n@@ -17846,15 +17846,15 @@\n # step generator, let interpolator control it.\n setp gm.0.stepgen.0.position-scale 1000 # 1000 step/position unit\n setp gm.0.stepgen.0.steplen 1000\n # 1000 ns = 1 \u00b5s\n setp gm.0.stepgen.0.stepspace1000\n # 1000 ns = 1 \u00b5s\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 340 / 1290\n \n setp gm.0.stepgen.0.dirdelay 2000\n \n # 2000 ns = 2 \u00b5s\n \n@@ -17907,15 +17907,15 @@\n direction\n (bit, In)\n \n Pin description\n Enable DAC output. When enable is\n false, DAC output is 0.0 V.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 341 / 1290\n \n Table 6.11: (continued)\n Pins\n \n Type and\n@@ -17978,15 +17978,15 @@\n gm..can-gm.\n \n where is from 0 to 5. For example, gm.0.can-gm.0.position refers to the output position\n of axis 0 in position units.\n HAL pins are updated by function:\n gm..write\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 342 / 1290\n \n 6.3.3.1 Pins\n Table 6.13: CAN module pins\n Pins\n \n@@ -18032,15 +18032,15 @@\n \n Pin description\n Indicates that watchdog timer is expired.\n \n Watchdog timer overrun causes the set of power-enable to low in hardware.\n 6.3.4.2 Parameters\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 343 / 1290\n \n Table 6.16: Watchdog parameters\n Parameters\n \n Type and\n@@ -18145,15 +18145,15 @@\n 2\n V+\n (Ext.)\n \n The GM6-PCI motion control card has two limit- and one homing switch input for each joint. All the\n names of these pins begin as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 344 / 1290\n \n gm..joint.\n \n where is from 0 to 5. For example, gm.0.joint.0.home-sw-in indicates the state of the\n axis 0 home switch.\n@@ -18209,15 +18209,15 @@\n 6.3.6 Status LEDs\n 6.3.6.1 CAN\n Color: Orange\n \u2022 Blink, during data communication.\n \u2022 On, when any of the buffers are full - communication error.\n \u2022 Off, when no data communication.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 345 / 1290\n \n 6.3.6.2 RS485\n Color: Orange\n \u2022 Blink, during initialization of modules on the bus\n \u2022 On, when the data communication is up between all initialized modules.\n@@ -18242,15 +18242,15 @@\n Available module types:\n \u2022 8-channel relay output module - gives eight NO-NC relay output on a three pole terminal connector\n for each channel.\n \u2022 8-channel digital input module - gives eight optical isolated digital input pins.\n \u2022 8 channel ADC and 4-channel DAC module - gives four digital-to-analogue converter outputs and\n eight analogue-to-digital inputs. This module is also optically isolated from the GM6-PCI card.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 346 / 1290\n \n Automatic node recognizing Each node connected to the bus was recognized by the GM6-PCI card\n automatically. During starting LinuxCNC, the driver export pins and parameters of all available modules automatically.\n Fault handling If a module does not answer regularly the GM6-PCI card drops down the module. If\n a module with output do not gets data with correct CRC regularly, the module switch to error state\n@@ -18280,15 +18280,15 @@\n Type and\n direction\n (bit, Out)\n \n Pin description\n Output pin for relay\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 347 / 1290\n \n Table 6.21: Relay output module parameters\n Parameters\n \n Type and\n@@ -18351,15 +18351,15 @@\n # First input of the node.\n # Identifies the first GM6-PCI motion control card (PCI card address\n # Selects node with address 0 on the RS485 bus\n # Selects the first digital input module\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 348 / 1290\n \n 6.3.7.3 DAC & ADC module\n For pinout, connection and electrical charasteristics of the module, please refer to the System integration manual.\n All the pins and parameters are updated by the following function:\n gm..rs485\n@@ -18431,15 +18431,15 @@\n #\n .adc-0\n \n # First analogue channel of the node.\n # Identifies the first GM6-PCI motion control card (PCI card address \u2190# Selects node with address 0 on the RS485 bus\n # Selects the first analogue input of the module\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 349 / 1290\n \n 6.3.7.4 Teach Pendant module\n For pinout, connection and electrical charasteristics of the module, please refer to the System integration manual.\n All the pins and parameters are updated by the following function:\n gm..rs485\n@@ -18521,15 +18521,15 @@\n # First analogue channel of the node.\n # Identifies the first GM6-PCI motion control card (PCI card address\n # Selects node with address 0 on the RS485 bus\n # Selects the first analogue input of the module\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 350 / 1290\n \n 6.3.8 Errata\n 6.3.8.1 GM6-PCI card Errata\n The revision number in this section refers to the revision of the GM6-PCI card device.\n Rev. 1.2\n@@ -18562,15 +18562,15 @@\n number you set on the GS2.\n \u2022 -v or --verbose Turn on debug messages.\n \u2022 -A or --accel-seconds (default: 10.0) Seconds to accelerate the spindle from 0 to max. RPM.\n \u2022 -D or --decel-seconds (default: 0.0) Seconds to decelerate the spindle from max. RPM to 0. If\n set to 0.0 the spindle will be allowed to coast to a stop without controlled deceleration.\n 2 In Europe the equivalent can be found under the brand name Omron.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 351 / 1290\n \n \u2022 -R or --braking-resistor This argument should be used when a braking resistor is installed on the\n GS2 VFD (see Appendix A of the GS2 manual). It disables deceleration over-voltage stall prevention\n (see GS2 modbus Parameter 6.05), allowing the VFD to keep braking even in situations where the\n motor is regenerating high voltage. The regenerated voltage gets safely dumped into the braking\n@@ -18600,15 +18600,15 @@\n \u2022 .spindle-on (bit, in) 1 for ON and 0 for OFF sent to VFD\n \u2022 .status-1 (s32, out) Drive Status of the VFD (see the GS2 manual)\n \u2022 .status-2 (s32, out) Drive Status of the VFD (see the GS2 manual)\n Note\n The status value is a sum of all the bits that are on. So a 163 which means the drive is in the run\n mode is the sum of 3 (run) + 32 (freq set by serial) + 128 (operation set by serial).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 352 / 1290\n \n 6.4.3 Parameters\n With being gs2_vfd or the name given during loading with the -n option:\n \u2022 .error-count (s32, RW)\n \u2022 .loop-time (float, RW) how often the modbus is polled (default: 0.1)\n@@ -18680,15 +18680,15 @@\n 31\n 26\n 24\n 21\n 19\n 23\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12\n 13\n 14\n 15\n 16\n 17\n@@ -18775,15 +18775,15 @@\n 6.5.5 Functions\n \u2022 hal_pi_gpio.read - Add this to the base thread to update the HAL pin values to match the physical\n input values.\n \u2022 hal_pi_gpio.write - Add this to the base thread to update the physical pins to match the HAL values.\n Typically the read function will be early in the call list, before any encoder counters and the write\n function will be later in the call list, after stepgen.make-pulses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 354 / 1290\n \n 6.5.6 Pin Numbering\n The GPIO connector and the pinout has been consistent since around 2015. These older Pi models\n are probably a poor choice for LinuxCNC anyway. However, this driver is designed to work with them,\n and will detect and correctly configure for the two alternative pinouts.\n@@ -18860,15 +18860,15 @@\n active-high\n active-high\n active-high\n active-high\n active-high\n active-high\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n line\n line\n line\n line\n line\n line\n@@ -18989,15 +18989,15 @@\n \u2022 hal_gpio.NAME-in-not - HAL_OUT An inverted version of the above, for convenience\n \u2022 hal_gpio.NAME-out - HAL_IN use this pin to transfer a HAL bit value to a physical output\n \n 6.6.4 Parameters\n \u2022 hal_gpio.reset_ns - HAL_RW - \u201dsetp\u201d this parameter to control the pulse length of pins added to the\n \u201dreset\u201d list. The value will be limited between 0 and thread-period / 4.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 356 / 1290\n \n 6.6.5 Functions\n \u2022 hal_gpio.read - Add this to the base thread to update the HAL pin values to match the physical input\n values.\n \u2022 hal_gpio.write - Add this to the base thread to update the physical pins to match the HAL values.\n@@ -19033,15 +19033,15 @@\n \n 6.6.8 Author\n Andy Pugh\n \n 6.6.9 Known Bugs\n None at this time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 357 / 1290\n \n 6.7 Mesa HostMot2 Driver\n 6.7.1 Introduction\n HostMot2 is an FPGA configuration developed by Mesa Electronics for their line of Anything I/O motion\n control cards. The firmware is open source, portable and flexible. It can be configured (at compiletime) with zero or more instances (an object created at runtime) of each of several Modules: encoders\n@@ -19070,15 +19070,15 @@\n need a firmware binary.\n \n 6.7.3 Installing Firmware\n Depending on how you installed LinuxCNC you may have to open the Synaptic Package Manager from\n the System menu and install the package for your Mesa card. The quickest way to find them is to do a\n search for hostmot2 in the Synaptic Package Manager. Mark the firmware for installation, then apply.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 358 / 1290\n \n 6.7.4 Loading HostMot2\n The LinuxCNC support for the HostMot2 firmware is split into a generic driver called hostmot2 and\n two low-level I/O drivers for the Anything I/O boards. The low-level I/O drivers are hm2_7i43 and\n hm2_pci (for all the PCI- and PC-104/Plus-based Anything I/O boards). The hostmot2 driver must be\n@@ -19115,15 +19115,15 @@\n \n 6.7.6 HostMot2 Functions\n \u2022 hm2_..read - Read all inputs, update input HAL pins.\n \u2022 hm2_..write - Write all outputs.\n \u2022 hm2_..read_gpio - Read the GPIO input pins only. (This function is not\n available on the 7I43 due to limitations of the EPP bus.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 359 / 1290\n \n \u2022 hm2_..write_gpio - Write the GPIO control registers and output pins\n only. (This function is not available on the 7I43 due to limitations of the EPP bus.)\n Note\n The above read_gpio and write_gpio functions should not normally be needed, since the GPIO bits are\n@@ -19169,15 +19169,15 @@\n [ 1141.053418] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 (PWM or Up) (Output)\n [ 1141.053422] hm2/hm2_5i20.0: IO Pin 008 (P2-17): IOPort\n [ 1141.053425] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 (Dir or Down) ( \u2190Output)\n [ 1141.053429] hm2/hm2_5i20.0: IO Pin 010 (P2-21): IOPort\n [ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin Not-Enable (Output)\n ...\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 360 / 1290\n \n [ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output)\n [ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output)\n [ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output)\n [ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output)\n@@ -19206,15 +19206,15 @@\n mothercard on LinuxCNC startup. If you are using Run In Place, you must still install a hostmot2firmware- package. There is more information about firmware and configuration in the Configurations section.\n \n 6.7.10 HAL Pins\n The HAL pins for each configuration can be seen by opening up Show HAL Configuration from the\n Machine menu. All the HAL pins and parameters can be found there. The following figure is of the\n 5I20 configuration used above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 361 / 1290\n \n Figure 6.9: 5i20 HAL Pins\n \n 6.7.11 Configurations\n 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\u2019s look\n@@ -19230,15 +19230,15 @@\n (and save a 7I47). So in this way we can save two ports (48 bits) for GPIO.\n Here are tables of the firmwares available in the official packages. There may be additional firmwares\n available at the Mesanet.com website that have not yet made it into the LinuxCNC official firmware\n packages, so check there too.\n 3x20 (6-port various) Default Configurations (The 3x20 comes in 1M, 1.5M, and 2M gate versions. So\n far, all firmware is available in all gate sizes.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Firmware\n SV24\n SVST16_24\n \n Encoder\n 24\n@@ -19451,15 +19451,15 @@\n 0\n 4\n \n GPIO\n 0\n 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Firmware\n SVST8_4IM2\n \n Encoder\n 8 (+IM)\n \n@@ -19564,15 +19564,15 @@\n \u2022 in - (Bit, Out) Normal state of the hardware input pin. Both full GPIO pins and I/O pins used as\n inputs by active module instances have this pin.\n \u2022 in_not - (Bit, Out) Inverted state of the hardware input pin. Both full GPIO pins and I/O pins used\n as inputs by active module instances have this pin.\n \u2022 out - (Bit, In) Value to be written (possibly inverted) to the hardware output pin. Only full GPIO pins\n have this pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 364 / 1290\n \n 6.7.12.2 Parameters\n \u2022 invert_output - (Bit, RW) This parameter only has an effect if the is_output parameter is true. If this\n parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin.\n Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.\n@@ -19609,15 +19609,15 @@\n \u2022 position-cmd - (Float, In) Target position of stepper motion, in user-defined position units.\n \u2022 position-fb - (Float, Out) Feedback position in user-defined position units (counts / position_scale).\n \u2022 velocity-cmd - (Float, In) Target velocity of stepper motion, in user-defined position units per second.\n This pin is only used when the stepgen is in velocity control mode (control-type=1).\n \u2022 velocity-fb - (Float, Out) Feedback velocity in user-defined position units per second.\n 3 At present, the firmware supports multi-phase stepper outputs, but the driver doesn\u2019t. Interested volunteers are solicited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 365 / 1290\n \n 6.7.13.2 Parameters\n \u2022 dirhold - (u32, RW) Minimum duration of stable Direction signal after a step ends, in nanoseconds.\n \u2022 dirsetup - (u32, RW) Minimum duration of stable Direction signal before a step begins, in nanoseconds.\n \u2022 maxaccel - (Float, RW) Maximum acceleration, in position units per second per second. If set to 0,\n@@ -19652,15 +19652,15 @@\n The function of the Out0 and Out1 I/O pins varies with output-type parameter (see below).\n The hm2 pwmgen representation is similar to the software pwmgen component. Each pwmgen instance has the following pins and parameters:\n 6.7.14.1 Pins\n \u2022 enable - (Bit, In) If true, the pwmgen will set its Not-Enable pin false and output its pulses. If enable\n is false, pwmgen will set its Not-Enable pin true and not output any signals.\n \u2022 value - (Float, In) The current pwmgen command value, in arbitrary units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 366 / 1290\n \n 6.7.14.2 Parameters\n \u2022 output-type - (s32, RW) This emulates the output_type load-time argument to the software pwmgen\n component. This parameter may be changed at runtime, but most of the time you probably want\n to set it at startup and then leave it alone. Accepted values are 1 (PWM on Out0 and Direction on\n@@ -19702,15 +19702,15 @@\n the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and\n I/O pins used as outputs by active module instances have this parameter.\n \n 6.7.15 Encoder\n Encoders have names like hm2_..encoder... Instance is a twodigit number that corresponds to the HostMot2 encoder instance number. There are num_encoders\n instances, starting with 00.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 367 / 1290\n \n Each encoder uses three or four input I/O pins, depending on how the firmware was compiled. Threepin encoders use A, B, and Index (sometimes also known as Z). Four-pin encoders use A, B, Index, and\n Index-mask.\n The hm2 encoder representation is similar to the one described by the Canonical Device Interface\n (in the HAL General Reference document), and to the software encoder component. Each encoder\n@@ -19747,15 +19747,15 @@\n direction is B.\n \u2022 vel-timeout - (Float, RW) When the encoder is moving slower than one pulse for each time that the\n driver reads the count from the FPGA (in the hm2_read() function), the velocity is harder to estimate.\n The driver can wait several iterations for the next pulse to arrive, all the while reporting the upper\n bound of the encoder velocity, which can be accurately guessed. This parameter specifies how long\n to wait for the next pulse, before reporting the encoder stopped. This parameter is in seconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 368 / 1290\n \n 6.7.16 5I25 Configuration\n 6.7.16.1 Firmware\n The 5I25 firmware comes preloaded for the daughter card it is purchased with. So the firmware=xxx.BIT\n is not part of the hm2_pci configuration string when using a 5I25.\n@@ -19789,15 +19789,15 @@\n maxlimit: +10\n maxfullscale: 10\n If you wanted to say scale the analog out of a channel to IPS for a velocity mode servo (say 24 IPS\n max) you could set the limits like this:\n minlimit: -24\n maxlimit: +24\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 369 / 1290\n \n maxfullscale: 24\n If you wanted to scale the analog out of a channel to RPM for a 0 to 6000 RPM spindle with 0-10 V\n control you could set the limits like this:\n minlimit: 0\n@@ -19829,15 +19829,15 @@\n to facilitate the low level protocol debug.\n \u2022 You have more than one device to connect. MB2HAL is very efficiently managing multiple devices,\n transactions and links. Currently I am monitoring two axis drivers using a Rs232 port, a VFD driver\n using another Rs232 port, and a remote I/O using TCP/IP.\n \u2022 You want a protocol to connect your Arduino to HAL. Look the included sample configuration file,\n sketch and library for Arduino Modbus.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 370 / 1290\n \n 6.8.2 Usage\n a. Create a config file from the example below\n 1. Set component name (optional)\n Set HAL_MODULE_NAME=mymodule (default HAL_MODULE_NAME=mb2hal)\n@@ -19917,15 +19917,15 @@\n The serial port. For example \u201d/dev/ttyS0\u201d. Ignored if\n LINK_TYPE=serial\n LINK_TYPE=tcp.\n SERIAL_BAUD Integer If\n The baud rate. Ignored if LINK_TYPE=tcp.\n LINK_TYPE=serial\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 371 / 1290\n \n Value\n Type\n Required\n Description\n@@ -20018,15 +20018,15 @@\n parameter above.\n \n 6.8.3.3 Error codes\n While debugging transactions, note the returned \u201dret[]\u201d value correspond to:\n Modbus protocol exceptions:\n \u2022 0x01 - ILLEGAL_FUNCTION - the FUNCTION code received in the query is not allowed or invalid.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 372 / 1290\n \n \u2022 0x02 - ILLEGAL_DATA_ADDRESS - the DATA ADDRESS received in the query is not an allowable\n address for the slave or is invalid.\n \u2022 0x03 - ILLEGAL_DATA_VALUE - a VALUE contained in the data query field is not an allowable value\n or is invalid.\n@@ -20062,15 +20062,15 @@\n # ++++++++++++++++++++++++\n [MB2HAL_INIT]\n #OPTIONAL: Debug level of init and INI file parsing.\n # 0 = silent.\n # 1 = error messages (default).\n # 2 = OK confirmation messages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 373 / 1290\n \n # 3 = debugging messages.\n # 4 = maximum debugging messages (only in transactions).\n INIT_DEBUG=3\n #OPTIONAL: Set to 1.1 to enable the new functions:\n@@ -20115,15 +20115,15 @@\n SERIAL_BAUD=115200\n #if LINK_TYPE=serial then REQUIRED (only 1st time).\n #if LINK_TYPE=tcp then IGNORED\n #Data bits. One of 5,6,7,8.\n SERIAL_BITS=8\n #if LINK_TYPE=serial then REQUIRED (only 1st time).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 374 / 1290\n \n #if LINK_TYPE=tcp then IGNORED\n #Data parity. One of: even, odd, none.\n SERIAL_PARITY=none\n #if LINK_TYPE=serial then REQUIRED (only 1st time).\n@@ -20207,15 +20207,15 @@\n #\n Both pin values are added and limited to 65535 (UINT16_MAX). Normally use one and let \u2190the other open (read as 0).\n # fnct_15_write_multiple_coils:\n #\n mb2hal.m.n.bit\n (input)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 375 / 1290\n \n # fnct_16_write_multiple_registers:\n #\n mb2hal.m.n.float\n (input)\n@@ -20278,15 +20278,15 @@\n -0x07 Unsuccessful programming request using function code 13 or \u219014.\n #MEMORY_PARITY_ERROR\n -0x08 SLAVE parity error in MEMORY.\n #GATEWAY_PROBLEM_PATH\n -0x0A (-10) Gateway path(s) not available.\n #GATEWAY_PROBLEM_TARGET -0x0B (-11) The target device failed to repond (generated by \u2190master, not slave).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n #/* Program or connection */\n #COMM_TIME_OUT\n -0x0C (-12)\n #PORT_SOCKET_FAILURE\n -0x0D (-13)\n #SELECT_FAILURE\n@@ -20343,15 +20343,15 @@\n HAL_TX_NAME=XDrive02\n MAX_UPDATE_RATE=10.0\n DEBUG=1\n [TRANSACTION_07]\n \n 376 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 377 / 1290\n \n MB_TX_CODE=fnct_06_write_single_register\n FIRST_ELEMENT=20\n NELEMENTS=1\n HAL_TX_NAME=XDrive03\n@@ -20384,15 +20384,15 @@\n 6.8.5.3 fnct_03_read_holding_registers\n \u2022 mb2hal.m.n.float float out\n \u2022 mb2hal.m.n.int s32 out\n 6.8.5.4 fnct_04_read_input_registers\n \u2022 mb2hal.m.n.float float out\n \u2022 mb2hal.m.n.int s32 out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 378 / 1290\n \n 6.8.5.5 fnct_05_write_single_coil\n \u2022 mb2hal.m.n.bit bit in\n NELEMENTS needs to be 1 or PIN_NAMES must contain just one name.\n 6.8.5.6 fnct_06_write_single_register\n@@ -20423,15 +20423,15 @@\n This component is loaded using the halcmd \u201dloadusr\u201d command:\n loadusr -Wn coolant mitsub_vfd spindle=02 coolant=01\n \n The above command says:\n loadusr, wait for coolant pins to be ready, component mitsub_vfd, with 2 slaves named spindle (slave\n #2) and coolant (slave #1)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 379 / 1290\n \n 6.9.1 Command Line Options\n The command line options are:\n \u2022 -b or --baud : set the baud rate - all networked VFDs must be the same\n \u2022 -p or --port : sets the port to use such as /dev/ttyUSB0\n@@ -20457,15 +20457,15 @@\n \u2022 .scale-fb (float, in) Scales the motor-fb pin to arbitrary units. default 1 = Hertz.\n \u2022 .scale-amps (float, in) Scales the motor-amps pin to arbitrary units. default 1 = amps.\n \u2022 .scale-power (float, in) Scales the motor-power pin to arbitrary units. default 1 = .\n \u2022 .estop (bit, in) puts the VFD into emergency-stopped status.\n \u2022 .status-bit-N (bit, out) N = 0 to 7, status bits are user configurable on the VFD. Bit 3 should be\n set to at speed and bit 7 should be set to alarm. Others are free to be set as required.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 380 / 1290\n \n 6.9.3 HAL example\n #\n # example usage of the Mitsubishi VFD driver\n #\n@@ -20524,15 +20524,15 @@\n Fr-A700 F700 E700 D700 technical manual for the 700 series\n The VFD must have PR settings adjusted manually for serial communication.\n One must power cycle the VFD for some of these to register eg PR 79\n \u2022 PR 77 set to 1 -to unlock other PR modification.\n \u2022 PR 79 set to 1 or 0 -for communication thru serial.\n \u2022 PR 117 set to 0-31 -slave number, driver must reference same number.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 381 / 1290\n \n \u2022 PR 118 tested with 96 -baud rate (can be set to 48,96,192) if driver is also set.\n \u2022 PR 119 set to 0 -stop bit/data length (8 bits, two stop)\n \u2022 PR 120 set to 0 -no parity\n \u2022 PR 121 set to 1-10 -if 10 (maximum) COM errors then VFD faults.\n@@ -20568,15 +20568,15 @@\n \u2022 (bit) motenc..enc--reset-count - If this pin is true, the counter will immediately\n be reset to zero, and the pin will be cleared.\n \u2022 (float) motenc..dac--value - Analog output value for DAC (in user units, see -gain\n and -offset)\n \u2022 (float) motenc..adc--value - Analog input value read by ADC (in user units, see\n -gain and -offset)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 382 / 1290\n \n \u2022 (bit) motenc..in- - State of digital input pin, see canonical digital input.\n \u2022 (bit) motenc..in--not - Inverted state of digital input pin, see canonical digital\n input.\n \u2022 (bit) motenc..out- - Value to be written to digital output, seen canonical digital\n@@ -20622,15 +20622,15 @@\n \u2022 (funct) motenc..encoder-read - Reads all encoder counters.\n \u2022 (funct) motenc..adc-read - Reads the analog-to-digital converters.\n \u2022 (funct) motenc..digital-in-read - Reads digital inputs.\n \u2022 (funct) motenc..dac-write - Writes the voltages to the DACs.\n \u2022 (funct) motenc..digital-out-write - Writes digital outputs.\n \u2022 (funct) motenc..misc-update - Updates misc stuff.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 383 / 1290\n \n 6.11 Opto22 Driver\n PCI AC5 ADAPTER CARD / HAL DRIVER\n \n 6.11.1 The Adapter Card\n@@ -20666,15 +20666,15 @@\n signal to this pin to write to an I/O point of the card. The PINNUMBER represents the position in\n the relay rack.Eg. PINNUMBER 23 is position 23 in a Opto22 relay rack and would be pin 1 on the\n 50 pin header connector.\n \u2022 opto_ac5.[BOARDNUMBER].led[NUMBER] OUT bit - Turns one of the 4 onboard LEDs on/off. LEDs\n are numbered 0 to 3.\n BOARDNUMBER can be 0-3 PORTNUMBER can be 0 or 1. Port 0 is closest to the card bracket.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 384 / 1290\n \n 6.11.4 Parameters\n \u2022 opto_ac5.[BOARDNUMBER].port[PORTNUMBER].out-[PINNUMBER]-invert W bit - When TRUE,\n invert the meaning of the corresponding -out pin so that TRUE gives LOW and FALSE gives HIGH.\n \n@@ -20711,15 +20711,15 @@\n 24 bits represented in a BINARY number. Bit 1 is the rightmost number:\n 16 zeros for the 16 inputs and 8 ones for the 8 outputs\n 000000000000000011111111\n \n This converts to FF on the calculator, so 0xff is the number to use for portconfig0 and/or portconfig1\n when loading the driver.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 385 / 1290\n \n 6.11.7 Pin Numbering\n HAL pin 00 corresponds to bit 1 (the rightmost) which represents position 0 on an Opto22 relay rack.\n HAL pin 01 corresponds to bit 2 (one spot to the left of the rightmost) which represents position 1 on\n an Opto22 relay rack. HAL pin 23 corresponds to bit 24 (the leftmost) which represents position 23\n@@ -20762,15 +20762,15 @@\n addresses, so if one is at 00, the next would have to be 02.)\n Alternatively, the 8 digital output pins can be used as additional digital outputs, it works the same\n way as above with the syntax : extradout=0xnn\u2019. The extradac and extradout options are mutually\n exclusive on each board, you can only specify one.\n The UPC and PPMC encoder boards can timestamp the arrival of encoder counts to refine the derivation of axis velocity. This derived velocity can be fed to the PID hal component to produce smoother D\n term response. The syntax is : timestamp=0xnn[,0xmm], this works the same way as above to select\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 386 / 1290\n \n which board is being configured. Default is to not enable the timestamp option. If you put this option\n on the command line, it enables the option. The first n selects the EPP bus, the second one matches\n the address of the board having the option enabled. The driver checks the revision level of the board\n to make sure it has firmware supporting the feature, and produces an error message if the board does\n@@ -20813,15 +20813,15 @@\n function has to be enabled in the HAL command line that starts the PPMC driver, with the timestamp=0x00 option.\n \u2022 (All float output) ppmc..encoder..position - Encoder position, in user units.\n \u2022 (All bit bidir) ppmc..encoder..index-enable - Connect to joint.#.index-enable for\n home-to-index. This is a bidirectional HAL signal. Setting it to true causes the encoder hardware\n to reset the count to zero on the next encoder index pulse. The driver will detect this and set the\n signal back to false.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 387 / 1290\n \n \u2022 (PPMC float output) ppmc..DAC..value - sends a signed value to the 16-bit Digital\n to Analog Converter on the PPMC DAC16 board commanding the analog output voltage of that DAC\n channel.\n \u2022 (UPC bit input) ppmc..pwm..enable - Enables a PWM generator.\n@@ -20860,15 +20860,15 @@\n an output value equal to the 1/scale value will produce an output of + or - value Volts. So, if the\n scale parameter is 0.1 and you send a value of 0.5, the output will be 5.0 Volts.\n \u2022 (UPC float) ppmc..pwm..scale - Scaling for PWM generator. If scale is X, then the\n duty cycle will be 100% when the value pin is X (or -X).\n \u2022 (UPC float) ppmc..pwm..max-dc - Maximum duty cycle, from 0.0 to 1.0.\n \u2022 (UPC float) ppmc..pwm..min-dc - Minimum duty cycle, from 0.0 to 1.0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 388 / 1290\n \n \u2022 (UPC float) ppmc..pwm..duty-cycle - Actual duty cycle (used mostly for troubleshooting.)\n \u2022 (UPC bit) ppmc..pwm..bootstrap - If true, the PWM generator will generate a\n short sequence of pulses of both polarities when E-stop goes false, to reset the shutdown latches\n on some PWM servo drives.\n@@ -20903,15 +20903,15 @@\n These writes are organized into blocks of contiguous registers to be written in a block to minimize\n CPU overhead.\n \n 6.13 Pluto P Driver\n 6.13.1 General Info\n The Pluto-P is a FPGA board featuring the ACEX1K chip from Altera.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 389 / 1290\n \n 6.13.1.1 Requirements\n 1. A Pluto-P board\n 2. An EPP-compatible parallel port, configured for EPP mode in the system BIOS or a PCI EPP\n compatible parallel port card.\n@@ -20948,15 +20948,15 @@\n isolation and protection. Traditional parallel port optoisolator boards do not work with pluto_servo\n due to the bidirectional nature of the EPP protocol.\n 6.13.1.4 LED\n \u2022 When the device is unprogrammed, the LED glows faintly. When the device is programmed, the\n LED glows according to the duty cycle of PWM0 (LED = UP0 xor DOWN0) or STEPGEN0 (LED =\n STEP0 xor DIR0).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 390 / 1290\n \n 6.13.1.5 Power\n \u2022 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\n these VCC pins. The required current is not yet known, but is probably around 50mA plus I/O\n current.\n@@ -20987,15 +20987,15 @@\n The PWM period is approximately 19.5 kHz (40 MHz / 2047). A PDM-like mode is also available.\n \u2022 18 digital outputs: 10 dedicated, 8 shared with PWM functions. (Example: A lathe with unidirectional PWM spindle control may use 13 total digital outputs)\n \u2022 20 digital inputs: 8 dedicated, 12 shared with Quadrature functions. (Example: A lathe with index\n pulse only on the spindle may use 13 total digital inputs.)\n \u2022 EPP communication with the PC. The EPP communication typically takes around 100 \u00b5s on machines\n tested so far, enabling servo rates above 1 kHz.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 391 / 1290\n \n 6.13.2.1 Pinout\n \u2022 UPx - The up (up/down mode) or pwm (pwm+direction mode) signal from PWM generator X. May be\n used as a digital output if the corresponding PWM channel is unused, or the output on the channel\n is always negative. The corresponding digital output invert may be set to TRUE to make UPx active\n@@ -21025,15 +21025,15 @@\n \n Behavior if both\n functions used\n When pwm-0-pwmdir is\n TRUE, this pin is the PWM\n output\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 392 / 1290\n \n Table 6.27: (continued)\n Primary function\n \n Alternate Function\n@@ -21146,15 +21146,15 @@\n \n 6.13.2.2 Input latching and output updating\n \u2022 PWM duty cycles for each channel are updated at different times.\n \u2022 Digital outputs OUT0 through OUT9 are all updated at the same time. Digital outputs OUT10\n through OUT17 are updated at the same time as the pwm function they are shared with.\n \u2022 Digital inputs IN0 through IN19 are all latched at the same time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 393 / 1290\n \n \u2022 Quadrature positions for each channel are latched at different times.\n 6.13.2.3 HAL Functions, Pins and Parameters\n A list of all loadrt arguments, HAL function names, pin names and parameter names is in the manual\n page, pluto_servo.9.\n@@ -21181,15 +21181,15 @@\n \u2022 OUTx - Dedicated digital output #x\n \u2022 GND - Ground\n \u2022 VCC - +3.3V regulated DC\n While the extended main connector has a superset of signals usually found on a Step & Direction DB25\n connector\u20144 step generators, 9 inputs, and 6 general-purpose outputs\u2014the layout on this header is\n different than the layout of a standard 26-pin ribbon cable to DB25 connector.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 394 / 1290\n \n Figure 6.11: Pluto-Step Pinout\n \n 6.13.3.2 Input latching and output updating\n \u2022 Step frequencies for each channel are updated at different times.\n@@ -21198,15 +21198,15 @@\n \u2022 Feedback positions for each channel are latched at different times.\n 6.13.3.3 Step Waveform Timings\n The firmware and driver enforce step length, space, and direction change times. Timings are rounded\n up to the next multiple of 1.6\u03bcs, with a maximum of 49.6\u03bcs. The timings are the same as for the software stepgen component, except that dirhold and dirsetup have been merged into a single parameter\n dirtime which should be the maximum of the two, and that the same step timings are always applied\n to all channels.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 395 / 1290\n \n Figure 6.12: Pluto-Step Timings\n \n 6.13.3.4 HAL Functions, Pins and Parameters\n A list of all loadrt arguments, HAL function names, pin names and parameter names is in the manual\n@@ -21221,15 +21221,15 @@\n \n This component is loaded using the halcmd \u201dloadusr\u201d command:\n loadusr -Wn pmx485 pmx485 /dev/ttyUSB0\n \n This will load the pmx485 component using the /dev/ttyUSB0 port and wait for it to become ready.\n It is necessary to name the port to use for communications.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 396 / 1290\n \n 6.14.1 Pins\n \u2022 pmx485.mode-set (bit, in) # set cutting mode\n \u2022 pmx485.current-set (bit, in) # set cutting current\n \u2022 pmx485.pressure-set (bit, in) # set gas pressure\n@@ -21260,15 +21260,15 @@\n \u2022 Disconnect the Powermax power supply from its power source for approximately 30 seconds. When\n you power the system back ON, it will no longer be in remote mode.\n \n 6.14.3 Reference:\n \u2022 Hypertherm Application Note #807220\n \u201dPowermax45 XP/65/85/105/125\u00ae Serial Communication Protocol\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 397 / 1290\n \n 6.15 Servo To Go Driver\n The Servo-To-Go (STG) is one of the first PC motion control cards supported by LinuxCNC. It is an\n ISA card and it exists in different flavors (all supported by this driver). The board includes up to 8\n channels of quadrature encoder input, 8 channels of analog input and output, 32 bits digital I/O, an\n@@ -21308,15 +21308,15 @@\n 6.15.2 Pins\n \u2022 stg..counts - (s32) Tracks the counted encoder ticks.\n \u2022 stg..position - (float) Outputs a converted position.\n \u2022 stg..dac-value - (float) Drives the voltage for the corresponding DAC.\n \u2022 stg..adc-value - (float) Tracks the measured voltage from the corresponding ADC.\n \u2022 stg.in- - (bit) Tracks a physical input pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 398 / 1290\n \n \u2022 stg.in--not - (bit) Tracks a physical input pin, but inverted.\n \u2022 stg.out- - (bit) Drives a physical output pin\n For each pin, is the axis number, and is the logic pin number of the STG if\n IIOO is defined, there are 16 input pins (in-00 .. in-15) and 16 output pins (out-00 .. out-15), and they\n@@ -21350,15 +21350,15 @@\n and ShuttlePRO2 devices with LinuxCNC\u2019s HAL.\n If the driver is started without command-line arguments, it will probe all /dev/hidraw* device files for\n Shuttle devices, and use all devices found. If it is started with command-line arguments, it will only\n probe the devices specified.\n The ShuttleXpress has five momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 399 / 1290\n \n The ShuttlePRO has 13 momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n The ShuttlePRO2 has 15 momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n@@ -21396,15 +21396,15 @@\n .spring-wheel-s32 (s32 out)\n The current deflection of the spring-wheel (the outer wheel). It\u2019s 0 at rest, and ranges from -7 at\n the counter-clockwise extreme to +7 at the clockwise extreme.\n .spring-wheel-f (float out)\n The current deflection of the spring-wheel (the outer wheel). It\u2019s 0.0 at rest, -1.0 at the counterclockwise extreme, and +1.0 at the clockwise extreme. The Shuttle devices report the springwheel position as an integer from -7 to +7, so this pin reports only 15 discrete values in it\u2019s\n range.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 400 / 1290\n \n 6.17 VFS11 VFD Driver\n This is a non-realtime HAL program to control the S11 series of VFDs from Toshiba.\n vfs11_vfd supports serial and TCP connections. Serial connections may be RS232 or RS485. RS485 is\n supported in full- and half-duplex mode. TCP connections may be passive (wait for incoming connection), or active outgoing connections, which may be useful to connect to TCP-based devices or through\n@@ -21437,15 +21437,15 @@\n \u2022 .acceleration-pattern (bit, in) when true, set acceleration and deceleration times as defined in\n registers F500 and F501 respectively. Used in PID loops to choose shorter ramp times to avoid\n oscillation.\n \u2022 .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.\n \u2022 .at-speed (bit, out) when drive is at commanded speed (see speed-tolerance below)\n \u2022 .current-load-percentage (float, out) reported from the VFD\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 401 / 1290\n \n \u2022 .dc-brake (bit, in) engage the DC brake. Also turns off spindle-on.\n \u2022 .enable (bit, in) enable the VFD. If false, all operating parameters are still read but control is\n released and panel control is enabled (subject to VFD setup).\n \u2022 .err-reset (bit, in) reset errors (alarms a.k.a Trip and e-stop status). Resetting the VFD may\n@@ -21482,15 +21482,15 @@\n \u2022 .status (s32, out) Drive Status of the VFD (see the TOSVERT VF-S11 Communications Function\n Instruction Manual, register FD01). A bitmap.\n \u2022 .trip-code (s32, out) trip code if VF-S11 is in tripped state.\n \u2022 .error-count (s32, out) number of Modbus transactions which returned an error\n \u2022 .max-speed (bit, in) ignore the loop-time parameter and run Modbus at maximum speed, at the\n expense of higher CPU usage. Suggested use during spindle positioning.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 402 / 1290\n \n 6.17.3 Parameters\n Where is vfs11_vfd or the name given during loading with the -n option.\n \u2022 .frequency-limit (float, RO) upper limit read from VFD setup.\n \u2022 .loop-time (float, RW) how often the Modbus is polled (default interval 0.1 seconds)\n@@ -21526,15 +21526,15 @@\n # 1 2\n STOPBITS=1\n #rs232 rs485\n SERIAL_MODE=rs485\n # up down none\n # this feature might not work with a stock Ubuntu\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n # libmodbus5/libmodbus-dev package, and generate a warning\n # execution will continue as if RTS_MODE=up were given.\n RTS_MODE=up\n #--------------------# modbus timers in seconds\n # inter-character timer\n BYTE_TIMEOUT=0.5\n@@ -21573,15 +21573,15 @@\n # see orient.9 and motion.9\n net spindle-orient spindle.0.orient spindle-vfd.max-speed spindle-vfd.jog-mode\n # take precedence over control panel\n setp spindle-vfd.enable 1\n \n 403 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 404 / 1290\n \n 6.17.6 Panel operation\n The vfs11_vfd driver takes precedence over panel control while it is enabled (see enable pin), effectively disabling the panel. Clearing the enable pin re-enables the panel. Pins and parameters can still\n be set, but will not be written to the VFD untile the enable pin is set. Operating parameters are still\n read while bus control is disabled. Exiting the vfs11_vfd driver in a controlled way will release the\n@@ -21615,15 +21615,15 @@\n protocol. So the last parameter which you\u2019d want to change is the protocol - set from Toshiba Inverter\n Protocol to Modbus; thereafter, the Windows app is useless.\n To increase the upper frequency limit, the UL and FH parameters must be changed on the panel. I\n increased them from 50 to 80.\n See dump-params.mio for a description of non-standard VF-S11 parameters of my setup. This file is\n for the modio Modbus interactive utility.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 405 / 1290\n \n 6.17.9 Programming Note\n The vfs11_vfd driver uses the libmodbus version 3 library which is more recent than the version 2\n code used in gs2_vfd.\n The Ubuntu libmodbus5 and libmodbus-dev packages are only available starting from Ubuntu 12\n@@ -21631,15 +21631,15 @@\n Therefore, building vfs11_vfd using this library might generate a warning if RTS_MODE= is specified\n in the INI file.\n To use the full functionality on lucid and precise:\n \u2022 remove the libmodbus packages: sudo apt-get remove libmodbus5 libmodbus-dev\n \u2022 build and install libmodbus version 3 from source as outlined here.\n Libmodbus does not build on Ubuntu Hardy, hence vfs11_vfd is not available on Hardy.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 406 / 1290\n \n Chapter 7\n \n Hardware Examples\n 7.1 PCI Parallel Port\n@@ -21670,15 +21670,15 @@\n and then added the following lines so the parport will be read and written:\n addf parport.1.read base-thread\n addf parport.1.write base-thread\n \n After doing the above then run your config and verify that the parallel port got loaded in Machine/Show\n HAL Configuration window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 407 / 1290\n \n 7.2 Spindle Control\n LinuxCNC can control up to 8 spindles. The number is set in the INI file. The examples below all\n refer to a single-spindle config with spindle control pins with names like spindle.0... In the case of a\n multiple spindle machine all that changes is that additional pins exist with names such as spindle.6...\n@@ -21714,15 +21714,15 @@\n \n 7.2.3 Spindle Enable\n If you need a spindle enable signal, link your output pin to spindle.0.on. To link these pins to a\n parallel port pin put something like the following in your .hal file, making sure you pick the pin that\n is connected to your control device.\n net spindle-enable spindle.0.on => parport.0.pin-14-out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 408 / 1290\n \n 7.2.4 Spindle Direction\n If you have direction control of your spindle, then the HAL pins spindle.N.forward and spindle.N.reverse\n are controlled by the G-codes M3 and M4. Spindle speed Sn must be set to a positive non-zero value\n for M3/M4 to turn on spindle motion.\n@@ -21764,15 +21764,15 @@\n # the output of spindle ramp is sent to the scale in\n net spindle-ramped <= spindle-ramp.out => scale.0.in\n # to know when to start the motion we send the near component\n # (named spindle-at-speed) to the spindle commanded speed from\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 409 / 1290\n \n # the signal spindle-cmd and the actual spindle speed\n # provided your spindle can accelerate at the maxv setting.\n net spindle-cmd => spindle-at-speed.in1\n net spindle-ramped => spindle-at-speed.in2\n@@ -21812,15 +21812,15 @@\n 1 In this example, we will assume that some encoders have already been issued to axes/joints 0, 1, and 2. So the next encoder\n available for us to attach to the spindle would be number 3. Your situation may differ.\n 2 The HAL encoder index-enable is an exception to the rule in that it behaves as both an input and an output, see the Encoder\n Section for details\n 3 It is because we selected non-quadrature simple counting\u2026 above that we can get away with quadrature counting without\n having any B quadrature input.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 410 / 1290\n \n 7.2.6.2 Spindle At Speed\n To enable LinuxCNC to wait for the spindle to be at speed before executing a series of moves, the\n spindle.N.at-speed needs to turn true at the moment the spindle is at the commanded speed. To\n achieve this you need spindle feedback from an encoder. Since the feedback and the commanded\n@@ -21860,15 +21860,15 @@\n loadrt encoder num_chan=1\n loadrt mux4 count=1\n addf encoder.capture-position servo-thread\n addf encoder.update-counters base-thread\n addf mux4.0 servo-thread\n # If your MPG outputs a quadrature signal per click set x4 to 1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 411 / 1290\n \n # If your MPG puts out 1 pulse per click set x4 to 0\n setp encoder.0.x4-mode 0\n # For velocity mode, set to 1\n # In velocity mode the axis stops when the dial is stopped\n@@ -21915,15 +21915,15 @@\n loadrt ilowpass\n addf ilowpass.0 servo-thread\n setp ilowpass.0.scale 1000\n setp ilowpass.0.gain 0.01\n # If your MPG outputs a quadrature signal per click set x4 to 1\n # If your MPG puts out 1 pulse per click set x4 to 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 412 / 1290\n \n setp encoder.0.x4-mode 0\n # For velocity mode, set to 1\n # In velocity mode the axis stops when the dial is stopped\n # even if that means the commanded motion is not completed,\n@@ -21966,15 +21966,15 @@\n 7.4.1 Example\n This example shows the connections needed to use an Automation Direct GS2 VFD to drive a spindle.\n The spindle speed and direction is controlled by LinuxCNC.\n Using the GS2 component involves very little to set up. We start with a StepConf Wizard generated\n config. Make sure the pins with \u201dSpindle CW\u201d and \u201dSpindle PWM\u201d are set to unused in the parallel\n port setup screen.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 413 / 1290\n \n In the custom.hal file we place the following to connect LinuxCNC to the GS2 and have LinuxCNC\n control the drive.\n GS2 Example\n # load the non-realtime component for the Automation Direct GS2 VFDs\n@@ -22003,15 +22003,15 @@\n \u2022 P4.00 (Source of Frequency Command) must be set to Frequency determined by RS232C/RS485\n communication interface, 05.\n \u2022 P9.01 (Transmission Speed) must be set to 9600 baud, 01.\n \u2022 P9.02 (Communication Protocol) must be set to \u201dModbus RTU mode, 8 data bits, no parity, 2 stop\n bits\u201d, 03.\n A PyVCP panel based on this example is here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 414 / 1290\n \n Chapter 8\n \n ClassicLadder\n 8.1 ClassicLadder Introduction\n@@ -22041,15 +22041,15 @@\n along the top and bottom of the page while the rungs are drawn vertically from left to right.\n A program in ladder logic, also called a ladder diagram, is similar to a schematic for a set of relay\n circuits. Ladder logic is useful because a wide variety of engineers and technicians can understand\n and use it without much additional training because of the resemblance.\n Ladder logic is widely used to program PLCs, where sequential control of a process or manufacturing\n operation is required. Ladder logic is useful for simple but critical control systems, or for reworking\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 415 / 1290\n \n old hardwired relay circuits. As programmable logic controllers became more sophisticated it has\n also been used in very complex automation systems.\n Ladder logic can be thought of as a rule-based language, rather than a procedural language. A rung in\n the ladder represents a rule. When implemented with relays and other electromechanical devices, the\n@@ -22079,15 +22079,15 @@\n \n The input on the left, B0, a normally open contact, is connected to the coil (output) on the right, Q0.\n Now imagine a voltage gets applied to the leftmost end, because the input B0 turns true (e.g. the\n input is activated, or the user pushed the NO contact). The voltage has a direct path to reach the coil\n (output) on the right, Q0. As a consequence, the Q0 coil (output) will turn from 0/off/false to 1/on/true.\n If the user releases B0, the Q0 output quickly returns to 0/off/false.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 416 / 1290\n \n 8.1.4 Basic Latching On-Off Circuit\n Building on the above example, suppose we add a switch that closes whenever the coil Q0 is active.\n This would be the case in a relay, where the coil can activate the switch contacts; or in a contactor,\n where there are often several small auxiliary contacts in addition to the large 3-phase contacts that\n@@ -22119,15 +22119,15 @@\n back on.\n 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\n also a very safe circuit, in that if start and stop are both pressed at the same time, the stop function\n always wins.\n This is the basic building block of much of ladder programming, so if you are new to it, you would do\n well to make sure that you understand how this circuit operates.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 417 / 1290\n \n 8.2 ClassicLadder Programming\n 8.2.1 Ladder Concepts\n ClassicLadder is a type of programming language originally implemented on industrial PLCs (it\u2019s\n called Ladder Programming). It is based on the concept of relay contacts and coils, and can be used\n@@ -22156,15 +22156,15 @@\n 8.2.3.1 Files\n Typically ClassicLadder components are placed in the custom.hal file if your working from a Stepconf\n generated configuration. These must not be placed in the custom_postgui.hal file or the Ladder Editor\n menu will be grayed out.\n Note\n Ladder files (.clp) must not contain any blank spaces in the name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 418 / 1290\n \n 8.2.3.2 Realtime Module\n Loading the ClassicLadder real time module (classicladder_rt) is possible from a HAL file, or directly\n using a halcmd instruction. The first line loads real time the ClassicLadder module. The second line\n adds the function classicladder.0.refresh to the servo thread. This line makes ClassicLadder update\n@@ -22243,15 +22243,15 @@\n \n Objects of most interest are numPhysInputs, numPhysOutputs, numS32in, and numS32out.\n Changing these numbers will change the number of HAL bit pins available. numPhysInputs and\n numPhysOutputs control how many HAL bit (on/off) pins are available. numS32in and numS32out\n control how many HAL signed integers (+- integer range) pins are available.\n For example (you don\u2019t need all of these to change just a few):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 419 / 1290\n \n loadrt classicladder_rt numRungs=12 numBits=100 numWords=10\n numTimers=10 numMonostables=10 numCounters=10 numPhysInputs=10\n numPhysOutputs=10 numArithmExpr=100 numSections=4 numSymbols=200\n numS32in=5 numS32out=5\n@@ -22285,29 +22285,29 @@\n If you first load ladder program with the --nogui option then load ClassicLadder again with no options\n the GUI will display the last loaded ladder program.\n In AXIS you can load the GUI from File/Ladder Editor\u2026\n \n 8.2.5 ClassicLadder GUI\n If you load ClassicLadder with the GUI it will display two windows: Section display, and section manager.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 420 / 1290\n \n 8.2.5.1 Sections Manager\n When you first start up ClassicLadder you get an empty Sections Manager window.\n \n Figure 8.1: Sections Manager Default Window\n This window allows you to name, create or delete sections and choose what language that section\n uses. This is also how you name a subroutine for call coils.\n 8.2.5.2 Section Display\n When you first start up ClassicLadder you get an empty Section Display window. Displayed is one\n empty rung.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 421 / 1290\n \n Figure 8.2: Section Display Default Window\n Most of the buttons are self explanatory:\n The Vars button is for looking at variables, toggle it to display one, the other, both, then none of the\n windows.\n@@ -22325,15 +22325,15 @@\n %Q and the first %W (in an equation). You might see some funny labels, such as (103) in the rungs.\n This is displayed (on purpose) because of an old bug- when erasing elements older versions sometimes\n didn\u2019t erase the object with the right code. You might have noticed that the long horizontal connection\n button sometimes did not work in the older versions. This was because it looked for the free code but\n found something else. The number in the brackets is the unrecognized code. The ladder program will\n still work properly, to fix it erase the codes with the editor and save the program.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 422 / 1290\n \n 8.2.5.3 The Variable Windows\n 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\n other, both, then none of the variable windows.\n \n@@ -22344,28 +22344,28 @@\n areas at the top allow you to select what 15 variables will be displayed in each column. For instance,\n if the %B Variable column were 15 entries high, and you entered 5 at the top of the column, variables\n %B5 to %B19 would be displayed. The check boxes allow you to set and unset %B variables manually\n as long as the ladder program isn\u2019t setting them as outputs. Any Bits that are set as outputs by the\n program when ClassicLadder is running can not be changed and will be displayed as checked if on\n and unchecked if off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 423 / 1290\n \n Figure 8.4: Watch Window\n The Watch Window displays variable status. The edit box beside it is the number stored in the variable\n and the drop-down box beside that allow you to choose whether the number to be displayed in hex,\n decimal or binary. If there are symbol names defined in the symbols window for the word variables\n showing and the display symbols checkbox is checked in the section display window, symbol names\n will be displayed. To change the variable displayed, type the variable number, e.g. %W2 (if the\n display symbols check box is not checked) or type the symbol name (if the display symbols checkbox\n is checked) over an existing variable number/name and press the Enter Key.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 424 / 1290\n \n 8.2.5.4 Symbol Window\n \n Figure 8.5: Symbol Names window\n This is a list of symbol names to use instead of variable names to be displayed in the section window\n@@ -22373,30 +22373,30 @@\n and capital letters), symbol name. If the variable can have a HAL signal connected to it (%I, %Q, and\n %W-if you have loaded s32 pin with the real time module) then the comment section will show the\n current HAL signal name or lack thereof. Symbol names should be kept short to display better. Keep\n in mind that you can display the longer HAL signal names of %I, %Q and %W variable by clicking on\n them in the section window. Between the two, one should be able to keep track of what the ladder\n program is connected to!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 425 / 1290\n \n 8.2.5.5 The Editor window\n \n Figure 8.6: Editor Window\n \u2022 Add - adds a rung after the selected rung\n \u2022 Insert - inserts a rung before the selected rung\n \u2022 Delete - deletes the selected rung\n \u2022 Modify - opens the selected rung for editing\n Starting from the top left image:\n \u2022 Object Selector, Eraser\n \u2022 N.O. Input, N.C. Input, Rising Edge Input, Falling Edge Input\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 426 / 1290\n \n \u2022 Horizontal Connection, Vertical Connection, Long Horizontal Connection\n \u2022 Timer IEC Block, Counter Block, Compare Variable\n \u2022 Old Timer Block, Old Monostable Block (These have been replaced by the IEC Timer)\n \u2022 COILS - N.O. Output, N.C. Output, Set Output, Reset Output\n@@ -22425,21 +22425,21 @@\n \u2022 Compare - creates a compare block to compare variable to values or other variables, e.g. %W1<=5\n or %W1=%W2. Compare cannot be placed in the right most side of the section display.\n \u2022 Variable Assignment - creates an assignment block so you to assign values to variables, e.g. %W2=7\n or %W1=%W2. ASSIGNMENT functions can only be placed at the right most side of the section display.\n 8.2.5.6 Config Window\n The config window shows the current project status and has the Modbus setup tabs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 427 / 1290\n \n Figure 8.7: Config Window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 428 / 1290\n \n 8.2.6 Ladder objects\n 8.2.6.1 CONTACTS\n Represent switches or relay contacts. They are controlled by the variable letter and number assigned\n to them.\n@@ -22476,15 +22476,15 @@\n The time intervals can be set in multiples of 100&8239;ms, seconds, or minutes.\n There are also Variables for IEC timers that can be read and/or written to in compare or operate\n blocks.\n \u2022 %TMxxx.Q - timer done (Boolean, read write)\n \u2022 %TMxxx.P - timer preset (read write)\n \u2022 %TMxxx.V - timer value (read write)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 429 / 1290\n \n 8.2.6.3 TIMERS\n Represent count down timers. This is deprecated and replaced by IEC Timers.\n Timers have 4 contacts.\n \u2022 E - enable (input) starts timer when true, resets when goes false\n@@ -22514,15 +22514,15 @@\n 8.2.6.5 COUNTERS\n Represent up/down counters.\n There are 7 contacts:\n \u2022 R - reset (input) will reset the count to 0.\n \u2022 P - preset (input) will set the count to the preset number assigned from the edit menu.\n \u2022 U - up count (input) will add one to the count.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 430 / 1290\n \n \u2022 D - down count (input) will subtract one from the count.\n \u2022 E - under flow (output) will be true when the count rolls over from 0 to 9999.\n \u2022 D - done (output) will be true when the count equals the preset.\n \u2022 F - overflow (output) will be true when the count rolls over from 9999 to 0.\n@@ -22555,15 +22555,15 @@\n %W1<2*%C0.V\n \n To find out if S32in bit 2 is equal to 10 the syntax would be:\n %IW2=10\n \n Note: Compare uses the arithmetic equals not the double equals that programmers are used to.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 431 / 1290\n \n 8.2.6.7 VARIABLE ASSIGNMENT\n For variable assignment, e.g. assign this number (or evaluated number) to this variable %xxx, there\n 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.\n When a new variable assignment block is opened be sure to delete the # symbol when you enter an\n@@ -22580,23 +22580,23 @@\n when LinuxCNC is started.\n \n The following figure shows an Assignment and a Comparison Example. %QW0 is a S32out bit and\n %IW0 is a S32in bit. In this case the HAL pin classicladder.0.s32out-00 will be set to a value of\n 5 and when the HAL pin classicladder.0.s32in-00 is 0 the HAL pin classicladder.0.out-00 will\n be set to True.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 8.8: Assign/Compare Ladder Example\n \n Figure 8.9: Assignment Expression Example\n \n 432 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 433 / 1290\n \n Figure 8.10: Comparison Expression Example\n \n 8.2.6.8 COILS\n Coils represent relay coils. They are controlled by the variable letter and number assigned to them.\n@@ -22622,15 +22622,15 @@\n If you use a N.C. contact with a N.C. coil the logic will work (when the coil is energized the\n contact will be closed) but that is really hard to follow!\n \n A JUMP COIL is used to JUMP to another section, like a goto in BASIC programming language.\n If you look at the top left of the sections display window you will see a small label box and a longer\n comment box beside it. Now go to Editor\u2192Modify then go back to the little box, type in a name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 434 / 1290\n \n Go ahead and add a comment in the comment section. This label name is the name of this rung only\n and is used by the JUMP COIL to identify where to go.\n When placing a JUMP COIL, add it in the rightmost position and change the label to the rung you want\n to JUMP to.\n@@ -22677,15 +22677,15 @@\n \u2022 %M \u0300\n __xx__.P \u0300 - Monostable xx preset (integer)\n \u2022 %C \u0300\n __xx__.D \u0300 - Counter xx done (Boolean, user read only)\n \u2022 %C \u0300\n __xx__.E \u0300 - Counter xx empty overflow (Boolean, user read only)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 435 / 1290\n \n \u2022 %C \u0300\n __xx__.F \u0300 - Counter xx full overflow (Boolean, user read only)\n \u2022 %C \u0300\n __xx__.V \u0300 - Counter xx current value (integer)\n@@ -22724,15 +22724,15 @@\n Selector arrow, Eraser\n Ordinary step, Initial (Starting) step\n Transition, Step and Transition\n Transition Link-Downside, Transition Link-Upside\n Pass-through Link-Downside, Pass-through Link-Upside Jump\n Link, Comment Box\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 436 / 1290\n \n Figure 8.11: Sequence Editor Window\n \u2022 ORDINARY STEP - has a unique number for each one\n \u2022 STARTING STEP - a sequential program must have one. This is where the program will start.\n \u2022 TRANSITION - shows the variable that must be true for control to pass through to the next step.\n@@ -22743,15 +22743,15 @@\n \u2022 PASS-THROUGH LINK-DOWNSIDE - splits the logic flow to two lines that BOTH must be true to\n continue (Think AND logic)\n \u2022 PASS-THROUGH LINK-UPSIDE - combines two concurrent (AND logic) logic lines back together\n \u2022 JUMP LINK - connects steps that are not underneath each other such as connecting the last step to\n the first\n \u2022 COMMENT BOX - used to add comments\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 437 / 1290\n \n To use links, you must have steps already placed. Select the type of link, then select the two steps or\n transactions one at a time. It takes practice!\n With sequential programming: The variable %X \u0300\n __xxx__ (e.g., \u0300\n@@ -22785,21 +22785,21 @@\n \u2022 6 - write single register\n \u2022 8 - echo test\n \u2022 15 - write multiple coils\n \u2022 16 - write multiple registers\n If you do not specify a --modmaster when loading the ClassicLadder non-realtime program this page\n will not be displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 438 / 1290\n \n Figure 8.12: Modbus I/O Config\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 439 / 1290\n \n Figure 8.13: Modbus Communication Config\n \u2022 SERIAL PORT - For IP blank. For serial the location/name of serial driver, e.g., /dev/ttyS0 ( or\n /dev/ttyUSB0 for a USB-to-serial converter).\n \u2022 SERIAL SPEED - Should be set to speed the slave is set for - 300, 600, 1200, 2400, 4800, 9600,\n@@ -22814,15 +22814,15 @@\n \u2022 DEBUG LEVEL - Set this to 0-3 (0 to stop printing debug info besides no-response errors).\n \u2022 READ COILS/INPUTS MAP TO - Select what variables that read coils/inputs will update. (B or Q).\n \u2022 WRITE COILS MAP TO - Select what variables that write coils will updated from (B,Q,or I).\n \u2022 READ REGISTERS/HOLDING - Select what variables that read registers will update (W or QW).\n \u2022 WRITE REGISTERS MAP TO - Select what variables that read registers will updated from (W, QW,\n or IW).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 440 / 1290\n \n \u2022 SLAVE ADDRESS - For serial the slaves ID number usually settable on the slave device (usually\n 1-256). For IP the slave IP address plus optionally the port number.\n \u2022 TYPE ACCESS - This selects the MODBUS function code to send to the slave (eg what type of\n request).\n@@ -22861,15 +22861,15 @@\n \u2022 ClassicLadder uses RTU protocol (not ASCII).\n \u2022 8 data bits, No parity is used, and 1 stop bit is also known as 8-N-1.\n \u2022 Baud rate must be the same for slave and master. ClassicLadder can only have one baud rate so all\n the slaves must be set to the same rate.\n \u2022 Pause inter frame is the time to pause after receiving an answer.\n \u2022 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).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 441 / 1290\n \n 8.2.10.1 MODBUS Info\n \u2022 ClassicLadder can use distributed inputs/outputs on modules using the Modbus protocol (\u201dmaster\u201d:\n polling slaves).\n \u2022 The slaves and theirs I/O can be configured in the config window.\n@@ -22899,24 +22899,24 @@\n 8.2.11 Debugging modbus problems\n A good reference for the protocol: https://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf.\n If you run linuxcnc/classicladder from a terminal, it will print the Modbus commands and slave responses.\n Here we set ClassicLadder to request slave 1, to read holding registers (function code 3) starting\n at address 8448 (0x2100). We ask for 1 (2 byte wide) data element to be returned. We map it to a\n ClassicLadder variable starting at 2.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 442 / 1290\n \n Figure 8.14: Modbus I/O Register Setup\n Note in this image we have set the debug level to 1 so modbus messages are printed to the terminal. We\n have mapped our read and written holding registers to ClassicLadder\u2019s %W variables so our returned\n data will be in %W2 as in the other image we mapped the data starting at the 2nd element.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 443 / 1290\n \n Figure 8.15: Modbus Communication Setup\n \n 8.2.11.1 Request\n Lets look at an example of reading one hold register at 8448 Decimal (0x2100 Hex).\n@@ -22944,15 +22944,15 @@\n (2\n 1 to 125 (0x7D)\n Bytes)\n (2\n Calculated\n bytes) automatically\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 444 / 1290\n \n Here is an example sent command as printed in the terminal (all Hex):\n INFO CLASSICLADDERModbus I/O module to send: Lgt=8 \n code-83 ) 2 C0 F1\n \n (Slave address-1\n@@ -23063,15 +23063,15 @@\n \u2022 Slave number = 1 (0x1) = Slave address 1\n \u2022 Requested function code = 3 (0x3) = read holding register requested\n \u2022 count of byte registers = 2 (0x1) = return 2 bytes (each register value is 2 bytes wide)\n \u2022 value of highbyte = 0 (0x0) = high byte value of address 8448 (0x2100)\n \u2022 value of lowbyte = 0 (0x0) = high byte value of address 8448 (0x2100)\n \u2022 Checksum = (0xB844)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 446 / 1290\n \n (high and low bytes are combined to create a 16 bit value and then transferred to ClassicLadder\u2019s\n variable.) Read Registers can be mapped to %W or %QW (internal memory or HAL out pins). Write\n registers can be mapped from %W, %QW or %IW (internal memory, HAL out pins or HAL in pins). The\n variable number will start at the number entered in the modbus I/O registry setup page\u2019s column:\n@@ -23090,15 +23090,15 @@\n \n 8.2.12 Setting up ClassicLadder\n In this section we will cover the steps needed to add ClassicLadder to a Stepconf Wizard generated\n config. On the advanced Configuration Options page of Stepconf Wizard check off \u201dInclude ClassicLadder PLC\u201d.\n \n Figure 8.16: Stepconf ClassicLadder\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 447 / 1290\n \n 8.2.12.1 Add the Modules\n If you used the Stepconf Wizard to add ClassicLadder you can skip this step.\n To manually add ClassicLadder you must first add the modules. This is done by adding a couple of\n lines to the custom.hal file.\n@@ -23114,48 +23114,48 @@\n window open the Editor. In the Editor window select Modify. Now a Properties window pops up and\n the Section Display shows a grid. The grid is one rung of ladder. The rung can contain branches.\n A simple rung has one input, a connector line and one output. A rung can have up to six horizontal\n branches. While it is possible to have more than one circuit in a run the results are not predictable.\n \n Figure 8.17: Section Display with Grid\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 448 / 1290\n \n Now click on the N.O. input in the Editor Window.\n \n Figure 8.18: Editor Window\n Now click in the upper left grid to place the N.O. Input into the ladder.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 449 / 1290\n \n Figure 8.19: Section Display with Input\n Repeat the above steps to add a N.O. output to the upper right grid and use the Horizontal Connection\n to connect the two. It should look like the following. If not, use the Eraser to remove unwanted\n sections.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 450 / 1290\n \n Figure 8.20: Section Display with Rung\n Now click on the OK button in the Editor window. Now your Section Display should look like this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 451 / 1290\n \n Figure 8.21: Section Display Finished\n To save the new file select Save As and give it a name. The .clp extension will be added automatically.\n It should default to the running config directory as the place to save it.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 452 / 1290\n \n Figure 8.22: Save As Dialog\n Again if you used the Stepconf Wizard to add ClassicLadder you can skip this step.\n To manually add a ladder you need to add add a line to your custom.hal file that will load your ladder\n file. Close your LinuxCNC session and add this line to your custom.hal file.\n@@ -23166,15 +23166,15 @@\n \n 8.3 ClassicLadder Examples\n 8.3.1 Wrapping Counter\n To have a counter that wraps around you have to use the preset pin and the reset pin. When you\n create the counter set the preset at the number you wish to reach before wrapping around to 0. The\n logic is if the counter value is over the preset then reset the counter and if the underflow is on then\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 453 / 1290\n \n set the counter value to the preset value. As you can see in the example when the counter value is\n greater than the counter preset the counter reset is triggered and the value is now 0. The underflow\n output %Q2 will set the counter value at the preset when counting backwards.\n \n@@ -23184,15 +23184,15 @@\n This example shows you how to reject extra pulses from an input. Suppose the input pulse %I0 has\n an annoying habit of giving an extra pulse that spoils our logic. The TOF (Timer Off Delay) prevents\n the extra pulse from reaching our cleaned up output %Q0. How this works is when the timer gets\n an input the output of the timer is on for the duration of the time setting. Using a normally closed\n contact %TM0.Q the output of the timer blocks any further inputs from reaching our output until it\n times out.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 454 / 1290\n \n Figure 8.24: Reject Extra Pulse\n \n 8.3.3 External E-Stop\n The External E-Stop example is in the /config/classicladder/cl-estop folder. It uses a PyVCP panel to\n@@ -23206,15 +23206,15 @@\n \n Next we add ClassicLadder to our custom.hal file by adding these two lines:\n loadrt classicladder_rt\n addf classicladder.0.refresh servo-thread\n \n Next we run our config and build the ladder as shown here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 455 / 1290\n \n Figure 8.25: E-Stop Section Display\n After building the ladder select Save As and save the ladder as estop.clp\n Now add the following line to your custom.hal file.\n # Load the ladder\n@@ -23225,15 +23225,15 @@\n \u2022 %I1 = Input from LinuxCNC\u2019s E-Stop\n \u2022 %I2 = Input from LinuxCNC\u2019s E-Stop Reset Pulse\n \u2022 %I3 = Input from the PyVCP panel reset button\n \u2022 %Q0 = Output to LinuxCNC to enable\n \u2022 %Q1 = Output to external driver board enable pin (use a N/C output if your board had a disable pin)\n Next we add the following lines to the custom_postgui.hal file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 456 / 1290\n \n # E-Stop example using PyVCP buttons to simulate external components\n # The PyVCP checkbutton simulates a normally closed external E-Stop\n net ext-estop classicladder.0.in-00 <= pyvcp.py-estop\n # Request E-Stop Enable from LinuxCNC\n@@ -23267,36 +23267,36 @@\n \u201dpy-reset\u201d\n \u201dReset\u201d\n \n \n \n Now start up your config and it should look like this.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 457 / 1290\n \n Figure 8.26: AXIS E-Stop\n Note that in this example like in real life you must clear the remote E-Stop (simulated by the checkbox)\n before the AXIS E-Stop or the external Reset will put you in OFF mode. If the E-Stop in the AXIS screen\n was pressed, you must press it again to clear it. You cannot reset from the external after you do an\n E-Stop in AXIS.\n \n 8.3.4 Timer/Operate Example\n In this example we are using the Operate block to assign a value to the timer preset based on if an\n input is on or off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 458 / 1290\n \n Figure 8.27: Timer/Operate Example\n In this case %I0 is true so the timer preset value is 10. If %I0 was false the timer preset would be 5.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 459 / 1290\n \n Chapter 9\n \n Advanced Topics\n 9.1 Kinematics\n@@ -23324,15 +23324,15 @@\n Cartesian coordinates. The A B C axes refer to rotational coordinates about the X Y Z axes respectively.\n The U V W axes refer to additional coordinates that are commonly made colinear to the X Y Z axes\n respectively.\n 1 The word \u201daxes\u201d is also commonly (and wrongly) used when talking about CNC machines, and referring to the moving\n directions of the machine.\n 2 Kinematics: a two way function to transform from Cartesian space to joint space.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 460 / 1290\n \n 9.1.2 Trivial Kinematics\n The simplest machines are those in which which each joint is placed along one of the Cartesian axes.\n On these machines the mapping from Cartesian space (the G-code program) to the joint space (the\n actual actuators of the machine) is trivial. It is a simple 1:1 mapping:\n@@ -23386,15 +23386,15 @@\n 3 If the machine (for example a lathe) is mounted with only the X, Z and A axes and the INI file of LinuxCNC contains only\n \n the definition of these 3 joints, then the previous assertion is false. Because we currently have (joint0=X, joint1=Z, joint2=A)\n which assumes that joint1=Y. To make this work in LinuxCNC just define all the axes (XYZA), LinuxCNC will then use a simple\n loop in HAL for unused Y axis.\n 4 Another way to make it work is to change the corresponding code and recompile the software.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 461 / 1290\n \n Use of the coordinates= parameter is recommended for configurations that omit axis letters. 5\n The trivkins kinematics module also allows the same coordinate to be specified for more than one\n joint. This feature can be useful on machines like a gantry having two independent motors for the y\n coordinate. Such a machine could use coordinates=xyyz resulting in joint assignments:\n@@ -23415,15 +23415,15 @@\n \n Figure 9.1: Bipod setup\n 5 Historically, the trivkins module did not support the coordinates= parameter so lathe configs were often configured as XYZ\n machines. The unused Y axis was configured to 1) home immediately, 2) use a simple loopback to connect its position command\n HAL pin to its position feedback HAL pin, and 3) hidden in gui displays. Numerous sim configs use these methods in order to\n share common HAL files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 462 / 1290\n \n The Bipod we are talking about is a device that consists of 2 motors placed on a wall, from which a\n device is hung using some wire. The joints in this case are the distances from the motors to the device\n (named AD and BD in the figure).\n The position of the motors is fixed by convention. Motor A is in (0,0), which means that its X coordinate\n@@ -23455,15 +23455,15 @@\n double x = (AD2 - BD2 + Bx * Bx) / (2 * Bx);\n double y2 = AD2 - x * x;\n if(y2 < 0) return -1;\n pos->tran.x = x;\n pos->tran.y = sqrt(y2);\n return 0;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 463 / 1290\n \n 9.1.3.2 Inverse transformation\n The inverse kinematics is much easier in our example, as we can write it directly:\n \n or translated to actual code:\n@@ -23498,15 +23498,15 @@\n \n int kinematicsSwitchable(void)\n int kinematicsSwitch(int switchkins_type)\n KINS_NOT_SWITCHABLE\n \n The function kinematicsSwitchable() returns 1 if multiple kinematics types are supported. The function kinematicsSwitch() selects the kinematics type. See Switchable Kinematitcs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 464 / 1290\n \n Note\n The majority of provided kinematics modules support a single kinematics type and use the directive\n \u201dKINS_NOT_SWITCHABLE\u201d to supply defaults for the required kinematicsSwitchable() and kinematicsSwitch() functions.\n \n@@ -23541,15 +23541,15 @@\n Note\n This document does not cover the creation of a vismach model which, while certainly very useful,\n requires just as much careful modeling if it is to match the genserkins model derived in this document.\n \n Note\n There may be errors and/or shortcomings \u2014 use at your own risk!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 465 / 1290\n \n 9.2.2 General\n With the proliferation of industrial robots comes an increased interest to control used robots with\n LinuxCNC. A common type of robot used in industry and manufacturing is the \u201dserial manipulator\u201d\n designed as a series of motorized joints connected by rigid links. Serial robots often have six joints\n@@ -23592,15 +23592,15 @@\n \n 9.2.4 Modified DH-Parameters as used in genserkins\n Note that genserkins does not handle offsets to theta-values \u2014 theta is the joint variable that is controlled by LinuxCNC. With the CS aligned with the joint, a rotation around its Z-Axis is identical to\n the rotation commanded to that joint by LinuxCNC. This makes it impossible to define the 0\u00b0 position\n of our robots joints arbitrarily.\n The three configurable parameters are:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 466 / 1290\n \n 1. alpha : positive or negative rotation (in radians) around the X-axis of the \u201dcurrent coordinate\n system\u201d\n 2. a : positive distance, along X, between two joint axes specified in machine units (mm or inch)\n defined in the system\u2019s INI file.\n@@ -23632,87 +23632,87 @@\n but there is no point in setting it other than 0.\n \n 9.2.8 Detailed Example (RV-6SL)\n Described below is a method to derive the required \u201dmodified DH-parameters\u201d for a Mitsubishi RV6SDL and how to set the parameters in the HAL file to be used with the genserkins kinematics in\n LinuxCNC. The necessary dimensions are best taken from a dimensional drawing provided by the\n manufacturer of the robot.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 467 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 468 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 469 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 470 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 471 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 472 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 473 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 474 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 475 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 476 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 477 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 478 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 479 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 480 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 481 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 482 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 483 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 484 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 485 / 1290\n \n 9.2.9 Credits\n Thanks to user Aciera for all text and the graphics for the RV-6SL robot!\n \n 9.3 5-Axis Kinematics\n@@ -23741,27 +23741,27 @@\n the cutter tip position and the cutter orientation relative to the workpiece coordinate system. Two\n vectors, as generated by most CAM systems and shown in Fig. 1, contain this information:\n \n The K vector is equivalent to the 3rd vector from the pose matrix E6 that was used in the 6-axis robot\n kinematics [3] and the Q vector is equivalent to the 4th vector of E6 . In MASTERCAM for example\n this information is contained in the intermediate output \u201d.nci\u201d file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 486 / 1290\n \n Figure 9.2: Cutter location data\n \n 9.3.4 Translation and Rotation Matrices\n Homogeneous transformations provide a simple way to describe the mathematics of multi-axis machine kinematics. A transformation of the space H is a 4x4 matrix and can represent translation and\n rotation transformations. Given a point x,y,x described by a vector u = {x,y,z,1}T , then its transformation v is represented by the matrix product\n \n There are four fundamental transformation matrices on which 5-axis kinematics can be based:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 487 / 1290\n \n The matrix T(a,b,c) implies a translation in the X, Y, Z coordinate directions by the amounts a, b, c\n respectively. The R matrices imply rotations of the angle theta about the X, Y and Z coordinate axes\n respectively. The C and S symbols refer to cosine and sine functions respectively.\n \n@@ -23771,15 +23771,15 @@\n \u2022 A rotary table which rotates about the vertical Z-axes (C-rotation, secondary) mounted on a tilting\n table which rotates about the X- or Y-axis (A- or B-rotation, primary). The workpiece is mounted on\n the rotary table.\n \u2022 A tilting table which rotates about the X- or Y-axis (A- or B-rotation, secondary) is mounted on a\n rotary table which rotates about the Z-axis (C-rotation, primary), with the workpiece on the tilting\n table.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 488 / 1290\n \n Figure 9.3: General configuration and coordinate systems\n 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\n describe the relative position and orientation between these coordinate frames\n We need to describe a relationship between the workpiece coordinate system and the tool coordinate system. This can be defined by a transformation matrix w At , which can be found by subsequent\n@@ -23787,43 +23787,43 @@\n defined coordinate system. In general such a transformation may look as follows:\n \n where each matrix i-1 Aj is a translation matrix T or a rotation matrix R of the form (2,3).\n Matrix multiplication is a simple process in which the elements of each row of the lefthand matrix\n A is multiplied by the elements of each column of the righthand matrix B and summed to obtain an\n element in the result matrix C, ie.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 489 / 1290\n \n In Fig. 2 a generic configuration with coordinate systems is shown [4]. It includes table rotary/tilting\n axes as well as spindle rotary/tilting axes. Only two of the rotary axes are actually used in a machine\n tool.\n First we will develop the transformations for the first type of configuration mentioned above, ie. a table\n tilting/rotary (trt) type with no rotating axis offsets. We may give it the name xyzac-trt configuration.\n We also develop the transformations for the same type (xyzac-trt), but with rotating axis offsets.\n Then we develop the transformations for a xyzbc-trt configuration with rotating axis offsets.\n 9.3.5.1 Transformations for a xyzac-trt machine tool with work offsets\n \n Figure 9.4: vismach model of xyzac-trt with coincident rotation axes\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 490 / 1290\n \n We deal here with a simplified configuration in which the tilting axis and rotary axis intersects at a\n point called the pivot point as shown in Fig. 4. therefore the two coordinate systems Ows and Owp of\n Fig. 2 are coincident.\n \n Figure 9.5: Table tilting/rotary configuration\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 491 / 1290\n \n In these equations Lx , Ly , Lz defines the offsets of the pivot point of the two rotary axes A and C\n relative to the workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances\n of the pivot point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot\n point. The pivot point is at the intersection of the two rotary axes. The signs of the SA and SC terms\n@@ -23842,56 +23842,56 @@\n Equating the last column of (8) with the tool position vector Q, we can write:\n \n The vector on the right hand side can also be written as the product of a matrix and a vector resulting\n in:\n \n This can be expanded to give\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 492 / 1290\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (13) as P = (Q AP )-1 * Q. Noting that the square matrix is a homogeneous 4x4 matrix containing a rotation matrix R and translation vector q, for which the inverse can\n be written as:\n \n where R^T is the transpose of R (rows and columns swappped). We therefore obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 493 / 1290\n \n 9.3.5.2 Transformations for a xyzac-trt machine with rotary axis offsets\n \n Figure 9.6: vismach model of xyzac-trt with rotational axis offsets (positive)\n We deal here with a extended configuration in which the tilting axis and rotary axis do not intersect\n at a point but have an offset Dy . Furthermore, there is also an z-offset between the two coordinate\n systems Ows and Owp of Fig. 2, called Dz . A vismach model is shown in Fig. 5 and the offsets are\n shown in Fig. 6 (positive offsets in this example). To simplify the configuration, the offsets Lx , Ly , Lz\n of the previous case are not included. They are probably not necessary if one uses the G54 offsets in\n LinuxCNC by means of the \u201dtouch of\u201d facility.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 494 / 1290\n \n Figure 9.7: Table tilting/rotary xyzac-trt configuration, with axis offsets\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n In these equations Dy , Dz defines the offsets of the pivot point of the rotary axes A relative to the\n workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances of the pivot\n point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot point. The\n pivot point is on the A rotary axis.\n When multiplied in accordance with (18), we obtain:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 495 / 1290\n \n We can now equate the third column of this matrix with our given tool orientation vector K, ie.:\n \n From these equations we can solve for the rotation angles thetaA , thetaC . From the third row we find:\n \n@@ -23905,42 +23905,42 @@\n in:\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (25) as P = (Q AP )-1 * Q using (15) as before. We thereby obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 496 / 1290\n \n 9.3.5.3 Transformations for a xyzbc-trt machine with rotary axis offsets\n \n Figure 9.8: vismach model of xyzbc-trt with rotational axis offsets (negative)\n We deal here again with a extended configuration in which the tilting axis (about the y-axis) and rotary\n axis do not intersect at a point but have an offset Dx . Furthermore, there is also an z-offset between\n the two coordinate systems Ows and Owp of Fig. 2, called Dz . A vismach model is shown in Fig. 7\n (negative offsets in this example) and the positive offsets are shown in Fig. 8.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 497 / 1290\n \n Figure 9.9: Table tilting/rotary xyzbc-trt configuration, with axis offsets\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n In these equations Dx , Dz defines the offsets of the pivot point of the rotary axes B relative to the\n workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances of the pivot\n point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot point. The\n pivot point is on the B rotary axis.\n When multiplied in accordance with (29), we obtain:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 498 / 1290\n \n We can now equate the third column of this matrix with our given tool orientation vector K, i.e.:\n \n From these equations we can solve for the rotation angles thetaB , thetaC . From the third row we find:\n \n@@ -23955,15 +23955,15 @@\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (37) as P = (Q AP )-1 * Q.\n With the same approach as before, we obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 499 / 1290\n \n 9.3.6 Table Rotary/Tilting Examples\n LinuxCNC includes kinematics modules for the xyzac-trt and xyzbc-trt topologies described in the\n mathematics detailed above. For interested users, the source code is available in the git tree in the\n src/emc/kinematics/ directory.\n@@ -24007,15 +24007,15 @@\n \n 9.3.7 Custom Kinematics Components\n LinuxCNC implements kinematics using a HAL component that is loaded at startup of LinuxCNC. The\n most common kinematics module, trivkins, implements identity (trivial) kinematics where there is a\n one-to-one correspondence between an axis coordinate letter and a motor joint. Additional kinematics\n modules for more complex systems (including xyzac-trt and xyzbc-trt described above) are available.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 500 / 1290\n \n See the kins manpage (\\$ man kins) for brief descriptions of the available kinematics modules.\n The kinematics modules provided by LinuxCNC are typically written in the C-language. Since a standard structure is used, creation of a custom kinematics module is facilitated by copying an existing\n source file to a user file with a new name, modifying it, and then installing.\n Installation is done using halcompile:\n@@ -24037,29 +24037,29 @@\n module. These pins can be connected to a signal for dynamic control or set once with HAL connections\n like:\n # set offset parameters\n net :tool-offset motion.tooloffset.z xyzac-trt-kins.tool-offset\n setp xyzac-trt-kins.y-offset 0\n setp xyzac-trt-kins.z-offset 20\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 9.3.8 Figures\n \n Figure 9.10: Table tilting/rotating configuration\n \n 501 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 9.11: Spindle/table tilting configuration\n \n 502 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 503 / 1290\n \n Figure 9.12: Spindle tilting/rotary configuration\n \n 9.3.9 REFERENCES\n 1. AXIS MACHINE TOOLS: Kinematics and Vismach Implementation in LinuxCNC, RJ du Preez,\n@@ -24074,15 +24074,15 @@\n \n 9.4 Switchable Kinematics (switchkins)\n 9.4.1 Introduction\n A number of kinematics modules support the switching of kinematics calculations. These modules\n support a default kinematics method (type0), a second built-in method (type1), and (optionally) a userprovided kinematics method (type2). Identity kinematics are typically used for the type1 method.\n The switchkins functionality can be used for machines where post-homing joint control is needed during setup or to avoid movement near singularities from G-code. Such machines use specific kinematics\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 504 / 1290\n \n calculations for most operations but can be switched to identity kinematics for control of individual\n joints after homing.\n The kinematics type is selected by a motion module HAL pin that can be updated from a G-code\n program or by interactive MDI commands. The halui provisions for activating MDI commands can be\n@@ -24118,15 +24118,15 @@\n # custom identity ordering: joint0==c, joint1==b, ...\n # KINEMATICS = genhexkins coordinates=cbazyx\n \n Note\n If the coordinates= parameter is omitted, the default joint-letter identity assignments are\n joint0==x,joint1=y,\u2026\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 505 / 1290\n \n The joint assignments provided for identity kinematics when using the coordinates parameter are\n identical to those provided for the trivkins module. However, duplication of axis letters to assign\n multiple joints for a coordinate letter is not generally applicable for serial or parallel kinematics (like\n genserkins, pumakins, genhexkins, etc.) where there is no simple relationship between joints and\n@@ -24158,15 +24158,15 @@\n 9.4.4 Usage\n 9.4.4.1 HAL Connections\n Switchkins functionality is enabled by the pin motion.switchkins-type. Typically, this pin is sourced\n by an analog output pin like motion.analog-out-03 so that it can be set by M68 commands. Example:\n net :kinstype-select <= motion.analog-out-03\n net :kinstype-select => motion.switchkins-type\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 506 / 1290\n \n 9.4.4.2 G-/M-code commands\n Kinstype selection is managed using G-code sequences like:\n ...\n M68 E3 Q1 ;update analog-out-03 to select kinstype 1\n@@ -24205,15 +24205,15 @@\n XYZABCUVW):\n [AXIS_L]\n MIN_LIMIT =\n MAX_LIMIT =\n MAX_VELOCITY =\n MIN_ACCELERATION =\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 507 / 1290\n \n The INI file limits specified apply to the type 0 default kinematics type that is activated at startup.\n These limits may not be applicable when switching to alternative kinematics. However, since an\n interpreter-motion synchronization is required when switching kinematics, INI-HAL pins can be used\n to setup limits for a pending kinematics type.\n@@ -24257,15 +24257,15 @@\n the set XYZABCUVW. The INI file settings ([AXIS_L]) are not applicable when operating with identity\n (type1) kinematics. To address this use case, the user M-code scripts can be designed as follows:\n M129 (Switch to identity type1)\n 1. read and parse INI file\n 2. HAL: setp the INI-HAL limit pins for each axis letter ([AXIS_L]) according to the identity-referenced\n joint number INI file setting ([JOINT_N])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 508 / 1290\n \n 3. HAL: setp motion.switchkins-type 1\n 4. MDI: execute a syncing G-code (M66E0L0)\n M128 (restore robot default kinematics type 0)\n 1. read and parse INI file\n@@ -24310,15 +24310,15 @@\n directory and edited to supply custom kinematics with kinstype==2.\n The user custom kinematics file can be compiled from out-of-tree source locations for rt-preempt\n implementations or by replacing the in-tree template file (src/emc/kinematics/userkfuncs.c) for rtai\n systems.\n Preempt-rt make example:\n $ userkfuncs=/home/myname/kins/mykins.c make && sudo make setuid\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 509 / 1290\n \n 9.4.7 Warnings\n Unexpected behavior can result if a G-code program is inadvertently started with an incompatible\n kinematics type. Unwanted behavior can be circumvented in G-code programs by:\n 1. Connecting appropriate kinstype.is.N HAL pins to digital input pins (like motion.digital-in-0m).\n@@ -24351,15 +24351,15 @@\n manipulable input to the process that brings the process measured value back to its desired set point.\n Unlike simpler control algorithms, the PID controller can adjust process outputs based on the history\n and rate of change of the error signal, which gives more accurate and stable control. (It can be\n shown mathematically that a PID loop will produce accurate, stable control in cases where a simple\n proportional control would either have a steady-state error or would cause the process to oscillate).\n 6 This Subsection is taken from an much more extensive article found at https://en.wikipedia.org/wiki/PID_controller\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 510 / 1290\n \n 9.5.1.1 Control loop basics\n Intuitively, the PID loop tries to automate what an intelligent operator with a gauge and a control\n knob would do. The operator would read a gauge showing the output measurement of a process, and\n use the knob to adjust the input of the process (the action) until the process\u2019s output measurement\n@@ -24398,15 +24398,15 @@\n set point. A simple proportional system either oscillates, moving back and forth around the set point\n because there\u2019s nothing to remove the error when it overshoots, or oscillates and/or stabilizes at a\n too low or too high value. By adding a negative proportion of (i.e. subtracting part of) the average\n error from the process input, the average difference between the process output and the set point is\n always being reduced. Therefore, eventually, a well-tuned PID loop\u2019s process output will settle down\n at the set point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 511 / 1290\n \n Derivative To handle the future, the first derivative (the slope of the error) over time is calculated,\n and multiplied by another (negative) constant D, and also added to (subtracting error from) the controlled quantity. The derivative term controls the response to a change in the system. The larger the\n derivative term, the more rapidly the controller responds to changes in the process\u2019s output.\n More technically, a PID loop can be characterized as a filter applied to a complex frequency-domain\n@@ -24484,15 +24484,15 @@\n D\n \n Pc /1.2\n \n 7 Introduced in the 1942 paper Optimum Settings for Automatic Controllers, DOI 10.1115/1.2899060 also available from\n The Internet Archive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Control type\n PID\n \n 512 / 1290\n \n P\n@@ -24536,15 +24536,15 @@\n deficient code by a an O-word procedure call.\n In its simplest form, a remapped code isn\u2019t much more than a spontaneous call to an O-word procedure. This happens behind the scenes - the procedure is visible at the configuration level, but not at\n the NGC program level.\n Generally, the behavior of a remapped code may be defined in the following ways:\n \u2022 You define a O-word subroutine which implements the desired behavior\n \u2022 Alternatively, you may employ a Python function which extends the interpreter\u2019s behavior.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 513 / 1290\n \n How to glue things together M- and G-codes, and O-words subroutine calls have some fairly different syntax.\n O-word procedures, for example, take positional parameters with a specific syntax like so:\n o call [1.234] [4.65]\n \n@@ -24580,15 +24580,15 @@\n 9.6.2 Getting started\n Defining a code involves the following steps:\n \u2022 Pick a code - either use an unallocated code, or redefine an existing code.\n \u2022 Decide how parameters are handled.\n \u2022 Decide if and how results are handled.\n \u2022 Decide about the execution sequence.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 514 / 1290\n \n 9.6.2.1 Builtin Remaps\n Please note that currently only some existing codes can be redefined, while there are many free codes\n that may be available for remapping. When developing redefined existing code, it is a good idea to\n start with an unassigned G- or M- code, so that you can use both an existing behavior as well as a new\n@@ -24626,15 +24626,15 @@\n which might be made available by remapping. When developing a redefined existing code, it might\n be a good idea to start with an unallocated G- or M-code, so both the existing and new behavior can\n be exercised. When done, redefine the existing code to use your remapping setup.\n \u2022 The current set of unused M-codes open to user definition can be found here.\n \u2022 Unallocated G-codes are listed here.\n \u2022 Existing codes which may be remapped are listed here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 515 / 1290\n \n 9.6.2.3 Parameter handling\n Let\u2019s assume the new code will be defined by an NGC procedure, and needs some parameters, some\n of which might be required, others might be optional. We have the following options to feed values to\n the procedure:\n@@ -24671,15 +24671,15 @@\n [RS274NGC]\n REMAP=M400\n \n modalgroup=10 argspec=Pq ngc=myprocedure\n \n In a nutshell, this means:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 516 / 1290\n \n \u2022 The M400 code takes a required parameter P and an optional parameter Q. Other words in the current\n block are ignored with respect to the M400 code. If the P word is not present, fail execution with an\n error.\n \u2022 When an M400 code is encountered, execute myprocedure.ngc along the other modal group 10 Mcodes as per order of execution.\n@@ -24717,15 +24717,15 @@\n for in the directories specified in the directory specified in [DISPLAY]PROGRAM_PREFIX, then in\n [RS274NGC]SUBROUTINE_PATH. Mutually exclusive with python=. It is an error to omit both ngc=\n and python=.\n python=\n Instead of calling an ngc O-word procedure call a Python function. The function is expected to\n be defined in the module_basename.oword module. Mutually exclusive with ngc=.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 517 / 1290\n \n prolog=\n Before executing an ngc procedure, call this Python function. The function is expected to be\n defined in the module_basename.remap module. Optional.\n epilog=\n@@ -24764,15 +24764,15 @@\n An empty argspec, or no argspec argument at all implies the remapped code does not receive any\n parameters from the block. It will ignore any extra parameters present.\n Note that RS274NGC rules still apply - for instance you may use axis words (e.g., X, Y, Z) only in the\n context of a G-code.\n Axis words may also only be used if the axis is enabled. If only XYZ are enabled, ABCUVW will not be\n available to be used in argspec.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 518 / 1290\n \n Words F, S and T (short FST) will have the normal functions but will be available as variables in the\n remapped function. F will set feedrate, S will set spindle RPM, T will trigger the tool prepare function.\n Words FST should not be used if this behavior is not desired.\n Words DEIJKPQR have no predefined function and are recommended for use as argspec parameters.\n@@ -24814,15 +24814,15 @@\n (the q argspec is optional since its lowercase in the argspec. Use as follows:)\n o100 if [EXISTS[#]]\n (debug, Q word set: #)\n o100 endif\n o endsub\n M2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 519 / 1290\n \n \u2022 Executing M400 will fail with the message user-defined M400: missing: P.\n \u2022 Executing M400 P123 will display P word=123.000000.\n \u2022 Executing M400 P123 Q456 will display P word=123.000000 and Q word set: 456.000000.\n Example for positional parameter passing to NGC procedures Assume the code is defined as\n@@ -24863,15 +24863,15 @@\n Advanced example: Remapped codes in pure Python The interpreter and emccanon modules\n expose most of the Interpreter and some Canon internals, so many things which so far required coding\n in C/C+\\+ can be now be done in Python.\n The following example is based on the nc_files/involute.py script - but canned as a G-code with\n some parameter extraction and checking. It also demonstrates calling the interpreter recursively (see\n self.execute()).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 520 / 1290\n \n Assuming a definition like so (NB: this does not use argspec):\n REMAP=G88.1 modalgroup=1 py=involute\n The involute function in python/remap.py listed below does all word extraction from the current\n block directly. Note that interpreter errors can be translated to Python exceptions. Remember this is\n@@ -24915,15 +24915,15 @@\n y = y0 + a * (sin(t) - t * cos(t))\n self.execute(\u201dG1 X%f Y%f\u201d % (x,y),lineno())\n if c.z_flag: # retract to starting height\n self.execute(\u201dG0 Z%f\u201d % (old_z),lineno())\n except InterpreterException,e:\n msg = \u201d%d: \u2019%s\u2019 - %s\u201d % (e.line_number,e.line_text, e.error_message)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 521 / 1290\n \n return msg\n return INTERP_OK\n \n The examples described so far can be found in configs/sim/axis/remap/getting-started with complete\n@@ -24967,15 +24967,15 @@\n (dire but necessary).\n Note than when remapping an existing code, we completely disable this codes\u2019 built-in functionality\n of the interpreter.\n So our remapped code will need to do a bit more than just generating some commands to move the\n machine as we like - it will also need to replicate those steps from this sequence which are needed to\n keep the interpreter and task happy.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 522 / 1290\n \n However, this does not affect the processing of tool change-related commands in task and iocontrol.\n This means when we execute step 6b this will still cause iocontrol to do its thing.\n Decisions, decisions:\n \u2022 Do we want to use an O-word procedure or do it all in Python code?\n@@ -25010,15 +25010,15 @@\n the \u201draise tool-change and wait for tool-changed to become high\u201d HAL sequence in iocontrol,\n besides setting the XXXX pins\n What you need to decide is whether the existing iocontrol HAL sequences are sufficient to drive your\n changer. Maybe you need a different interaction sequence - for instance more HAL pins, or maybe a\n more complex interaction. Depending on the answer, we might continue to use the existing iocontrol\n HAL sequences, or define our own ones.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 523 / 1290\n \n For the sake of documentation, we\u2019ll disable these iocontrol sequences, and roll our own - the result\n will look and feel like the existing interaction, but now we have complete control over them because\n they are executed in our own O-word procedure.\n So what we\u2019ll do is use some motion.digital-* and motion.analog-* pins, and the associated M62\n@@ -25069,15 +25069,15 @@\n follows:\n REMAP=M6\n \n modalgroup=6\n \n prolog=change_prolog ngc=change epilog=change_epilog\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 524 / 1290\n \n So the prolog covering steps 1 and 2 would look like so - we decide to pass a few variables to the\n remap procedure which can be inspected and changed there, or used in a message. Those are:\n tool_in_spindle, selected_tool (tool numbers) and their respective tooldata indices current_pocket\n and selected_pocket:\n@@ -25123,15 +25123,15 @@\n if self.return_value > 0.0:\n # commit change\n self.selected_pocket = int(self.params[\u201dselected_pocket\u201d])\n emccanon.CHANGE_TOOL(self.selected_pocket)\n # cause a sync()\n self.tool_change_flag = True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 525 / 1290\n \n self.set_tool_parameters()\n return INTERP_OK\n else:\n return \u201dM6 aborted (return code %.1f)\u201d % (self.return_value)\n@@ -25168,15 +25168,15 @@\n \u2022 M6 (change_prolog): #, #, #, #\n \u2022 M61 (settool_prolog): # , #\n \u2022 S (setspeed_prolog): #\n \u2022 F (setfeed_prolog): #\n If you have specific needs for extra parameters to be made visible, that can simply be added to the\n prolog - practically all of the interpreter internals are visible to Python.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 526 / 1290\n \n 9.6.5.6 Making minimal changes to the built in codes, including M6\n Remember that normally remapping a code completely disables all internal processing for that code.\n However, in some situations it might be sufficient to add a few codes around the existing M6 built in\n implementation, like a tool length probe, but other than that retain the behavior of the built in M6.\n@@ -25226,15 +25226,15 @@\n cblock = self.blocks[self.remap_level]\n if not cblock.t_flag:\n return \u201dT requires a tool number\u201d\n tool\n \n = cblock.t_number\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 527 / 1290\n \n if tool:\n (status, pocket) = self.find_tool_pocket(tool)\n if status != INTERP_OK:\n return \u201dT%d: pocket not found\u201d % (tool)\n@@ -25282,15 +25282,15 @@\n remap is aborted.\n The way to do this is by using the [RS274NGC]ON_ABORT_COMMAND feature. This INI option specifies a\n O-word procedure call which is executed if task for some reason aborts program execution. on_abort\n receives a single parameter indicating the cause for calling the abort procedure, which might be used\n for conditional cleanup.\n The reasons are defined in nml_intf/emc.hh\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 528 / 1290\n \n EMC_ABORT_TASK_EXEC_ERROR = 1,\n EMC_ABORT_AUX_ESTOP = 2,\n EMC_ABORT_MOTION_OR_IO_RCS_ERROR = 3,\n EMC_ABORT_TASK_STATE_OFF = 4,\n@@ -25339,15 +25339,15 @@\n Make sure on_abort.ngc is along the interpreter search path (recommended location: SUBROUTINE_PATH\n so as not to clutter your NC_FILES directory with internal procedures).\n Statements in that procedure typically would assure that post-abort any state has been cleaned up,\n like HAL pins properly reset. For an example, see configs/sim/axis/remap/rack-toolchange.\n Note that terminating a remapped code by returning INTERP_ERROR from the epilog (see previous\n section) will also cause the on_abort procedure to be called.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 529 / 1290\n \n 9.6.5.9 Error handling: failing a remapped code NGC procedure\n If you determine in your handler procedure that some error condition occurred, do not use M2 to end\n your handler - see above:\n If displaying an operator error message and stopping the current program is good enough, use the\n@@ -25381,15 +25381,15 @@\n change gears appropriately if not.\n 9.6.6.2 Adjusting the behavior of M0, M1, M60\n A use case for remapping M0/M1 would be to customize the behavior of the existing code. For instance, it could be desirable to turn off the spindle, mist and flood during an M0 or M1 program\n pause, and turn these settings back on when the program is resumed.\n For a complete example doing just that, see configs/sim/axis/remap/extend-builtins/, which\n adapts M1 as laid out above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 530 / 1290\n \n 9.6.7 Creating new G-code cycles\n A G-code cycle as used here is meant to behave as follows:\n \u2022 On first invocation, the associated words are collected and the G-code cycle is executed.\n \u2022 If subsequent lines just continue parameter words applicable to this code, but no new G-code, the\n@@ -25433,15 +25433,15 @@\n [PYTHON]\n TOPLEVEL = \n Filename of the initial Python script to execute on startup. This script is responsible for\n setting up the package name structure, see below.\n PATH_PREPEND = \n Prepend this directory to PYTHON_PATH. A repeating group.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 531 / 1290\n \n PATH_APPEND = \n Append this directory to PYTHON_PATH. A repeating group.\n LOG_LEVEL = \n Log level of plugin-related actions. Increase this if you suspect problems. Can be very\n@@ -25481,15 +25481,15 @@\n 9.6.9.2 The Interpreter as seen from Python\n \n The interpreter is an existing C++ class (Interp) defined in src/emc/rs274ngc. Conceptually all oword. Python calls are methods of this Interp class, although there is no explicit\n Python definition of this class (it is a Boost.Python wrapper instance) and hence receive the as the\n first parameter self which can be used to access internals.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 532 / 1290\n \n 9.6.9.3 The Interpreter __init__ and __delete__ functions\n If the TOPLEVEL module defines a function __init__, it will be called once the interpreter is fully\n configured (INI file read, and state synchronized with the world model).\n If the TOPLEVEL module defines a function __delete__, it will be called once before the interpreter is\n@@ -25529,15 +25529,15 @@\n \u2013 when a comment like ;py, is executed - during execution of a remapped\n code: any prolog=, python= and epilog= handlers.\n Calling O-word Python subroutines\n Arguments:\n self\n The interpreter instance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 533 / 1290\n \n *args\n The list of actual positional parameters. Since the number of actual parameters may vary, it is\n best to use this style of declaration:\n # this would be defined in the oword module\n@@ -25575,15 +25575,15 @@\n print(\u201d%s: %s\u201d % (w, words[w]))\n if words[\u2019p\u2019] < 78: # NB: could raise an exception if p were optional\n return \u201dfailing miserably\u201d\n return INTERP_OK\n \n Return values:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 534 / 1290\n \n INTERP_OK\n Return this on success. You need to import this from interpreter.\n a message text\n Returning a string from a handler means this is an error message, abort the program. Works like\n@@ -25620,15 +25620,15 @@\n emccanon.WAIT(0,1,2,5.0)\n # cede control after executing the queue buster:\n yield INTERP_EXECUTE_FINISH\n # post-sync() execution resumes here:\n pin_status = emccanon.GET_EXTERNAL_DIGITAL_INPUT(0,0);\n print(\u201dpin status=\u201d,pin_status)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Warning\n The yield feature is fragile.\n TERP_EXECUTE_FINISH:\n \n 535 / 1290\n \n@@ -25672,15 +25672,15 @@\n print(\u201d#2=\u201d, self.params[2])\n try:\n print(\u201dresult=\u201d, self.params[\u201dresult\u201d])\n except Exception,e:\n return \u201dtestparam forgot to assign #\u201d\n return INTERP_OK\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 536 / 1290\n \n o sub\n (debug, call_level=#<_call_level> myname=#)\n ; try commenting out the next line and run again\n # = [# * 3]\n@@ -25724,15 +25724,15 @@\n \n raise InterpreterException\n \n except InterpreterException,e:\n msg = \u201d%d: \u2019%s\u2019 - %s\u201d % (e.line_number,e.line_text, e.error_message)\n return msg # replace builtin error message\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 537 / 1290\n \n Canon The canon layer is practically all free functions. Example:\n import emccanon\n def example(self,*args):\n ....\n@@ -25771,15 +25771,15 @@\n \u2022 Import that module from the TOPLEVEL script.\n # namedparams.py\n # trivial example\n def _pi(self):\n return 3.1415926535\n # = [2 * # * #<_pi>]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 538 / 1290\n \n Functions in namedparams.py are expected to return a float or int value. If a string is returned, this\n sets the interpreter error message and aborts execution.\n \u00d2nly functions with a leading underscore are added as parameters, since this is the RS274NGC convention for globals.\n It is possible to redefine an existing predefined parameter by adding a Python function of the same\n@@ -25810,15 +25810,15 @@\n no further action is taken. This can be used for instance to minimally adjust the built in behavior\n be preceding or following it with some other statements.\n \u2022 Otherwise, the # and # parameters are extracted from the subroutine\u2019s parameter\n space. This means that the NGC procedure could change these values, and the epilog takes the\n changed values in account.\n \u2022 Then, the Canon command SELECT_TOOL(#) is executed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 539 / 1290\n \n 9.6.11.2 M6: change_prolog and change_epilog\n These wrap a NGC procedure for M6 Tool Change.\n Actions of change_prolog\n \u2022 The following three steps are applicable only if the iocontrol-v2 component is used:\n@@ -25848,15 +25848,15 @@\n behavior be preceding or following it with some other statements.\n \u2022 Otherwise, the # parameter is extracted from the subroutine\u2019s parameter space,\n and used to set the interpreter\u2019s current_pocket variable. Again, the procedure could change this\n value, and the epilog takes the changed value in account.\n \u2022 Then, the Canon command CHANGE_TOOL(#) is executed.\n \u2022 The new tool parameters (offsets, diameter etc) are set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 540 / 1290\n \n 9.6.11.3 G-code Cycles: cycle_prolog and cycle_epilog\n These wrap a NGC procedure so it can act as a cycle, meaning the motion code is retained after\n finishing execution. If the next line just contains parameter words (e.g. new X,Y values), the code is\n executed again with the new parameter words merged into the set of the parameters given in the first\n@@ -25889,15 +25889,15 @@\n \u2013 retain the current motion mode so a continuation line without a motion code will execute the same\n motion code.\n 9.6.11.4 S (Set Speed) : setspeed_prolog and setspeed_epilog\n TBD\n 9.6.11.5 F (Set Feed) : setfeed_prolog and setfeed_epilog\n TBD\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 541 / 1290\n \n 9.6.11.6 M61 Set tool number : settool_prolog and settool_epilog\n TBD\n \n 9.6.12 Remapped code execution\n@@ -25952,15 +25952,15 @@\n user-defined - not interpreted\n by LinuxCNC\n user-defined - not interpreted\n by LinuxCNC\n \n or these flags into the [EMC]DEBUG variable as needed. For a current list of debug flags see src/emc/nml_intf/debugflags.h.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 542 / 1290\n \n 9.6.12.5 Debugging Embedded Python code\n Debugging of embedded Python code is harder than debugging normal Python scripts, and only a\n limited supply of debuggers exists. A working open-source based solution is to use the Eclipse IDE,\n and the PydDev Eclipse plug in and its remote debugging feature.\n@@ -25980,15 +25980,15 @@\n pydevd.settrace() will block execution if Eclipse and the Pydev debug server have not been\n started.\n \n To cover the last two steps: the o procedure helps to get into the debugger from MDI mode.\n See also the call_pydevd function in util.py and its usage in remap.involute to set a breakpoint.\n Here\u2019s a screen-shot of Eclipse/PyDevd debugging the involute procedure from above:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 543 / 1290\n \n See the Python code in configs/sim/axis/remap/getting-started/python for details.\n \n 9.6.13 Axis Preview and Remapped code execution\n For complete preview of a remapped code\u2019s tool path some precautions need to be taken. To understand what is going on, let\u2019s review the preview and execution process (this covers the AXIS case, but\n@@ -26004,15 +26004,15 @@\n Now, what about preview of this procedure? At preview time, of course it is not known whether the\n probe succeeds or fails - but you would likely want to see what the maximum depth of the probe is, and\n assume it succeeds and continues execution to preview further movements. Also, there is no point in\n displaying a probe failed message and aborting during preview.\n The way to address this issue is to test in your procedure whether it executes in preview or execution\n mode. This can be checked for by testing the #<_task> predefined named parameter - it will be 1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 544 / 1290\n \n during actual execution and 0 during preview. See configs/sim/axis/remap/manual-toolchange-withtool-length-switch/nc_subroutines/manual_change.ngc for a complete usage example.\n Within Embedded Python, the task instance can be checked for by testing self.task - this will be 1 in\n the milltask instance, and 0 in the preview instance(s).\n \n@@ -26056,15 +26056,15 @@\n G07\n G08\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n \n G05.1 G05.2 G05.3\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 545 / 1290\n \n Table 9.2: Table of Allocated G-codes 10-19\n #\n 10\n 11\n@@ -26147,15 +26147,15 @@\n G41\n G42\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n G41.1\n G42.1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 546 / 1290\n \n Table 9.5: (continued)\n #\n 43\n 44\n@@ -26236,15 +26236,15 @@\n G71\n G72\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n G71.1 G71.2\n G72.1 G72.2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 547 / 1290\n \n Table 9.8: (continued)\n #\n 76\n 77\n@@ -26337,15 +26337,15 @@\n \n Mx7\n \n Mx8\n \n Mx9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 548 / 1290\n \n Table 9.11: (continued)\n #\n 10-19\n 20-29\n@@ -26475,15 +26475,15 @@\n FIXME Write missing information\n \n 9.6.16 Models of Task execution\n FIXME Write missing information\n 9.6.16.1 Traditional iocontrol/iocontrolv2 execution\n FIXME Write missing information\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 549 / 1290\n \n 9.6.16.2 Redefining IO procedures\n FIXME Write missing information\n 9.6.16.3 Execution-time Python procedures\n FIXME Write missing information\n@@ -26517,15 +26517,15 @@\n 9.6.17.3 Predicting the machine position\n To compute canonical machine operations in advance during read ahead, the interpreter must be able\n to predict the machine position after each line of G-code, and that is not always possible.\n Let\u2019s look at a simple example program which does relative moves (G91), and assume the machine\n starts at x=0,y=0,z=0. Relative moves imply that the outcome of the next move relies on the position\n of the previous one:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 550 / 1290\n \n N10 G91\n N20 G0 X10 Y-5 Z20\n N30 G1 Y20 Z-5\n N40 G0 Z30\n@@ -26566,15 +26566,15 @@\n \u2022 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\n the interpreter state with the world model. Technically, this means updating internal variables to\n reflect HAL pin values, reload tool geometries after an M6, and convey results of a probe.\n \u2022 The interpreter\u2019s synch() method is called by task and does just that - read all the world model\n actual values which are relevant for further execution.\n \u2022 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.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 551 / 1290\n \n 9.6.17.6 Word order and execution order\n One or several words may be present on an NGC block if they are compatible (some are mutually\n exclusive and must be on different lines). The execution model however prescribes a strict ordering\n of execution of codes, regardless of their appearance on the source line (G-code Order of Execution).\n@@ -26610,15 +26610,15 @@\n Tool information is held in the emcStatus structure, which is shared by all parties. One of its fields\n is the toolTable array, which holds the description as loaded from the tool table file (tool number,\n diameter, frontangle, backangle and orientation for lathe, tool offset information).\n The authoritative source and only process actually setting tool information in this structure is the\n iocontrol process. All others processes just consult this structure. The interpreter holds actually a\n local copy of the tool table.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 552 / 1290\n \n For the curious, the current emcStatus structure can be accessed by Python statements. The interpreter\u2019s perception of the tool currently loaded for instance is accessed by:\n ;py,from interpreter import *\n ;py,print(this.tool_table[0])\n \n@@ -26655,15 +26655,15 @@\n When the interpreter sees an M6, it:\n 1. checks whether a T command has already been executed (test settings->selected_pocket to be\n >= 0) and fail with Need tool prepared -Txx- for toolchange message if not.\n 2. check for cutter compensation being active, and fail with Cannot change tools with cutter radius\n compensation on if so.\n 3. stop the spindle except if the \u201dTOOL_CHANGE_WITH_SPINDLE_ON\u201d INI option is set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 553 / 1290\n \n 4. generate a rapid Z up move if if the \u201dTOOL_CHANGE_QUILL_UP\u201d INI option is set.\n 5. if TOOL_CHANGE_AT_G30 was set:\n a. move the A, B and C indexers if applicable\n b. generate rapid move to the G30 position\n@@ -26698,15 +26698,15 @@\n in configs/sim/axis/remap/toolchange/python/toolchange.py.\n 9.6.17.13 How M61 (Change tool number) works\n M61 requires a non-negative \u0300Q \u0300parameter (tool number). If zero, this means unload tool, else set\n current tool number to Q.\n Building the replacement for M61 An example Python redefinition for M61 can be found in the\n set_tool_number function in configs/sim/axis/remap/toolchange/python/toolchange.py.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 554 / 1290\n \n 9.6.18 Status\n 1. The RELOAD_ON_CHANGE feature is fairly broken. Restart after changing a Python file.\n 2. M61 (remapped or not) is broken in iocontrol and requires iocontrol-v2 to actually work.\n \n@@ -26749,15 +26749,15 @@\n internally. A warning pin is set and a message issued if the apply-offsets pin is deasserted while\n offsets are applied. The warning pin remains TRUE until the offsets are removed or the apply-offsets\n pin is set.\n Typically, the move-enable pin is connected to external controls and the apply-offsets pin is connected\n to halui.program.is-paused (for offsets only while paused) or set to TRUE (for continuously applied\n offsets).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 555 / 1290\n \n Applied offsets are automatically returned to zero (respecting limits) when either of the enabling\n inputs is deactivated. The zero value tolerance is specified by the epsilon input pin value.\n Waypoints are recorded when the moveoff component is enabled. Waypoints are managed with the\n waypoint-sample-secs and waypoint-threshold pins. When the backtrack-enable pin is TRUE, the autoreturn path follows the recorded waypoints. When the memory available for waypoints is exhausted,\n@@ -26800,15 +26800,15 @@\n \u2022 configs/sim/touchy/ngcgui (touchy-ui)\n \n 9.7.1 Modifying an existing configuration\n A system-provided HAL file (LIB:hookup_moveoff.tcl) can be used to adapt an existing configuration to\n use the moveoff component. Additional INI file settings support the use of a simple GUI (moveoff_gui)\n for controlling offsets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 556 / 1290\n \n When the system HAL file (LIB:hookup_moveoff.tcl) is properly specified in a configuration INI file, it\n will:\n 1. Disconnect the original joint.N.motor-pos-cmd and joint.N.motor-pos-fb pin connections\n 2. Load (loadrt) the moveoff component (using the name mv) with a personality set to accommodate\n@@ -26849,15 +26849,15 @@\n EPSILON =\n WAYPOINT_SAMPLE_SECS =\n WAYPOINT_THRESHOLD =\n \n The moveoff_gui is used to make additional required connections and provide a popup GUI to:\n 1. Provide a control togglebutton to Enable/Disable offsets\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 557 / 1290\n \n 2. Provide a control togglebutton to Enable/Disable backtracking\n 3. Provide control pushbuttons to Increment/Decrement/Zero each axis offset\n 4. Display each axis offset current value\n 5. Display current offset status (disabled, active, removing, etc)\n@@ -26900,15 +26900,15 @@\n net external_offset_1 mv.offset-in-1\n net external_offset_2 mv.offset-in-2\n net external_backtrack_en mv.backtrack-enable\n \n These signals (external_enable, external_offset_M, external_backtrack_en) may be managed by subsequent HALFILES (including POSTGUI_HALFILEs) to provide customized control of the component\n while using the moveoff_gui display for current offset values and offset status.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 558 / 1290\n \n The moveoff_gui is configured with command line options. For details on the operation of moveoff_gui,\n see the man page:\n $ man moveoff_gui\n \n@@ -26973,15 +26973,15 @@\n Note: If the moveoff move-enable pin (mv.move-enable) is connected when\n moveoff_gui is started, external controls are required and only\n displays are provided.\n \n 9.8 Stand Alone Interpreter\n The rs274 stand alone interpreter is available for use via the command line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 559 / 1290\n \n 9.8.1 Usage\n Usage: rs274 [-p interp.so] [-t tool.tbl] [-v var-file.var] [-n 0|1|2]\n [-b] [-s] [-g] [input file [output file]]\n -p: Specify the pluggable interpreter to use\n@@ -27019,15 +27019,15 @@\n \n 9.9 External Axis Offsets\n External axis offsets are supported during teleop (world) jogs and coordinated (G-code) motion. External axis offsets are enabled on a per-axis basis by INI file settings and controlled dynamically by\n INI input pins. The INI interface is similar to that used for wheel jogging. This type of interface is\n typically implemented with a manual-pulse-generator (mpg) connected to an encoder INI component\n that counts pulses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 560 / 1290\n \n 9.9.1 INI File Settings\n For each axis letter (L in xyzabcuvw):\n [AXIS_L]OFFSET_AV_RATIO = value (controls accel/vel for external offsets)\n \n@@ -27058,15 +27058,15 @@\n 9.9.2.2 Other Motion HAL Pins\n 1. motion.eoffset-active Output(bit): non-zero external offsets applied\n 2. motion.eoffset-limited Output(bit): motion inhibited due to soft limit\n \n 9.9.3 Usage\n The axis input HAL pins (enable,scale,counts) are similar to the pins used for wheel jogging.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 561 / 1290\n \n 9.9.3.1 Offset Computation\n At each servo period, the axis.L.eoffset-counts pin is compared to its value in the prior period. The\n increase or decrease (positive or negative delta) of the axis.L.eoffset-counts pin is multiplied by the\n current axis.L.eoffset-scale pin value. This product is accumulated in an internal register and exported\n@@ -27104,15 +27104,15 @@\n limit will stop motion in the offending axis without a deacceleration interval. Similarly, during\n coordinated motion with external offsets enabled, reaching a soft limit will stop motion with no deacceleration phase. For this case, it does not matter if the offsets are zero.\n When motion is stopped with no deacceleration phase, system acceleration limits may be violated\n and lead to: 1) a following error (and/or a thump) for a servo motor system, 2) a loss of steps for a\n stepper motor system. In general, it is recommended that external offsets are applied in a manner to\n avoid approaching soft limits.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 562 / 1290\n \n 9.9.3.4 Notes\n External offsets apply to axis coordinate letters (xyzabcuvw). All joints must be homed before external\n axis offsets are honored.\n If an axis.L.eoffset-enable HAL pin is reset when its offset is non-zero, the offset is maintained. The\n@@ -27147,15 +27147,15 @@\n a terminal:\n $ sim_pin axis.z.eoffset-enable axis.z.eoffset-scale axis.z.eoffset-counts\n \n The use of external offsets is aided by displaying information related to the current offsets: the current eoffset value and the requested eoffset value, the axis pos-cmd, and (for an identity kinematics\n machine) the corresponding joint motor pos-cmd and motor-offset. The provided sim configuration\n (see below) demonstrates an example PyVCP panel for the AXIS GUI.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 563 / 1290\n \n In the absence of a custom display, halshow can be started as an auxiliary application with a custom\n watch list.\n Example INI file settings to simulate the HAL pin eoffset connections and display eoffset information\n for the z axis (for identity kinematics with z==joint2):\n@@ -27193,15 +27193,15 @@\n 9.9.6.2 jwp_z.ini\n The sim config sim/configs/axis/external_offsets/jwp_z.ini demonstrates a jog-while-pause capability\n for a single (Z) coordinate:\n Panel LEDs are provided to show important status items.\n Controls are provided to set the eoffset scale factor and to increment/decrement/clear the eoffset\n counts.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 564 / 1290\n \n 9.9.6.3 dynamic_offsets.ini\n This sim config sim/configs/axis/external_offsets/dynamic_offsets.ini demonstrates dynamically applied\n offsets by connecting a sinusoidal waveform to the z coordinate external offset inputs.\n Panel LEDs are provided to show important status items.\n@@ -27236,15 +27236,15 @@\n INI file settings enable the (optional) operation of a user-provided tool database program:\n [EMCIO]\n DB_PROGRAM = db_program [args]\n \n When included, db_program specifies the path to a user-provided executable program that provides\n tooldata. Up to 10 space-separated args may be included and passed to the db_program at startup.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 565 / 1290\n \n Note\n INI file settings for [EMCIO]TOOL_TABLE are ignored when a db_program is specified.\n \n Note\n@@ -27278,15 +27278,15 @@\n \u2022 \u201dl\u201d spindle_load (TnM6). The tool data line includes only the T and P items identifying the relevant\n tool number and pocket number.\n \u2022 \u201du\u201d spindle_unload (T0M6). The tool data line includes only the T and P items identifying the relevant tool number and pocket number.\n Note\n When a NON_RANDOM tool changer is specified using [EMCIO]RANDOM_TOOL_CHANGER=0 (the default), the spindle_load command issued for TnM6 (or M61Qn) is: l Tn P0 (pocket 0 is the spindle).\n The spindle_unload command issued for T0M6 is u T0 P0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 566 / 1290\n \n Note\n When a RANDOM tool changer is specified using [EMCIO]RANDOM_TOOL_CHANGER=1, a pair of spindle_unload/spindle_load commands are issued at each tool exchange. The pair of commands issued\n for TnM6 (or M61Qn) are u Tu Pm followed by l Tn P0, where u is the current tool to be sent to pocket\n m and n is the new tool to load in the spindle (pocket 0). By convention, a tool number of 0 is used\n@@ -27329,15 +27329,15 @@\n Removal of a tool number should only be done if the tool number is not currently loaded in spindle.\n \n Exporting the environmental variable DB_SHOW enables LinuxCNC prints (to stdout) that show tool\n data retrieved from the db_program at startup and at subsequent reloading of tool data.\n Exporting the environmental variable DB_DEBUG enables LinuxCNC prints (to stdout) for additional\n debugging information about interface activity.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 567 / 1290\n \n 9.10.1.4 Example program\n An example db_program (implemented as a Python script) is provided with the simulation examples.\n The program demonsrates the required operations to:\n 1. acknowledge startup version\n@@ -27382,15 +27382,15 @@\n )\n tooldb_loop()\n \n Note\n Use of tooldb is not required \u2014 it is provided as a demonstration of the required interface and as a\n convenience for implementing Python-based applications that interface with an external database.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 568 / 1290\n \n 9.10.2 Simulation configs\n Simulation configs using the AXIS gui:\n 1. configs/sim/axis/db_demo/db_ran.ini (random_toolchanger)\n 2. configs/sim/axis/db_demo/db_nonran.ini (nonrandom_toolchanger)\n@@ -27410,50 +27410,50 @@\n LinuxCNC tooldata updates and the database application updates.\n 9.10.2.1 Notes\n \n When a db_program is used in conjunction with a random tool changer ([EMCIO]RANDOM_TOOLCHANGER\n LinuxCNC maintains a file (db_spindle.tbl in the configuration directory) that consists of a single tool\n table line identifying the current tool in the spindle.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 569 / 1290\n \n Part II\n \n Usage\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 570 / 1290\n \n Chapter 10\n \n User Interfaces\n 10.1 AXIS GUI\n 10.1.1 Introduction\n AXIS is a graphical front-end for LinuxCNC which features a live preview and backplot. It is written\n in Python and uses Tk and OpenGL to display its user interface.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 571 / 1290\n \n Figure 10.1: The AXIS Window\n \n 10.1.2 Getting Started\n If your configuration is not currently set up to use AXIS, you can change it by editing the .ini file (INI\n file). In the section [DISPLAY] change the [DISPLAY] line to read DISPLAY = axis.\n The sample configuration sim/axis.ini is already configured to use AXIS as its front-end.\n When AXIS starts, a window like the one in the figure Figure 10.1 above opens.\n 10.1.2.1 INI settings\n For more information on INI file settings that can change how AXIS works see the Display Section of\n the INI Configuration Chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 572 / 1290\n \n \u2022 CYCLE_TIME - Adjust the response rate of the GUI in milliseconds. Typical 100, useable range 50\n - 200\n (will accept time in seconds (.05 -.2) for legacy reasons - milliseconds preferred to match other\n screens).\n@@ -27487,15 +27487,15 @@\n The AXIS window contains the following elements:\n \u2022 A display area that shows one of the following:\n \u2013 A preview of the loaded file (in this case, axis.ngc), as well as the current location of the CNC\n machine\u2019s controlled point. Later, this area will display the path the CNC machine has moved\n through, called the backplot.\n \u2013 A large readout showing the current position and all offsets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 573 / 1290\n \n \u2022 A menu bar and toolbar that allow you to perform various actions\n \u2022 Manual Control Tab - which allows you to make the machine move, turn the spindle on or off, and\n turn the coolant on or off if included in the INI file.\n \u2022 MDI Tab - where G-code programs can be entered manually, one line at a time. This also shows the\n@@ -27531,15 +27531,15 @@\n \u2022 Reload tool table - After editing the tool table you must reload it.\n \u2022 Ladder editor - If you have loaded ClassicLadder you can edit it from here. See the ClassicLadder\n chapter for more information.\n \u2022 Quit - Terminates the current LinuxCNC session.\n \u2022 Toggle Emergency Stop F1 - Change the state of the Emergency Stop.\n \u2022 Toggle Machine Power F2 - Change the state of the Machine Power if the Emergency Stop is not on.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 574 / 1290\n \n \u2022 Run Program - Run the currently loaded program from the beginning.\n \u2022 Run From Selected Line - Select the line you want to start from first. Use with caution as this will\n move the tool to the expected position before the line first then it will execute the rest of the code.\n \n@@ -27575,15 +27575,15 @@\n G10 L10 in the G-code chapter.\n \u2013 Tool touch off to fixture - When performing Touch Off, the value entered is relative to the ninth\n (G59.3) coordinate system, with the axis offset (G92) ignored. This is useful when there is a tool\n touch-off fixture at a fixed location on the machine, with the ninth (G59.3) coordinate system set\n such that the tip of a zero-length tool is at the fixture\u2019s origin when the Relative coordinates are\n 0. See G10 L11 in the G-code chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 575 / 1290\n \n \u2022 Top View - The Top View (or Z view) displays the G-code looking along the Z axis from positive to\n negative. This view is best for looking at X & Y.\n \u2022 Rotated Top View - The Rotated Top View (or rotated Z view) also displays the G-code looking along\n the Z axis from positive to negative. But sometimes it\u2019s convenient to display the X & Y axes rotated\n@@ -27623,15 +27623,15 @@\n \u2022 Show Tool - The display of the tool cone/cylinder can be disabled if desired.\n \u2022 Show Extents - The display of the extents (maximum travel in each axis direction) of the loaded\n G-code program can be disabled if desired.\n \u2022 Show Offsets - The selected fixture offset (G54-G59.3) origin location can be shown as a set of three\n orthogonal lines, one each of red, blue, and green. This offset origin (or fixture zero) display can be\n disabled if desired.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 576 / 1290\n \n \u2022 Show Machine Limits - The machine\u2019s maximum travel limits for each axis, as set in the INI file,\n are shown as a rectangular box drawn in red dashed lines. This is useful when loading a new Gcode program, or when checking for how much fixture offset would be needed to bring the G-code\n program within the travel limits of your machine. It can be shut off if not needed.\n \u2022 Show Velocity - A display of velocity is sometimes useful to see how close your machine is running\n@@ -27681,15 +27681,15 @@\n \n Execute next line [T]\n \n \u2022\n \n Pause Execution [P] Resume Execution [S]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \u2022\n \n Stop Program Execution [ESC]\n \n \u2022\n \n@@ -27756,15 +27756,15 @@\n from commanded position due to following error, dead band, encoder resolution, or step size. For\n instance, if you command a movement to X 0.0033 on your mill, but one step of your stepper motor or\n one encoder count is 0.00125, then the Commanded position might be 0.0033, but the Actual position\n will be 0.0025 (2 steps) or 0.00375 (3 steps).\n Preview Plot When a file is loaded, a preview of it is shown in the display area. Fast moves (such as\n those produced by the G0 command) are shown as cyan lines. Moves at a feed rate (such as those\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 578 / 1290\n \n produced by the G1 command) are shown as solid white lines. Dwells (such as those produced by the\n G4 command) are shown as small pink X marks.\n G0 (Rapid) moves prior to a feed move will not show on the preview plot. Rapid moves after a T\n (Tool Change) will not show on the preview until after the first feed move. To turn either of these\n@@ -27798,15 +27798,15 @@\n By dragging with shift and the left mouse button pressed, or by dragging with the mouse wheel\n pressed, the preview plot will be rotated. When a line is highlighted, the center of rotation is the\n center of the line. Otherwise, the center of rotation is the center of the entire program.\n By rotating the mouse wheel, or by dragging with the right mouse button pressed, or by dragging\n with control and the left mouse button pressed, the preview plot will be zoomed in or out.\n By clicking one of the Preset View icons, or by pressing V, several preset views may be selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 579 / 1290\n \n 10.1.3.4 Text Display Area\n By left-clicking a line of the program, the line will be highlighted in both the graphical and text displays.\n When the program is running, the line currently being executed is highlighted in red. If no line has\n been selected by the user, the text display will automatically scroll to show the current line.\n@@ -27827,15 +27827,15 @@\n the desired direction of motion. The first four axes can also be moved by the arrow keys (X and Y),\n PAGE UP and PAGE DOWN keys (Z), and the [ and ] keys (A).\n If Continuous is selected, the motion will continue as long as the button or key is pressed. If another\n value is selected, the machine will move exactly the displayed distance each time the button is clicked\n or the key is pressed. By default, the available values are 0.1000, 0.0100, 0.0010, 0.0001.\n See the DISPLAY Section for more information on setting the increments.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 580 / 1290\n \n Homing (Identity Kinematics) The INI file setting [KINS]JOINTS defines the total number of joints\n for the system. A joint may be configured with a home switch or for immediate homing. Joints may\n specify a home sequence that organizes the order for homing groups of joints.\n If all joints are configured for homing and have valid home sequences, the homing button will show\n@@ -27861,15 +27861,15 @@\n programs, except that variables may not be referred to. The resulting value is shown as a number.\n \n Figure 10.4: Touch Off Window\n See also the Machine menu options: Touch part and Touch part holder.\n Tool Touch Off By pressing the Tool Touch Off button the tool length and offsets of the currently\n loaded tool will be changed so that the current tool tip position matches the entered coordinate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 581 / 1290\n \n Figure 10.5: Tool Touch Off Window\n See also the Tool touch off to workpiece and Tool touch off to fixture options in the Machine menu.\n Override Limits By pressing Override Limits, the machine will temporarily be allowed to jog off of\n a physical limit switch. This check box is only available when a limit switch is tripped. The override\n@@ -27883,15 +27883,15 @@\n Pressing the spindle start button sets the S speed to 1.\n The Coolant group The two buttons allow the Mist and Flood coolants to be turned on and off.\n Depending on your machine configuration, not all the items in this group may appear.\n 10.1.3.6 MDI\n MDI allows G-code commands to be entered manually. When the machine is not turned on, or when\n a program is running, the MDI controls are unavailable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 582 / 1290\n \n Figure 10.6: The MDI tab\n \u2022 History - This shows MDI commands that have been typed earlier in this session.\n \u2022 MDI Command - This allows you to enter a G-code command to be executed. Execute the command\n by pressing Enter or by clicking Go.\n@@ -27905,15 +27905,15 @@\n By moving this slider, the programmed spindle speed can be modified. For instance, if a program\n requests S8000 and the slider is set to 80%, then the resulting spindle speed will be 6400. This item\n only appears when the HAL pin spindle.0.speed-out is connected.\n 10.1.3.9 Jog Speed\n By moving this slider, the speed of jogs can be modified. For instance, if the slider is set to 1 in/min,\n then a .01 inch jog will complete in about .6 seconds, or 1/100 of a minute. Near the left side (slow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 583 / 1290\n \n jogs) the values are spaced closely together, while near the right side (fast jogs) they are spaced much\n further apart, allowing a wide range of jog speeds with fine control when it is most important.\n On machines with a rotary axis, a second jog speed slider is shown. This slider sets the jog rate for\n the rotary axes (A, B and C).\n@@ -27990,15 +27990,15 @@\n Manual\n Manual\n Manual\n Manual\n Manual\n Manual\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 584 / 1290\n \n Table 10.1: (continued)\n Keystroke\n R\n P\n@@ -28041,15 +28041,15 @@\n Any\n Any\n \n 10.1.5 Show LinuxCNC Status (linuxcnctop)\n AXIS includes a program called linuxcnctop which shows some of the details of LinuxCNC\u2019s state. You\n can run this program by invoking Machine > Show LinuxCNC Status\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 585 / 1290\n \n Figure 10.7: LinuxCNC Status Window\n The name of each item is shown in the left column. The current value is shown in the right column. If\n the value has recently changed, it is shown on a red background.\n \n@@ -28066,15 +28066,15 @@\n (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n MDI> G1 F5 X1\n MDI>\n (0.5928500000000374, 0.0, 0.0, 0.0, 0.0, 0.0)\n MDI>\n (1.0000000000000639, 0.0, 0.0, 0.0, 0.0, 0.0)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 586 / 1290\n \n 10.1.7 axis-remote\n AXIS includes a program called axis-remote which can send certain commands to a running AXIS.\n The available commands are shown by running axis-remote --help and include checking whether AXIS\n is running (--ping), loading a file by name, reloading the currently loaded file (--reload), and making\n@@ -28105,50 +28105,50 @@\n \u2022 hal allows the creation of non-realtime HAL components written in Python\n \u2022 _togl provides an OpenGL widget that can be used in Tkinter applications\n \u2022 minigl provides access to the subset of OpenGL used by AXIS\n To use these modules in your own scripts, you must ensure that the directory where they reside\n is on Python\u2019s module path. When running an installed version of LinuxCNC, this should happen\n automatically. When running in-place, this can be done by using scripts/rip-environment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 587 / 1290\n \n 10.1.10 Using AXIS in Lathe Mode\n By including the line LATHE = 1 in the [DISPLAY] section of the INI file, AXIS selects lathe mode. The\n Y axis is not shown in coordinate readouts, the view is changed to show the Z axis extending to the\n right and the X axis extending towards the bottom of the screen, and several controls (such as those\n for preset views) are removed. The coordinate readouts for X are replaced with diameter and radius.\n \n Figure 10.9: AXIS Lathe Mode\n Pressing V zooms out to show the entire file, if one is loaded.\n When in lathe mode, the shape of the loaded tool (if any) is shown.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 588 / 1290\n \n Figure 10.10: Lathe Tool Shape\n To change the display to a back tool lathe you need to have both LATHE = 1 and BACK_TOOL_LATHE\n = 1 in the [DISPLAY] section. This will invert the view and put the tool on the back side of the Z axis.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 589 / 1290\n \n Figure 10.11: Lathe Back Tool Shape\n \n 10.1.11 Using AXIS in Foam Cutting mode\n By including the line FOAM = 1 in the [DISPLAY] section of the INI file, AXIS selects foam-cutting\n mode. In the program preview, XY motions are displayed in one plane, and UV motions in another. In\n the live plot, lines are drawn between corresponding points on the XY plane and the UV plane. The\n special comments (XY_Z_POS) and (UV_Z_POS) set the Z coordinates of these planes, which default\n to 0 and 1.5 machine units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 590 / 1290\n \n Figure 10.12: Foam Cutting Mode\n \n 10.1.12 Advanced Configuration\n When AXIS is started it creates the HAL pins for the GUI then it executes the HAL file named in the INI\n@@ -28156,15 +28156,15 @@\n + _postgui + .hal eg. lathe_postgui.hal, but can be any legal filename. These commands are executed\n after the screen is built, guaranteeing the widget\u2019s HAL pins are available. You can have multiple line\n of POSTGUI_HALFILE= in the INI. Each will be run one after the other in the order they\n appear.\n For more information on the INI file settings that can change the way AXIS works, see the Display\n Section of the INI configuration chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 591 / 1290\n \n 10.1.12.1 Program Filters\n AXIS has the ability to send loaded files through a filter program. This filter can do any desired task:\n Something as simple as making sure the file ends with M2, or something as complicated as generating\n G-code from an image.\n@@ -28186,15 +28186,15 @@\n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle.\n \n Figure 10.13: Circular Holes\n If the environment variable AXIS_PROGRESS_BAR is set, then lines written to stderr of the form\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 592 / 1290\n \n FILTER_PROGRESS=%d\n \n will set the AXIS progress bar to the given percentage. This feature should be used by any filter that\n runs for a long time.\n@@ -28230,15 +28230,15 @@\n Example of .axisrc file\n root_window.bind(\u201d\u201d, \u201ddestroy .\u201d)\n help2.append((\u201dControl-Q\u201d, \u201dQuit\u201d))\n \n The following stops the \u201dDo you really want to quit\u201d dialog.\n root_window.tk.call(\u201dwm\u201d,\u201dprotocol\u201d,\u201d.\u201d,\u201dWM_DELETE_WINDOW\u201d,\u201ddestroy .\u201d)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 593 / 1290\n \n 10.1.12.5 USER_COMMAND_FILE\n \n A configuration-specific Python file may be specified with an INI file setting [DISPLAY]USER_COMMAND_FIL\n Like a ~/.axisrc file, this file is sourced just before the AXIS GUI is displayed. This file is specific to\n@@ -28275,15 +28275,15 @@\n G-code file, one can disable the preview on certain parts that are already working OK).\n \u2022 (AXIS,hide) Stops the preview (must be first)\n \u2022 (AXIS,show) Resumes the preview (must follow a hide)\n \u2022 (AXIS,stop) Stops the preview from here to the end of the file.\n \u2022 (AXIS,notify,the_text) Displays the_text as an info display\n This display can be useful in the AXIS preview when (debug,message) comments are not displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 594 / 1290\n \n 10.1.13 Axisui\n To improve the interaction of AXIS with physical jog wheels, the axis currently selected in the GUI is\n also reported on a pin with a name like axisui.jog.x. One of these pins is TRUE at one time, and the\n rest are FALSE. These are meant to control motion\u2019s jog-enable pins.\n@@ -28366,15 +28366,15 @@\n 10.1.14 AXIS Customization Hints\n AXIS is a fairly large and difficult-to-penetrate code base, this is helpful To keep the code stable but\n makes it difficult to customize.\n Here we will show code snippets to modify behaviours or visuals of the screen. Keep in mind the\n internal code of AXIS can change from time to time.\n these snippets are not guaranteed to continue to work - they may need adjustment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 595 / 1290\n \n 10.1.14.1 The update function\n There is a function in AXIS named user_live_update that is called every time AXIS updates itself. You\n can use this to update your own functions.\n # continuous update function\n@@ -28413,15 +28413,15 @@\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(50))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(60))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(70))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(80))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(90))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(100))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n root_window.bind(\u2019\u2019,lambda event: set_feedrate(0))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(10))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(20))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(30))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(40))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(50))\n@@ -28460,15 +28460,15 @@\n # connect pins\n hal.new_sig(\u2019idle-led\u2019,hal.HAL_BIT)\n hal.connect(\u2019halui.program.is-idle\u2019,\u2019idle-led\u2019)\n hal.connect(\u2019my_component.idle-led\u2019,\u2019idle-led\u2019)\n \n 596 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 597 / 1290\n \n # set a pin\n hal.set_p(\u2019my_component.pause-led\u2019,\u20191\u2019)\n # get a pin 2,8+ branch\n value = hal.get_value(\u2019halui.program.is-idle\u2019)\n@@ -28509,15 +28509,15 @@\n root_window.tk.call(\u2019button\u2019,\u2019.pane.top.tabs.fmanual.homey\u2019,\u2019-text\u2019,\u2019Home Y\u2019,\u2019-command\u2019,\u2019 \u2190goto_home Y\u2019,\u2019-height\u2019,\u20192\u2019)\n # place the button\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.homey\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20197\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n # any function called from Tcl needs to be added to TclCommands\n TclCommands.goto_home = goto_home\n commands = TclCommands(root_window)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 598 / 1290\n \n 10.1.14.12 Add Button to manual frame\n # make a new button and put it in the manual frame\n root_window.tk.call(\u2019button\u2019,\u2019.pane.top.tabs.fmanual.mybutton\u2019,\u2019-text\u2019,\u2019My Button\u2019,\u2019- \u2190command\u2019,\u2019mybutton_clicked\u2019,\u2019-height\u2019,\u20192\u2019)\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.mybutton\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20196\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n@@ -28573,15 +28573,15 @@\n = BooleanVar\n = DoubleVar\n = IntVar\n = IntVar\n = IntVar\n = IntVar\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 599 / 1290\n \n interp_state\n = IntVar\n ja_rbutton\n = StringVar\n@@ -28678,15 +28678,15 @@\n # use \u2019grid\u2019 or \u2019pack\u2019 depending on how it was originally placed\n root_window.tk.call(\u2019grid\u2019,\u2019forget\u2019,\u2019.pane.top.tabs.fmanual.jogf.zerohome.tooltouch\u2019)\n \n 10.1.14.15 Change a label\n # change label of a widget\n root_window.tk.call(\u2019setup_widget_accel\u2019,\u2019.pane.top.tabs.fmanual.mist\u2019,\u2019Downdraft\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 600 / 1290\n \n # make sure it appears (only needed in this case if the mist button was hidden)\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.mist\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20195\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n \n 10.1.14.16 Redirect an existing command\n@@ -28716,15 +28716,15 @@\n root_window.tk.call(\u2019.toolbar.program_run\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019RUN\u2019,\u2019-width\u2019, \u2190buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_step\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019STEP\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_pause\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019PAUSE\u2019,\u2019- \u2190width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_stop\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019STOP\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_blockdelete\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Skip /\u2019 \u2190,\u2019-width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_optpause\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019M1\u2019,\u2019- \u2190width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 601 / 1290\n \n root_window.tk.call(\u2019.toolbar.view_zoomin\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Zoom+\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_zoomout\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Zoom-\u2019,\u2019-width \u2190\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_z\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Top X\u2019,\u2019-width\u2019,buW, \u2190\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_z2\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Top Y\u2019,\u2019-width\u2019,buW \u2190,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n@@ -28759,15 +28759,15 @@\n support the joint / axis changes in LinuxCNC it does not work on 2.7 or 2.6 branch!\n It has support for integrated virtual keyboard (onboard or matchbox-keyboard), so there is no need\n for a hardware keyboard or mouse, but it can also be used with that hardware. GMOCCAPY offers a\n separate settings page to configure most settings of the GUI without editing files.\n GMOCCAPY can be localized very easy, because the corresponding files are separated from the linuxcnc.po files, so there is no need to translate unneeded stuff. The files are placed in /src/po/gmoccapy.\n You could just copy the gmoccapy.pot file to something like it.po and translate that file with gtranslator or poedit. After rebuilding, you\u2019d get the GUI in your preference language. To facilitate the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 602 / 1290\n \n sharing of the translation, GMOCCAPY is available on the Weblate web interface. GMOCCAPY is currently available in English, German, Spanish, Polish, Serbian and Hungarian. Feel free to help me to\n introduce more languages, be it locally or via the web. If you need help, don\u2019t hesitate to contact me\n on nieson@web.de.\n \n@@ -28781,15 +28781,15 @@\n it should fit to every standard screen. It is recommended to use screens with minimum resolution of\n 1024x748.\n \n 10.2.3 How to Get GMOCCAPY\n GMOCCAPY 3 is included in the standard distribution of LinuxCNC since release 2.7. So the easiest\n way to get GMOCCAPY on your controlling PC is just to download the ISO and install it from the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 603 / 1290\n \n CD/DVD/USB-stick. This allows you to receive updates with the regular Debian packages.\n In the release notes aka changelist you can track the latest bugfixes and features.\n You will get a similar screen to the following (the design may vary depending on your config):\n \n@@ -28800,15 +28800,15 @@\n \u2022 -logo : If given, the logo will hide the jog button tab in manual mode, this is only\n useful for machines with hardware buttons for jogging and increment selection.\n There is really not to much to configure just to run GMOCCAPY, but there are some points you should\n take care off if you want to use all the features of the GUI.\n You will find a lot of simulation configurations (INI files) included, just to show the basics:\n \u2022 gmoccapy.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 604 / 1290\n \n \u2022 gmoccapy_4_axis.ini\n \u2022 lathe_configs/gmoccapy_lathe.ini\n \u2022 lathe_configs/gmoccapy_lathe_imperial.ini\n \u2022 gmoccapy_left_panel.ini\n@@ -28841,15 +28841,15 @@\n PROGRAM_PREFIX = ../../nc_files/\n \n \u2022 DISPLAY = gmoccapy - This tells LinuxCNC to use GMOCCAPY.\n \u2022 PREFERENCE_FILE_PATH - Gives the location and name of the preferences file to be used. In most\n cases this line will not be needed, it is used by GMOCCAPY to store your settings of the GUI, like\n themes, DRO units, colors, and keyboard settings, etc., see settings page for more details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 605 / 1290\n \n Note\n If no path or file is given, GMOCCAPY will use as default .pref, if no machine\n name is given in your INI File it will use gmoccapy.pref. The file will be stored in your config directory,\n so the settings will not be mixed if you use several configs. If you only want to use one file for\n@@ -28884,15 +28884,15 @@\n If not set, half of MAX_LINEAR_VELOCITY will be used. If that value is also not given, it will default\n to 180.\n \n \u2022 MAX_LINEAR_VELOCITY = 230.0 - Sets the maximal velocity of the machine.\n Note\n Defaults to 600 if not set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 606 / 1290\n \n 10.2.4.3 Macro Buttons\n You can add macros to GMOCCAPY, similar to Touchy\u2019s way. A macro is nothing else than a NGC file.\n You are able to execute complete CNC programs in MDI mode by just pushing one button. To do so,\n you first have to specify the search path for macros:\n@@ -28933,15 +28933,15 @@\n GMOCCAPY will also accept macros asking for parameters like:\n [MACRO]\n MACRO = go_to_position X-pos Y-pos Z-pos\n \n The parameters must be separated by spaces. This example calls a file go_to_position.ngc with the\n following content:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 607 / 1290\n \n ; Test file \u201dgo to position\u201d\n ; will jog the machine to a given position\n O sub\n G17\n@@ -28961,15 +28961,15 @@\n M2\n \n After pushing the execute macro button, you will be asked to enter the values for X-pos Y-pos Z-pos\n and the macro will only run if all values have been given.\n Note\n If you would like to use a macro without any movement, see also the notes in known problems.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 608 / 1290\n \n Macro example using the \u201dgo to position\u201d-macro\n 10.2.4.4 Embedded Tabs and Panels\n You can add embedded programs to GMOCCAPY like you can do in AXIS, Touchy and Gscreen. All is\n done by GMOCCAPY automatically if you include a few lines in your INI file in the DISPLAY section.\n@@ -28983,15 +28983,15 @@\n EMBED_TAB_LOCATION = ntb_preview\n EMBED_TAB_COMMAND = gladevcp -x {XID} vcp_box.glade\n \n All you have to take care of, is that you include for every tab or side panel the mentioned three lines:\n \u2022 EMBED_TAB_NAME = Represents the name of the tab or side panel, it is up to you what name you\n use, but it must be present!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 609 / 1290\n \n \u2022 EMBED_TAB_LOCATION = The place where your program will be placed in the GUI, see figure\n Embedded tab locations. Valid values are:\n \u2013 ntb_user_tabs (as main tab, covering the complete screen)\n \u2013 ntb_preview (as tab on the preview side (1))\n@@ -29028,29 +29028,29 @@\n \n will add a the panel manual-example.ui, include a custom Python handler, hitcounter.py and make\n all connections after realizing the panel according to manual-example.hal.\n hide\n \n will hide the chosen box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 610 / 1290\n \n Figure 10.14: Embedded tab locations\n Note\n If you make any HAL connections to your custom glade panel, you need to do that in the HAL file\n specified in the EMBED_TAB_COMMAND line, otherwise you may get an error that the HAL pin does\n not exist \u2014 this is because of race conditions loading the HAL files. Connections to GMOCCAPY HAL\n pins need to be made in the postgui HAL file specified in your INI file, because these pins do not exist\n prior of realizing the GUI.\n \n Here are some examples:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ntb_preview\n \n 611 / 1290\n \n box_right - and GMOCCAPY in MDI mode\n \n@@ -29073,15 +29073,15 @@\n provide a -response HAL pin.\n For more detailed information of the pins see User Created Message HAL Pins.\n Example of User Message Configuration\n MESSAGE_TEXT = This is a info-message test\n MESSAGE_TYPE = status\n MESSAGE_PINNAME = statustest\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 612 / 1290\n \n MESSAGE_TEXT = This is a yes no dialog test\n MESSAGE_TYPE = yesnodialog\n MESSAGE_PINNAME = yesnodialog\n MESSAGE_TEXT = Text can be small, big, bolditalic,\n@@ -29122,15 +29122,15 @@\n self.widgets.rbt_auto.set_size_request(*BB_SIZE)\n self.widgets.tbtn_setup.set_size_request(*BB_SIZE)\n self.widgets.tbtn_user_tabs.set_size_request(*BB_SIZE)\n self.widgets.btn_exit.set_size_request(*BB_SIZE)\n \n The widget names can the looked up in the /usr/share/gmoccapy.glade file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 613 / 1290\n \n 10.2.4.8 User CSS File\n Similar to the User command file it\u2019s possible to influence the appearance by cascading style sheets\n (CSS). If a file ~/.gmoccapy_css exists, its contents are loaded into the stylesheet provider and are\n so being applied to the GUI.\n@@ -29174,15 +29174,15 @@\n \n You can specify where to save the log file:\n [DISPLAY]\n LOG_FILE = gmoccapy.log\n \n If LOG_FILE is not set, logging happens to $HOME/.log.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 614 / 1290\n \n 10.2.5 HAL Pins\n GMOCCAPY exports several HAL pins to be able to react to hardware devices. The goal is to get a\n GUI that may be operated in a tool shop, completely/mostly without mouse or keyboard.\n Note\n@@ -29217,15 +29217,15 @@\n For the bottom (horizontal) buttons they are:\n \u2022 gmoccapy.h-button.button-0 (bit IN)\n \u2022 gmoccapy.h-button.button-1 (bit IN)\n \u2022 gmoccapy.h-button.button-2 (bit IN)\n \u2022 gmoccapy.h-button.button-3 (bit IN)\n \u2022 gmoccapy.h-button.button-4 (bit IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 615 / 1290\n \n \u2022 gmoccapy.h-button.button-5 (bit IN)\n \u2022 gmoccapy.h-button.button-6 (bit IN)\n \u2022 gmoccapy.h-button.button-7 (bit IN)\n \u2022 gmoccapy.h-button.button-8 (bit IN)\n@@ -29326,15 +29326,15 @@\n zero G92\n unhome all\n back\n \n set selected\n back\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 616 / 1290\n \n Table 10.4: Functional assignment of horizontal buttons\n (3)\n Pin\n Tool Mode\n@@ -29384,15 +29384,15 @@\n \n So we have 67 reactions with only 10 HAL pins!\n These pins are made available to be able to use the screen without an touch panel, or protect it\n from excessive use by placing hardware buttons around the panel. They are available in a sample\n configuration like shown in the image below.\n Sample configuration \u201dgmoccapy_sim_hardware_button\u201d showing the side buttons\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 617 / 1290\n \n 10.2.5.2 Velocities and Overrides\n All sliders from GMOCCAPY can be connected to hardware encoders or hardware potentiometers.\n Note\n For GMOCCAPY 3 some HAL pin names have changed when new controls have been implemented.\n@@ -29404,15 +29404,15 @@\n \u2022 gmoccapy.jog.jog-velocity.count-enable (bit IN) - Must be True, to enable counts\n \u2022 gmoccapy.feed.feed-override.counts (s32 IN) - feed override\n \u2022 gmoccapy.feed.feed-override.count-enable (bit IN) - Must be True, to enable counts\n \u2022 gmoccapy.feed.reset-feed-override (bit IN) - reset the feed override to *0%\n \u2022 gmoccapy.spindle.spindle-override.counts (s32 IN) - spindle override\n \u2022 gmoccapy.spindle.spindle-override.count-enable (bit IN) - Must be True, to enable counts\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 618 / 1290\n \n \u2022 gmoccapy.spindle.reset-spindle-override (bit IN) - reset the spindle override to *0%\n \u2022 gmoccapy.rapid.rapid-override.counts (s32 IN) - Maximal Velocity of the *chine\n \u2022 gmoccapy.rapid.rapid-override.count-enable (bit IN) - Must be True, to enable counts\n To connect potentiometers, use the following pins:\n@@ -29442,15 +29442,15 @@\n \u2022 gmoccapy.spc_spindle.increase (bit IN) - As long as True the value of the slider will increase\n \u2022 gmoccapy.spc_spindle.decrease (bit IN) - As long as True the value of the slider will decrease\n \u2022 gmoccapy.spc_spindle.scale (float IN) - A value to scale the output value (handy to change units/min to units/sec)\n \u2022 gmoccapy.spc_spindle.value (float OUT) - Value of the widget\n \u2022 gmoccapy.spc_spindle.scaled-value (float OUT) - Scaled value of the widget .RAPIDS\n \u2022 gmoccapy.spc_rapid.increase (bit IN) - As long as True the value of the slider will increase\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 619 / 1290\n \n \u2022 gmoccapy.spc_rapid.decrease (bit IN) - As long as True the value of the slider will decrease\n \u2022 gmoccapy.spc_rapid.scale (float IN) - A value to scale the output value (handy to change units/min\n to units/sec)\n \u2022 gmoccapy.spc_rapid.value (float OUT) - Value of the widget\n@@ -29485,15 +29485,15 @@\n For the standard XYZ config following HAL pins will be available:\n \u2022 gmoccapy.jog.axis.jog-x-plus (bit IN)\n \u2022 gmoccapy.jog.axis.jog-x-minus (bit IN)\n \u2022 gmoccapy.jog.axis.jog-y-plus (bit IN)\n \u2022 gmoccapy.jog.axis.jog-y-minus (bit IN)\n \u2022 gmoccapy.jog.axis.jog-z-plus (bit IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 620 / 1290\n \n \u2022 gmoccapy.jog.axis.jog-z-minus (bit IN)\n If you use a 4 axes configuration, there will be two additional pins:\n \u2022 gmoccapy.jog.jog--plus (bit IN)\n \u2022 gmoccapy.jog.jog--minus (bit IN)\n@@ -29524,15 +29524,15 @@\n \u2022 gmoccapy.jog.jog-inc-3 (bit IN)\n \u2022 gmoccapy.jog.jog-inc-4 (bit IN)\n \u2022 gmoccapy.jog.jog-inc-5 (bit IN)\n \u2022 gmoccapy.jog.jog-inc-6 (bit IN)\n GMOCCAPY offers also a HAL pin to output the selected jog increment:\n \u2022 gmoccapy.jog.jog-increment (float OUT)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 621 / 1290\n \n 10.2.5.6 Hardware Unlock Pin\n To be able to use a key switch to unlock the settings page, the following pin is exported:\n \u2022 gmoccapy.unlock-settings (bit IN) - The settings page is unlocked if the pin is high. To use this\n pin, you need to activate it on the settings page.\n@@ -29566,15 +29566,15 @@\n MESSAGE_TEXT = LUBE FAULT\n MESSAGE_TYPE = okdialog\n MESSAGE_PINNAME = lube-fault\n MESSAGE_TEXT = X SHEAR PIN BROKEN\n MESSAGE_TYPE = status\n MESSAGE_PINNAME = pin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 622 / 1290\n \n To connect these new pins you need to do this in the postgui HAL file. Here are some example connections which connect the message signals to some place else in the HAL file.\n Example Connection of User Messages (HAL file)\n net gmoccapy-lube-fault gmoccapy.messages.lube-fault\n net gmoccapy-lube-fault-waiting gmoccapy.messages.lube-fault-waiting\n@@ -29594,15 +29594,15 @@\n Also loops will cause different values.\n 10.2.5.11 Tool Related Pins\n Tool Change Pins These pins are provided to use GMOCCAPY\u2019s internal tool change dialog, similar\n to the one known from AXIS, but with several modifications. So you will not only get the message\n to change to tool number 3, but also the description of that tool like 7.5 mm 3 flute cutter. The\n information is taken from the tool table, so it is up to you what to display.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 623 / 1290\n \n Figure 10.15: GMOCCAPY tool change dialog\n \u2022 gmoccapy.toolchange-number (s32 IN) - The number of the tool to be changed\n \u2022 gmoccapy.toolchange-change (bit IN) - Indicates that a tool has to be changed\n \u2022 gmoccapy.toolchange-changed (bit OUT) - Indicates tool has been changed\n@@ -29618,15 +29618,15 @@\n \n Tool Offset Pins These pins allow you to show the active tool offset values for X and Z in the tool\n information frame. You should know that they are only active after G43 has been sent.\n \n Figure 10.16: Tool information area\n \u2022 gmoccapy.tooloffset-x (float IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 624 / 1290\n \n \u2022 gmoccapy.tooloffset-z (float IN)\n Note\n The tooloffset-x line is not needed on a mill, and will not be displayed on a mill with trivial kinematics.\n \n@@ -29655,15 +29655,15 @@\n 1. Touch off your workpiece in X and Y.\n 2. Measure the height of your block from the base where your tool switch is located, to the upper\n face of the block (including chuck etc.).\n 3. Push the button block height and enter the measured value.\n 4. Go to auto mode and start your program.\n Here is a small sketch:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 625 / 1290\n \n Figure 10.17: Tool measurement data\n With the first given tool change the tool will be measured and the offset will be set automatically to\n fit the block height. The advantage of the GMOCCAPY way is, that you do not need a reference tool.\n Note\n@@ -29679,15 +29679,15 @@\n \u2022 gmoccapy.probeheight (float OUT) - The probe switch height\n \u2022 gmoccapy.searchvel (float OUT) - The velocity to search for the tool probe switch\n \u2022 gmoccapy.probevel (float OUT) - The velocity to probe tool length\n 10.2.6.2 INI File Modifications\n Modify your INI file to include the following sections.\n The RS274NGC Section\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 626 / 1290\n \n [RS274NGC]\n # is the sub, with is called when a error during tool change happens, not needed on every\n machine configuration\n ON_ABORT_COMMAND=O call\n@@ -29729,15 +29729,15 @@\n \u2022 toplevel.py\n \u2022 remap.py\n \u2022 stdglue.py\n From /configs/sim/gmoccapy/macros copy\n \u2022 on_abort.ngc\n \u2022 change.ngc\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 627 / 1290\n \n to the directory specified as SUBROUTINE_PATH, see RS274NGC Section.\n Open change.ngc with a editor and uncomment the following lines (49 and 50):\n F #<_hal[gmoccapy.probevel]>\n G38.2 Z-4\n@@ -29773,15 +29773,15 @@\n \n To enter the page you will have to click on\n and give an unlock code, which is 123 by\n default. If you want to change it at this time you will have to edit the hidden preference file, see the\n display section for details.\n The page is separated in three main tabs:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 628 / 1290\n \n 10.2.7.1 Appearance\n \n Figure 10.18: GMOCCAPY settings page Appearance\n On this tab you will find the following options:\n@@ -29792,15 +29792,15 @@\n \u2022 Start maximized\n \u2022 Start as window - If you select start as window the spinboxes to set the position and size will get\n 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\n on the settings.\n \u2022 Window decorated - Allows the title bar to be hidden. (default: title bar visible)\n \u2022 hide cursor - Does allow to hide the cursor, what is very useful if you use a touch screen.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 629 / 1290\n \n \u2022 hide tooltips - Hides the tool tips.\n Keyboard The checkboxes allow the user to select if he wants the on board keyboard to be shown\n immediately, when entering the MDI Mode, when entering the offset page, the tooledit widget or when\n open a program in the EDIT mode. The keyboard button on the bottom button list will not be affected\n@@ -29825,15 +29825,15 @@\n The letters \u201dde\u201d are for German, you will have to set them according to your locale settings. Just\n execute this file before starting LinuxCNC, it can be done also adding a starter to your local folder.\n ./config/autostart\n \n So that the layout is set automatically on starting.\n For matchbox-keyboard you will have to make your own layout, for a German layout ask in the forum.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 630 / 1290\n \n GMOCCAPY with Onboard keyboard in edit mode\n On Touch Off This gives the option whether to show the preview tab or the offset page tab when you\n enter the touch off mode by clicking the corresponding bottom button.\n \u2022 show preview\n@@ -29844,15 +29844,15 @@\n \u2022 Relative mode = black\n \u2022 Absolute mode = blue\n \u2022 Distance to go = yellow\n The foreground color of the DRO can be selected with:\n \u2022 homed color = green\n \u2022 unhomed color = red\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 631 / 1290\n \n Note\n You can change through the DRO modes (absolute, relative, distance to go) by clicking the number\n on the DRO! If you click on the left side letter of the DRO a popup window will allow you to set the\n value of the axes, making it easier to set the value, as you will not need to go over the touch off\n@@ -29890,15 +29890,15 @@\n \u2013 left zoom, middle move, right rotate\n \u2013 left move, middle rotate, right zoom\n \u2013 left zoom, middle rotate, right move\n \u2013 left move, middle zoom, right rotate\n \u2013 left rotate, middle zoom, right move\n Default is left move, middle zoom, right rotate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 632 / 1290\n \n The mouse wheel will still zoom the preview in every mode.\n Tip\n If you select an element in the preview, the selected element will be taken as rotation center point\n and in auto mode the corresponding code line will be highlighted.\n@@ -29915,15 +29915,15 @@\n messages sounds should be played. By default \u201dFollow System Theme\u201d is set.\n It further allows to change the icon theme. Currently there are three themes available:\n \u2022 classic\n \u2022 material\n \u2022 material light\n To create custom icon themes, see section Icon Theme for details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 633 / 1290\n \n 10.2.7.2 Hardware\n \n Hardware MPG Scale For the different HAL pins to connect MPG wheels to, you may select individual\n scales to be applied. The main reason for this was my own test to solve this through HAL connections,\n@@ -29939,15 +29939,15 @@\n are others that will never allow this. So everybody can select whether to use them or not.\n Keyboard shortcuts are disabled by default.\n \n Warning\n It is not recommended to use keyboard jogging, as it represents a serious risk for operator and\n machine.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 634 / 1290\n \n Please take care if you use a lathe, then the shortcuts will be different, see the Lathe Specific Section.\n General\n \u2022 F1 - Trigger Estop (will work even if keyboard shortcuts are disabled)\n \u2022 F2 - Toggle machine on/off\n@@ -29978,15 +29978,15 @@\n Spindle\n \u2022 Starting RPM - Sets the rpm to be used if the spindle is started and no S value has been set.\n Note\n This value will be presetted according to your settings in [DISPLAY] DEFAULT_SPINDLE_SPEED of\n your INI file. If you change the settings on the settings page, that value will be default from that\n moment, your INI file will not be modified.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 635 / 1290\n \n \u2022 Spindle bar min and Spindle bar max - Sets the limits of the spindle bar shown in the INFO frame\n on the main screen.\n Default values are:\n MIN = 0\n@@ -30001,15 +30001,15 @@\n please take care that the \u201drabbit mode\u201d is activated, otherwise you will not be able to jog faster\n than the turtle jog velocity, which is calculated using the turtle jog factor.\n \u2022 Turtle jog factor - Sets the scale to apply for turtle jog mode (button pressed, showing the turtle). If\n you set a factor of 20, the turtle max. jog velocity will be 1/20 of the max. velocity of the machine.\n Note\n This button can be controlled using the Turtle-Jog HAL Pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 636 / 1290\n \n 10.2.7.3 Advanced Settings\n \n Tool Measurement Please check Auto Tool Measurement\n Note\n@@ -30022,15 +30022,15 @@\n \u2013 X Pos. - The X position of the tool switch.\n \u2013 Y Pos. - The Y position of the tool switch.\n \u2013 Z Pos. - The Z position of the tool switch, we will go as rapid move to this coordinate.\n \u2013 Max. Probe The distance to search for contact, an error will be launched, if no contact is\n given in this range. The distance has to be given in relative coordinates, beginning the move\n from Z Pos., so you have to give a negative value to go down!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 637 / 1290\n \n \u2013 Probe Height - The height of your probe switch, you can measure it. Just touch off the base\n where the probe switch is located and set that to zero. Then make a tool change and watch\n the tool_offset_z value, that is the height you must enter here.\n Probe velocities\n@@ -30065,15 +30065,15 @@\n the 11th message will delete the first one, so you will only see the last 10.\n \u2022 Font - The font and size you want to use to display the messages.\n \u2022 Use frames - If you activate the checkbox, each message will be displayed in a frame, so it is much\n easier to distinguish the messages. But you will need a little bit more space.\n \u2022 Launch test message-button - It will show a message, so you can see the changes of your settings\n without the need to generate an error.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 638 / 1290\n \n 10.2.8 Icon Theme\n Icon themes are used to customize the look and feel of GMOCCAPY\u2019s icons.\n GMOCCAPY ships with three different icon themes:\n \u2022 classic - The classic GMOCCAPY icons.\n@@ -30110,15 +30110,15 @@\n png files). A special case is the directory called \u201dscalable/actions\u201d, this contains scalable icons\n not tied to a specific size (e.g. svg files).\n By supplying different sized versions of the icons, we can guarantee a nice looking icon if different\n sizes and we also have the ability to change the icon according to its size, for example a 64x64 px\n sized icon may contain more details than its 16x16 px version.\n \u2022 For each directory we also have to write a section in the index.theme file:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 639 / 1290\n \n [16x16/actions]\n Size=16\n Type=Fixed\n Context=Actions\n@@ -30168,25 +30168,25 @@\n yellow/orange\u2019ish).\n Error: this color indicates \u201derror\u201d (usually something\n red\u2019ish).\n \n Tip\n Examples of symbolic icons can be found at linuxcnc/share/gmoccapy/icons/material.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 640 / 1290\n \n 10.2.9 Lathe Specific Section\n If in the INI file LATHE = 1 is given, the GUI will change its appearance to the special needs for a\n lathe. Mainly the Y axis will be hidden and the jog buttons will be arranged in a different order.\n \n Figure 10.19: Normal Lathe\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 641 / 1290\n \n Figure 10.20: Back Tool Lathe\n As you see the R DRO has a black background and the D DRO is gray. This will change according\n to the active G-code G7 or G8. The active mode is visible by the black background, meaning in the\n shown images G8 is active.\n@@ -30197,15 +30197,15 @@\n Normal Lathe:\n \u2022 Arrow_Left or NumPad_Left - Jog Z minus\n \u2022 Arrow_Right or NumPad_Right - Jog Z plus\n \u2022 Arrow_up or NumPad_Up - Jog X minus\n \u2022 Arrow_Down or NumPad_Down - Jog X plus\n Back Tool Lathe:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 642 / 1290\n \n \u2022 Arrow_Left or NumPad_Left - Jog Z minus\n \u2022 Arrow_Right or NumPad_Right - Jog Z plus\n \u2022 Arrow_up or NumPad_Up - Jog X plus\n \u2022 Arrow_Down or NumPad_Down - Jog X minus\n@@ -30217,15 +30217,15 @@\n There is a very good WIKI, which is actually growing, maintained by Marius, see Plasma wiki page.\n \n 10.2.11 Videos on YouTube\n Below is a series of videos that show GMOCCAPY in action. Unfortunately, these videos don\u2019t show\n the latest version of GMOCCAPY, but the way to use it will still be the same as in the current version.\n I will update the videos as soon as possible.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 643 / 1290\n \n 10.2.11.1 Basic Usage\n https://youtu.be/O5B-s3uiI6g\n 10.2.11.2 Simulated Jog Wheels\n https://youtu.be/ag34SGxt97o\n@@ -30244,15 +30244,15 @@\n 10.2.12 Known problems\n 10.2.12.1 Strange numbers in the info area\n If you get strange numbers in the info area of GMOCCAPY like:\n \n 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\n MAX_VELOCITY = xxx.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 644 / 1290\n \n 10.2.12.2 Not ending macro\n If you use a macro without movement, like this one:\n o sub\n G92.1\n@@ -30278,15 +30278,15 @@\n Touchy is a user interface for LinuxCNC meant for use on machine control panels, and therefore does\n not require keyboard or mouse.\n It is meant to be used with a touch screen, and works in combination with a wheel/MPG and a few\n buttons and switches.\n The Handwheel tab has radio buttons to select between Feed Override, Spindle Override, Maximum\n Velocity and Jogging functions for the wheel/MPG input. Radio buttons for axis selection and increment for jogging are also provided.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 645 / 1290\n \n 10.3.1 Panel Configuration\n 10.3.1.1 HAL connections\n Touchy looks in the INI file, under the heading [HAL] for entries of POSTGUI_HALFILE=.\n Typically would be touchy_postgui.hal, but can be any legal filename. These commands\n@@ -30299,15 +30299,15 @@\n are preferred.\n \n For more information on HAL files and the net command see the HAL Basics.\n Touchy has several output pins that are meant to be connected to the motion controller to control\n wheel jogging:\n \u2022 touchy.jog.wheel.increment, which is to be connected to the axis.N.jog-scale pin of each axis N.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 646 / 1290\n \n \u2022 touchy.jog.wheel.N, which is to be connected to axis.N.jog-enable for each axis N.\n Note\n N represents the axis number 0-8.\n \n@@ -30339,15 +30339,15 @@\n When you start Touchy the first time, check the Preferences tab. If using a touchscreen, choose the\n option to hide the pointer for best results.\n The Status Window is a fixed height, set by the size of a fixed font. This can be affected by the Gnome\n DPI, configured in System / Preferences / Appearance / Fonts / Details. If the bottom of the screen is\n cut off, reduce the DPI setting.\n All other font sizes can be changed on the Preferences tab.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 647 / 1290\n \n 10.3.2.3 Macros\n Touchy can invoke O-word macros using the MDI interface. To configure this, in the [TOUCHY] section\n of the INI file, add one or more MACRO lines. Each should be of the following format:\n MACRO=increment xinc yinc\n@@ -30378,39 +30378,39 @@\n from GladeVCP. GladeVCP uses the GTK widget editor GLADE to build virtual control panels (VCP) by\n point and click. Gscreen combines this with Python programming to create a GUI screen for running\n a CNC machine.\n Gscreen is customizable if you want different buttons and status LEDs. Gscreen supports GladeVCP\n which is used to add controls and indicators. To customize Gscreen you use the Glade editor. Gscreen\n is not restricted to adding a custom panel on the right or a custom tab it is fully editable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.21: Gscreen Default Screen\n \n 648 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.22: Gscreen Silverdragon Screen\n \n 649 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.23: Gscreen Spartan Screen\n \n 650 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 651 / 1290\n \n Figure 10.24: Gscreen Gaxis Screen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 652 / 1290\n \n Figure 10.25: Gscreen Industrial Screen\n Gscreen is based on Glade (the editor), PyGTK (the widget toolkit), and GladeVCP (LinuxCNC\u2019s connection to Glade and PyGTK). GladeVCP has some special widgets and actions added just for LinuxCNC\n A widget is just the generic name used for the buttons, sliders, labels etc of the PyGTK toolkit.\n 10.4.1.1 Glade File\n@@ -30418,15 +30418,15 @@\n of the screen. PyGTK uses this file to actually display and react to those widgets. The Glade editor\n makes it relatively easy to build and edit this file You must use the Glade 3.38.2 editor that uses the\n GTK3 widgets.\n 10.4.1.2 PyGTK\n PyGTK is the Python binding to GTK. GTK is the toolkit of visual widgets, it is programmed in C. PyGTK\n uses Python to bind with GTK.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 653 / 1290\n \n 10.4.2 GladeVCP\n GladeVCP binds LinuxCNC, HAL, PyGTK and Glade all together. LinuxCNC requires some special widgets so GladeVCP supplies them. Many are just HAL extensions to existing PyGTK widgets. GladeVCP\n creates the HAL pins for the special widgets described in the Glade file. GladeVCP also allows one\n to add Python commands to interact with the widgets, to make them do things not available in their\n@@ -30471,15 +30471,15 @@\n named widgets. This ties the theme file to the Glade file more tightly. Some of the sample screen skins\n allow the user to select any of the themes on the system. The sample gscreen is an example. Some\n will load the theme that is the same name in the config file. The sample gscreen-gaxis is an example.\n This is done by putting the theme folder in the config folder that has the INI and HAL files and naming\n it: SCREENNAME_theme (SCREENNAME being the base name of the files eg. gaxis_theme). Inside\n this folder is another folder call gtk-2.0, inside that is the theme files. If you add this file, Gscreen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 654 / 1290\n \n will default to this theme on start up. gscreen-gaxis has a sample custom theme that looks for certain\n named widgets and changes the visual behavior of those specific widgets. The Estop and machine-on\n buttons use different colors then the rest of the buttons so that they stand out. This is done in the\n handler file by giving them specific names an by adding specific commands in the theme\u2019s gtkrc file.\n@@ -30510,15 +30510,15 @@\n about GladeVCP widgets is a prerequisite. If the existing widgets give you the function you want or\n need then no Python code needs be added, just save the Glade file in your configuration folder. If you\n need something more custom then you must do some Python programming. The name of the parent\n window needs to be window1. Gscreen assumes this name.\n Remember, if you use a custom screen option YOU are responsible for fixing it (if required) when\n updating LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 655 / 1290\n \n 10.4.3 Building a simple clean-sheet custom screen\n \n Lets build a simple usable screen. Build this in the Glade editor (if using a RIP package run it from a\n terminal after using . scripts/rip-environment ).\n@@ -30531,15 +30531,15 @@\n \u2022 The sourceview widget will try to use the whole window so adding it to a scrolled window will cover\n this. (This is already done in the example.)\n \u2022 The buttons will expand as the window is made larger which is ugly so we will set the box they are\n in, to not expand (see below).\n \u2022 The button types to use depend on the VCP_action used -eg vcp_toggle_action usually require toggle\n buttons (Follow the example for now).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 656 / 1290\n \n \u2022 The buttons in this example are regular buttons not HAL buttons. We don\u2019t need the HAL pins.\n \n In this screen we are using VCP_actions to communicate to LinuxCNC the actions we want. This\n allows us standard functions without adding Python code in the handler file. Let\u2019s link the estop\n@@ -30547,15 +30547,15 @@\n Related Action and click the button beside it. Now select the toggle estop action. Now the button will\n toggle estop on and off when clicked. Under the general tab you can change the text of the button\u2019s\n label to describe its function. Do this for all the buttons.\n Select the gremlin widget click the common tab and set the requested height to 100 and click the\n checkbox beside it.\n Click the horizontal box that holds the buttons. Click the packing tab and click expand to No.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 657 / 1290\n \n Save it as tester.glade and save it in sim/gscreen/gscreen_custom/ folder. Now launch LinuxCNC and\n click to sim/gscreen/gscreen_custom/tester and start it. If all goes well our screen will pop up and the\n buttons will do their job. This works because the tester.ini tells gscreen to look for and load tester.glade\n and tester_handler.py. The tester_handler.py file is included in that folder and is coded just show the\n@@ -30595,15 +30595,15 @@\n manual tool change dialog. Called when the dialog is closed.\n \u2022 periodic(self): This is called every (default 100) milliseconds. Use it to update your widgets/HAL\n pins. You can call Gscreen regular periodic afterwards too, self.gscreen.update_position() or just\n add pass to not update anything. Gscreen\u2019s update_position() actually calls many separate functions. If you wish to incorporate some of those widgets then just call those functions directly.\n You can also add you own functions to be called in this file. Usually you would add a signal to a widget\n to call your function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 658 / 1290\n \n 10.4.4.1 Adding Keybindings Functions\n Our tester example would be more useful if it responded to keyboard commands. There is a function\n called keybindings() that tries to set this up. While you can override it completely, we didn\u2019t - but it\n assumes some things:\n@@ -30650,15 +30650,15 @@\n pressed. Then we add the function to the handle file to call a Gscreen builtin function to start halmeter.\n 10.4.4.2 Linuxcnc State Status\n The module Gstat polls LinuxCNC\u2019s state every 100ms and sends callback messages to user functions\n when state changes. You can register messages to act on specific state changes. As an example we\n will register to get file-loaded messages when LinuxCNC loads a new file. First we must import the\n module and instantiate it: In the import section of the handler file add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 659 / 1290\n \n from hal_glib import GStat\n GSTAT = GStat()\n \n In the handler file under def __init__(self): add:\n@@ -30701,15 +30701,15 @@\n 2. Gscreen sets the debug mode and set the optional skin name.\n 3. Gscreen checks to see if there are local XML, handler and/or locale files in the configuration\n folder. It will use them instead of the default ones (in share/gscreen/skins/) (There can be two\n separate screens displayed).\n 4. The main screen is loaded and translations set up. If present the second screen will be loaded\n and translations set up.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 660 / 1290\n \n 5. Optional Audio is initialized if available.\n 6. It reads some of the INI file to initialize the units, and the number/type of axes.\n 7. Initializes Python\u2019s binding to HAL to build a non-realtime component with the Gscreen name.\n 8. GladeVCP\u2019s makepins is called to parse the XML file to build HAL pins for the HAL widgets and\n@@ -30746,15 +30746,15 @@\n 29. Gscreen set up messages specified in the INI file.\n 30. Gscreen tells HAL the Gscreen HAL component is finished making pins and is ready. If there is\n a terminal widget in the screen it will print all the Gscreen pins to it.\n 31. Gscreen sets the display cycle time based on the INI file.\n 32. Gscreen checks the handler file for timer_interupt(self) function call otherwise use Gscreen\u2019s\n default function call.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 661 / 1290\n \n 10.4.6 INI Settings\n Under the [DISPLAY] heading:\n DISPLAY = gscreen -c tester\n options:\n@@ -30795,15 +30795,15 @@\n # This just shows in the status bar and desktop notify popup.\n MESSAGE_BOLDTEXT = NONE\n MESSAGE_TEXT = This is a statusbar test\n MESSAGE_DETAILS = STATUS DETAILS\n MESSAGE_TYPE = status\n MESSAGE_PINNAME = statustest\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 662 / 1290\n \n # This will pop up a dialog that asks a yes no question\n MESSAGE_BOLDTEXT = NONE\n MESSAGE_TEXT = This is a yes no dialog test\n MESSAGE_DETAILS = Y/N DETAILS\n@@ -30847,15 +30847,15 @@\n \n The line:\n **** GSCREEN INFO: handler file path: [\u2019/home/chris/emc-dev/share/gscreen/skins/industrial/ \u2190industrial_handler.py\u2019]\n \n shows where the stock file lives. Copy this file to your config folder. This works the same for the Glade\n file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 663 / 1290\n \n 10.5 QtDragon GUI\n 10.5.1 Introduction\n QtDragon and QtDragon_hd are built with the QtVCP framework. It is the creative vision of forum\n personality Persei8. Much of it is based on the excellent work of others in the LinuxCNC community.\n@@ -30870,15 +30870,15 @@\n \n 10.5.1.1 QtDragon\n \n Figure 10.26: QtDragon - 3 or 4 axis sample (1440x860) in silver theme\n QtDragon is resizable from a resolution of 1280x768 to 1680x1200. It will work in window mode on\n any monitor with higher resolution but not on monitors with lower resolution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 664 / 1290\n \n 10.5.1.2 QtDragon_hd\n \n Figure 10.27: QtDragon_hd - 3 or 4 axis sample for larger monitors (1920x1056) in dark theme\n QtDragon_hd is a similar design as QtDragon but modified to utilize the extra space of modern larger\n@@ -30893,15 +30893,15 @@\n You can only have one of each section (e.g., [HAL]) in the INI file. If you see in these docs multiple\n section options, place them all under the one appropriate section name.\n \n 10.5.2.1 Display\n In the section [DISPLAY] change the DISPLAY = assignment to read:\n \u2022 qtdragon for a small version\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 665 / 1290\n \n \u2022 qtdradon_hd for the large version.\n You can add -v, -d, -i, or -q for (respectably) verbose, debug, info or quiet output to the terminal.\n [DISPLAY]\n DISPLAY = qtvcp qtdragon\n@@ -30938,15 +30938,15 @@\n [DISPLAY]\n DEFAULT_SPINDLE_0_SPEED = 500\n SPINDLE_INCREMENT = 200\n MIN_SPINDLE_0_SPEED = 100\n MAX_SPINDLE_0_SPEED = 2500\n MAX_SPINDLE_POWER = 1500\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 666 / 1290\n \n 10.5.2.6 Jogging increments\n Set selectable jogging increments.\n These increments can be user changed.\n [DISPLAY]\n@@ -30993,15 +30993,15 @@\n panel.\n If using stackedWidget_mainTab, a button labelled User will appear.\n Pressing this button will cycle through displaying all available panels (specified for this location) on\n the main tab area.\n Sample adding a builtin panel to the utilities tab, i.e., a graphical animated machine using\n the vismach library.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 667 / 1290\n \n [DISPLAY]\n EMBED_TAB_NAME = Vismach demo\n EMBED_TAB_COMMAND = qtvcp vismach_mill_xyz\n EMBED_TAB_LOCATION = tabWidget_utilities\n@@ -31025,15 +31025,15 @@\n ~/linuxcnc/nc_files/examples/probe/basic_probe/macros:~/linuxcnc/nc_files/examples/remap- \u2190subroutines: \\\n ~/linuxcnc/nc_files/examples/ngcgui_lib/remap_lib\n \n QtVCP\u2019s NGCGUI program also need to know where to open for subroutine selection and pre-selection.\n NGCGUI_SUBFILE_PATH must point to an actual path on your system and also a path described in\n SUBROUTINE_PATHS.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 668 / 1290\n \n [DISPLAY]\n # NGCGUI subroutine path.\n # Thr path must also be in [RS274NGC] SUBROUTINE_PATH\n NGCGUI_SUBFILE_PATH = ~/linuxcnc/nc_files/examples/ngcgui_lib\n@@ -31075,15 +31075,15 @@\n jpg = image-to-gcode\n py = python\n \n 10.5.2.13 Probe/Touchplate/Laser Settings\n QtDragon has INI entries for two optional probing tab screens available. Comment/uncomment which\n ever you prefer.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 669 / 1290\n \n \u2022 Versa probe is a QtVCP ported version of a popular GladeVCP probing panel.\n \u2022 Basic Probe is a QtVCP ported version based on the third party basic probe screen.\n Both perform similar probing routines, though Versa probe optionally handles auto tool measurement.\n [PROBE]\n@@ -31124,15 +31124,15 @@\n RS274NGC_STARTUP_CODE = G17 G20 G40 G43H0 G54 G64P0.0005 G80 G90 G94 G97 M5 M9\n \n 10.5.2.16 Macro Buttons\n QtDragon has up to ten convenience buttons for calling macro actions.\n These could also call OWord routines if desired.\n In the sample configurations they are labelled for moving between current user system origin (zero\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 670 / 1290\n \n point) and Machine system origin.\n User origin is the first MDI command in the INI list, machine origin is the second.\n This example shows how to move Z axis up first. The commands are separated by the ;.\n The label is set after the comma. The symbols \\n adds a line break.\n@@ -31172,15 +31172,15 @@\n F1 - Estop on/off\n F2 - Machine on/off\n F12 - Style Editor\n Home - Home All Joint of the Machine\n Escape - Abort Movement\n Pause - Pause Machine Movement\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 671 / 1290\n \n 10.5.4 Buttons\n Buttons that are checkable will change their text colour when checked. This is controlled by the\n stylesheet/theme\n \n@@ -31231,15 +31231,15 @@\n \n This bit pin is an output to the spindle control to pause it.\n You would connect it to spindle.0.inhibit.\n qtdragon.spindle-inhibit\n \n This bit output pin can be connected to turn on a laser:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 672 / 1290\n \n qtdragon.btn-laser-on\n \n This float output pin indicates the camera rotation in degrees:\n qtdragon.cam-rotation\n@@ -31294,15 +31294,15 @@\n \n 10.5.9 Spindle\n The screen is intended to interface to a VFD, but will still work without it.\n There are a number of VFD drivers included in the LinuxCNC distribution.\n It is up to the end user to supply the appropriate driver and HAL file connections according to his own\n machine setup.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 673 / 1290\n \n 10.5.10 Auto Raise Z Axis on Spindle Pause\n QtDragon can be set up to automatically raise and lower the Z axis when the spindle is paused.\n When a program is paused, then you press the Spindle Pause button to stop the spindle and raise it\n in Z.\n@@ -31352,15 +31352,15 @@\n be called probe_points.txt. The file can be modified or updated at any time while compensation is\n disabled. When next enabled, the file will be reread and the compensation map is recalculated. This\n file is expected to be in the configuration directory.\n The probe data file is generated by a probing program, which itself is generated by an external python\n program called gcode_ripper, which can be launched from the file manager tab using the G-code\n Ripper button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 674 / 1290\n \n 10.5.11.1 Using G-code Ripper for Z level Compensation\n \n Figure 10.28: QtDragon_hd showing G-code Ripper\n Note\n@@ -31374,15 +31374,15 @@\n \u2022 If necessary, make adjustments and press Recalculate.\n \u2022 Press Save G-Code File - Probe Only.\n \u2022 Save the generated file to the nc_files folder.\n \u2022 Exit gcode_ripper.\n \u2022\n \u2022 Without changing the offsets, run this program. Make sure the probe tool is installed. When complete, there will be a file in the config directory called probe_points.txt.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 675 / 1290\n \n \u2022 In qtdragon_hd, press the Enable Z Comp button to enable compensation. Look at the status line\n for indication of success or failure. Active compensation will be displayed beside the label: Z Level\n Comp While jogging that display should change based on the compensation component.\n Note\n@@ -31448,15 +31448,15 @@\n scaled-s32-sums.0.in0\n net eoffset-zlevel-count\n scaled-s32-sums.0.in1\n setp scaled-s32-sums.0.scale0 1000\n net eoffset-counts\n scaled-s32-sums.0.out-s\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 676 / 1290\n \n 10.5.12 Probing\n The probe screen has been through basic testing but there could still be some minor bugs. When\n running probing routines, use extreme caution until you are familiar with how everything works.\n Probe routines run without blocking the main GUI. This gives the operator the opportunity to watch\n@@ -31471,15 +31471,15 @@\n 1. how far above the table the probe trigger point is (tool setter height) and\n 2. how far above the table the top of the workpiece is.\n This operation has to be done every time the tool is changed as the tool length is not saved.\n For touching off with a touch probe, whether you use the touchplate operation with thickness set to 0\n or use a probing routine, the height from table to top of workpiece parameter is not taken into account\n and can be ignored. It is only for the tool setter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 677 / 1290\n \n 10.5.12.1 Versa Probe\n \n Figure 10.29: QtDragon - Versa Probe Option\n Versa probe is used to semi-automatically probe work pieces to find edges, centers and angles.\n@@ -31497,15 +31497,15 @@\n \u2022 SEARCH:: This is the feed rate at which the probe searches for the target workpiece in machine\n units per minute. The search speed should be slow enough to give an acceptable initial accuracy,\n but fast enough to not waste time waiting for movement. Recommendation: 200-500 mm/min.\n \u2022 PROBE:: Once initial contact has been made and the probe is retracted, it will wait for 0.5 seconds\n before performing the search again at a lower speed, the probe velocity. This lower speed ensures\n the machine can stop movement as quickly as possible on contact with the workpiece.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 678 / 1290\n \n \u2022 RAPID:: Axis movements not associated with searching are done at the speed defined by RAPID in\n machine units per minute.\n \u2022 SIDE/EDGE LENGTH:: This is the distance the probe will move at the rapid rate to the position\n where it will begin a search. If measuring a corner, it will move EDGE LENGTH units away from\n@@ -31525,15 +31525,15 @@\n CLEARANCE to 0.\n There are three toggle buttons:\n \u2022 Auto Zero This selects if after probing the relevant axis is set to zero in the current user system.\n \u2022 Auto Skew This selects if after probing, the system will be rotated or just display the calculated\n rotation.\n \u2022 Tool Measure This (if integrated) turns auto tool probing on and off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 679 / 1290\n \n 10.5.12.2 Basic probe\n \n Figure 10.30: QtDragon - Basic Probe Option\n Basic probe is used to semi-automatically probe work pieces to find edges, centers and angles. The\n@@ -31546,15 +31546,15 @@\n \u2022 Calibration\n You must carefully set the Probing Parameters:\n \u2022 Probe Tool: will only allow probing if this tool number is in the spindle\n \u2022 Probe Diameter: the size of the probe tip\n \u2022 Probe Rapid: the speed of rapid moves in machine units\n \u2022 Probe Search: the speed of the first rough search in machine units\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 680 / 1290\n \n \u2022 Probe Feed: the speed of the second fine search in machine units\n \u2022 Step Off : back off and re-probe distance\n \u2022 Max XY Distance: the maximum distance the probe will search for in X and Y before failing with\n error\n@@ -31585,15 +31585,15 @@\n \u2022 EDGE WIDTH - distance along edge wall (away from corner) to start probing.\n Note\n These distance are always to be set in machine units (mm for metric machine, inch for imperial\n machine).\n \n Preset:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 681 / 1290\n \n \u2022 manual set probe at the intersection of the edges (ie corner) of material as described by the green\n bullseye on the button. Set it Z CLEARANCE above the top of material. These can be done by eye.\n \u2022 set EXTRA CLEARANCE to a value that you want the probe to go below the top of material. (So the\n probe will move from its start position down Z Clearance + Extra Clearance distance.)\n@@ -31609,15 +31609,15 @@\n 3. probe wall twice (rough and fine),\n 4. move diagonally to the other wall as set by EDGE WIDTH and XY CLEARANCE,\n 5. probe wall twice,\n 6. raise probe up by Z CLEARANCE + EXTRA DEPTH 9returns to starting height),\n 7. rapid back to starting corner (now calculated using the probed walls),\n 8. if auto zero button is enabled, set X and Y of the current user system to zero.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 682 / 1290\n \n 10.5.13 Touch plate\n \n Figure 10.31: QtDragon - Touch Plate\n You can use a conductive touch plate or equivalent to auto touch off (zero the user coordinate) for the\n@@ -31636,15 +31636,15 @@\n calculation from the touchplate height setting.\n \n 10.5.14 Auto Tool Measurement\n QtDragon can be setup to do integrated auto tool measurement using the Versa Probe widget and\n remap code. To use this feature, you will need to do some additional settings and you may want to\n use the offered HAL pin to get values in your own ngc remap procedure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 683 / 1290\n \n Important\n Before starting the first test, do not forget to enter the probe height and probe velocities on\n the versa probe settings page.\n \n@@ -31659,15 +31659,15 @@\n When fist setting up auto tool measurement, please use caution until you confirm tool change and\n probe locations - it is easy to break a tool/probe. Abort will be honoured while the probe is in motion.\n \n Figure 10.32: Auto tool measurement\n With the first given tool change the tool will be measured and the offset will be set automatically to\n fit the block height. The advantage of this way is, that you do not need a reference tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 684 / 1290\n \n Note\n Your program must contain a tool change at the beginning. The tool will be measured, even it has\n been used before, so there is no danger if the block height has changed. There are several videos\n on you tube that demonstrate the technique using GMOCCAPY. The GMOCCAPY screen pioneered the\n@@ -31682,15 +31682,15 @@\n \u2022 Probe down in Z to maximum defined in the INI\u2019s [VERSA_TOOLSETTER] MAXPROBE\n \u2022 Return Z to position defined in the INI\u2019s [TOOL_CHANGE] Z\n Note\n The [TOOL_CHANGE] Z position should be high enough so the tool will not hit the tool probe when\n moving to the [VERSA_TOOLSETTER] X and Y position. MAXPROBE distance needs to be high enough\n for the tool to touch the probe.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 685 / 1290\n \n 10.5.14.1 Work Piece Height Probing\n \n Figure 10.33: QtDragon_hd - Work piece Height probing\n This program probes 2 user specified locations in the Z axis and calculates the difference in heights.\n@@ -31703,15 +31703,15 @@\n displayed on the DROs.\n Autofill Workpiece Height on Main Screen\n \u2022 When checked, the calculated height is automatically transferred to the Workpiece Height field in\n the main screen.\n \u2022 Otherwise, the main screen is not affected.\n Workpiece Probe At\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 686 / 1290\n \n \u2022 the X, Y and Z coordinates specify where the first probing routine should start, in current WCS\n Machine Probe At\n \u2022 the X, Y and Z coordinates specify where the second probing routine should start, in current WCS\n Z Safe Travel Height\n@@ -31745,15 +31745,15 @@\n Reflects screen entry.\n \u2022 qtversaprobe.probeheight (HAL_FLOAT) the toolsetter probe switch height. Reflects screen entry.\n \u2022 qtversaprobe.searchvel (HAL_FLOAT) the velocity to search for the tool probe switch\n \u2022 qtversaprobe.probevel (HAL_FLOAT) the velocity to probe tool length. Reflects screen entry.\n \u2022 qtversaprobe.backoffdist (HAL_FLOAT) the distance the probe backs off after triggering. Reflects\n screen entry.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 687 / 1290\n \n 10.5.14.3 Tool Measurement INI File Modifications\n Modify your INI file to include the following:\n QtDragon allows you to select one of two styles of touch probe routines. Versa probe works with a M6\n remap to add auto tool probing.\n@@ -31793,15 +31793,15 @@\n \u2022 wait for manual tool change acknowledgement\n \u2022 go to VERSA_TOOLSETTER XY position\n \u2022 go to VERSA_TOOLSETTER Z position\n \u2022 fast probe\n \u2022 slow probe\n \u2022 go to TOOLCHANGE Z position\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 688 / 1290\n \n Z_MAX_CLEAR is the Z position to go to before moving to the tool setter when using the Travel to\n Toolsetter button.\n Travel to Toolsetter Action sequence:\n \n@@ -31845,15 +31845,15 @@\n mode. A dialog will be shown allowing the spindle direction and speed to be preset. The start line is\n indicated in the box labelled LINE, next to the CYCLE START button. The run from line feature can\n be disabled in the settings page.\n Note\n LinuxCNC\u2019s run-from-line is not very user friendly. E.g., it does not start the spindle or confirm the\n proper tool. Also, it does not handle subroutines well. If used it is best to start on a rapid move.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 689 / 1290\n \n 10.5.16 Laser buttons\n The LASER ON/OFF button in intended to turn an output on or off which is connected to a small laser\n crosshair projector. When the crosshair is positioned over a desired reference point on the workpiece,\n the REF LASER button can be pushed, which then sets the X and Y offsets to the values indicated by\n@@ -31885,15 +31885,15 @@\n You can monitor/modify tool offsets from this tab. Adding and deleting tools from the tool file can also\n be done from this tab. When this tab is selected the individual home buttons in the DRO area will\n change to tool offset setting buttons. They will return to home buttons when you select another tab.\n Pressing this tool button will drop down a when menu of options:\n \u2022 Set Current Tool Position\n \u2022 Adjust Current Tool Position\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 690 / 1290\n \n \u2022 Zero Current Tool Position\n \u2022 Set Tool Offset Directly\n \u2022 Reset To Last\n 10.5.17.5 Status Tab\n@@ -31920,15 +31920,15 @@\n \u2022 PDF - any loaded PDF setup pages are displayed here\n \u2022 PROPERTIES - when a program is loaded its gcode properties are displayed here.\n There are navigation buttons for HTML page:\n \u2022 The up arrow returns you to the default HTML page\n \u2022 The left arrow moves backward one HTML page\n \u2022 The right arrow moves forward one HTML page\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 691 / 1290\n \n If you wish to include a custom default HTML page, name it default_setup.html and place it in your\n configuration folder.\n Custom QtVCP panels can be displayed in this tab by setting the EMBED_TAB_LOCATION option to\n tabWidget_setup.\n@@ -31942,15 +31942,15 @@\n \u2022 Facing: allows quick face milling of a definable area at angles of 0,45 and 90 degrees\n \u2022 Hole Circle: allows quick setting of a program to drill a bolt circle of definable diameter and number\n of holes.\n \u2022 NGCGUI: is a QtVCP version of the popular G-code subroutine builder/selector, see Widgets-NGCGUI.\n \n Custom QtVCP panels can be displayed here by setting the EMBED_TAB_LOCATION option to tabWidget_uti\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 692 / 1290\n \n 10.5.17.12 User Tab\n \n This tab will only be displayed if an embedded panel has been designated for the location stackedWidget_mai\n If more then one embedded tab has been designated, then pressing the user tab will cycle through\n@@ -31980,15 +31980,15 @@\n }\n \n To change the DRO display font and display format:\n DROLabel {\n font: 25pt \u201dLato Heavy\u201d;\n qproperty-imperial_template: \u2019%9.5f\u2019;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n qproperty-metric_template: \u2019%10.4f\u2019;\n qproperty-angular_template: \u2019%11.2f\u2019;\n }\n \n To change the text of the mist button to air (add these lines)\n #action_mist{\n@@ -32040,15 +32040,15 @@\n \n To have the manual spindle buttons also incrementally increase/decrease speed:\n #action_spindle_fwd{\n qproperty-spindle_up_action: true;\n \n 693 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 694 / 1290\n \n }\n #action_spindle_rev{\n qproperty-spindle_down_action: true;\n }\n@@ -32064,15 +32064,15 @@\n [DISPLAY]\n USER_COMMAND_FILE = CONFIGFOLDER/qtdragonrc.py\n \n See Modifying Screens for more information about customization.\n \n Figure 10.36: QtDragon - Customized QtDragon\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 695 / 1290\n \n 10.6 NGCGUI\n \n Figure 10.37: NGCGUI embedded into AXIS\n \n@@ -32082,15 +32082,15 @@\n \u2022 NGCGUI can run as a standalone application or can be embedded in multiple tab pages in the AXIS\n GUI.\n \u2022 PyNGCGUI is an alternate, Python implementation of NGCGUI.\n \u2022 PyNGCGUI can run as a standalone application or can be embedded as a tab page (with its own set\n of multiple subroutine tabs) in any GUI that supports embedding of GladeVCP applications AXIS,\n Touchy, Gscreen and GMOCCAPY.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 696 / 1290\n \n Using NGCGUI or PyNGCGUI:\n \u2022 Tab pages are provided for each subroutine specified in the INI file.\n \u2022 New subroutines tab pages can be added on the fly using the custom tab.\n \u2022 Each subroutine tab page provides entry boxes for all subroutine parameters.\n@@ -32122,15 +32122,15 @@\n (.ngc) files and G-code-meta-compiler (.gcmc) files:\n \u2022 nc_files/ngcgui_lib\n \u2013 ngcgui.ngc - An easy to understand example using subroutines\n \u2013 arc1.ngc - basic arc using cutter radius compensation\n \u2013 arc2.ngc - arc speced by center, offset, width, angle (calls arc1)\n \u2013 backlash.ngc - routine to measure an axis backlash with dial indicator\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 697 / 1290\n \n \u2013 db25.ngc - creates a DB25 plug cutout\n \u2013 gosper.ngc - a recursion demo (flowsnake)\n \u2013 helix.ngc - helix or D-hole cutting\n \u2013 helix_rtheta.ngc - helix or D-hole positioned by radius and angle\n@@ -32170,15 +32170,15 @@\n the Run\n different tab pages.\n To create several subroutines concatenated into a single file, go to each tab fill in the blanks, press\n Create Feature then using the arrow keys move any tabs needed to put them in order. Now press\n Finalize and answer the prompt to create\n Other GUIs will have similar functionality but the buttons and names may be different.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 698 / 1290\n \n Note\n The demonstration configs create tab pages for just a few of the provided examples. Any GUI with a\n custom tab can open any of the library example subroutines or any user file if it is in the LinuxCNC\n subroutine path.\n@@ -32215,15 +32215,15 @@\n And then create or copy system-provided files to these user-writable directories. For instance, a user\n might create a NGCGUI-compatible subfile named:\n /home/myusername/mysubs/example.ngc\n \n To use files in new directories, the INI file must be edited to include the new subfiles and to augment\n the search path(s). For this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 699 / 1290\n \n [RS274NGC]\n ...\n SUBROUTINE_PATH = /home/myusername/mysubs:../../nc_files/ngcgui_lib:../../nc_files/gcmc_lib \u2190:../../nc_files/ngcgui_lib/utilitysubs\n USER_M_PATH\n@@ -32276,15 +32276,15 @@\n \n 10.6.4.2 Standalone PyNGCGUI\n For usage, type in a terminal:\n pyngcgui --help\n Usage:\n pyngcgui [Options] []\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 700 / 1290\n \n Options requiring values:\n [-d | --demo] [0|1|2] (0: DEMO standalone toplevel)\n (1: DEMO embed new notebook)\n (2: DEMO embed within existing notebook)\n@@ -32336,15 +32336,15 @@\n \u2022 NGCGUI_SUBFILE = simp.ngc - Creates a tab from the named subroutine.\n \u2022 NGCGUI_SUBFILE = \u201d\u201d - Creates a custom tab\n \u2022 #NGCGUI_OPTIONS = opt1 opt2 \u2026 - NGCGUI options:\n \u2013 nonew \u2014 Prohibits creation of new custom tab\n \u2013 noremove \u2014 Prohibits deleting a tab page\n \u2013 noauto \u2014 Do not run automatically (makeFile, then manual run)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 701 / 1290\n \n \u2013 noiframe \u2014 No internal image, image on separate top level\n \u2022 TTT = truetype-tracer - name of the truetype tracer program (it must be in user PATH)\n \u2022 TTT_PREAMBLE = in_std.ngc - Optional, specifies filename for preamble used for ttt created subfiles. (alternate: mm_std.ngc)\n Note\n@@ -32375,15 +32375,15 @@\n concatenating several common subroutine invocations, this preamble is only added once. For mmbased machines, use mm_std.ngc\n \u2022 NGCGUI_SUBFILE = filename1.ngc - creates a tab from the filename1 subroutine\n \u2022 NGCGUI_SUBFILE = filename2.ngc - creates a tab from the filename2 subroutine\n \u2022 \u2026 etc.\n \u2022 NGCGUI_SUBFILE = gcmcname1.gcmc - creates a tab from the gcmcname1 file\n \u2022 NGCGUI_SUBFILE = gcmcname2.gcmc - creates a tab from the gcmcname2 file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 702 / 1290\n \n \u2022 \u2026 etc.\n \u2022 NGCGUI_SUBFILE = \u201d\u201d - creates a custom tab that can open any subroutine in the search path\n \u2022 NGCGUI_OPTIONS = opt1 opt2 \u2026 - NGCGUI options\n \u2013 nonew - disallow making a new custom tab\n@@ -32457,15 +32457,15 @@\n #\n noauto\n -- no auto send (makeFile, then manually send)\n #\n noiframe\n -- no internal image, image on separate top level\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 703 / 1290\n \n GCMC_INCLUDE_PATH = /home/myname/gcmc_includes\n TTT\n TTT_PREAMBLE\n \n@@ -32512,15 +32512,15 @@\n [RS274NGC]SUBROUTINE_PATH = directory1_name:directory1_name:directory3_name ...\n \n Directories Directories may be specified as absolute paths or relative paths.\n \u2022 Example: [DISPLAY]PROGRAM_PREFIX = /home/myname/linuxcnc/nc_files\n \u2022 Example: [DISPLAY]PROGRAM_PREFIX = ~/linuxcnc/nc_files\n \u2022 Example: [DISPLAY]PROGRAM_PREFIX = ../../nc_files\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 704 / 1290\n \n Absolute Paths An absolute path beginning with a \u201d/\u201d specifies a complete filesystem location. A\n path beginning with a \u201d~/\u201d specifies a path starting from the user\u2019s home directory. A path beginning\n with \u201d~username/\u201d specifies a path starting in username\u2019s home directory.\n Relative Paths Relative paths are based on the startup directory which is the directory containing\n@@ -32559,15 +32559,15 @@\n message.\n 10.6.5.6 Summary of INI File item details for NGCGUI usage\n \n [RS274NGC]SUBROUTINE_PATH = dirname1:dirname2:dirname3 \u2026\n Example: [RS274NGC]SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/ngcgui_li\n Note: Optional, but very useful to organize subfiles and utility files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 705 / 1290\n \n [RS274NGC]USER_M_PATH = dirname1:dirname2:dirname3 \u2026\n Example: [RS274NGC]USER_M_PATH = ../../nc_files/ngcgui_lib/mfiles\n Note: Optional, needed to locate custom user M-files.\n [DISPLAY]EMBED_TAB_NAME = name to display on embedded tab page\n@@ -32613,15 +32613,15 @@\n Note: Optional, when specified, the file is appended to a subfiles.\n Files created with \u201dCustom\u201d tab pages use the postamble specified with the page.\n [DISPLAY]NGCGUI_OPTIONS = opt1 opt2 \u2026\n Example: [DISPLAY]NGCGUI_OPTIONS = nonew noremove\n Note: Multiple options are separated by blanks.\n By default, NGCGUI configures tab pages so that:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 706 / 1290\n \n 1) a user can make new tabs;\n 2) a user can remove tabs (except for the last remaining one);\n 3) finalized files are automatically sent to LinuxCNC;\n 4) an image frame (iframe) is made available to display an image for the subfile (if an image is\n@@ -32665,15 +32665,15 @@\n \n The body of the subroutine should begin with a set of statements that define local named parameters\n for each positional parameter expected for the subroutine call. These definitions must be consecutive\n beginning with #1 and ending with the last used parameter number. Definitions must be provided for\n each of these parameters (no omissions).\n Parameter Numbering\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 707 / 1290\n \n # = #1\n # = #2\n # = #3\n \n@@ -32722,15 +32722,15 @@\n o call [#] [#] (call a subroutine)\n # = #<_helper:answer> (immediately localize the helper global result)\n #<_helper:answer> = 0.0\n (nullify global named parameter used by subroutine)\n ...\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 708 / 1290\n \n In the above example, the utility subroutine will be found in a separate file named helper.ngc. The\n helper routine returns a result in a global named parameter named #<_helper:answer.\n For good practice, the calling subfile immediately localizes the result for use elsewhere in the subfile\n and the global named parameter used for returning the result is nullified in an attempt to mitigate its\n@@ -32772,15 +32772,15 @@\n //ngcgui: varname3 = value3, label3;\n \n Variable Tags Examples\n //ngcgui: zsafe =\n //ngcgui: feedrate = 10\n //ngcgui: xl = 0, x limit\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 709 / 1290\n \n For these examples, the entry box for varname1 will have no default, the entry box for varname2 will\n have a default of value2, and the entry box for varname 3 will have a default of value 3 and a label\n label3 (instead of varname3). The default values must be numbers.\n To make it easier to modify valid lines in a gcmc file, alternate tag line formats accepted. The alternate\n@@ -32822,28 +32822,28 @@\n [DISPLAY]\n GCMC_INCLUDE_PATH = ../../nc_files/gcmc_lib\n \n 10.6.7 DB25 Example\n The following shows the DB25 subroutine. In the first photo you see where you fill in the blanks for\n each variable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n This photo shows the backplot of the DB25 subroutine.\n \n 710 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 711 / 1290\n \n This photo shows the use of the new button and the custom tab to create three DB25 cutouts in one\n program.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 712 / 1290\n \n 10.6.8 Creating a subroutine\n \u2022 For creating a subroutine for use with NGCGUI, the filename and the subroutine name must be the\n same.\n \u2022 The file must be placed in the subdirectory pointed to in the INI file.\n@@ -32861,15 +32861,15 @@\n # = #3 (Feedrate)\n ;Example de param\u00e8tre sans preset\n g0x0y0z1\n g3 i# f#\n g3 i[0-#]\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 713 / 1290\n \n 10.7 TkLinuxCNC GUI\n 10.7.1 Introduction\n TkLinuxCNC is one of the first graphical front-ends for LinuxCNC. It is written in Tcl and uses the Tk\n toolkit for the display. Being written in Tcl makes it very portable (it runs on a multitude of platforms).\n@@ -32885,15 +32885,15 @@\n Then, start LinuxCNC and select that INI file. The sample configuration sim/tklinuxcnc/tklinuxcnc.ini\n is already configured to use TkLinuxCNC as its front-end.\n When LinuxCNC is launched the TKLinuxCNC window is opened.\n 10.7.2.1 A typical session with TkLinuxCNC\n 1. Start LinuxCNC and select a configuration file.\n 2. Clear the E-STOP condition and turn the machine on (by pressing F1 then F2).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 714 / 1290\n \n 3. Home each axis.\n 4. Load the file to be milled.\n 5. Put the stock to be milled on the table.\n 6. Set the proper offsets for each axis by jogging and either homing again or right-clicking an axis\n@@ -32925,15 +32925,15 @@\n \u2022 Abort\n then on the second line:\n \u2022 Operation mode: MANUAL > MDI > AUTO\n \u2022 Toggle flood coolant\n \u2022 Toggle spindle brake control\n 1 For some of these actions it might be necessary to change the mode LinuxCNC is currently running in.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 715 / 1290\n \n 10.7.3.2 Offset display status bar\n The Offset display status bar displays the currently selected tool (selected with Txx M6), the tool\n length offset (if active), and the work offsets (set by right-clicking the coordinates).\n 10.7.3.3 Coordinate Display Area\n@@ -32965,15 +32965,15 @@\n execution will be stopped on any M1 encountered).\n Text Program Display Area When the program is running, the line currently being executed is\n highlighted in white. The text display will automatically scroll to show the current line.\n 10.7.3.5 Manual Control\n Implicit keys TkLinuxCNC allows you to manually move the machine. This action is known as jogging.\n First, select the axis to be moved by clicking it. Then, click and hold the + or - button depending on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 716 / 1290\n \n the desired direction of motion. The first four axes can also be moved by the keyboard arrow keys (X\n and Y), the PAGE UP and PAGE DOWN keys (Z) and the [ and ] keys (A/4th).\n + If Continuous is selected, the motion will continue as long as the button or key is pressed. If another\n value is selected, the machine will move exactly the displayed distance each time the button is clicked\n@@ -32996,15 +32996,15 @@\n The Coolant groupCoolant The two buttons allow the Mist and Flood coolants to be turned on and\n off. Depending on your machine configuration, not all the items in this group may appear.\n 10.7.3.6 Code Entry\n Manual Data Input (also called MDI), allows G-code programs to be entered manually, one line at\n a time. When the machine is not turned on, and not set to MDI mode, the code entry controls are\n unavailable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 717 / 1290\n \n This allows you to enter a G-code command to be executed. Execute the command by pressing Enter.\n Active G-Codes This shows the modal codes that are active in the interpreter. For instance, G54\n indicates that the G54 offset is applied to all coordinates that are entered.\n 10.7.3.7 Jog Speed\n@@ -33053,15 +33053,15 @@\n Send active axis Home\n Jog first axis\n Jog second axis\n Jog third axis\n Jog fourth axis\n Stop execution\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 718 / 1290\n \n 10.8 QtPlasmaC\n 10.8.1 Preamble\n Except where noted, this guide assumes the user is using the latest version of QtPlasmaC. Version\n history can be seen by visiting this link which will show the latest available version. The installed\n@@ -33081,25 +33081,25 @@\n there are enough hardware I/O pins to fulfill the requirements of a plasma configuration.\n There are three available formats:\n \u2022 16:9 with a minimum resolution of 1366 x 768\n \u2022 9:16 with a minimum resolution of 768 x 1366\n \u2022 4:3 with a minimum resolution of 1024 x 768\n Screenshot examples of QtPlasmaC are below:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 719 / 1290\n \n Figure 10.40: 16:9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 720 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 721 / 1290\n \n Figure 10.42: 4:3\n \n 10.8.4 Installing LinuxCNC\n The preferred method for installing LinuxCNC is via an ISO image as described below.\n@@ -33107,15 +33107,15 @@\n It is possible to install and run LinuxCNC on a variety of Linux distributions however that is beyond\n the scope of this User Guide. If the user wishes to install a Linux distribution other than those recommended, they will first need to install their preferred Linux distribution and then install LinuxCNC\n v2.9 or later along with any required dependencies.\n \n 10.8.4.1 If The User Does Not Have Linux Installed\n Installation instructions are available from here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 722 / 1290\n \n Following these instructions will yield a machine with the current stable branch (v2.8) of LinuxCNC\n on Debian Buster.\n 10.8.4.2 Package Installation (Buildbot) If The User Has Linux with LinuxCNC v2.8\n A package installation (Buildbot) uses prebuilt packages from the LinuxCNC Buildbot, instructions\n@@ -33156,15 +33156,15 @@\n to use a reed relay as an alternative method to establish an Arc OK signal when the power\n source does not provide one.\n \n Note\n For fine tuning of Mode 0 Ark OK see Tuning Mode 0 Arc OK in the Advanced Topics section of the\n manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 723 / 1290\n \n 10.8.5.2 Available I/Os\n Note\n This section only touches on the hardware I/O\u2019s required for QtPlasmaC. Base machine requirements\n such as limit switches, home switches, etc. are in addition to these.\n@@ -33245,15 +33245,15 @@\n This signal senses if the torch has broken away from its cradle.\n Digital output; required.\n HAL pin name plasmac.torch-on\n Connected from a breakout board output to the torch-on input\n of the plasma power supply. This signal is used to control the\n plasma power supply and start the arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Name\n Move Up\n \n Modes\n 2\n \n@@ -33319,15 +33319,15 @@\n then set the Z minimum to 5 mm (0.2\u201d) plus an allowance for overrun (either calculated using the\n equation below or allow 5 mm (0.2\u201d) below the lowest slat).\n \u2022 [AXIS_Z] MAX_LIMIT should be the highest the user wants the Z axis to travel (it must not be\n lower than Z HOME_OFFSET).\n \u2022 [AXIS_Z] HOME should be set to be approximately 5 mm-10 mm (0.2\u201d-0.4\u201d) below the maximum\n limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 725 / 1290\n \n \u2022 Floating Head - it is recommended that a floating head be used and that it has enough movement\n to allow for overrun during probing. Overrun can be calculated using the following formula:\n o = 0.5 * a * (v / a)^2\n \n@@ -33359,48 +33359,48 @@\n Fill in the required entries to suit the machine wiring/breakout board configuration.\n QtPlasmaC adds two pages to the LinuxCNC configuration wizards for QtPlasmaC specific parameters,\n the two pages are QtPlasmaC options and User Buttons. Complete each of the wizards QtPlasmaC\n page to suit the machine that is being configured and the user button requirements.\n Note that PnCconf options allow user selection of Feed Override, Linear Velocity, and Jog Increments,\n whereas in StepConf these are automatically calculated and set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.43: PnCConf QtPlasmaC Options\n \n 726 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.44: StepConf QtPlasmaC Options\n \n 727 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.45: QtPlasmaC User Buttons\n \n 728 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 729 / 1290\n \n Figure 10.46: QtPlasmaC THCAD\n The THCAD screen will only appear if a Plasma Encoder is selected in the card screen. The the\n dedicated section on Mesa THCAD for more information.\n When the configuration is complete, the wizard will save a copy of the configuration that may be\n loaded and edited at a later time, a working QtPlasmaC configuration will be created in the following\n directory: ~/linuxcnc/configs/.\n The way the newly created QtPlasmaC configuration can be run from the terminal command line\n slightly differs depending the way LinuxCNC was installed:\n For a package installation (Buildbot):\n linuxcnc ~/linuxcnc/configs/__/__.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 730 / 1290\n \n For a run in place installation:\n ~/linuxcnc-dev/scripts/linuxcnc ~/linuxcnc/configs/__/__.ini\n \n After running the above command LinuxCNC should be running with the QtPlasmaC GUI visible.\n@@ -33422,25 +33422,25 @@\n For a run in place installation enter the following command in a terminal window:\n ~/linuxcnc-dev/lib/python/qtvcp/designer/install_script\n \n 10.8.5.6 Initial Setup\n The following heights diagram will help the user visualize the different heights involved in plasma\n cutting and how they are measured:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 731 / 1290\n \n Click on the Parameters Tab to view the CONFIGURATION section which shows the user settable\n parameters. It is necessary to ensure every one of these settings is tailored to the machine.\n To set the Z axis DRO relative to the Z axis MINIMUM_LIMIT, the user should perform the following\n steps. It is important to understand that in QtPlasmaC, touching off the Z axis DRO has no effect on\n the Z axis position while running a G-code program. These steps simply allow the user to more easily\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 732 / 1290\n \n set the probe height as after performing the steps, the displayed Z axis DRO value will be relative to\n Z axis MINIMUM_LIMIT.\n Note\n The user should be familiar with the recommended Z Axis Settings.\n@@ -33476,15 +33476,15 @@\n 9. If the table has a laser or camera for sheet alignment, a scribe, or uses offset probing then the\n required offsets need to be applied by following the procedure described in Peripheral Offsets.\n 10. CONGRATULATIONS! The user should now have a working QtPlasmaC Configuration.\n Note\n If the amount of time between the torch contacting the material and when the torch moves up and\n comes to rest at the Pierce Height seems excessive, see the probing section for a possible solution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 733 / 1290\n \n Important\n IF USING A Mesa Electronics THCAD THEN THE Voltage Scale VALUE WAS OBTAINED MATHEMATICALLY. IF THE USER INTENDS TO USE CUT VOLTAGES FROM A MANUFACTURE\u2019S CUT\n CHART THEN IT WOULD BE ADVISABLE TO DO MEASUREMENTS OF ACTUAL VOLTAGES AND\n FINE TUNE THE Voltage Scale AND Voltage Offset.\n@@ -33511,15 +33511,15 @@\n \n For a run in place installation enter the following lines in terminal window:\n source ~/linuxcnc-dev/scripts/rip-environment\n qtplasmac-plasmac2qt\n \n The following screen will be displayed:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 734 / 1290\n \n Table 10.6: Mandatory Settings\n Field\n INI FILE IN\n EXISTING\n@@ -33547,15 +33547,15 @@\n 2 - Estop is a button.\n \n ESTOP:1\n \n Optional Setting - This setting is not required unless the machine has a laser for sheet\n alignment. Leave this blank if it is not used/required. Leave this blank if it is not used/required.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Field\n Laser On HAL Pin\n \n Description\n Power on a laser crosshair for sheet\n alignment.\n@@ -33598,15 +33598,15 @@\n For a package installation (Buildbot) enter the following line in a terminal window:\n qtplasmac-cfg2prefs\n \n For a run in place installation enter the following lines in terminal window:\n source ~/linuxcnc-dev/scripts/rip-environment\n qtplasmac-cfg2prefs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 736 / 1290\n \n Figure 10.47: qtplasmac-cfg2prefs\n Select the INI file of the old PlasmaC configuration, select the INI file of the new QtPlasmaC configuration, then press CONVERT.\n \n 10.8.7 Other QtPlasmaC Setup Considerations\n@@ -33620,15 +33620,15 @@\n file in the machine\u2019s configuration directory to add the appropriate cutoff frequency as measured in\n Hertz (Hz).\n For example:\n setp plasmac.lowpass-frequency 100\n \n The above example would give a cutoff frequency of 100Hz.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 737 / 1290\n \n 10.8.7.2 Contact Bounce\n Contact bounce from mechanical relays, switches, or external interference may cause some inconsistent behavior of the following switches:\n \u2022 Float Switch\n \u2022 Ohmic Probe\n@@ -33665,15 +33665,15 @@\n Depending on the specified minimum contact current and the current drawn by the input device there\n may be a need to provide a method to increase the current through the contacts.\n Most relays using gold contacts will not require any additional current for reliable operation.\n There are two different methods available to provide this minimum current if it is required:\n 1. A 0.1 \u03bcF film capacitor placed across the contacts.\n 2. A 1200 \u03a9 1 W resistor across the load (see calculations below).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 738 / 1290\n \n Schematics are shown at contact load schematics.\n More information on contact switching load can be seen on page VI of the finder General Technical\n Information document.\n Calculations:\n@@ -33710,15 +33710,15 @@\n Terminal=false\n Name=LinuxCNC\n Exec=sh -c \u201dlinuxcnc $HOME/linuxcnc/configs//.ini\u201d\n Type=Application\n Icon=/usr/share/pixmaps/linuxcncicon.png\n 2 In the US, the letter V is commonly used as a symbol (Voltage) and as a unit (Volt).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 739 / 1290\n \n If the user would like a terminal window to open behind the GUI window then change the Terminal\n line to:\n Terminal=true\n \n@@ -33771,15 +33771,15 @@\n Note\n The configuration files (.ini and .hal) that are created by configuration wizard are notated to explain the requirements to aid in manual manipulation of these\n configurations. They may be edited with any text editor.\n \n Note\n The .prefs file is plain text and may be edited with any text editor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 740 / 1290\n \n 10.8.7.6 INI File\n QtPlasmaC has some specific .ini file variables as follows:\n [FILTER] Section These variables are mandatory.\n PROGRAM_EXTENSION = .ngc,.nc,.tap G-code File (*.ngc, *.nc, *.tap)\n@@ -33828,15 +33828,15 @@\n [DISPLAY] Section\n This variable is mandatory.\n DISPLAY = qtvcp qtplasmac\n (use 16:9 resolution)\n = qtvcp qtplasmac_9x16 (use 9:16 resolution)\n = qtvcp qtplasmac_4x3 (use 4:3 resolution)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 741 / 1290\n \n There are multiple QtVCP options that are described here: QtVCP INI Settings\n For example the following would start a 16:9 resolution QtPlasmaC screen in full screen mode:\n DISPLAY = qtvcp -f qtplasmac\n \n@@ -33877,15 +33877,15 @@\n 10.8.8.1 Exiting QtPlasmaC\n Exiting or shutting down QtPlasmaC is done by either:\n 1. Click the window shutdown button on the window title bar\n 2. Long press the POWER button on the MAIN Tab.\n A shutdown warning can be displayed on every shutdown by checking the Exit Warning checkbox on\n the SETTINGS Tab.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 742 / 1290\n \n 10.8.8.2 MAIN Tab\n Screenshot example of the QtPlasmaC MAIN Tab in 16:9 aspect ratio:\n \n Some functions/features are only used for particular modes and are not displayed if they are not\n@@ -33902,15 +33902,15 @@\n used to manually select the current material cut parameters. If there are\n no materials in the material file then only the default material will be\n displayed.\n This displays the actual cut feed rate the table is moving at.\n If \u201dView Material\u201d is selected on the SETTINGS Tab, this displays the\n currently selected material\u2019s Feed Rate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 743 / 1290\n \n Table 10.7: (continued)\n Name\n PH:\n PD:\n@@ -33983,15 +33983,15 @@\n - G-code Programs\n - Torch pulse if the pulse was started during CYCLE PAUSE (this will\n cancel the paused G-code program execution as well)\n - Probe Test\n - Framing\n - Manual Cut\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 744 / 1290\n \n Table 10.8: (continued)\n Name\n FEED\n \n@@ -34068,15 +34068,15 @@\n the THC Threshold voltage (The distance changed will be\n Height Per Volt * THC Threshold voltage).\n Each press of this button will lower the target voltage by\n the THC Threshold voltage (The distance changed will be\n Height Per Volt * THC Threshold voltage).\n Clicking this label will return any voltage override to 0.00.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 745 / 1290\n \n Table 10.10: CONTROL\n Name\n TORCH ON\n TORCH ON ENABLE\n@@ -34168,15 +34168,15 @@\n LED will still show the status of the probe input, but the\n Ohmic Probe results will be ignored.\n This box will enable or disable the communications to a\n PowerMax. This button is only visible if a PM_PORT\n option is configured in the [POWERMAX] section of the\n .prefs file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 746 / 1290\n \n Table 10.10: (continued)\n Name\n Status\n \n@@ -34244,15 +34244,15 @@\n This button moves the Z axis in the negative direction.\n \n Note\n During Paused Motion, this section will be shown on top of the JOGGING panel. The following section\n will cover each button encountered in this panel. Please see CUT RECOVERY for a detailed description\n of the cut recovery functionality.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Name\n PAUSED MOTION\n FEED SLIDER\n \n FEED\n REV\n@@ -34332,15 +34332,15 @@\n This drop down button will display the following options:\n Zero - zeros the axis.\n Set - launches a dialog box to manually input the axis\u2019 coordinate.\n Divide By 2 - divides the currently displayed coordinate in the DRO by\n two.\n Set To Last - sets the axis to the previously set coordinate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 748 / 1290\n \n 10.8.8.3 Preview Views\n The QtPlasmaC preview screen has the ability to be switched between different views and displays,\n as well as zooming in and out, and panning horizontally and vertically.\n When QtPlasmaC is first started, the Z (top down) view will be selected as the default view for a loaded\n@@ -34353,30 +34353,30 @@\n orientation, then pressing either Z or P will change the display to the newly selected view. If the user\n then wishes to display the full table while maintaining the currently selected view as the default view\n for a loaded G-code file, then pressing CLEAR will achieve this and allow the selected view orientation\n to prevail the next time a G-code file is loaded.\n 10.8.8.4 CONVERSATIONAL Tab\n Screenshot example of the QtPlasmaC CONVERSATIONAL Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 749 / 1290\n \n The CONVERSATIONAL Tab enables the user to quickly program various simple shapes for quick\n cutting without the need for CAM software.\n See Conversational Shape Library for detailed information on the Conversational feature.\n It is possible to hide this tab so the conversational feature cannot be used by an operator. This may\n be achieved either by wiring the pin to a physical key-switch or similar or it may also be set in a HAL\n file using the following command:\n setp qtplasmac.conv_disable 1\n \n 10.8.8.5 PARAMETERS Tab\n Screenshot example of the QtPlasmaC PARAMETERS Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 750 / 1290\n \n Some functions/features are only used for particular modes and are not displayed if they are not\n required by the chosen QtPlasmaC mode.\n This tab is used to display configuration parameters that are modified infrequently.\n It is possible to hide this tab so machine settings cannot be modified by unauthorized personnel. This\n@@ -34398,15 +34398,15 @@\n Description\n This sets the amount of time (in seconds) QtPlasmaC will wait\n between commanding a \u201dTorch On\u201d and receiving an Arc OK\n signal before timing out and displaying an error message.\n This sets the number of times QtPlasmaC will attempt to start\n the arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 751 / 1290\n \n Table 10.15: (continued)\n Name\n Retry Delay\n \n@@ -34483,15 +34483,15 @@\n This sets the distance threshold used to determine if an Initial Height\n Sense (probe) can be skipped for the current cut, see IHS Skip.\n \n Note\n If the amount of time between the torch contacting the material and when the torch moves up and\n comes to rest at the Pierce Height seems excessive, see the probing section for a possible solution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 752 / 1290\n \n Table 10.17: CONFIGURATION - SAFETY\n Name\n Safe Height\n \n@@ -34542,15 +34542,15 @@\n \n CONFIGURATION - THC Two methods of THC activation are available and are selected with the\n Auto Activation checkbutton. Both methods begin their calculations when the current velocity of\n the torch matches the cut feed rate specified for the selected material:\n 1. Delay Activation (the default) is selected when Auto Activation is unchecked. This method uses\n a time delay set with the Delay parameter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 753 / 1290\n \n 2. Auto Activation is selected when Auto Activation is checked. This method determines that the\n arc voltage is stable by using the Sample Counts and Sample Threshold parameters.\n Name\n Delay\n@@ -34637,15 +34637,15 @@\n Description\n The top drop down menu is used to manually select the current material\n cut parameters. If there are no materials in the material file then only the\n default material will be displayed.\n This sets the kerf width for the currently selected material. Refer to the\n Heights Diagram diagram for a visual representation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 754 / 1290\n \n Table 10.21: (continued)\n Name\n Pierce Height\n Pierce Delay\n@@ -34707,15 +34707,15 @@\n The Cut Parameters for the new material will then need to be adjusted and saved.\n The DELETE this button is used to delete a material. After pressing it, the user will be prompted for\n a material number to be deleted, and prompted again to ensure the user is sure. After deletion, the\n material file will be reloaded and the drop down list will display the default material.\n 10.8.8.6 SETTINGS Tab\n Screenshot example of the QtPlasmaC SETTINGS Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 755 / 1290\n \n This tab is used to display GUI configuration parameters, button text, and shutdown text that are\n modified infrequently as well as some utility buttons.\n It is possible to hide this tab so machine settings cannot be modified by unauthorized personnel. This\n may be achieved either by wiring the pin to a physical key-switch or similar or it may also be set in a\n@@ -34731,15 +34731,15 @@\n Foreground\n Highlight\n \n Description\n This button allows the user to change the color of the GUI Foreground.\n This button allows the user to change the color of the GUI Highlight.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 756 / 1290\n \n Table 10.22: (continued)\n Name\n LED\n Background\n@@ -34817,15 +34817,15 @@\n current tool) in the Preview Window on the MAIN Tab.\n This allows a user to change the default zoom level for the top down full\n table view in the Preview Window on the MAIN Tab.\n \n USER BUTTON ENTRIES USERBUTTON\n This section shows the text that appears on the Custom User Buttons as well as the code associated\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 757 / 1290\n \n with the user button. User buttons may be changed and the new settings used without restarting\n LinuxCNC.\n The text and/or code may be edited at any time and will be loaded ready for use if the SAVE button is\n clicked.\n@@ -34863,15 +34863,15 @@\n is the machine name entered in the configuration wizard, is the current\n QtPlasmaC version the user is on, is the current date (YY-MM-DD), and

refer to\n the same parameter. Named parameters must be enclosed with < > marks.\n@@ -39342,15 +39342,15 @@\n \u2022 #<_motion_mode> - Return the interpreter\u2019s current motion mode:\n Motion return\n mode\n value\n G1\n 10\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 861 / 1290\n \n Motion return\n mode\n value\n G2\n@@ -39432,15 +39432,15 @@\n \u2022 #<_metric> - Return 1 if G21 is on, else 0.\n \u2022 #<_imperial> - Return 1 if G20 is on, else 0.\n \u2022 #<_absolute> - Return 1 if G90 is on, else 0.\n \u2022 #<_incremental> - Return 1 if G91 is on, else 0.\n \u2022 #<_inverse_time> - Return 1 if inverse feed mode (G93) is on, else 0.\n \u2022 #<_units_per_minute> - Return 1 if Units/minute feed mode (G94) is on, else 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 862 / 1290\n \n \u2022 #<_units_per_rev> - Return 1 if Units/revolution mode (G95) is on, else 0.\n \u2022 #<_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\n value is 591.000000.\n Mode\n@@ -39486,15 +39486,15 @@\n \u2022 #<_adaptive_feed> - Return 1 if adaptive feed (M52 or M52 P1) is on, else 0.\n \u2022 #<_feed_hold> - Return 1 if feed hold switch is enabled (M53 P1), else 0.\n \u2022 #<_feed> - Return the current value of F, not the actual feed rate.\n \u2022 #<_rpm> - Return the current value of S, not the actual spindle speed.\n \u2022 #<_x> - Return current relative X coordinate including all offsets. Same as #5420. In a lathe\n configuration, it always returns radius.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 863 / 1290\n \n \u2022 #<_y> - Return current relative Y coordinate including all offsets. Same as #5421.\n \u2022 #<_z> - Return current relative Z coordinate including all offsets. Same as #5422.\n \u2022 #<_a> - Return current relative A coordinate including all offsets. Same as #5423.\n \u2022 #<_b> - Return current relative B coordinate including all offsets. Same as #5424.\n@@ -39529,15 +39529,15 @@\n If enabled in the INI file G-code has access to the values of INI file entries and HAL pins.\n \u2022 #<_ini[section]name> Returns the value of the corresponding item in the INI file.\n For example, if the INI file looks like so:\n [SETUP]\n XPOS = 3.145\n YPOS = 2.718\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 864 / 1290\n \n you may refer to the named parameters #<_ini[setup]xpos> and #<_ini[setup]ypos> within Gcode.\n EXISTS can be used to test for presence of a given INI file variable:\n o100 if [EXISTS[#<_ini[setup]xpos>]]\n (debug, [setup]xpos exists: #<_ini[setup]xpos>)\n@@ -39580,15 +39580,15 @@\n Binary operators only appear inside expressions. There are four basic mathematical operations: addition (+), subtraction (-), multiplication (*), and division (/). There are three logical operations:\n non-exclusive or (OR), exclusive or (XOR), and logical and (AND). The eighth operation is the modulus\n operation (MOD). The ninth operation is the power operation (**) of raising the number on the left of\n the operation to the power on the right. The relational operators are equality (EQ), inequality (NE),\n strictly greater than (GT), greater than or equal to (GE), strictly less than (LT), and less than or equal\n to (LE).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 865 / 1290\n \n The binary operations are divided into several groups according to their precedence. If operations\n in different precedence groups are strung together (for example in the expression [2.0 / 3 * 1.5 - 5.5\n / 11.0]), operations in a higher group are to be performed before operations in a lower group. If an\n expression contains more than one operation from the same group (such as the first / and * in the\n@@ -39645,15 +39645,15 @@\n Round to nearest integer\n Base-e logarithm\n Sine\n Square Root\n Tangent\n Check named Parameter\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 866 / 1290\n \n The FIX function rounds towards the left (less positive or more negative) on a number line, so that\n FIX[2.8] =2 and FIX[-2.8] = -3.\n The FUP operation rounds towards the right (more positive or less negative) on a number line;\n FUP[2.8] = 3 and FUP[-2.8] = -2.\n@@ -39698,15 +39698,15 @@\n If the third group (the comments) contains more than one comment and is reordered, only the last\n comment will be used.\n If each group is kept in order or reordered without changing the meaning of the line, then the three\n groups may be interleaved in any way without changing the meaning of the line. For example, the\n line g40 g1 #3=15 (foo) #4=-7.0 has five items and means exactly the same thing in any of the 120\n possible orders (such as #4=-7.0 g1 #3=15 g40 (foo)) for the five items.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 867 / 1290\n \n 11.4.11 Commands and Machine Modes\n Many commands cause the controller to change from one mode to another, and the mode stays active\n until some other command changes it implicitly or explicitly. Such commands are called modal. For\n example, if coolant is turned on, it stays on until it is explicitly turned off. The G-codes for motion are\n@@ -39733,15 +39733,15 @@\n @.5 ^90\n @.5 ^90\n G90 G0 X0 Y0 M2\n \n You can see from the following figure that the output is not what you might expect. Because we added\n 0.5 to the distance each time the distance from the XY zero position increased with each line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 868 / 1290\n \n Figure 11.10: Polar Spiral\n The following code will produce our square pattern:\n F100 G1 @.5 ^90\n G91 ^90\n@@ -39749,15 +39749,15 @@\n ^90\n ^90\n G90 G0 X0 Y0 M2\n \n As you can see by only adding to the angle by 90 degrees each time the end point distance is the same\n for each line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 869 / 1290\n \n Figure 11.11: Polar Square\n It is an error if:\n \u2022 An incremental move is started at the origin\n \u2022 A mix of Polar and X or Y words are used\n@@ -39781,15 +39781,15 @@\n G92.2, G92.3,\n G0, G1, G2, G3, G33, G38.n, G73, G76, G80,\n G81\n G82, G83, G84, G85, G86, G87, G88, G89\n G17, G18, G19, G17.1, G18.1, G19.1\n G90, G91\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 870 / 1290\n \n Table 11.7: (continued)\n Modal Group Meaning\n Arc IJK Distance Mode\n (Group 4)\n@@ -39854,15 +39854,15 @@\n \n 11.4.14 Comments\n Comments are purely informative and have no influence on machine behaviour.\n Comments can be added to lines of G-code to help clear up the intention of the programmer. Comments\n can be embedded in a line using parentheses () or for the remainder of a line using a semi-colon. The\n semi-colon is not treated as the start of a comment when enclosed in parentheses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 871 / 1290\n \n Comments may appear between words, but not between words and their corresponding parameter.\n So, S100(set speed)F200(feed) is OK while S(speed)100F(feed) is not.\n Here is an example of a commented program:\n G0 (Rapid to start) X1 Y1\n@@ -39897,15 +39897,15 @@\n \u2022 (LOGAPPEND,filename) - opens the named log file. If the file already exists, the data is appended.\n \u2022 (LOGCLOSE) - closes an open log file.\n \u2022 (LOG,) - everything past the , is written to the log file if it is open. Supports expansion of parameters\n as described below.\n Examples of logging are in nc_files/examples/smartprobe.ngc and in nc_files/ngcgui_lib/rectange_probe.ngc\n sample G-code files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 872 / 1290\n \n 11.4.18 Debug Messages\n \u2022 (DEBUG,) - displays a message like (MSG,) with the addition of special handling for comment parameters as described below.\n \n 11.4.19 Print Messages\n@@ -39939,15 +39939,15 @@\n 11.4.21 File Requirements\n A G-code file must contain one or more lines of G-code and be terminated with a Program End. Any\n G-code past the program end is not evaluated.\n If a program end code is not used a pair of percent signs % with the first percent sign on the first\n line of the file followed by one or more lines of G-code and a second percent sign. Any code past the\n second percent sign is not evaluated.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 873 / 1290\n \n Warning\n Using % to wrap a G-code file will not do the same thing as using a program end. The machine\n will be in what ever state the program left it in using %, the spindle and coolant may still be on\n and things like G90/91 are left as the last program set them. If you don\u2019t use a proper preamble\n@@ -39982,15 +39982,15 @@\n \u2022 Enable or disable overrides (M48, M49,M50,M51,M52,M53).\n \u2022 User-defined Commands (M100-M199).\n \u2022 Dwell (G4).\n \u2022 Set active plane (G17, G18, G19).\n \u2022 Set length units (G20, G21).\n \u2022 Cutter radius compensation on or off (G40, G41, G42)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 874 / 1290\n \n \u2022 Cutter length compensation on or off (G43, G49)\n \u2022 Coordinate system selection (G54, G55, G56, G57, G58, G59, G59.1, G59.2, G59.3).\n \u2022 Set path control mode (G61, G61.1, G64)\n \u2022 Set distance mode (G90, G91).\n@@ -40026,15 +40026,15 @@\n Don\u2019t use line numbers Line numbers offer no benefits. When line numbers are reported in error\n messages, the numbers refer to the line number in the file, not the N-word value.\n When several coordinate systems are moved Consider using the inverse time speed mode.\n Because the meaning of an F word in meters per minute varies depending on the type of axis to be\n moved and because the amount of removed material does not depend only on the feed rate, it can be\n simpler to use G93, inverse speed of time, to achieve the removal of desired material.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 875 / 1290\n \n 11.4.25 Linear and Rotary Axis\n Because the meaning of an F-word in feed-per-minute mode varies depending on which axes are commanded to move, and because the amount of material removed does not depend only on the feed rate,\n it may be easier to use G93 inverse time feed mode to achieve the desired material removal rate.\n \n@@ -40068,15 +40068,15 @@\n Any items in the G-code prototypes not explicitly described as optional are required.\n The values following letters are often given as explicit numbers. Unless stated otherwise, the explicit\n numbers can be real values. For example, G10 L2 could equally well be written G[2*5] L[1+1]. If the\n value of parameter 100 were 2, G10 L#100 would also mean the same.\n If L- is written in a prototype the - will often be referred to as the L number, and so on for any other\n letter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 876 / 1290\n \n 11.5.2 G-Code Quick Reference Table\n Code\n G0\n G1\n@@ -40182,15 +40182,15 @@\n Back-boring Cycle (not yet implemented)\n Boring Cycle, Stop, Manual Out (not yet\n implemented)\n Boring Cycle, Dwell, Feed Out\n Distance Mode\n Arc Distance Mode\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Code\n G92\n G92.1 G92.2\n G92.3\n G93 G94 G95\n G96 G97\n@@ -40238,15 +40238,15 @@\n G1 axes\n \n For linear (straight line) motion at programmed feed rate (for cutting or not), program G1 \u2019axes\u2019,\n where all the axis words are optional. The G1 is optional if the current motion mode is G1. This will\n produce coordinated motion to the destination point at the current feed rate (or slower).\n G1 Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 878 / 1290\n \n G90 (set absolute distance mode)\n G1 X1.2 Y-3 F10 (linear move at a feed rate of 10 from current position to X1.2 Y-3)\n Z-2.3 (linear move at same feed rate from current position to Z-2.3)\n Z1 F25 (linear move at a feed rate of 25 from current position to Z1)\n@@ -40287,15 +40287,15 @@\n If the pitch of the helix is very small (less than the naive CAM tolerance) then the helix might\n be converted into a straight line. Bug #222\n \n If a line of code makes an arc and includes rotary axis motion, the rotary axes turn at a constant rate\n so that the rotary motion starts and finishes when the XYZ motion starts and finishes. Lines of this\n sort are hardly ever programmed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 879 / 1290\n \n If cutter compensation is active, the motion will differ from the above; see the Cutter Compensation\n section.\n The arc center is absolute or relative as set by G90.1 or G91.1 respectively.\n Two formats are allowed for specifying an arc: Center Format and Radius Format.\n@@ -40330,15 +40330,15 @@\n \u2022 Z - helix\n \u2022 I - X offset\n \u2022 J - Y offset\n \u2022 P - number of turns\n XZ-plane (G18)\n G2 or G3 \n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 880 / 1290\n \n \u2022 Y - helix\n \u2022 I - X offset\n \u2022 K - Z offset\n \u2022 P - number of turns\n@@ -40370,28 +40370,28 @@\n In the following figure you can see the start position is X0 Y0, the end position is X1 Y1. The arc center\n position is at X1 Y0. This gives us an offset from the start position of 1 in the X axis and 0 in the Y\n axis. In this case only an I offset is needed.\n G2 Example Line\n G0 X0 Y0\n G2 X1 Y1 I1 F10 (clockwise arc in the XY plane)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 881 / 1290\n \n Figure 11.12: G2 Example\n In the next example we see the difference between the offsets for Y if we are doing a G2 or a G3 move.\n For the G2 move the start position is X0 Y0, for the G3 move it is X0 Y1. The arc center is at X1 Y0.5\n for both moves. The G2 move the J offset is 0.5 and the G3 move the J offset is -0.5.\n G2-G3 Example Line\n G0 X0 Y0\n G2 X0 Y1 I1 J0.5 F25 (clockwise arc in the XY plane)\n G3 X0 Y0 I1 J-0.5 F25 (counterclockwise arc in the XY plane)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 882 / 1290\n \n Figure 11.13: G2-G3 Example\n In the next example we show how the arc can make a helix in the Z axis by adding the Z word.\n G2 Example Helix\n G0 X0 Y0 Z0\n@@ -40410,15 +40410,15 @@\n \u2022 R - radius from current position\n It is not good practice to program radius format arcs that are nearly full circles or nearly semicircles\n because a small change in the location of the end point will produce a much larger change in the\n location of the center of the circle (and, hence, the middle of the arc). The magnification effect is\n large enough that rounding error in a number can produce out-of-tolerance cuts. For instance, a 1%\n displacement of the endpoint of a 180 degree arc produced a 7% displacement of the point 90 degrees\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 883 / 1290\n \n along the arc. Nearly full circles are even worse. Other size arcs (in the range tiny to 165 degrees or\n 195 to 345 degrees) are OK.\n In the radius format, the coordinates of the end point of the arc in the selected plane are specified\n along with the radius of the arc. Program G2 axes R- (or use G3 instead of G2 ). R is the radius. The\n@@ -40453,15 +40453,15 @@\n G5 X- Y- P- Q-\n \n \u2022 I - X incremental offset from start point to first control point\n \u2022 J - Y incremental offset from start point to first control point\n \u2022 P - X incremental offset from end point to second control point\n \u2022 Q - Y incremental offset from end point to second control point\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 884 / 1290\n \n G5 creates a cubic B-spline in the XY plane with the X and Y axes only. P and Q must both be specified\n for every G5 command.\n For the first G5 command in a series of G5 commands, I and J must both be specified. For subsequent\n G5 commands, either both I and J must be specified, or neither. If I and J are unspecified, the starting\n@@ -40498,15 +40498,15 @@\n G5.1 X2 I2 J-8\n \n It is an error if:\n \u2022 both I and J offset are unspecified or zero\n \u2022 An axis other than X or Y is specified\n \u2022 The active plane is not G17\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 885 / 1290\n \n 11.5.9 G5.2 G5.3 NURBS Block\n G5.2 \n X- Y- \n ...\n@@ -40533,15 +40533,15 @@\n ; The rapid moves show the same path without the NURBS Block\n G0 X0 Y1\n X2 Y2\n X2 Y0\n X0 Y0\n M2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 886 / 1290\n \n Sample NURBS Output\n More information on NURBS can be found here:\n https://wiki.linuxcnc.org/cgi-bin/wiki.pl?NURBS\n \n@@ -40551,15 +40551,15 @@\n Program G7 to enter the diameter mode for axis X on a lathe. When in the diameter mode the X axis\n moves on a lathe will be 1/2 the distance to the center of the lathe. For example X1 would move the\n cutter to 0.500\u201d from the center of the lathe thus giving a 1\u201d diameter part.\n \n 11.5.11 G8 Lathe Radius Mode\n G8\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 887 / 1290\n \n Program G8 to enter the radius mode for axis X on a lathe. When in Radius mode the X axis moves\n on a lathe will be the distance from the center. Thus a cut at X1 would result in a part that is 2\u201d in\n diameter. G8 is default at power up.\n \n@@ -40589,15 +40589,15 @@\n It is an error if:\n \u2022 Cutter Compensation is on\n \u2022 The P number is unspecified\n \u2022 The P number is not a valid tool number from the tool table\n \u2022 The P number is 0\n For more information on cutter orientation used by the Q word, see the Lathe Tool Orientation diagram.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 888 / 1290\n \n 11.5.14 G10 L2 Set Coordinate System\n G10 L2 P- \n \n \u2022 P - coordinate system (0-9)\n@@ -40657,15 +40657,15 @@\n afterwards.\n \u2022 When programming a coordinate system with R, any G52 or G92 will be applied after the rotation.\n \u2022 The coordinate system whose origin is set by a G10 command may be active or inactive at the time\n the G10 is executed. If it is currently active, the new coordinates take effect immediately.\n It is an error if:\n \u2022 The P number does not evaluate to an integer in the range 0 to 9.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 889 / 1290\n \n \u2022 An axis is programmed that is not defined in the configuration.\n G10 L2 Example Line\n G10 L2 P1 X3.5 Y17.2\n \n@@ -40699,15 +40699,15 @@\n \u2022 See T & M6, and G43/G43.1 sections for more information.\n It is an error if:\n \u2022 Cutter Compensation is on\n \u2022 The P number is unspecified\n \u2022 The P number is not a valid tool number from the tool table\n \u2022 The P number is 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 890 / 1290\n \n 11.5.16 G10 L11 Set Tool Table\n G10 L11 P- axes \n \n \u2022 P - tool number\n@@ -40735,15 +40735,15 @@\n G10 L20 Example Line\n G10 L20 P1 X1.5 (set the X axis current location in coordinate system 1 to 1.5)\n \n It is an error if:\n \u2022 The P number does not evaluate to an integer in the range 0 to 9.\n \u2022 An axis is programmed that is not defined in the configuration.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 891 / 1290\n \n 11.5.18 G17 - G19.1 Plane Select\n These codes set the current plane as follows:\n \u2022 G17 - XY (default)\n \u2022 G18 - ZX\n@@ -40777,15 +40777,15 @@\n \u2022 G28.1 - stores the current absolute position into parameters 5161-5166.\n G28 Example Line\n G28 Z2.5 (rapid to Z2.5 then to Z location specified in #5163)\n \n It is an error if :\n \u2022 Cutter Compensation is turned on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 892 / 1290\n \n 11.5.21 G30, G30.1 Go/Set Predefined Position\n \n Warning\n Only use G30 when your machine is homed to a repeatable position and the desired G30\n@@ -40822,15 +40822,15 @@\n The (optional) $ argument sets which spindle the motion is synchronised to (default is zero). For\n example G33 Z10 K1 $1 will move the spindle in synchrony with the spindle.N.revs HAL pin value.\n Spindle-synchronized motion waits for the spindle index and spindle at speed pins, so multiple passes\n line up. G33 moves end at the programmed endpoint. G33 could be used to cut tapered threads or a\n fusee.\n All the axis words are optional, except that at least one must be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 893 / 1290\n \n Note\n K follows the drive line described by X- Y- Z-. K is not parallel to the Z axis if X or Y endpoints are\n used for example when cutting tapered threads.\n \n@@ -40867,15 +40867,15 @@\n \u2022 $ - optional spindle selector\n Warning\n For Z only tapping preposition the XY location prior to calling G33.1 and only use a Z word in\n the G33.1. If the coordinates specified are not the current coordinates when calling G33.1 for\n tapping the move will not be along the Z axis but will be a coordinated, spindle-synchronized\n move from the current location to the location specified and back.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 894 / 1290\n \n For rigid tapping (spindle synchronized motion with return), code G33.1 X- Y- Z- K- where K- gives the\n distance moved for each revolution of the spindle.\n A rigid tapping move consists of the following sequence:\n \u2022 A move from the current coordinate to the specified coordinate, synchronized with the selected\n@@ -40910,15 +40910,15 @@\n G38.n axes\n \n \u2022 G38.2 - probe toward workpiece, stop on contact, signal error if failure\n \u2022 G38.3 - probe toward workpiece, stop on contact\n \u2022 G38.4 - probe away from workpiece, stop on loss of contact, signal error if failure\n \u2022 G38.5 - probe away from workpiece, stop on loss of contact\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 895 / 1290\n \n Important\n You will not be able to use a probe move until your machine has been set up to provide a probe\n input signal. The probe input signal must be connected to motion.probe-input in a .hal file.\n G38.n uses motion.probe-input to determine when the probe has made (or lost) contact. TRUE\n@@ -40974,15 +40974,15 @@\n It is an error if:\n \u2022 the current point is the same as the programmed point.\n \u2022 no axis word is used\n \u2022 cutter compensation is enabled\n \u2022 the feed rate is zero\n \u2022 the probe is already in the target state\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 896 / 1290\n \n 11.5.25 G40 Compensation Off\n \u2022 G40 - turn cutter compensation off. If tool compensation was on the next move must be a linear\n move and longer than the tool diameter. It is OK to turn compensation off when it is already off.\n G40 Example\n@@ -41021,15 +41021,15 @@\n The lead in move must be at least as long as the tool radius. The lead in move can be a rapid move.\n Cutter compensation may be performed if the XY-plane or XZ-plane is active.\n User M100-M199 commands are allowed when Cutter Compensation is on.\n The behavior of the machining center when cutter compensation is on is described in the Cutter\n Compensation section along with code examples.\n It is an error if:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 897 / 1290\n \n \u2022 The D number is not a valid tool number or 0.\n \u2022 The YZ plane is active.\n \u2022 Cutter compensation is commanded to turn on when it is already on.\n \n@@ -41067,15 +41067,15 @@\n \n It is an error if:\n \u2022 the H number is not an integer, or\n \u2022 the H number is negative, or\n \u2022 the H number is not a valid tool number (though note that 0 is a valid tool number on nonrandom\n tool changer machines, it means \u201dthe tool currently in the spindle\u201d)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 898 / 1290\n \n 11.5.29 G43.1 Dynamic Tool Length Offset\n G43.1 axes\n \n \u2022 G43.1 axes - change subsequent motions by replacing the current offset(s) of axes. G43.1 does\n@@ -41112,15 +41112,15 @@\n It is an error if:\n \u2022 H is unspecified and no axis offsets are specified.\n \u2022 H is specified and the given tool number does not exist in the tool table.\n \u2022 H is specified and axes are also specified.\n Note\n G43.2 does not write to the tool table.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 899 / 1290\n \n 11.5.31 G49 Cancel Tool Length Compensation\n \u2022 G49 - cancels tool length compensation\n It is OK to program using the same offset already in use. It is also OK to program using no tool length\n offset if none is currently being used.\n@@ -41155,15 +41155,15 @@\n \u2022 G57 - select coordinate system 4\n \u2022 G58 - select coordinate system 5\n \u2022 G59 - select coordinate system 6\n \u2022 G59.1 - select coordinate system 7\n \u2022 G59.2 - select coordinate system 8\n \u2022 G59.3 - select coordinate system 9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 900 / 1290\n \n The coordinate systems store the axis values and the XY rotation angle around the Z axis in the parameters shown in the following table.\n Table 11.11: Coordinate System Parameters\n Select CS\n G54\n@@ -41313,15 +41313,15 @@\n away from the programmed point you end up.\n \u2022 G64 P- - Blend between best speed and deviation tolerance\n \u2022 G64 P- blending with tolerance. It is a way to fine tune your system for best compromise\n between speed and accuracy. The P- tolerance means that the actual path will be no more than Paway from the programmed endpoint. The velocity will be reduced if needed to maintain the path.\n If you set Q to a non-zero value it turns on the Naive CAM Detector: when there are a series of\n linear XYZ feed moves at the same feed rate that are less than Q- away from being collinear, they\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 901 / 1290\n \n are collapsed into a single linear move. On G2/G3 moves in the G17 (XY) plane when the maximum\n deviation of an arc from a straight line is less than the G64 P- tolerance the arc is broken into two\n lines (from start of arc to midpoint, and from midpoint to end). those lines are then subject to the\n naive cam algorithm for lines. Thus, line-arc, arc-arc, and arc-line cases as well as line-line benefit\n@@ -41359,15 +41359,15 @@\n this point.\n \u2022 Fillet and chamfers in the profile. It is possible to add fillets or chamfers in the profile, see Section 11.5.39 for more details.\n It is an error if:\n \u2022 There is no subroutine defined with the number given in Q.\n \u2022 The path given in the profile is not monotonic in Z or X.\n \u2022 Section 11.5.18 has not been used to select the ZX plane.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 902 / 1290\n \n 11.5.39 G71 G72 Lathe roughing cycles\n Note\n The G71 and G72 cycles are currently somewhat fragile. See issues #707 and #1146\n \n@@ -41408,15 +41408,15 @@\n \u2022 If Z or X are used a rapid move to that position is done.\n \u2022 After the profile has been cut, the tool stops at the end of the profile, including the distance\n specified in D.\n 2. The D number is used to keep a distance from the final profile, to allow material to remain for\n finishing.\n It is an error if:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 903 / 1290\n \n \u2022 There is no subroutine defined with the number given in Q.\n \u2022 The path given in the profile is not monotonic in Z or X.\n \u2022 Section 11.5.18 has not been used to select the ZX plane.\n \u2022 Section 11.5.26 is active.\n@@ -41446,15 +41446,15 @@\n \n \u2022 R- - Retract position along the Z axis.\n \u2022 L- - Used in incremental mode; number of times to repeat the cycle. See G81 for examples.\n \u2022 P- - Dwell time (seconds).\n \u2022 $- - Selected spindle.\n \u2022 F- - Feed rate (spindle speed multiplied by distance traveled per revolution (thread pitch)).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 904 / 1290\n \n Warning\n G74 does not use synchronized motion.\n \n The G74 cycle is intended for tapping with floating chuck and dwell at the bottom of the hole.\n@@ -41471,15 +41471,15 @@\n thread pitch gives a feed of F125.\n \n 11.5.42 G76 Threading Cycle\n G76 P- Z- I- J- R- K- Q- H- E- L- $-\n \n Figure 11.14: G76 Threading\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 905 / 1290\n \n \u2022 Drive Line - A line through the initial X position parallel to the Z.\n \u2022 P- - The thread pitch in distance per revolution.\n \u2022 Z- - The final position of threads. At the end of the cycle the tool will be at this Z position.\n Note\n@@ -41517,15 +41517,15 @@\n the last pass tapers to the thread crest over the distance specified with E. E0.2 will give a taper for\n the first/last 0.2 length units along the thread. For a 45 degree taper program E the same as K.\n \u2022 L- - Specifies which ends of the thread get the taper. Program L0 for no taper (the default), L1 for\n entry taper, L2 for exit taper, or L3 for both entry and exit tapers. Entry tapers will pause at the\n drive line to synchronize with the index pulse then move at the feed rate in to the beginning of the\n taper. No entry taper and the tool will rapid to the cut depth then synchronize and begin the cut.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 906 / 1290\n \n The tool is moved to the initial X and Z positions prior to issuing the G76. The X position is the drive\n line and the Z position is the start of the threads.\n The tool will pause briefly for synchronization before each threading pass, so a relief groove will be\n required at the entry unless the beginning of the thread is past the end of the material or an entry\n@@ -41555,15 +41555,15 @@\n G0 Z-0.5 X0.2\n G76 P0.05 Z-1 I-.075 J0.008 K0.045 Q29.5 L2 E0.045\n \n In the figure the tool is in the final position after the G76 cycle is completed. You can see the entry\n path on the right from the Q29.5 and the exit path on the left from the L2 E0.045. The white lines are\n the cutting moves.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 907 / 1290\n \n Figure 11.15: G76 Example\n \n 11.5.43 G80-G89 Canned Cycles\n The canned cycles G81 through G89 and the canned cycle stop G80 are described in this section.\n@@ -41584,15 +41584,15 @@\n code in a row, the number must be used the first time, but is optional on the rest of the lines. Sticky\n numbers keep their value on the rest of the lines if they are not explicitly programmed to be different.\n The R number is always sticky.\n In incremental distance mode X, Y, and R numbers are treated as increments from the current position\n and Z as an increment from the Z-axis position before the move involving Z takes place. In absolute\n distance mode, the X, Y, R, and Z numbers are absolute positions in the current coordinate system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 908 / 1290\n \n 11.5.43.3 Repeat Cycle\n The L number is optional and represents the number of repeats. L=0 is not allowed. If the repeat\n feature is used, it is normally used in incremental distance mode, so that the same sequence of motions is repeated in several equally spaced places along a straight line. When L- is greater than 1\n in incremental mode with the XY-plane selected, the X and Y positions are determined by adding the\n@@ -41626,15 +41626,15 @@\n once, regardless of the value of L.\n In addition, at the beginning of the first cycle and each repeat, the following one or two moves are\n made:\n \u2022 A rapid move parallel to the XY-plane to the given XY-position.\n \u2022 The Z-axis make a rapid move to the R position, if it is not already at the R position.\n If another plane is active, the preliminary and in-between motions are analogous.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 909 / 1290\n \n 11.5.43.7 Why use a canned cycle?\n There are at least two reasons for using canned cycles. The first is the economy of code. A single bore\n would take several lines of code to execute.\n The G81 Example 1 demonstrates how a canned cycle could be used to produce 8 holes with ten lines\n@@ -41658,15 +41658,15 @@\n The G98 on the second line above means that the return move will be to the Z value on the first line\n since it is higher than the specified R value.\n \n Twelve Holes in a Square This example demonstrates the use of the L word to repeat a set of\n incremental drill cycles for successive blocks of code within the same G81 motion mode. Here we\n produce 12 holes using five lines of code in the canned motion mode.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 910 / 1290\n \n N1000 G90 G0 X0 Y0 Z0 (move coordinate home)\n N1010 G1 F50 X0 G4 P0.1\n N1020 G91 G81 X1 Y0 Z-0.5 R1 L4 (canned drill cycle)\n N1030 X0 Y1 R0 L3 (repeat)\n@@ -41687,15 +41687,15 @@\n It is an error if:\n \u2022 Axis words are programmed when G80 is active.\n G80 Example\n G90 G81 X1 Y1 Z1.5 R2.8 (absolute distance canned cycle)\n G80 (turn off canned cycle motion)\n G0 X0 Y0 Z0 (rapid move to coordinate home)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 911 / 1290\n \n The following code produces the same final position and machine state as the previous code.\n G0 Example\n G90 G81 X1 Y1 Z1.5 R2.8 (absolute distance canned cycle)\n G0 X0 Y0 Z0 (rapid move to coordinate home)\n@@ -41736,15 +41736,15 @@\n \n The G81 cycle is intended for drilling.\n The cycle functions as follows:\n \u2022 Preliminary motion, as described in the Preliminary and In-Between Motion section.\n \u2022 Move the Z-axis at the current feed rate to the Z position.\n \u2022 The Z-axis does a rapid move to clear Z.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 912 / 1290\n \n Figure 11.16: G81 Cycle\n Example 1 - Absolute Position G81\n G90 G98 G81 X4 Y5 Z1.5 R2.8\n \n@@ -41757,15 +41757,15 @@\n \u2022 The R value and clear Z are 2.8. OLD_Z is 3.\n The following moves take place:\n \u2022 A rapid move parallel to the XY plane to (X4, Y5)\n \u2022 A rapid move move parallel to the Z-axis to (Z2.8).\n \u2022 Move parallel to the Z-axis at the feed rate to (Z1.5)\n \u2022 A rapid move parallel to the Z-axis to (Z3)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 913 / 1290\n \n Example 2 - Relative Position G81\n G91 G98 G81 X4 Y5 Z-0.6 R1.8 L3\n \n Suppose the current position is (X1, Y2, Z3) and the preceding line of NC code is interpreted.\n@@ -41786,27 +41786,27 @@\n \u2022 A rapid move parallel to the Z-axis to (X9, Y12, Z4.8)\n The third repeat consists of 3 moves. The X position is reset to 13 (=9+4) and the Y position to 17\n (=12+5).\n \u2022 A rapid move parallel to the XY-plane to (X13, Y17, Z4.8)\n \u2022 Move parallel to the Z-axis at the feed rate to (X13, Y17, Z4.2)\n \u2022 A rapid move parallel to the Z-axis to (X13, Y17, Z4.8)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 914 / 1290\n \n Example 3 - Relative Position G81\n G90 G98 G81 X4 Y5 Z1.5 R2.8\n \n Now suppose that you execute the first G81 block of code but from (X0, Y0, Z0) rather than from (X1,\n Y2, Z3).\n Since OLD_Z is below the R value, it adds nothing for the motion but since the initial value of Z is less\n than the value specified in R, there will be an initial Z move during the preliminary moves.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 915 / 1290\n \n Example 4 - Absolute G81 R > Z This is a plot of the path of motion for the second g81 block of\n code.\n G91 G98 G81 X4 Y5 Z-0.6 R1.8 L3\n \n@@ -41816,15 +41816,15 @@\n \n Example 5 - Relative position R > Z\n G90 G98 G81 X4 Y5 Z-0.6 R1.8\n \n Since this plot starts with (X0, Y0, Z0), the interpreter adds the initial Z0 and R1.8 and rapid moves\n to that location as in Example 4. After that initial Z move, the rapid move to X4 Y5 is done. Then the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 916 / 1290\n \n final Z depth being 0.6 below the R value. The repeat function would make the Z move in the same\n location again.\n \n 11.5.46 G82 Drilling Cycle, Dwell\n@@ -41857,15 +41857,15 @@\n \u2022 Rapid move back out to the retract plane specified by the R word.\n \u2022 Rapid move back down to the current hole bottom, less .010 of an inch or 0.254 mm.\n \u2022 Repeat steps 2, 3, and 4 until the Z position is reached at step 2.\n \u2022 The Z-axis does a rapid move to clear Z.\n It is an error if:\n \u2022 the Q number is negative or zero.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 917 / 1290\n \n 11.5.48 G84 Right-hand Tapping Cycle, Dwell\n G84 (X- Y- Z-) or (U- V- W-) R- L- P- $- F-\n \n \u2022 R- - Retract position along the Z axis.\n@@ -41895,15 +41895,15 @@\n \n The G85 cycle is intended for boring or reaming, but could be used for drilling or milling.\n \u2022 Preliminary motion, as described in the Preliminary and In-Between Motion section.\n \u2022 Move the Z-axis only at the current feed rate to the Z position.\n \u2022 Retract the Z-axis at the current feed rate to the R plane if it is lower than the initial Z.\n \u2022 Retract at the traverse rate to clear Z.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 918 / 1290\n \n 11.5.50 G86 Boring Cycle, Spindle Stop, Rapid Move Out\n G86 (X- Y- Z-) or (U- V- W-) R- L- P- $-\n \n The G86 cycle is intended for boring. This cycle uses a P number for the number of seconds to dwell.\n@@ -41935,15 +41935,15 @@\n 11.5.54 G90, G91 Distance Mode\n \u2022 G90 - absolute distance mode In absolute distance mode, axis numbers (X, Y, Z, A, B, C, U, V, W)\n usually represent positions in terms of the currently active coordinate system. Any exceptions to\n that rule are described explicitly in the G80 G89 section.\n \u2022 G91 - incremental distance mode In incremental distance mode, axis numbers usually represent\n increments from the current coordinate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 919 / 1290\n \n G90 Example\n G90 (set absolute distance mode)\n G0 X2.5 (rapid move to coordinate X2.5 including any offsets in effect)\n \n@@ -41981,15 +41981,15 @@\n Being in incremental distance mode (G91 instead of G90) has no effect on the action of G92.\n G92 offsets may be already be in effect when the G92 is called. If this is the case, the offset is replaced\n with a new offset that makes the current point become the specified value.\n It is an error if all axis words are omitted.\n LinuxCNC stores the G92 offsets and reuses them on the next run of a program. To prevent this, one\n can program a G92.1 (to erase them), or program a G92.2 (to remove them - they are still stored).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 920 / 1290\n \n Note\n The G52 command can also be used to change this offset; see the Offsets section for more details\n about G92 and G52 and how they interact.\n See the Coordinate System section for an overview of coordinate systems.\n@@ -42027,15 +42027,15 @@\n threading, for threading use G33 or G76. G95 requires that spindle.N.speed-in to be connected.\n The actual spindle to which the feed is synchronised is chosen by the $ parameter.\n It is an error if:\n \u2022 Inverse time feed mode is active and a line with G1, G2, or G3 (explicitly or implicitly) does not have\n an F-word.\n \u2022 A new feed rate is not specified after switching to G94 or G95\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 921 / 1290\n \n 11.5.60 G96, G97 Spindle Control Mode\n G96 S- <$-> (Constant Surface Speed Mode)\n G97 S- <$-> (RPM Mode)\n \n@@ -42073,15 +42073,15 @@\n \n The G98 to the second line above means that the return move will be to the value of Z in the first line\n since it is higher that the R value specified.\n The initial (G98) plane is reset any time cycle motion mode is abandoned, whether explicitly (G80) or\n implicitly (any motion code that is not a cycle). Switching among cycle modes (say G81 to G83) does\n NOT reset the initial plane. It is possible to switch between G98 and G99 during a series of cycles.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 922 / 1290\n \n 11.6 M-Codes\n 11.6.1 M-Code Quick Reference Table\n Code\n M0 M1\n@@ -42147,15 +42147,15 @@\n \n 11.6.3 M2, M30 Program End\n \u2022 M2 - end the program. Pressing Cycle Start (\u201dR\u201d in the Axis GUI) will restart the program at the\n beginning of the file.\n \u2022 M30 - exchange pallet shuttles and end the program. Pressing Cycle Start will start the program\n at the beginning of the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 923 / 1290\n \n Both of these commands have the following effects:\n \u2022 Change from Auto mode to MDI mode.\n \u2022 Origin offsets are set to the default (like G54).\n \u2022 Selected plane is set to XY plane (like G17).\n@@ -42189,15 +42189,15 @@\n S100 $0\n S200 $1\n S300 $2\n M3 $-1\n \n This example will then reverse spindle 1 but leave the other spindles rotating forwards:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 924 / 1290\n \n M4 $1\n \n And this will stop spindle 2 and leave the other spindles rotating:\n M5 $2\n@@ -42234,15 +42234,15 @@\n \n The tool change may include axis motion. It is OK (but not useful) to program a change to the tool\n already in the spindle. It is OK if there is no tool in the selected slot; in that case, the spindle will\n be empty after the tool change. If slot zero was last selected, there will definitely be no tool in the\n spindle after a tool change. The tool changer will have to be setup to perform the tool change in HAL\n and possibly ClassicLadder.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 925 / 1290\n \n 11.6.7 M7, M8, M9 Coolant Control\n \u2022 M7 - turn mist coolant on. M7 controls iocontrol.0.coolant-mist pin.\n \u2022 M8 - turn flood coolant on. M8 controls iocontrol.0.coolant-flood pin.\n \u2022 M9 - turn both M7 and M8 off.\n@@ -42277,15 +42277,15 @@\n \u2013 spindle.N.is-oriented (in bit) Acknowledge pin for spindle-orient. Completes orient cycle. If\n spindle-orient was true when spindle-is-oriented was asserted, the spindle-orient pin is cleared\n and the spindle-locked pin is asserted. Also, the spindle-brake pin is asserted.\n \u2013 spindle.N.orient-fault (in s32) Fault code input for orient cycle. Any value other than zero will\n cause the orient cycle to abort.\n \u2013 spindle.N.locked (out bit) Spindle orient complete pin. Cleared by any of M3,M4,M5.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 926 / 1290\n \n 11.6.9 M48, M49 Speed and Feed Override Control\n \u2022 M48 - enable the spindle speed and feed rate override controls.\n \u2022 M49 - disable both controls.\n These commands also take an optional $ parameter to determine which spindle they operate on.\n@@ -42318,15 +42318,15 @@\n \n 11.6.13 M53 Feed Stop Control\n \u2022 M53 - enable the feed stop switch. The P1 is optional. Enabling the feed stop switch will allow\n motion to be interrupted by means of the feed stop control. In LinuxCNC, the HAL pin motion.feedhold is used for this purpose. A true value will cause the motion to stop when M53 is active.\n \u2022 M53 P0 - disable the feed stop switch. The state of motion.feed-hold will have no effect on feed\n when M53 is not active.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 927 / 1290\n \n 11.6.14 M61 Set Current Tool\n \u2022 M61 Q- - change the current tool number while in MDI or Manual mode without a tool change.\n One use is when you power up LinuxCNC with a tool currently in the spindle you can set that tool\n number without doing a tool change.\n@@ -42360,15 +42360,15 @@\n 11.6.16 M66 Wait on Input\n M66 P- | E- \n \n \u2022 P- - specifies the digital input number from 0 to 3. (Adjustable from motmod argument num_dio)\n \u2022 E- - specifies the analog input number from 0 to 3. (Adjustable from motmod argument num_aio)\n \u2022 L- - specifies the wait mode type.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 928 / 1290\n \n \u2013 Mode 0: IMMEDIATE - no waiting, returns immediately. The current value of the input is stored\n in parameter #5399\n \u2013 Mode 1: RISE - waits for the selected input to perform a rise event.\n \u2013 Mode 2: FALL - waits for the selected input to perform a fall event.\n@@ -42404,15 +42404,15 @@\n always program a motion G-code (G0, G1, etc) right after the M67. M67 functions the same as M6263.\n The number of I/O can be increased by using the num_dio or num_aio parameter when loading the\n motion controller. See the Motion section for more information.\n Note\n M67 will not function unless the appropriate motion.analog-out-nn pins are connected in your HAL\n file to outputs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 929 / 1290\n \n 11.6.18 M68 Analog Output, Immediate\n M68 E- Q-\n \n \u2022 M68 - set an analog output immediately.\n@@ -42443,15 +42443,15 @@\n \u2022 spindle mode (G96-css or G97-RPM)\n \u2022 arc distance mode (G90.1, G91.1)\n \u2022 lathe radius/diameter mode (G7,G8)\n \u2022 path control mode (G61, G61.1, G64)\n \u2022 current feed and speed (F and S values)\n \u2022 spindle status (M3,M4,M5) - on/off and direction\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 930 / 1290\n \n \u2022 mist (M7) and flood (M8) status\n \u2022 speed override (M51) and feed override (M50) settings\n \u2022 adaptive feed setting (M52)\n \u2022 feed hold setting (M53)\n@@ -42489,15 +42489,15 @@\n g20 (imperial)\n g91 (relative mode)\n F5 (low feed)\n S300 (low rpm)\n (debug, in subroutine, state now:)\n o call\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 931 / 1290\n \n O endsub\n ; main program\n g21 (metric)\n g90 (absolute)\n@@ -42543,15 +42543,15 @@\n (debug, in main, state now:)\n o call\n o call\n (debug, back in main, state now:)\n o call\n m2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 932 / 1290\n \n 11.6.23 M98 and M99\n The interpreter supports Fanuc-style main- and sub-programs with the M98 and M99 M-codes. See\n Fanuc-Style Programs.\n 11.6.23.1 Selectively Restoring Modal State\n@@ -42593,15 +42593,15 @@\n and Q values as its two arguments.\n Execution of the G-code file pauses until the external program exits. Any valid executable file can\n be used. The file must be located in the search path specified in the INI file configuration. See the\n Display section for more information on search paths.\n After creating a new M1nn program, the GUI should be restarted so that the new program is taken\n into account, otherwise a Unknown M-code error will occur.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 933 / 1290\n \n Warning\n Do not use a word processor to create or edit the files. A word processor will leave unseen\n codes that will cause problems and may prevent a bash or python file from working. Use a\n text editor like Geany in Debian or Notepad++ in other operating systems to create or edit the\n@@ -42643,15 +42643,15 @@\n To display a graphic message and stop until the message window is closed use a graphic display\n program like Eye of Gnome to display the graphic file. When you close it the program will resume.\n M110 Example file\n #!/bin/bash\n eog /home/john/linuxcnc/nc_files/message.png\n exit 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 934 / 1290\n \n To display a graphic message and continue processing the G-code file suffix an ampersand to the\n command.\n M110 Example display and keep going\n #!/bin/bash\n@@ -42685,15 +42685,15 @@\n \u2022 The same number is used for more than one block.\n \u2022 Other words are used on a line with an O- word.\n \u2022 Comments are used on a line with an O-word.\n Note\n Using the lower case o makes it easier to distinguish from a 0 that might have been mistyped. For\n example o100 is easier to see than O100 that it is not a 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 935 / 1290\n \n 11.7.4 Subroutines\n Subroutines starts at Onnn sub and ends at Onnn endsub. The lines between Onnn sub and Onnn\n endsub are not executed until the subroutine is called with Onnn call. Each subroutine must use a\n unique number.\n@@ -42742,15 +42742,15 @@\n Subroutine bodies may not be nested. They may only be called after they are defined. They may\n be called from other functions, and may call themselves recursively if it makes sense to do so. The\n maximum subroutine nesting level is 10.\n Subroutines can change the value of parameters above #30 and those changes will be visible to the\n calling code. Subroutines may also change the value of global named parameters (i.e. parameters\n whose names begin with the underscore character \u201d_\u201d).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 936 / 1290\n \n 11.7.4.1 Fanuc-Style Numbered Programs\n Numbered programs (both main and subprograms), the M98 call and M99 return M-codes, and their\n respective semantic differences are an alternative to the rs274ngc subroutines described above, provided for compatibility with Fanuc and other machine controllers.\n Numbered programs are enabled by default, and may be disabled by placing DISABLE_FANUC_STYLE_SUB\n@@ -42796,15 +42796,15 @@\n \u2022 M98 subprogram call blocks may contain an optional L-word specifying a loop repeat count. Without\n the L-word, the subprogram will execute once only (equivalent to M98 L1). An M98 L0 block will not\n execute the subprogram.\n In rare cases, the M99 M-code may be used to terminate the main program, where it indicates an\n endless program. When the interpreter reaches an M99 in the main program, it will skip back to the\n beginning of the file and resume execution at the first line. An example use of an endless program is\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 937 / 1290\n \n in a machine warm-up cycle; a block delete program end /M30 block might be used to stop the cycle\n at a tidy point when the operator is ready.\n Numbered Subprogram Full Example\n O1\n@@ -42870,15 +42870,15 @@\n #1 = 3 (assign the value of 3 to parameter #1)\n (msg, #1 has been assigned the value of 3)\n o100 continue (skip to start of loop)\n o110 endif\n (some code here)\n #1 = [#1 + 1] (increment the test counter)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 938 / 1290\n \n o100 while [#1 LT 3]\n (msg, Loop Done!)\n M2\n \n@@ -42924,15 +42924,15 @@\n O102 elseif [#2 LT 2]\n F20\n (parameter #2 is between 2 and 5)\n O102 else\n F200\n O102 endif\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 939 / 1290\n \n 11.7.7 Repeat\n The repeat will execute the statements inside of the repeat/endrepeat the specified number of times.\n The example shows how you might mill a diagonal series of shapes starting at the present position.\n Example with repeat\n@@ -42973,15 +42973,15 @@\n M2\n \n Note\n The file names are lowercase letters only so o is converted to o by the interpreter.\n More information about the search path and options for the search path are in the INI configuration\n section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 940 / 1290\n \n 11.7.10 Subroutine return values\n Subroutines may optionally return a value by an optional expression at an endsub or return statement.\n Return value example\n o123 return [#2 *5]\n@@ -43017,15 +43017,15 @@\n spindle speed for a specific spindle. Without the $ the command will default to spindle.0.\n The spindle(s) or selected spindle will turn at that speed when a M3 or M4 is in effect. It is OK to\n program an S word whether the spindle is turning or not. If the speed override switch is enabled and\n not set at 100%, the speed will be different from what is programmed.\n It is OK to program S0, the spindle will not turn if that is done.\n It is an error if:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 941 / 1290\n \n \u2022 the S number is negative.\n As described in the section Right-hand Tapping Cycle with Dwell, if a G84 (tapping) drilling cycle is\n active and the speed and feed potentiometers are enabled, the one with the lowest setting will be\n used. The rotational speed and feed rate will remain synchronized. In this case, the speed may differ\n@@ -43062,37 +43062,37 @@\n file is appropriate for your machine before running.\n \n 11.9.1 Mill Examples\n 11.9.1.1 Helical Hole Milling\n \u2022 File Name: useful-subroutines.ngc\n \u2022 Description: Subroutine for milling a hole using parameters.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 942 / 1290\n \n 11.9.1.2 Slotting\n \u2022 File Name: useful-subroutines.ngc\n \u2022 Description: Subroutine for milling a slot using parameters.\n \n 11.9.1.3 Grid Probe\n \u2022 File Name: gridprobe.ngc\n \u2022 Description: Rectangular Probing\n This program repeatedly probes in a regular XY grid and writes the probed location to the file proberesults.txt in the same directory as the .ini file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 943 / 1290\n \n 11.9.1.4 Smart Probe\n \u2022 File Name: smartprobe.ngc\n \u2022 Description: Rectangular Probing\n This program repeatedly probes in a regular XY grid and writes the probed location to the file proberesults.txt in the same directory as the .ini file. This is improved from the grid probe file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 944 / 1290\n \n 11.9.1.5 Tool Length Probe\n \u2022 File Name: tool-length-probe.ngc\n \u2022 Description: Tool Length Probing\n This program shows an example of how to measure tool lengths automatically using a switch hooked\n@@ -43102,15 +43102,15 @@\n \u2022 File Name: probe-hole.ngc\n \u2022 Description: Finding the Center and Diameter of a hole.\n The program demonstrates how to find the center of a hole, measure the hole diameter and record\n the results.\n 11.9.1.7 Cutter Compensation\n \u2022 File Name: comp-g1.ngc\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 945 / 1290\n \n \u2022 Description: Entry and exit movements with compensation of tool radius.\n This program demonstrates the peculiarity of the toolpath without and with tool radius compensation.\n The tool radius is taken from the tool table.\n \n@@ -43122,15 +43122,15 @@\n \n 11.10 Image to G-Code\n \n 11.10.1 What is a depth map?\n A depth map is a greyscale image where the brightness of each pixel corresponds to the depth (or\n height) of the object at each point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 946 / 1290\n \n 11.10.2 Integrating image-to-gcode with the AXIS user interface\n Add the following lines to the [FILTER] section of your INI file to make AXIS automatically invoke\n image-to-gcode when you open a PNG, GIF, or JPEG image:\n PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image\n@@ -43164,15 +43164,15 @@\n cut off. If White or Black, then a border of pixels equal to the tool diameter is added on all sides, and\n details which are at the very edges of the images will not be cut off.\n 11.10.4.5 Tolerance (units)\n When a series of points are within tolerance of being a straight line, they are output as a straight line.\n Increasing tolerance can lead to better contouring performance in LinuxCNC, but can also remove or\n blur small details in the image.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 947 / 1290\n \n 11.10.4.6 Pixel Size (units)\n One pixel in the input image will be this many units\u2014usually this number is much smaller than 1.0. For\n instance, to mill a 2.5x2.5-inch object from a 400x400 image file, use a pixel size of .00625, because\n 2.5 / 400 = .00625.\n@@ -43195,15 +43195,15 @@\n \u2022 Alternating: Start on the same end of the X or Y axis travel that the last move ended on. This reduces\n the amount of traverse movements.\n \u2022 Up Milling: Start milling at low points, moving towards high points.\n \u2022 Down Milling: Start milling at high points, moving towards low points.\n 11.10.4.12 Depth (units)\n The top of material is always at Z = 0. The deepest cut into the material is at Z = -depth.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 948 / 1290\n \n 11.10.4.13 Step Over (pixels)\n The distance between adjacent rows or columns. To find the number of pixels for a given units distance, compute distance/pixel size and round to the nearest whole number. For example, if pixel\n size=.006 and the desired step over distance=.015, then use a Step Over of 2 or 3 pixels, because\n .015/.006=2.5.\n@@ -43227,15 +43227,15 @@\n \u2022 Full: When milling in the first direction, areas that strongly slope in the second direction are\n skipped. When milling in the second direction, areas that do not strongly slope in that direction\n are skipped.\n 11.10.4.18 Contact angle\n When Lace bounding is not None, slopes greater than Contact angle are considered to be strong\n slopes, and slopes less than that angle are considered to be weak slopes.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 949 / 1290\n \n 11.10.4.19 Roughing offset and depth per pass\n Image-to-gcode can optionally perform roughing passes. The depth of successive roughing passes is\n given by Roughing depth per pass. For instance, entering 0.2 will perform the first roughing pass\n with a depth of 0.2, the second roughing pass with a depth of 0.4, and so on until the full Depth of\n@@ -43257,15 +43257,15 @@\n coordinate systems, and the G92 offset are in \u201dINI file units\u201d. This change was made because\n otherwise the meaning of a location changed depending on whether G20 or G21 was active when\n G28, G30, G10 L2, or G92.3 is programmed.\n Tool table lengths/diameters are in INI file units\n In LinuxCNC, the tool lengths (offsets) and diameters in the tool table are specified in INI file\n units only. This change was made because otherwise the length of a tool and its diameter would\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 950 / 1290\n \n change based on whether G20 or G21 was active when initiating G43, G41, G42 modes. This made\n it impossible to run G-code in the machine\u2019s non-native units, even when the G-code was simple\n and well-formed (starting with G20 or G21, and didn\u2019t change units throughout the program),\n without changing the tool table.\n@@ -43302,28 +43302,28 @@\n primarily useful on lathes.\n Dynamic tool lengths\n LinuxCNC allows specification of a computed tool length through G43.1 I K.\n G41.1, G42.1\n LinuxCNC allows specification of a tool diameter and, if in lathe mode, orientation in the Gcode. The format is G41.1/G42.1 D L, where D is diameter and L (if specified) is the lathe tool\n orientation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 951 / 1290\n \n G43 without H word\n In NGC this is not allowed. In LinuxCNC, it sets length offsets for the currently loaded tool. If no\n tool is currently loaded, it is an error. This change was made so the user doesn\u2019t have to specify\n the tool number in two places for each tool change, and because it\u2019s consistent with the way\n G41/G42 work when the D word is not specified.\n U, V, and W axes\n LinuxCNC allows machines with up to 9 axes by defining an additional set of 3 linear axes known\n as U, V and W\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 952 / 1290\n \n Chapter 12\n \n Virtual Control Panels\n 12.1 PyVCP\n@@ -43333,15 +43333,15 @@\n Hardware machine control panels can use up a lot of I/O pins and can be expensive. That is where\n Virtual Control Panels have the advantage as well as it cost nothing to build a PyVCP.\n Virtual Control Panels can be used for testing or monitoring things to temporarily replace real I/O\n devices while debugging ladder logic, or to simulate a physical panel before you build it and wire it\n to an I/O board.\n The following graphic displays many of the PyVCP widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 953 / 1290\n \n Figure 12.1: PyVCP Widgets Showcase\n \n 12.1.2 Panel Construction\n The layout of a PyVCP panel is specified with an XML file that contains widget tags between \n@@ -43349,15 +43349,15 @@\n \n \n \n Figure 12.2: Simple PyVCP LED Panel Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 954 / 1290\n \n If you place this text in a file called tiny.xml, and run\n halcmd loadusr pyvcp -c mypanel tiny.xml\n \n PyVCP will create the panel for you, which includes two widgets, a Label with the text This is a LED\n@@ -43402,15 +43402,15 @@\n \n \n Here we\u2019ve made a panel with a Label and a Bar widget, specified that the HAL pin connected to\n the Bar should be named spindle-speed, and set the maximum value of the bar to 5000 (see widget\n reference below for all options). To make AXIS aware of this file, and call it at start up, we need to\n specify the following in the [DISPLAY] section of the INI file:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 955 / 1290\n \n PYVCP = spindle.xml\n \n If the panel should appear at the bottom of the AXIS user interface then we need to specify the\n following in the [DISPLAY] section of the INI file:\n@@ -43428,15 +43428,15 @@\n assuming that a signal called spindle-rpm-filtered already exists. Note that when running together\n with AXIS, all PyVCP panel widget HAL pins have names that start with pyvcp., all PyVCP embedded\n tab widget HAL pins start with the name specified as EMBED_TAB_NAME converted to lower case.\n \n This is what the newly created PyVCP panel should look like in AXIS. The sim/lathe configuration is\n already configured this way.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 956 / 1290\n \n 12.1.5 Stand Alone\n This section describes how PyVCP panels can be displayed on their own with or without LinuxCNC\u2019s\n machine controller.\n To load a stand alone PyVCP panel with LinuxCNC use these commands:\n@@ -43475,15 +43475,15 @@\n An optional command to use if you want the panel to stop HAL from continuing commands / shutting\n down. After loading any other components you want the last HAL command to be:\n waitusr panelname\n \n This tells HAL to wait for component panelname to close before continuing HAL commands. This is\n usually set as the last command so that HAL shuts down when the panel is closed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 957 / 1290\n \n 12.1.6 Widgets\n HAL signals come in two variants, bits and numbers. Bits are off/on signals. Numbers can be float,\n s32 or u32. For more information on HAL data types see the HAL Data section. The PyVCP widget\n can either display the value of the signal with an indicator widget, or modify the signal value with a\n@@ -43520,15 +43520,15 @@\n Editing the XML file Edit the XML file with a text editor. In most cases you can right click on the\n file and select open with text editor or similar.\n Colors\n Colors can be specified using the X11 rgb colors by name gray75 or hex #0000ff. A complete list is\n located here https://sedition.com/perl/rgb.html.\n Common Colors (colors with numbers indicate shades of that color)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 958 / 1290\n \n \u2022 white\n \u2022 black\n \u2022 blue and blue1 - 4\n \u2022 cyan and cyan1 - 4\n@@ -43557,15 +43557,15 @@\n (\u201dHelvetica\u201d,20)\n \n \n The above code produced this example:\n \n Figure 12.3: Simple Label Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 959 / 1290\n \n 12.1.6.4 Multi_Label\n An extension of the text label.\n Selectable text label, can display up to 6 label legends when associated bit pin is activated.\n Attach each legend pin to a signal and get a descriptive label when the signal is TRUE.\n@@ -43602,15 +43602,15 @@\n red.\n \u2022 n - sets the height of the LED in pixels.\n \u2022 n - sets the width of the LED in pixels.\n \u2022 false - when true adds a disable pin to the led.\n \u2022 color - sets the color of the LED to color when the pin is disabled.\n Round LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 960 / 1290\n \n \n \u201dmy-led\u201d\n 50\n \u201dgreen\u201d\n@@ -43639,15 +43639,15 @@\n \n 12.1.6.6 Buttons\n A button is used to control a BIT pin. The pin will be set True when the button is pressed and held\n down, and will be set False when the button is released. Buttons can use the following optional options.\n \u2022 n - where n is the amount of extra horizontal extra space.\n \u2022 n - where n is the amount of extra vertical extra space.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 961 / 1290\n \n \u2022 \u201dcolor\u201d - the cursor over color set to color.\n \u2022 \u201dcolor\u201d - the foreground color set to color.\n \u2022 \u201dcolor\u201d - the background color set to color.\n \u2022 True - disable pin.\n@@ -43676,15 +43676,15 @@\n \n Figure 12.8: Checked button\n Checkbutton Code Example\n \n \u201dcoolant-chkbtn\u201d\n \u201dCoolant\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 962 / 1290\n \n 1\n \n \n \u201dchip-chkbtn\u201d\n@@ -43712,15 +43712,15 @@\n Figure 12.10: Simple Radiobutton Example\n Note that the HAL pins in the example above will be named my-radio.one, my-radio.two, and myradio.three. In the image above, one is the selected value. Use the tag HORIZONTAL\n to display horizontally.\n 12.1.6.7 Number Displays\n Number displays can use the following formatting options\n \u2022 (\u201dFont Name\u201d,n), where n is the font size.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 963 / 1290\n \n \u2022 _n_, where n is the overall width of the space used.\n \u2022 _pos_, where pos is LEFT, CENTER, or RIGHT (doesn\u2019t work).\n \u2022 _n_, where n is the amount of extra horizontal extra space.\n \u2022 _n_, where n is the amount of extra vertical extra space.\n@@ -43749,15 +43749,15 @@\n 6\n \n \n The above code produced this example:\n \n Figure 12.12: Simple s32 Number Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 964 / 1290\n \n u32 Number The u32 number widget displays the value of a u32 number. The syntax is the same as\n number except the name which is .\n Bar A bar widget displays the value of a FLOAT signal both graphically using a bar display and numerically. The color of the bar can be set as one color throughout its range (default using fillcolor) or\n set to change color, dependent upon the value of the halpin (range1, range2 range3 must all be set,\n@@ -43792,15 +43792,15 @@\n \n \n The above code produced this example:\n \n Figure 12.13: Simple Bar Example\n Meter Meter displays the value of a FLOAT signal using a traditional dial indicator.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 965 / 1290\n \n \n \u201dmymeter\u201d\n \u201dBattery\u201d\n \u201dVolts\u201d\n@@ -43826,15 +43826,15 @@\n \n \u201dmy-spinbox\u201d\n -12\n 33\n 0\n 0.1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 966 / 1290\n \n \u201d2.3f\u201d\n (\u201dArial\u201d,30)\n 1\n \n@@ -43868,15 +43868,15 @@\n 100\n 0\n 1\n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 967 / 1290\n \n Figure 12.16: Simple Scale Example\n Note\n Note that by default it is \u201dmin\u201d which is displayed even if it is greater than \u201dmax\u201d, unless \u201dmin\u201d is\n negative.\n@@ -43899,15 +43899,15 @@\n \u201dgreen\u201d\n \u201dblack\u201d\n 1\n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 968 / 1290\n \n Figure 12.17: Simple Dial Example\n Jogwheel Jogwheel mimics a real jogwheel by outputting a FLOAT pin which counts up or down as\n the wheel is turned, either by dragging in a circular motion, or by rolling the mouse-wheel.\n \n@@ -43919,15 +43919,15 @@\n \u201dmy-wheel\u201d\n 45\n 250\n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 969 / 1290\n \n Figure 12.18: Simple Jogwheel Example\n \n 12.1.6.9 Images\n Image displays use only .gif image format. All of the images must be the same size. The images must\n@@ -43941,15 +43941,15 @@\n \n \n This example was produced from the above code. Using the two image files fwd.gif and rev.gif. FWD\n is displayed when selectimage is false and REV is displayed when selectimage is true.\n \n Figure 12.19: Selectimage False Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 970 / 1290\n \n Figure 12.20: Selectimage True Example\n Image u32 The image_u32 is the same as image_bit, except you have essentially an unlimited number\n of images and you select the image by setting the halpin to a integer value with 0 for the first image\n in the images list and 1 for the second image, etc.\n@@ -43962,15 +43962,15 @@\n \n The above code produced the following example by adding the stb.gif image.\n \n Figure 12.21: Simple image_u32 Example with halpin=0\n \n Figure 12.22: Simple image_u32 Example withhalpin=1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 971 / 1290\n \n Figure 12.23: Simple image_u32 Example withhalpin=2\n Notice that the default is the min even though it is set higher than max unless there is a negative min.\n 12.1.6.10 Containers\n Containers are widgets that contain other widgets. Containers are used to group other widgets.\n@@ -44006,15 +44006,15 @@\n \u201dRIDGE\u201d\n 3\n \n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 972 / 1290\n \n Figure 12.24: Containers Borders Showcase\n Fill Container fill are specified with the tag. Valid entries are none, x, y and both.\n The x fill is a horizontal fill and the y fill is a vertical fill\n \n@@ -44041,15 +44041,15 @@\n The above code produced this example:\n \n Figure 12.25: Simple hbox Example\n Inside an Hbox, you can use the , , and tags to choose how items in the box behave when the window is re-sized. The default is\n fill=\u201dy\u201d, anchor=\u201dcenter\u201d, expand=\u201dyes\u201d for an Hbox.\n Vbox Use a Vbox when you want to stack widgets vertically on top of each other.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 973 / 1290\n \n \n RIDGE\n 6\n \n@@ -44075,15 +44075,15 @@\n \n The above code produced this example:\n \n Figure 12.27: Simple labelframe Example\n Table A table is a container that allows layout in a grid of rows and columns. Each row is started by\n 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 \u201dstick\u201d may be set through\n the use of the tag. A table expands on its flexible rows and columns.\n Table Code Example\n \n@@ -44127,15 +44127,15 @@\n \n \u201dspindle-speed\u201d\n 5000\n \n \n \n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \n \n \n \n \n \n The above code produced this example showing each tab selected.\n \n 975 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 976 / 1290\n \n Figure 12.29: Simple Tabs Example\n \n 12.2 PyVCP Examples\n 12.2.1 AXIS\n@@ -44173,15 +44173,15 @@\n \u2022 Add the links to HAL pins for your panel in the postgui.hal file to connect your PyVCP panel to\n LinuxCNC.\n The following is an example of a loadusr command to load two PyVCP panels and name each one so\n the connection names in HAL will be known.\n loadusr -Wn btnpanel pyvcp -c btnpanel panel1.xml\n loadusr -Wn sppanel pyvcp -c sppanel panel2.xml\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 977 / 1290\n \n The -Wn makes HAL Wait for name to be loaded before proceeding.\n The pyvcp -c makes PyVCP name the panel.\n The HAL pins from panel1.xml will be named btnpanel.<_pin name_>.\n The HAL pins from panel2.xml will be named sppanel.<_pin name_>.\n@@ -44190,27 +44190,27 @@\n 12.2.3 Jog Buttons Example\n In this example we will create a PyVCP panel with jog buttons for X, Y, and Z. This configuration will be\n built upon a Stepconf Wizard generated configuration. First we run the Stepconf Wizard and configure\n our machine, then on the Advanced Configuration Options page we make a couple of selections to add\n a blank PyVCP panel as shown in the following figure. For this example we named the configuration\n pyvcp_xyz on the Basic Machine Information page of the Stepconf Wizard.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 978 / 1290\n \n Figure 12.30: XYZ Wizard Configuration\n The Stepconf Wizard will create several files and place them in the linuxcnc/configs/pyvcp_xyz directory. If you left the create link checked you will have a link to those files on your desktop.\n 12.2.3.1 Create the Widgets\n Open up the custompanel.xml file by right clicking on it and selecting open with text editor. Between\n the tags we will add the widgets for our panel.\n Look in the PyVCP Widgets Reference section of the manual for more detailed information on each\n widget documentation des widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n In your custompanel.xml file we will add the description of the widgets.\n \n \n (\u201dHelvetica\u201d,16)\n \n \n@@ -44264,15 +44264,15 @@\n \n \n \n \n \n 979 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 980 / 1290\n \n RAISED\n 3\n \n \n The above gives us a PyVCP panel that looks like the following.\n \n 985 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 986 / 1290\n \n 12.2.5.2 The Connections\n To make it work we add the following code to the custom_postgui.hal file.\n # display the rpm based on freq * rpm per hz\n loadrt mult2\n@@ -44624,15 +44624,15 @@\n custom.hal file whereas the rev led needs to use the spindle-rev bit. You can\u2019t link the spindle-fwd bit\n twice so you use the signal that it was linked to.\n \n 12.2.6 Rapid to Home Button\n This example creates a button on the PyVCP side panel when pressed will send all the axis back to\n the home position. This example assumes you don\u2019t have a PyVCP panel.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 987 / 1290\n \n In your configuration directory create the XML file. In this example it\u2019s named rth.xml. In the rth.xml\n file add the following code to create the button.\n \n \n@@ -44648,15 +44648,15 @@\n \n If you don\u2019t have a [HALUI] section in the INI file create it and add the following MDI command.\n MDI_COMMAND = G53 G0 X0 Y0 Z0\n \n Note\n Information about G53 and G0 G-codes.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 988 / 1290\n \n In the [HAL] section if you don\u2019t have a post gui file add the following and create a file called postgui.hal.\n POSTGUI_HALFILE = postgui.hal\n \n In the postgui.hal file add the following code to link the PyVCP button to the MDI command.\n@@ -44687,15 +44687,15 @@\n \u2022 Widget set: uses TkInter widgets.\n \u2022 User interface creation: \u201dedit XML file / run result / evaluate looks\u201d cycle.\n \u2022 No support for embedding user-defined event handling.\n \u2022 No LinuxCNC interaction beyond HAL pin I/O supported.\n GladeVCP:\n \u2022 Widget set: relies on the GTK3 widget set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 989 / 1290\n \n \u2022 User interface creation: uses the Glade WYSIWYG user interface editor.\n \u2022 Any HAL pin change may be directed to call back into a user-defined Python event handler.\n \u2022 Any GTK signal (key/button press, window, I/O, timer, network events) may be associated with userdefined handlers in Python.\n \u2022 Direct LinuxCNC interaction: arbitrary command execution, like initiating MDI commands to call a\n@@ -44719,31 +44719,31 @@\n make setuid then run . ./scripts/rip-environment. More information about a git checkout is on the\n LinuxCNC wiki page.\n \n Run the sample GladeVCP panel integrated into AXIS like PyVCP as follows:\n $ cd configs/sim/axis/gladevcp\n $ linuxcnc gladevcp_panel.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Run the same panel, but as a tab inside AXIS:\n $ cd configs/sim/axis/gladevcp\n $ linuxcnc gladevcp_tab.ini\n \n 990 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n To run this panel inside Touchy:\n $ cd configs/sim/touchy/gladevcp\n $ linuxcnc gladevcp_touchy.ini\n \n 991 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 992 / 1290\n \n 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\n names), mixed setups are possible as well - for instance a panel on the right hand side, and one or\n more tabs for less-frequently used parts of the interface.\n 12.3.2.1 Exploring the example panel\n@@ -44758,15 +44758,15 @@\n The buttons in the Commands frame are MDI Action widgets - pressing them will execute an MDI\n command in the interpreter. The third button Execute Oword subroutine is an advanced example - it\n takes several HAL pin values from the Settings frame, and passes them as parameters to the Oword\n subroutine. The actual parameters received by the routine are displayed by (DEBUG, ) commands see ../../nc_files/oword.ngc for the subroutine body.\n 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\n and configs/sim/axis/gladevcp/gladevcp_panel.ini.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 993 / 1290\n \n 12.3.2.2 Exploring the User Interface description\n The user interface is created with the Glade UI editor - to explore it, you need to have Glade installed.\n To edit the user interface, run the command\n $ glade configs/axis/gladevcp/manual-example.ui\n@@ -44801,15 +44801,15 @@\n Glade contains an internal Python interpreter, and only Python 3 is supported. This is true for Debian\n Bullseye, Ubuntu 21 and Mint 21 or later. Older versions will not work, you will get a Python error.\n 12.3.3.2 Running Glade to create a new user interface\n This section just outlines the initial LinuxCNC-specific steps. For more information and a tutorial on\n Glade, see http://glade.gnome.org. Some Glade tips & tricks may also be found on youtube.\n Either modify an existing UI component by running glade .ui or start a new one by just running the glade command from the shell.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 994 / 1290\n \n \u2022 If LinuxCNC was not installed from a package, the LinuxCNC shell environment needs to be set up\n with source /scripts/rip-environment, otherwise Glade won\u2019t find the LinuxCNCspecific widgets.\n \u2022 When asked for unsaved preferences, just accept the defaults and hit Close.\n \u2022 From Toplevels (toolbar), pick GtkWindow (first entry) as top level window. Set window1 as ID in\n@@ -44827,15 +44827,15 @@\n You\u2019re now ready to give it a try (while LinuxCNC, e.g. AXIS is running) it with:\n gladevcp myui.ui\n \n GladeVCP creates a HAL component named like the basename of the UI file - myui in this case - unless\n overridden by the -c option. If running AXIS, just try Show HAL configuration and\n inspect its pins.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 995 / 1290\n \n You might wonder why widgets contained a HAL_Hbox or HAL_Table appear greyed out (inactive).\n 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\n halui.machine.is-on or one of the halui.mode signals, to assure some widgets appear active only\n in a certain state.\n@@ -44871,15 +44871,15 @@\n [DISPLAY]\n # add GladeVCP panel where PyVCP used to live:\n GLADEVCP= -c example -u ./hitcounter.py ./manual-example.ui\n \n The command line actually run by AXIS for the above is:\n halcmd loadusr -Wn example gladevcp -c example -x {XID} -u ./hitcounter.py ./manual-example \u2190.ui\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 996 / 1290\n \n Note\n The file specifiers like ./hitcounter.py, ./manual-example.ui, etc. indicate that the files are located\n in the same directory as the INI file. You might have to copy them to you directory (alternatively,\n specify a correct absolute or relative path to the file(s)).\n@@ -44917,15 +44917,15 @@\n 12.3.3.7 Integrating into Touchy\n To do add a GladeVCP tab to Touchy, edit your INI file as follows:\n [DISPLAY]\n # add GladeVCP panel as a tab\n EMBED_TAB_NAME=GladeVCP demo\n EMBED_TAB_COMMAND=gladevcp -c gladevcp -x {XID} -u ./hitcounter.py -H ./gladevcp-touchy.hal \u2190./manual-example.ui\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 997 / 1290\n \n [RS274NGC]\n # gladevcp Demo specific Oword subs live here\n SUBROUTINE_PATH = ../../nc_files/gladevcp_lib\n \n@@ -44971,15 +44971,15 @@\n Re-parent GladeVCP into an existing window XID instead of creating a new top level\n window\n \n \u2190-\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 998 / 1290\n \n -u FILE::\n Use File\u2019s as additional user defined modules with handlers\n -U USEROPT::\n pass USEROPTs to Python modules\n@@ -45012,15 +45012,15 @@\n So, in case you run GladeVCP from a separate shell window (i.e., not started by the GUI in an embedded\n fashion):\n \u2022 You cannot rely on the POSTGUI_HALFILE INI option causing the HAL commands being run at the\n right point in time, so comment that out in the INI file.\n \u2022 Explicitly pass the HAL command file which refers to GladeVCP pins to GladeVCP with the -H\n option (see previous section).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 999 / 1290\n \n 12.3.6 HAL Widget reference\n GladeVCP includes a collection of Gtk widgets with attached HAL pins called HAL Widgets, intended\n to control, display or otherwise interact with the LinuxCNC HAL layer. They are intended to be used\n with the Glade user interface editor. With proper installation, the HAL Widgets should show up in\n@@ -45051,15 +45051,15 @@\n Exceptions to this rule currently are:\n \n \u2022 HAL_Spinbutton and HAL_ComboBox, which have two pins: a -f (float) and a \n (s32) pin\n \u2022 HAL_ProgressBar, which has a -value input pin, and a -scale input\n pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1000 / 1290\n \n 12.3.6.2 Python attributes and methods of HAL Widgets\n HAL widgets are instances of GtKWidgets and hence inherit the methods, properties and signals of the\n applicable GtkWidget class. For instance, to figure out which GtkWidget-related methods, properties\n and signals a HAL_Button has, lookup the description of GtkButton in the PyGObject API Reference.\n@@ -45097,15 +45097,15 @@\n doesn\u2019t make sense. You might use setp _pinname_ _value_ in the associated HAL file for testing\n though.\n \n It is perfectly OK to set an output HAL pin\u2019s value with halcomp[pinname] = value provided this HAL\n pin is not associated with a widget, that is, has been created by the hal_glib.GPin(halcomp.newpin(\n method (see GladeVCP Programming for an example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1001 / 1290\n \n 12.3.6.4 The hal-pin-changed signal\n Event-driven programming means that the UI tells your code when \u201dsomething happens\u201d - through\n a callback, like when a button was pressed. The output HAL widgets (those which display a HAL\n pin\u2019s value) like LED, Bar, VBar, Meter, etc., support the hal-pin-changed signal, which may cause a\n@@ -45123,15 +45123,15 @@\n \u2022 HAL_ToggleButton, HAL_CheckButton: retains on/off state. Important signal: toggled\n \u2022 HAL_RadioButton: a one-of-many group. Important signal: toggled (per button).\n \u2022 Important common methods: set_active(), get_active()\n \u2022 Important properties: label, image\n \n Figure 12.31: Check button\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1002 / 1290\n \n Figure 12.32: Radio buttons\n \n Figure 12.33: Toggle button\n Tip\n@@ -45149,15 +45149,15 @@\n -s\n out s32 pin\n To make a scale useful in Glade, add an Adjustment (General \u2192 Adjustment \u2192 New or existing adjustment) and edit the adjustment object. It defines the default/min/max/increment values. Also, set\n adjustment Page size and Page increment to zero to avoid warnings.\n \n Figure 12.34: Example HAL_HScale\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1003 / 1290\n \n 12.3.6.7 SpinButton\n HAL SpinButton is derived from GtkSpinButton and holds two pins:\n -f\n out FLOAT pin\n@@ -45187,15 +45187,15 @@\n -delta-scaled\n out FLOAT pin\n hal_dial has the following properties:\n cpr\n Sets the Counts per Revolution, allowed values are in the range from 25 to 360\n default = 100\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1004 / 1290\n \n show_counts\n Set this to False, if you want to hide the counts display in the middle of the widget.\n default = True\n label\n@@ -45240,15 +45240,15 @@\n \u2022 [widget name].get_scaled_value()\n Will return the counts value as a float\n \u2022 [widget name].get_delta_scaled_value()\n Will return the counts value as a float\n \u2022 [widget name].set_label(\u201dstring\u201d)\n Sets the label content with \u201dstring\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1005 / 1290\n \n There are two GObject signals emitted:\n \u2022 count_changed\n Emitted when the widget\u2019s count changes eg. from being wheel scrolled.\n \u2022 scale_changed\n@@ -45273,15 +45273,15 @@\n \u2022 Wheel up = increase counts\n \u2022 Wheel down = reduce counts\n As moving the mouse the drag and drop way may be faster than the widget can update itself, you\n may loose counts turning to fast. It is recommended to use the mouse wheel, and only for very rough\n movements the drag and drop way.\n jogwheel exports its count value as HAL pin:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1006 / 1290\n \n -s\n out s32 pin\n jogwheel has the following properties:\n size\n@@ -45304,15 +45304,15 @@\n \u2022 [widget name].get_value()\n Will return the counts value as integer\n \u2022 [widget name].set_label(\u201dstring\u201d)\n Sets the label content with \u201dstring\u201d\n \n Figure 12.37: Example JogWheel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1007 / 1290\n \n 12.3.6.10 Speed Control\n 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.\n The value is controlled with two button to increase or decrease the value. The increment will change\n as long a button is pressed. The value of each increment as well as the time between two changes\n@@ -45352,15 +45352,15 @@\n Float\n The min allowed value.\n Allowed values are 0.0 to 99999.0.\n Default is 0.0.\n If you change this value, the increment will be reset to default, so it might be necessary to set\n afterwards a new increment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1008 / 1290\n \n max\n Float\n The max allowed value.\n Allowed values are 0.001 to 99999.0.\n@@ -45407,15 +45407,15 @@\n There are also Python methods to modify the widget:\n [widget name].set_adjustment(gtk-adjustment)\n \n You can assign a existing adjustment to the control, that way it is easy to replace existing sliders\n without many code changes. Be aware, that after changing the adjustment you may need to set a new\n increment, as it will be reset to its default (100 steps from MIN to MAX):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1009 / 1290\n \n \u2022 [widget name].get_value()\n Will return the counts value as float\n \u2022 [widget name].set_value(float(value))\n Sets the widget to the commanded value\n@@ -45444,15 +45444,15 @@\n \u2022 State_Sensitive_Table\n \u2022 HAL_HBox (deprecated)\n These containers are meant to be used to insensitize (grey out) or hide their children.\n Insensitized children will not respond to input.\n HAL_HideTable\n Has one HAL BIT input pin which controls if its child widgets are hidden or not.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1010 / 1290\n \n Pin: , .\n in bit pin\n If the pin is low then child widgets are visible which is the default state.\n HAL_Table and HAL_Hbox\n@@ -45492,15 +45492,15 @@\n pick_color_on, pick_color_off\n Colors for ON and OFF states.\n These may be represented as #RRRRGGGGBBBB strings and are optional properties which have\n precedence over on_color and off_color.\n led_size\n LED radius (for square - half of LED\u2019s side)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1011 / 1290\n \n led_shape\n LED Shape.\n Valid values are 0 for round, 1 for oval and 2 for square shapes.\n led_blink_rate\n@@ -45534,15 +45534,15 @@\n scale\n Value scale.\n Sets the maximum absolute value of input. Same as setting the .scale pin.\n A float, range from -224 to +2 24.\n green_limit\n Green zone lower limit\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1012 / 1290\n \n yellow_limit\n Yellow zone lower limit\n red_limit\n Red zone lower limit\n@@ -45574,15 +45574,15 @@\n a float value from the ListStore.\n If you\u2019re confused like me about how to edit ComboBox ListStores and CellRenderer, see https://youtu.be/Z5_F-rW2cL8.\n 12.3.6.16 Bars\n HAL_Bar and HAL_VBar widgets for horizontal and vertical bars representing float values.\n HAL_Bar and HAL_VBar each have one input FLOAT HAL pin.\n HAL_Bar and HAL_VBar both bars have the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1013 / 1290\n \n invert\n Swap min and max direction.\n An inverted HBar grows from right to left, an inverted VBar from top to bottom.\n min, max\n@@ -45624,15 +45624,15 @@\n Define up bounds of color zones.\n By default only one zone is enabled. If you want more then one zone set z0_border and z1_border\n to desired values so zone 0 will fill from 0 to first border, zone 1 will fill from first to second border\n and zone 2 from last border to 1.\n Borders are set as fractions.\n Valid values range from 0 to 1.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1014 / 1290\n \n Figure 12.41: Horizontal bar\n \n Figure 12.42: Vertical bar\n \n@@ -45657,15 +45657,15 @@\n bg_color\n Background color of meter.\n z0_color, z1_color, z2_color\n Colors of different value zones.\n Defaults are green, yellow and red.\n For description of zones see z*_border properties.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1015 / 1290\n \n z0_border, z1_border\n Define up bounds of color zones.\n By default only one zone is enabled. If you want more then one zone set z0_border and z1_border\n to desired values so zone 0 will fill from min to first border, zone 1 will fill from first to second\n@@ -45691,15 +45691,15 @@\n show_velocity\n This displays the tool speed.\n Default = true.\n use_commanded\n This selects the DRO to use: commanded or actual values.\n Default = true.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1016 / 1290\n \n metric_units\n This selects the DRO to use: metric or imperial units.\n Default = true.\n show_rapids\n@@ -45745,15 +45745,15 @@\n May be any of x, y, y2 , z, z2 , p (perspective).\n Defaults to z view.\n enable_dro\n Type = boolean.\n Whether to draw a DRO on the plot or not.\n Default = true.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1017 / 1290\n \n mouse_btn_mode\n Type = integer.\n Mouse button handling: leads to different functions of the button:\n \u2022 0 = default: left rotate, middle move, right zoom\n@@ -45799,15 +45799,15 @@\n \u2022 If you set all the plotting options false but show_offsets true you get an offsets page instead of\n a graphics plot.\n \u2022 If you get the zoom distance before changing the view then reset the zoom distance, it is much\n more user friendly.\n \u2022 if you select an element in the preview, the selected element will be used as rotation center\n point\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1018 / 1290\n \n Figure 12.44: Gremlin Example\n \n 12.3.6.20 HAL_Offset\n The HAL_Offset widget is used to display the offset of a single axis.\n@@ -45825,15 +45825,15 @@\n reference_type\n 0:G5x 1:tool 2:G92 3:Rotation around Z\n \n 12.3.6.21 DRO widget\n The DRO widget is used to display the current axis position.\n It has the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1019 / 1290\n \n display_units_mm\n Used to toggle the display units between metric and imperial. Default is False.\n actual\n Select actual (feedback) position or commanded position. Default is True.\n@@ -45872,15 +45872,15 @@\n \u2022 The DRO widget is a modified gtk label widget. As such, much of what can be done to a gtk\n label can be done to the DRO widget.\n \u2022 The font properties may also be set from a css stylesheet which has the highest priority and\n will override values set by GObject properties.\n There a couple ways to directly control the widget using Python.\n Using GObject to set the above listed properties\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1020 / 1290\n \n [widget name].set_property(\u201ddisplay_units_mm\u201d, True)\n [widget name].set_property(\u201dactual\u201d, True)\n [widget name].set_property(\u201ddiameter\u201d, True)\n [widget name].set_property(\u201dmm_text_template\u201d, \u201d%10.3f\u201d)\n@@ -45924,15 +45924,15 @@\n 12.3.6.22 Combi_DRO widget\n The Combi_DRO widget is used to display the current, the relative axis position and the distance to go\n in one DRO.\n By clicking on the DRO the Order of the DRO will toggle around.\n In Relative Mode the actual coordinate system will be displayed.\n Combi_DRO has the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1021 / 1290\n \n joint_number\n Used to select which axis (technically which joint) is displayed.\n On a trivialkins machine (mill, lathe, router) axis/joint numbers are:\n 0:X 1:Y 2:Z etc.\n@@ -45974,15 +45974,15 @@\n toggle_readout\n A left mouse click will toggle the DRO readout through the different modes [\u201dRel\u201d, \u201dAbs\u201d, \u201dDTG\u201d].\n By unchecking the box you can disable that behavior. The toggling can still be done with [widget\n name].toggle_readout().\n Value must be boolean.\n Default is TRUE.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1022 / 1290\n \n cycle_time\n The time the DRO waits between two polls.\n This setting should only be changed if you use more than 5 DRO at the same time, i.e. on a 6 axis\n config, to avoid that the DRO slows down the main application too much.\n@@ -46023,15 +46023,15 @@\n \u2013 [\u201dAbs\u201d, \u201dDTG\u201d, \u201dRel\u201d]\n \u2022 [widget name].get_position()\n Returns the position of the DRO as a list of floats.\n The order is independent of the order shown on the DRO and will be given as [Absolute , relative\n , DTG].\n \u2013 Absolute = the machine coordinates, depends on the actual property will give actual or commanded position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1023 / 1290\n \n \u2013 Relative = will be the coordinates of the actual coordinate system.\n \u2013 DTG = the distance to go.\n Will mostly be 0, as this function should not be used while the machine is moving, because of time\n delays.\n@@ -46066,15 +46066,15 @@\n \u2022 [widget name].system\n The actual system, as mentioned in the system_changed signal.\n \u2022 [widget name].homed\n True if the joint is homed.\n \u2022 [widget name].machine_units\n 0 if Imperial, 1 if Metric.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1024 / 1290\n \n Figure 12.45: Example: Three Combi_DRO in a window\n X = Relative Mode\n Y = Absolute Mode\n Z = DTG Mode\n@@ -46099,15 +46099,15 @@\n Sets the file filter for the objects to be shown.\n Must be a string containing a comma separated list of extensions to be shown.\n Default is \u201dngc,py\u201d.\n sortorder\n Sets the sorting order of the displayed icon.\n Must be an integer value from 0 to 3, where:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1025 / 1290\n \n \u2022 0 = ASCENDING (sorted according to file names)\n \u2022 1 = DESCENDING (sorted according to file names)\n \u2022 2 = FOLDERFIRST (show the folders first, then the files), default\n \u2022 3 = FILEFIRST (show the files first, then the folders)\n@@ -46151,15 +46151,15 @@\n [widget name].btn_sel_next.emit(\u201dclicked\u201d)\n [widget name].btn_get_selected.emit(\u201dclicked\u201d)\n [widget name].btn_dir_up.emit(\u201dclicked\u201d)\n [widget name].btn_exit.emit(\u201dclicked\u201d)\n \n The widget will emit the following signals:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1026 / 1290\n \n \u2022 selected\n This signal is emitted when the user selects an icon.\n It will return a string containing a file path if a file has been selected, or None if a directory has been\n selected.\n@@ -46174,15 +46174,15 @@\n \u2013 state is a boolean and will be True or False.\n \u2022 exit\n This signal is emitted when the exit button has been pressed to close the IconView.\n Mostly needed if the application is started as stand alone.\n \n Figure 12.46: Iconview Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1027 / 1290\n \n 12.3.6.24 Calculator widget\n This is a simple calculator widget, that can be used for numerical input.\n You can preset the display and retrieve the result or that preset value.\n calculator has the following properties:\n@@ -46217,15 +46217,15 @@\n font\n Display font to use\n hide_columns\n This will hide the given columns.\n The columns are designated (in order) as such: s,t,p,x,y,z,a,b,c,u,v,w,d,i,j,q.\n You can hide any number of columns including the select and comments.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1028 / 1290\n \n lathe_display_type\n Show lathe format\n There a couple ways to directly control the widget using Python.\n Using goobject to set the above listed properties:\n@@ -46266,15 +46266,15 @@\n Convenience method to hide buttons.\n You must call this after show_all().\n \u2022 [widget name].get_selected_tool()\n Return the user selected (highlighted) tool number.\n \u2022 [widget name].set_selected_tool(toolnumber)\n Selects (highlights) the requested tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1029 / 1290\n \n Figure 12.47: Tooleditor Example\n \n 12.3.6.26 Offsetpage\n The Offsetpage widget is used to display/edit the offsets of all the axes.\n@@ -46301,15 +46301,15 @@\n mm_text_template\n You can use Python formatting to display the position with different precision.\n imperial_text_template\n You can use Python formatting to display the position with different precision.\n There a couple ways to directly control the widget using Python.\n Using goobject to set the above listed properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1030 / 1290\n \n [widget name].set_property(\u201dhighlight_color\u201d,gdk.Color(\u2019blue\u2019))\n [widget name].set_property(\u201dforeground_color\u201d,gdk.Color(\u2019black\u2019))\n [widget name].set_property(\u201dhide_columns\u201d,\u201dxyzabcuvwt\u201d)\n [widget name].set_property(\u201dhide_rows\u201d,\u201d123456789abc\u201d)\n@@ -46335,15 +46335,15 @@\n This is a list of a list of offset-name/user-name pairs.\n The default text is the same as the offset name.\n \u2022 [widget name].get_names()\n This returns a list of a list of row-keyword/user-name pairs.\n The user name column is editable, so saving this list is user friendly.\n See set_names above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1031 / 1290\n \n Figure 12.48: Offsetpage Example\n \n 12.3.6.27 HAL_sourceview widget\n \n@@ -46364,15 +46364,15 @@\n Sets the line to highlight.\n Uses the sourceview line numbers.\n \u2022 [widget name].get_line_number()\n Returns the currently highlighted line.\n \u2022 [widget name].line_up()\n Moves the highlighted line up one line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1032 / 1290\n \n \u2022 [widget name].line_down()\n Moves the highlighted line down one line.\n \u2022 [widget name].load_file(\u2019filename\u2019)\n Loads a file.\n@@ -46394,15 +46394,15 @@\n use_double_click\n Boolean, True enables the mouse double click feature and a double click on an entry will submit\n that command.\n It is not recommended to use this feature on real machines, as a double click on a wrong entry\n may cause dangerous situations.\n Using goobject to set the above listed properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1033 / 1290\n \n [widget name].set_property(\u201dfont_size_tree\u201d,10)\n [widget name].set_property(\u201dfont_size_entry\u201d,20)\n [widget name].set_property(\u201duse_double_click\u201d,False)\n \n@@ -46415,15 +46415,15 @@\n \n Figure 12.50: HAL widgets in a bitmap Example\n \n 12.3.7 Action Widgets Reference\n GladeVCP includes a collection of \u201dcanned actions\u201d called VCP Action Widgets for the Glade user\n interface editor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1034 / 1290\n \n Note\n Other than HAL widgets, which interact with HAL pins, VCP Actions interact with LinuxCNC and the\n G-code interpreter.\n \n@@ -46447,15 +46447,15 @@\n The command string may use special keywords to access important functions.\n \u2022 ACTION for access to the ACTION command library.\n \u2022 GSTAT for access to the Gstat status message library.\n \u2022 INFO for access to collected data from the INI file.\n \u2022 HAL for access to the HAL linuxcnc Python module\n \u2022 STAT for access to LinuxCNC\u2019s raw status via the LinuxCNC Python module.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1035 / 1290\n \n \u2022 CMD for access to LinuxCNC\u2019s commands via the LinuxCNC Python module.\n \u2022 EXT for access to the handler file functions if available.\n \u2022 linuxcnc for access to the LinuxCNC Python module.\n \u2022 self for access to the widget instance.\n@@ -46489,15 +46489,15 @@\n that the requested operation is running:\n \u2022 The Run toggle sends an AUTO_RUN command and waits in the pressed state until the interpreter is\n idle again.\n \u2022 The Stop toggle is inactive until the interpreter enters the active state (is running G-code) and then\n allows user to send AUTO_ABORT command.\n \u2022 The MDI toggle sends given MDI command and waits for its completion in pressed inactive state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1036 / 1290\n \n 12.3.7.4 The Action_MDI Toggle and Action_MDI widgets\n These widgets provide a means to execute arbitrary MDI commands.\n The Action_MDI widget does not wait for command completion as the Action_MDI Toggle does, which\n remains disabled until command complete.\n@@ -46517,15 +46517,15 @@\n 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\n works:\n \u2022 assume you have a HAL SpinBox named speed, and you want to pass its current value as a parameter\n in an MDI command.\n \u2022 The HAL SpinBox will have a float-type HAL pin named speed-f (see HalWidgets description).\n \u2022 To substitute this value in the MDI command, insert the HAL pin name enclosed like so: ${pin-name}\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1037 / 1290\n \n \u2022 for the above HAL SpinBox, we could use (MSG, \u201dThe speed is: ${speed-f}\u201d) just to show what\u2019s\n happening.\n The example UI file is configs/apps/gladevcp/mdi-command-example/speed.ui. Here\u2019s what you\n get when running it:\n@@ -46541,15 +46541,15 @@\n Figure 12.54: Action_MDI Advanced Example\n \n 12.3.7.8 Preparing for an MDI Action, and cleaning up afterwards\n 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\n might get changed by the command or subroutine - for example, a probing subroutine will very likely\n set the feed value quite low. With no further precautions, your previous feed setting will be overwritten by the probing subroutine\u2019s value.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1038 / 1290\n \n 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\n any state before executing the MDI Action, and to restore it to previous values afterwards. The signal\n names are mdi-command-start and mdi-command-stop; the handler names can be set in Glade like\n any other handler.\n@@ -46586,15 +46586,15 @@\n \u2022 mode-related:\n \u2013 mode-manual: emitted when LinuxCNC enters manual mode,\n \u2013 mode-mdi: emitted when LinuxCNC enters MDI mode,\n \u2013 mode-auto: emitted when LinuxCNC enters automatic mode,\n \u2022 interpreter-related: emitted when the G-code interpreter changes into that mode\n \u2013 interp-run\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1039 / 1290\n \n \u2013 interp-idle\n \u2013 interp-paused\n \u2013 interp-reading\n \u2013 interp-waiting\n@@ -46635,15 +46635,15 @@\n print(INFO.MACHINE_IS_METRIC)\n ACTION.SET_ERROR_MESSAGE(\u2019Something went wrong\u2019)\n \n More information can be found here: GladeVCP Libraries modules. There is a sample configuration\n that demonstrates using the core library with GladeVCP\u2019s action Python widgets and with a Python\n handler file. Try loading sim/axis/gladevcp/gladevcp_panel_tester.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1040 / 1290\n \n 12.3.8.3 An example: adding custom user callbacks in Python\n This is just a minimal example to convey the idea - details are laid out in the rest of this section.\n GladeVCP can not only manipulate or display HAL pins, you can also write regular event handlers in\n Python. This could be used, among others, to execute MDI commands. Here\u2019s how you do it:\n@@ -46678,15 +46678,15 @@\n The overall approach is as follows:\n \u2022 Design your UI with Glade, and set signal handlers where you want actions associated with a widget.\n \u2022 Write a Python module which contains callable objects (see handler models below).\n \u2022 Pass your module\u2019s path name to GladeVCP with the -u option.\n \u2022 GladeVCP imports the module, inspects it for signal handlers and connects them to the widget tree.\n \u2022 The main event loop is run.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1041 / 1290\n \n For simple tasks it is sufficient to define functions named after the Glade signal handlers. These will be\n called when the corresponding event happens in the widget tree. Here\u2019s a trivial example - it assumes\n that the pressed signal of a Gtk Button or HAL Button is linked to a callback called on_button_press:\n nhits = 0\n@@ -46732,15 +46732,15 @@\n self.active = False\n # connect to client-events from the host GUI\n def on_map_event(self, widget, data=None):\n top = widget.get_toplevel()\n print(\u201dmap event\u201d)\n top.connect(\u2019client-event\u2019, self.event)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1042 / 1290\n \n If during module inspection GladeVCP finds a function get_handlers, it calls it as follows:\n get_handlers(halcomp,builder,useropts)\n \n The arguments are:\n@@ -46775,15 +46775,15 @@\n screen). And the HAL component isn\u2019t ready as well, so its unsafe to access pins values in your\n __init__() method.\n If you want to have a callback to execute at program start after it is safe to access HAL pins, then a\n connect a handler to the realize signal of the top level window1 (which might be its only real purpose).\n At this point GladeVCP is done with all setup tasks, the HAL file has been run, and GladeVCP is about\n to enter the Gtk main loop.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1043 / 1290\n \n 12.3.8.7 Multiple callbacks with the same name\n Within a class, method names must be unique. However, it is OK to have multiple class instances\n passed to GladeVCP by get_handlers() with identically named methods. When the corresponding\n signal occurs, these methods will be called in definition order - module by module, and within a module,\n@@ -46823,15 +46823,15 @@\n are saved and to be restored. In the case of signature mismatch, a new INI file with default settings\n is generated.\n 12.3.8.10 Using persistent variables\n If you want any of Gtk widget state, HAL widgets output pin\u2019s values and/or class attributes of your\n handler class to be retained across invocations, proceed as follows:\n \u2022 Import the gladevcp.persistence module.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1044 / 1290\n \n \u2022 Decide which instance attributes, and their default values you want to have retained, if any.\n \u2022 Decide which widgets should have their state retained.\n \u2022 Describe these decisions in your handler class\u2019 \\__init()__ method through a nested dictionary\n as follows:\n@@ -46872,15 +46872,15 @@\n ini.restore_state(obj)\n Restore HAL out pins and obj\u2019s attributes as saved/initialized to default as above.\n 12.3.8.11 Saving the state on GladeVCP shutdown\n To save the widget and/or variable state on exit, proceed as follows:\n \u2022 Select some interior widget (type is not important, for instance a table).\n \u2022 In the Signals tab, select GtkObject. It should show a destroy signal in the first column.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1045 / 1290\n \n \u2022 Add the handler name, e.g. on_destroy, to the second column.\n \u2022 Add a Python handler like below:\n import gtk\n ...\n@@ -46919,15 +46919,15 @@\n 12.3.8.14 Adding HAL pins\n If you need HAL pins which are not associated with a specific HAL widget, add them as follows:\n import hal_glib\n ...\n # in your handler class __init__():\n self.example_trigger = hal_glib.GPin(halcomp.newpin(\u2019example-trigger\u2019, hal.HAL_BIT, hal. \u2190HAL_IN))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1046 / 1290\n \n To get a callback when this pin\u2019s value changes, associate a value-change callback with this pin, add:\n self.example_trigger.connect(\u2019value-changed\u2019, self._on_example_trigger_change)\n \n and define a callback method (or function, in this case leave out the self parameter):\n@@ -46969,15 +46969,15 @@\n self.max_value = hal_glib.GPin(halcomp.newpin(\u2019max-value\u2019, hal.HAL_FLOAT, hal. \u2190HAL_IN))\n self.max_value.connect(\u2019value-changed\u2019, self._on_max_value_change)\n inifile = linuxcnc.ini(os.getenv(\u201dINI_FILE_NAME\u201d))\n mmin = float(inifile.find(\u201dMETER\u201d, \u201dMIN\u201d) or 0.0)\n self.meter = self.builder.get_object(\u2019meter\u2019)\n self.meter.min = mmin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1047 / 1290\n \n def get_handlers(halcomp,builder,useropts):\n return [HandlerClass(halcomp,builder,useropts)]\n \n 12.3.8.17 Value-changed callback with hal_glib\n@@ -47016,15 +47016,15 @@\n window1.visible to False, and ignore an initial unmap event.\n 2. My GladeVCP program starts, but no window appears where I expect it to be?\n The window AXIS allocates for GladeVCP will obtain the natural size of all its child widgets\n combined. It is the child widget\u2019s job to request a size (width and/or height). However, not all\n widgets do request a width greater than 0, for instance the Graph widget in its current form. If\n there\u2019s such a widget in your Glade file and it is the one which defines the layout you might want\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1048 / 1290\n \n to set its width explicitly. Note that setting the window1 width and height properties in Glade\n does not make sense because this window will be orphaned during re-parenting and hence its\n geometry will have no impact on layout (see above). The general rule is: if you manually run a UI\n file with gladevcp and its window has reasonable geometry, it should come up in AXIS\n@@ -47063,15 +47063,15 @@\n \u2022 If you\u2019re using HAL_table or HAL_HBox widgets, be aware they have an HAL pin associated with it\n which is off by default. This pin controls whether these container\u2019s children are active or not.\n \n 12.3.11 Implementation note: Key handling in AXIS\n We believe key handling works OK, but since it is new code, we\u2019re telling about it you so you can\n watch out for problems; please let us know of errors or odd behavior. This is the story:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1049 / 1290\n \n AXIS uses the TkInter widget set. GladeVCP applications use Gtk widgets and run in a separate\n process context. They are hooked into AXIS with the Xembed protocol. This allows a child application\n like GladeVCP to properly fit in a parent\u2019s window, and - in theory - have integrated event handling.\n However, this assumes that both parent and child application properly support the Xembed protocol,\n@@ -47107,15 +47107,15 @@\n identically-named files within subdirectories of the system directory specified by LINUXNC_AUX_GLADEVCP\n (e.g., /usr/share/linuxcnc/aux_gladevcp). This provision allows a developer to test an application by\n exporting GLADEVCP_EXTRAS to specify a private application directory without removing a systeminstalled application directory. Messages indicating rejected duplicates are printed to stdout.\n Note\n Support for auxiliary GladeVCP applications requires a Python module named importlib. This module\n may not be available in older installations like Ubuntu-Lucid.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1050 / 1290\n \n 12.4 GladeVCP Library modules\n Libraries are prebuilt Python modules that give added features to GladeVCP. In this way you can select\n what features you want - yet don\u2019t have to build common ones yourself.\n \n@@ -47162,15 +47162,15 @@\n MAX_LINEAR_JOG_VEL = 300 units per minute\n DEFAULT_ANGULAR_JOG_VEL =\n MIN_ANGULAR_JOG_VEL =\n MAX_ANGULAR_JOG_VEL =\n MAX_FEED_OVERRIDE =\n MAX_TRAJ_VELOCITY =\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1051 / 1290\n \n AVAILABLE_SPINDLES = int(self.INI.find(\u201dTRAJ\u201d, \u201dSPINDLES\u201d) or 1)\n DEFAULT_SPINDLE_0_SPEED = 200\n MAX_SPINDLE_0_SPEED = 2500\n MAX_SPINDLE_0_OVERRIDE = 100\n@@ -47220,15 +47220,15 @@\n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n INFO = Info()\n \n To access INFO data use this general syntax:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1052 / 1290\n \n home_state = INFO.NO_HOME_REQUIRED\n if INFO.MACHINE_IS_METRIC is True:\n print(\u2019Metric based\u2019)\n \n@@ -47267,15 +47267,15 @@\n ACTION.SET_TOOL_OFFSET(axis,value,fixture = False)\n ACTION.RUN()\n ACTION.ABORT()\n ACTION.PAUSE()\n ACTION.SET_MAX_VELOCITY_RATE(rate)\n ACTION.SET_RAPID_RATE(rate)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ACTION.SET_FEED_RATE(rate)\n ACTION.SET_SPINDLE_RATE(rate)\n ACTION.SET_JOG_RATE(rate)\n ACTION.SET_JOG_INCR(incr)\n ACTION.SET_JOG_RATE_ANGULAR(rate)\n ACTION.SET_JOG_INCR_ANGULAR(incr, text)\n@@ -47316,15 +47316,15 @@\n get_jog_info (num)\n jnum_check(num)\n ensure_mode(modes)\n open_filter_program(filename, filter)\n \n 1053 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1054 / 1290\n \n 12.5 QtVCP\n QtVCP is an infrastructure to build custom CNC screens or control panels for LinuxCNC.\n It displays a .ui file built with Qt Designer screen editor and combines this with Python programming\n to create a GUI screen for running a CNC machine.\n@@ -47332,54 +47332,54 @@\n code for even finer grain customization.\n \n 12.5.1 Showcase\n Few examples of QtVCP built screens and virtual control panels:\n \n Figure 12.55: QtDragon - 3/4-Axis Sample\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.56: QtDefault - 3-Axis Sample\n \n 1055 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.57: QtAxis - Self Adjusting Axis Sample\n \n 1056 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.58: Blender - 4-Axis Sample\n \n 1057 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1058 / 1290\n \n Figure 12.59: X1mill - 4-Axis Sample\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.60: cam_align - Camera Alignment VCP\n \n 1059 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.61: test_panel - Test Panel VCP\n \n 12.5.2 Overview\n Two files are used, individually or in combination, to add customizations:\n \n 1060 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1061 / 1290\n \n \u2022 A UI file that is a XML file made with Qt Designer graphical editor.\n \u2022 A handler file which is a Python code text file.\n Normally QtVCP uses the stock UI and handler file, but you can specify QtVCP to use local UI and\n handler files.\n@@ -47412,15 +47412,15 @@\n \n Options\n \u2022 -d Debugging on.\n \u2022 -i Enable info output.\n \u2022 -v Enable verbose debug output.\n \u2022 -q Enable only error debug output.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1062 / 1290\n \n \u2022 -a Set window always on top.\n \u2022 -c NAME HAL component name. Default is to use the UI file name.\n \u2022 -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\n -g +XOFFSET+YOFFSET for just position. Example: -g 200x400+0+100\n@@ -47454,15 +47454,15 @@\n The Qt Designer editor makes it relatively easy to build and edit this file.\n 12.5.2.4 Handler Files\n A handler file is a file containing Python code, which adds to QtVCP default routines.\n A handler file allows one to modify defaults, or add logic to a QtVCP screen without having to modify\n QtVCP\u2019s core code. In this way you can have custom behaviors.\n If present a handler file will be loaded. Only one file is allowed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1063 / 1290\n \n 12.5.2.5 Libraries Modules\n QtVCP, as built, does little more than display the screen and react to widgets. For more prebuilt\n behaviors there are available libraries (found in lib/python/qtvcp/lib in RIP LinuxCNC install).\n Libraries are prebuilt Python modules that add features to QtVCP. In this way you can select what\n@@ -47492,15 +47492,15 @@\n QtVCP will look for a folder named (in the launched configuration folder that holds\n the INI file).\n In that folder, QtVCP will load any of the available following files:\n \u2022 .ui,\n \u2022 _handler.py, and\n \u2022 .qss.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1064 / 1290\n \n 12.5.2.8 Modifying Stock Screens\n There are three ways to customize a screen/panel.\n Stylesheets can be used to set Qt properties. If a widget uses properties then they usually can be\n modified by stylesheets.\n@@ -47544,15 +47544,15 @@\n # You call this function without the usual preceding \u2019self.\u2019\n # This is because will will not be patching it into the original handler class instance\n # It will only be called from code in this file.\n def test_function(obj):\n print(dir(obj))\n # This is a new function we will added to the existing handler class instance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1065 / 1290\n \n # Notice it calls the unbounded function with \u2019self\u2019 as an parameter \u2019self\u2019 is the only\n global reference available.\n # It references the window instance.\n def on_keycall_F10(self,event,state,shift,cntrl):\n@@ -47604,15 +47604,15 @@\n # function that calls our new function (of the same name)\n # defined in this file\n self.after_override__ = types.MethodType(after_override__, self)\n \n If you wish to modify a stock screen with full control, copy its UI and handler file to your configuration folder.\n There is a QtVCP panel to help with this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1066 / 1290\n \n \u2022 Open a terminal and run the following command:\n qtvcp copy_dialog\n \n \u2022 Select the screen and destination folder in the dialog\n@@ -47628,40 +47628,40 @@\n QtVCP can be used to create control panels that interface with HAL.\n 12.5.3.1 Builtin Panels\n There are several builtin HAL panels available.\n In a terminal type qtvcp to see a list:\n test_panel\n Collection of useful widgets for testing HAL components, including speech of LED state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.62: QtVCP HAL Test Builtin Panel\n cam_align\n A camera display widget for rotational alignment.\n \n 1067 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.63: cam_align - Camera Alignment VCP\n sim_panel\n A small control panel to simulate MPG jogging controls etc.\n For simulated configurations.\n \n 1068 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.64: QtVCP Sim Builtin Panel\n vismach_mill_xyz\n 3D OpenGL view of a 3-axis milling machine.\n \n 1069 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1070 / 1290\n \n Figure 12.65: QtVismach - 3-Axis Mill Builtin Panel\n You can load these from the terminal or from a HAL file with this basic command:\n loadusr qtvcp test_panel\n \n@@ -47670,15 +47670,15 @@\n \n In this way HAL will wait till the HAL pins are made before continuing on.\n 12.5.3.2 Custom Panels\n You can of course make your own panel and load it.\n If you made a UI file named my_panel.ui and a HAL file named my_panel.hal, you would then load\n this from a terminal with:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1071 / 1290\n \n halrun -I -f my_panel.hal\n \n Example HAL file loading a QtVCP panel\n # load realtime components\n@@ -47727,15 +47727,15 @@\n 1\n \n In this case we load qtvcp using -Wn which waits for the panel to finish loading before continuing\n to run the next HAL command.\n This is to ensure that the panel created HAL pins are actually done in case they are used in the\n rest of the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1072 / 1290\n \n 12.5.4 Build A Simple Clean-sheet Custom Screen\n \n Figure 12.66: QtVCP Ugly custom screen\n 12.5.4.1 Overview\n@@ -47751,15 +47751,15 @@\n \n Add qtvcp_plugin.py link to the Qt Designer Search Path Then you must add a link to the\n qtvcp_plugin.py in one of the folders that Qt Designer will search into.\n In a RIP version of LinuxCNC qtvcp_plugin.py will be:\n \u2019~/LINUXCNC_PROJECT_NAME/lib/python/qtvcp/plugins/qtvcp_plugin.py\u2019\n For a Package installed version it should be:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1073 / 1290\n \n \u2019usr/lib/python2.7/qtvcp/plugins/qtvcp_plugin.py\u2019 or\n \u2019usr/lib/python2.7/dist-packages/qtvcp/plugins/qtvcp_plugin.py\u2019\n Make a symbolic link to the above file and move it to one of the places Qt Designer searches in.\n Qt Designer searches in these two place for links (pick one):\n@@ -47795,15 +47795,15 @@\n This widget doesn\u2019t add anything visually but sets up some common options.\n It\u2019s recommended to always add this widget before any other.\n Right click on the main window, not the ScreenOptions widget, and set the layout as vertical to make\n the ScreenOptions fullsized.\n Add Panel Content On the right hand side there is a panel with tabs for a Property editor and an\n Object inspector.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1074 / 1290\n \n On the Object inspector click on the ScreenOptions.\n Then switch to the Property Editor and, under the ScreenOptions heading, toggle filedialog_option.\n Drag and drop a GCodeGraphics widget and a GcodeEditor widget.\n Place and resize them as you see fit leaving some room for buttons.\n@@ -47830,21 +47830,21 @@\n Do the same for all the other button with the addition of:\n \u2022 With the Home button we must also change the joint_number property to -1.\n This tells the controller to home all the axes rather then a specific axis.\n \u2022 With the Pause button:\n \u2013 Under the Indicated_PushButton heading check the indicator_option.\n \u2013 Under the QAbstactButton heading check checkable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.67: Qt Designer: Selecting Pause Button\u2019s Properties\n \n 1075 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1076 / 1290\n \n Save The .ui File We then need to save this design as tester.ui in the sim/qtvcp folder.\n We are saving it as tester as that is a file name that QtVCP recognizes and will use a built in handler\n file to display it.\n 12.5.4.4 Handler file\n@@ -47877,15 +47877,15 @@\n \u2022 after the screen is built,\n \u2022 after all the POSTGUI_HALFILEs are run.\n In our example there are no HAL pins to connect.\n \n 12.5.5 Handler File In Detail\n Handler files are used to create custom controls using Python.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.5.5.1 Overview\n Here is a sample handler file.\n It\u2019s broken up in sections for ease of discussion.\n ############################\n # **** IMPORT SECTION **** #\n ############################\n@@ -47932,15 +47932,15 @@\n def initialized__(self):\n pass\n def processed_key_event__(self,receiver,event,is_pressed,key,code,shift,cntrl):\n # when typing in MDI, we don\u2019t want keybinding to call functions\n \n 1077 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1078 / 1290\n \n # so we catch and process the events directly.\n # We do want ESC, F1 and F2 to call keybinding functions though\n if code not in(QtCore.Qt.Key_Escape,QtCore.Qt.Key_F1 ,QtCore.Qt.Key_F2,\n QtCore.Qt.Key_F3,QtCore.Qt.Key_F5,QtCore.Qt.Key_F5):\n@@ -47991,15 +47991,15 @@\n #######################\n # CALLBACKS FROM FORM #\n #######################\n #####################\n # GENERAL FUNCTIONS #\n #####################\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n # keyboard jogging from key binding calls\n # double the rate if fast is true\n def kb_jog(self, state, joint, direction, fast = False, linear = True):\n if not STATUS.is_man_mode() or not STATUS.machine_is_on():\n return\n if linear:\n@@ -48048,15 +48048,15 @@\n def on_keycall_ZPOS(self,event,state,shift,cntrl):\n self.kb_jog(state, 2, 1, shift)\n def on_keycall_ZNEG(self,event,state,shift,cntrl):\n self.kb_jog(state, 2, -1, shift)\n \n 1079 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1080 / 1290\n \n def on_keycall_APOS(self,event,state,shift,cntrl):\n pass\n #self.kb_jog(state, 3, 1, shift, False)\n def on_keycall_ANEG(self,event,state,shift,cntrl):\n@@ -48091,15 +48091,15 @@\n 12.5.5.5 INITIALIZE Section\n Like all Python libraries the +__init__+ function is called when the library is first instantiated.\n This is where you would set up defaults, as well as reference variables and global variables.\n The widget references are not available at this point.\n The variables halcomp, widgets and paths give access to QtVCP\u2019s HAL component, widgets, and path\n info respectively.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1081 / 1290\n \n 12.5.5.6 SPECIAL FUNCTIONS Section\n There are several special functions that QtVCP looks for in the handler file.\n If QtVCP finds these it will call them, if not it will silently ignore them.\n class_patch__(self):\n@@ -48137,15 +48137,15 @@\n The Linux system will not shutdown if using this function, you will have to do that yourself.\n QtVCP/LinuxCNC will terminate without a prompt once this function returns.\n closing_cleanup__(self):\n This function is called just before the screen closes. It can be used to do cleanup before closing.\n 12.5.5.7 STATUS CALLBACKS Section\n By convention this is where you would put functions that are callbacks from STATUS definitions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1082 / 1290\n \n 12.5.5.8 CALLBACKS FROM FORM Section\n By convention this is where you would put functions that are callbacks from the widgets connected\n to the MainWindow in the Qt Designer editor.\n 12.5.5.9 GENERAL FUNCTIONS Section\n@@ -48176,15 +48176,15 @@\n 12.5.6.1 Overview\n In the Qt Designer editor:\n \u2022 You create user function slots\n \u2022 You connect the slots to widgets using signals.\n In the handler file:\n \u2022 You create the slot\u2019s functions defined in Qt Designer.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1083 / 1290\n \n 12.5.6.2 Using Qt Designer to add Slots\n When you have loaded your screen into Qt Designer, add a plain PushButton to the screen.\n You could change the name of the button to something interesting like test_button.\n There are two ways to edit connections - This is the graphical way.\n@@ -48200,15 +48200,15 @@\n \u2022 You can now edit a new slot name.\n \u2022 Erase the default name slot() and change it to test_button()\n \u2022 Press the OK button.\n \u2022 You\u2019ll be back to the Configure Connections dialog.\n \u2022 Now you can select your new slot in the slot list.\n \u2022 Then press OK and save the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1084 / 1290\n \n Figure 12.68: Qt Designer Signal/Slot Selection\n \n 12.5.6.3 Python Handler Changes\n Now you must add the function to the handler file.\n@@ -48225,15 +48225,15 @@\n \n In fact it doesn\u2019t matter where in the handler class you put the commands but by convention this is\n where to put it.\n Save the handler file.\n Now when you load your screen and press the button it should print the name of the button in the\n terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1085 / 1290\n \n 12.5.7 More Information\n QtVCP Builtin Virtual Control Panels\n QtVCP Widgets\n QtVCP Libraries\n@@ -48250,25 +48250,25 @@\n In a terminal type qtvcp list to see a list.\n 12.6.1.1 copy\n Used for copying QtVCP\u2019s builtin Screens/VCP Panels/QtVismach code to a folder so one can\n customize it.\n In a terminal run:\n qtvcp copy\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1086 / 1290\n \n Figure 12.69: QtVCP copy Dialog - Screen, VCP Panel or QtVismach Code Copy Panel\n \n 12.6.1.2 spindle_belts\n This panel is designed to display additional RS485 VFD data and also to configure a 4 sheave, 2 belt\n spindle drive via a series of buttons.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1087 / 1290\n \n In addition, it is also a useful template to use for your custom panel because it includes:\n \u2022 Display of additional HAL data\n \u2022 Buttons and button groups\n \u2022 Dynamic changes to button enabled/disabled state based on the state of other buttons\n@@ -48281,15 +48281,15 @@\n \u2022 A custom component that scales the VFD frequency to obtain the desired spindle speed.\n \u2022 A belt driven spindle that uses two belts and an intermediate idler pulley much like a drill press.\n \u2022 Connect the input pins qtdragon.belts. in your postgui HAL file.\n The belts are broken into two button groups, the front belts and the rear belts. These are numbered as\n per the plate on the machine. Buttons in a group are mutually exclusive, i.e., only one can be selected\n in the group.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1088 / 1290\n \n Additionally, it\u2019s not possible to have both belts on the same level with this kind of mechanism because\n you cannot fit two belts to the one idler pulley sheave. So if a belt is selected, its opposite button is\n disabled. E.g., if belt 3 is selected, belt 7 is disabled.\n Add these lines to the [DISPLAY] section in your .ini file\n@@ -48316,15 +48316,15 @@\n \u2022 The dial\u2019s range can be adjusted from a drop down menu.\n \u2022 The output can be scaled with the spinbox.\n \u2022 A combobox can be used to automatically select and connect to a signal.\n loadusr qtvcp test_dial\n \n Figure 12.70: QtVCP test_dial Panel - Test Dial VCP\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.6.1.4 test_button\n \u2022 This panel has a button that will set a HAL pin.\n \u2022 The button can be selected as a momentary or a toggle button.\n \u2022 The button\u2019s indicator color can be adjusted from a drop down menu.\n \u2022 You can add more buttons from the drop down menu.\n \u2022 You can load a Halmeter from the drop down menu.\n@@ -48346,15 +48346,15 @@\n \u2022 A combobox can be used to automatically select and connect to a pin/signal.\n \u2022 You can add more LEDs from the drop down menu.\n \u2022 The LED can be detached from the main windows.\n Here is how to load test_led from a HAL script:\n \n 1089 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1090 / 1290\n \n loadusr qtvcp test_led\n loadusr qtvcp -o 4 test_led\n \n The -o switch sets how many LEDs the panel starts with.\n@@ -48362,24 +48362,24 @@\n \n Figure 12.72: QtVCP test_dial Panel - Test LED VCP\n \n 12.6.1.6 test_panel\n Collection of useful widgets for testing HAL component, including speech of LED state.\n loadusr qtvcp test_panel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.73: QtVCP test_panel - HAL Component Testing Panel\n \n 12.6.1.7 cam_align\n A camera display widget for rotational alignment.\n \n 1091 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1092 / 1290\n \n Figure 12.74: QtVCP cam_align Panel - Camera Based Alignment Panel\n Usage Add these lines to the INI file:\n [DISPLAY]\n EMBED_TAB_NAME = cam_align\n@@ -48393,15 +48393,15 @@\n You can add window width and height size, rotation increment, and camera number from the INI with\n -o options.\n EMBED_TAB_COMMAND = halcmd loadusr -Wn qtvcp_embed qtvcp -d -c qtvcp_embed -x {XID} -o size \u2190=400,400 -o rotincr=.2 -o camnumber=0 cam_align\n \n Mouse controls:\n \u2022 left mouse single click - increase cross hair rotation one increment\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1093 / 1290\n \n \u2022 right mouse single click - decrease cross hair rotation one increment\n \u2022 middle mouse single click - cycle through rotation increments\n \u2022 left mouse hold and scroll - scroll camera zoom\n \u2022 right mouse hold and scroll - scroll cross hair rotation angle\n@@ -48426,95 +48426,95 @@\n If you want to hide both, use a comma between them with no spaces.\n The -a option will make the panel always-on-top of all windows.\n loadusr qtvcp sim_panel\n \n Here we load the panel with no MPG selection buttons and the always-on-top option.\n loadusr qtvcp -a -o hide=groupBoxSelection sim_panel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1094 / 1290\n \n Figure 12.75: QtVCP sim_panel - Simulated Controls Panel For Screen Testing.\n \n 12.6.1.9 tool_dialog\n Manual tool change dialog that gives tool description.\n loadusr -Wn tool_dialog qtvcp -o speak_on -o audio_on tool_dialog\n \n Options:\n \u2022 -o notify_on - use desktop notify dialogs instead of QtVCP native ones.\n \u2022 -o audio_on - play sound on tool change\n \u2022 -o speak_on - speak announcement of tool change\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.76: QtVCP tool_dialog - Manual Tool Change Dialog\n \n 12.6.2 vismach 3D Simulation Panels\n These panels are prebuilt simulation of common machine types.\n These are also embed-able in other screens such as AXIS or GMOCCAPY.\n 12.6.2.1 QtVCP vismach_mill_xyz\n 3D OpenGL view of a 3-Axis milling machine.\n loadusr qtvcp vismach_mill_xyz\n \n 1095 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1096 / 1290\n \n Figure 12.77: QtVCP vismach_mill_xyz - 3-Axis Mill 3D View Panel\n \n 12.6.2.2 QtVCP vismach_router_atc\n 3D OpenGL view of a 3-Axis router style, gantry bed milling machine.\n This particular panel shows how to define and connect the model parts in the handler file, rather then\n importing the pre-built model from QtVCP\u2019s vismach library.\n loadusr qtvcp vismach_router_atc\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1097 / 1290\n \n Figure 12.78: QtVCP vismach_router_atc - 3-Axis Gantry Bed Mill 3D View Panel\n \n 12.6.2.3 QtVCP vismach_scara\n 3D OpenGL view of a SCARA based milling machine.\n loadusr qtvcp vismach_scara\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.79: QtVCP vismach_scara - SCARA Mill 3D View Panel\n \n 12.6.2.4 QtVCP vismach_millturn\n 3D OpenGL view of a 3-Axis milling machine with an A axis/spindle.\n loadusr qtvcp vismach_millturn\n \n 1098 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.80: QtVCP vismach_millturn - 4 Axis MillTurn 3D View Panel\n \n 12.6.2.5 QtVCP vismach_mill_5axis_gantry\n 3D OpenGL view of a 5-Axis gantry type milling machine.\n loadusr qtvcp vismach_mill_5axis_gantry\n \n 1099 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1100 / 1290\n \n Figure 12.81: QtVCP vismach_mill_5axis_gantry - 5-AxIs Gantry Mill 3D View Panel\n \n 12.6.2.6 QtVCP vismach_fanuc_200f\n 3D openGL view of a 6 joint robotic arm.\n loadusr qtvcp vismach_fanuc_200f\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1101 / 1290\n \n Figure 12.82: QtVCP vismach_fanuc_200f - 6 Joint Robotic Arm\n \n 12.6.3 Custom Virtual Control Panels\n You can of course make your own panel and load it.\n@@ -48542,15 +48542,15 @@\n # connect pins\n net bit-input1\n \n test_panel.checkbox_1\n \n classicladder.0.in-00\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1102 / 1290\n \n net bit-hide\n \n test_panel.checkbox_4\n \n@@ -48602,15 +48602,15 @@\n There are panels available that are included with LinuxCNC. To see a list open a terminal and type\n qtvcp and press return.\n You will get a help printout and a list of builtin screen and panels.\n Pick any of the names from the panel list and add that to the COMMAND entry after qtvcp.\n The builtin panel search path is share/qtvcp/panels/PANELNAME.\n Run-In-Place and installed versions of LinuxCNC have these in different locations on the system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1103 / 1290\n \n 12.6.4.3 Location of Custom Panels\n Custom panels can be embedded too -either a modified builtin panel or a new user-built one.\n When loading panels, QtVCP looks in the configuration folders path for qtvcp/panels/PANELNAME/PANELNAME.ui.\n PANNELNAME being any valid string with no spaces. If no path is found there, then looks in the\n@@ -48646,15 +48646,15 @@\n 12.7 QtVCP Widgets\n Qtscreen uses QtVCP widgets for LinuxCNC integration.\n Widget is the general name for the UI objects such as buttons and labels in PyQt.\n You are free to use any available default widgets in the Qt Designer editor.\n There are also special widgets made for LinuxCNC that make integration easier. These are split in\n two, heading on the right side of the editor:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1104 / 1290\n \n \u2022 One is for HAL only widgets.\n \u2022 The other is for CNC control widgets.\n You are free to mix them in any way on your panel.\n Note\n@@ -48678,15 +48678,15 @@\n Figure 12.83: QtVCP LED: LED Indicator Widget\n A LED like indicator that optionally follows a HAL pin\u2019s logic.\n halpin_option\n Selects if the LED follows an input HAL pin or program state.\n diameter\n Diameter of the LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1105 / 1290\n \n color\n Color of the LED when on.\n off_color\n Color of the LED when off.\n@@ -48710,15 +48710,15 @@\n This widget allows the user to check a box to set a HAL pin true or false.\n It is based on PyQt\u2019s QCheckButton.\n 12.7.1.5 RadioButton Widget\n This widget allows a user to set HAL pins true or false. Only one RadioButton widget of a group\n can be true at a time.\n It is based on PyQt\u2019s QRadioButton.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1106 / 1290\n \n 12.7.1.6 Gauge - Round Dial Gauge Widget\n \n Figure 12.84: QtVCP Gauge: Round Dial Gauge Widget\n Round Gauge can be used in a LinuxCNC GUI to display an input parameter on the dial face.\n@@ -48740,15 +48740,15 @@\n This is the number of ticks/gauge readings on the gauge face.\n It should be set to a number that ensures the text readings around the gauge face are readable.\n The minimum allowed value is 2.\n zone1_color\n Zone1 extends from the maximum reading to the threshold point.\n It can be set to any RGB color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1107 / 1290\n \n zone2_color\n Zone2 extends from the threshold point to the minimum reading, which is 0.\n It can be set to any RGB color.\n bezel_color\n@@ -48775,15 +48775,15 @@\n This widget is used to indicate level or value, usually of a HAL s32/float pin.\n you can also disable the HAL pin and use Qt signals or python commands to change the level.\n HalBar is a subclass of the Bar widget, so it inherits these properties\n \n \u2022 stepColorList: a list of color strings, the number of colors defines the number of bars.\n \u2022 backgroundColor: a QColor definition of the background color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1108 / 1290\n \n \u2022 setMaximum: an integer that defines the maximum level of indication.\n \u2022 setMinimum: an integer that defines the lowest level of indication.\n \u2022 pinType: to select HAL pins type:\n \u2013 NONE no HAL pin will be added\n@@ -48800,15 +48800,15 @@\n qproperty-stepColorList: \u2019green,green,#00b600,#00b600,#00d600,#00d600,yellow,yellow,red \u2190,red\u2019;\n }\n \n 12.7.1.8 HALPad - HAL Buttons Joypad\n \n Figure 12.86: QtVCP HALPad: HAL Buttons Joypad\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1109 / 1290\n \n This widget looks and acts like a 5 buttons D-pad, with an LED ring.\n Each button has an selectable type (Bit, S32 or Float) output HAL pin.\n The LED center ring has selectable colors for off and on and is controlled by a bit HAL pin.\n HALPad ENUMS There are enumerated constants used:\n@@ -48845,15 +48845,15 @@\n File or resource path to an image to display in the described button location.\n If the reset button is pressed in the Qt Designer editor property, the image will not be displayed\n (allowing optional text).\n left_text , right_text , center_text , top_text , bottom_text\n A text string to be displayed in the described button location.\n If left blank an image can be designated to be displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1110 / 1290\n \n true_color , false_color\n Color selection for the center LED ring to be displayed when the .light.center HAL\n pin is True or False.\n text_color\n@@ -48871,15 +48871,15 @@\n As an option it can be a toggle button.\n For a LED Indicator Option, see Section 12.7.5.1[IndicatedPushButton] below for more info.\n It also has other options.\n It is based on PyQt\u2019s QPushButton.\n 12.7.1.10 focusOverlay - Focus Overlay Widget\n This widget places a colored overlay over the screen, usually while a dialog is showing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.87: Focus overlay example for confirm close prompt\n Used to create a focused feel and to draw attention to critical information.\n It can also show a translucent image.\n It can also display message text and buttons.\n This widget can be controlled with STATUS messages.\n 12.7.1.11 gridLayout - Grid Layout Widget\n@@ -48887,15 +48887,15 @@\n Disabled widgets typically have a different color and do not respond to actions.\n It is based on PyQt\u2019s QGridLayout.\n 12.7.1.12 hal_label - HAL Label Widget\n This widget displays values sent to it.\n \n 1111 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1112 / 1290\n \n Values can be sent from:\n \u2022 HAL pins\n The input pin can be selected as Bit, S32, Float or no pin selected\n \u2022 Programmatically\n@@ -48930,15 +48930,15 @@\n When using floats you can set a formatting string.\n You must set the digitCount property to an appropriate setting to display the largest number.\n Properties\n pin_name\n Option string to be used as the HAL pin name.\n If set to an empty string the widget name will be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1113 / 1290\n \n bit_pin_type\n Selects the input pin as type BIT.\n s32_pin_type\n Selects the input pin as type S32.\n@@ -48969,15 +48969,15 @@\n a large view of a widget and a smaller multi widget view.\n It is different from a stacked widget as it can pull a widget from anywhere in the screen and place it\n in its page with a different layout than it originally had.\n The original widget must be in a layout for switcher to put it back.\n In Qt Designer you will:\n \u2022 Add the WidgetSwitcher widget on screen.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1114 / 1290\n \n \u2022 Right click the WidgetSwitcher and add a page.\n \u2022 Populate it with the widgets/layouts you wish to see in a default form.\n \u2022 Add as many pages as there are views to switch to.\n \u2022 On each page, add a layout widget.\n@@ -49010,15 +49010,15 @@\n Estop , Machine On , Auto , mdi , manual , run , run_from_line status\n Gets line number from STATUS message gcode-line-selected.\n run_from_line slot\n Gets line number from Qt Designer int/str slot setRunFromLine.\n abort , pause , load dialog\n Requires a dialog widget present.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1115 / 1290\n \n Camview dialog\n Requires camview dialog widget present.\n origin offset dialog\n Requires origin offset dialog widget present.\n@@ -49059,15 +49059,15 @@\n spindle fwd , spindle backward , spindle stop , spindle up , spindle down , view change\n Set view_type_string.\n limits override , flood , mist , block delete , optional stop , mdi command\n Set command_string, i.e.,calls a hard coded MDI command\n INI mdi number\n Set ini_mdi_number, i.e., calls an INI based MDI command\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1116 / 1290\n \n dro absolute , dro relative , dro dtg , exit screen\n Closes down LinuxCNC\n Override limits\n Temporarily override hard limits\n@@ -49106,15 +49106,15 @@\n Then in the INI file, under the heading [MDI_COMMAND_LIST] add appropriate lines.\n The commands are separated by the ;.\n The label is set after the comma, and \\n symbol adds a line break.\n [MDI_COMMAND_LIST]\n MDI_COMMAND = G0 Z25;X0 Y0;Z0, Goto\\nUser\\nZero\n MDI_COMMAND = G53 G0 Z0;G53 G0 X0 Y0, Goto\\nMachn\\nZero\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1117 / 1290\n \n Action buttons are subclassed from Section 12.7.5.1[IndicatedPushButton]. See the following sections for more information about:\n \u2022 LED Indicator option\n \u2022 Enabled on State\n \u2022 Text Changes On State\n@@ -49144,15 +49144,15 @@\n If the button is set checkable, it will indicate which axis is selected.\n If you press and hold the button a pop up menu will show allowing one to:\n \u2022 Zero the axis\n \u2022 Divide the axis by 2\n \u2022 Set the axis arbitrarily\n \u2022 Reset the axis to the last number recorded\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1118 / 1290\n \n You must have selected an entry dialog that corresponds to the dialog_code_string, usually this is\n selected from the screenOptions widget.\n You can select the property halpin_option, it will then set a HAL pin true when the axis is selected.\n The property joint_number should be set to the appropriate joint number. The property axis_letter\n@@ -49187,15 +49187,15 @@\n DROLabel {\n font: 25pt \u201dLato Heavy\u201d;\n qproperty-imperial_template: \u2019%9.4f\u2019;\n qproperty-metric_template: \u2019%10.3f\u2019;\n qproperty-angular_template: \u2019%11.2f\u2019;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1119 / 1290\n \n DROLabel[isHomed=false] {\n color: red;\n }\n DROLabel[isHomed=true] {\n@@ -49241,15 +49241,15 @@\n qproperty-styleFont4: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont5: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont6: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont7: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFontMargin: \u201dTimes,14,-1,0,90,0,0,0,0,0\u201d;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1120 / 1290\n \n For GcodeDisplay widget\u2019s default G-code lexer:\n \u2022 styleColor0 = Default: Everything not part of the groups below\n \u2022 styleColor1 = LineNo and Comments: Nxxx and comments (characters inside of and including\n () or anything after ; (when used outside of parenthesis) with the exception of the note below)\n@@ -49270,15 +49270,15 @@\n \u201dstyle name, size, -1, 0, bold setting (0-99), italics (0-1),\n underline (0-1),0,0,0\u201d\n It is based on PyQt\u2019s QsciScintilla.\n 12.7.2.8 GcodeEditor - G-code Program Editor Widget\n This is an extension of the GcodeDisplay widget that adds editing convenience.\n It is based on PyQt\u2019s QWidget which incorporates GcodeDisplay widget.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1121 / 1290\n \n 12.7.2.9 GCodeGraphics - G-code Graphic Backplot Widget\n \n Figure 12.88: QtVCP GcodeGraphics: G-code Graphic Backplot Widget\n This displays the current G-code in a graphical form.\n@@ -49295,15 +49295,15 @@\n \n _view (string)\n Sets the default view orientation on GUI load.\n Valid choices for a lathe are p, y, y2. For other screens, valid choices are p, x, y, z, z2.\n The following shows an example of how to set this property (referenced using the widget user\n selected name):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n #gcodegraphics{\n qproperty-_view: z;\n }\n \n _dro (bool)\n Determines whether or not to show the DRO.\n@@ -49352,15 +49352,15 @@\n The following shows an example of how to set this property:\n #gcodegraphics{\n qproperty-overlay_color: blue;\n }\n \n 1122 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n background_color (primary, secondary, or RGBA formatted color)\n Sets the default background color.\n The following shows an example of how to set this property:\n #gcodegraphics{\n qproperty-background_color: blue;\n }\n@@ -49407,15 +49407,15 @@\n qproperty-MouseButtonMode: 1;\n }\n \n There are 12 valid modes:\n \n 1123 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Mode\n 0\n 1\n 2\n 3\n 4\n@@ -49497,15 +49497,15 @@\n \u2022 rotate-up\n \u2022 rotate-down\n \u2022 overlay-dro-on\n \u2022 overlay-dro-off\n \u2022 overlay-offsets-on\n \u2022 overlay-offsets-off\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \u2022 alpha-mode-on\n \u2022 alpha-mode-off\n \u2022 inhibit-selection-on\n \u2022 inhibit-selection-off\n \u2022 dimensions-on\n \u2022 dimensions-off\n@@ -49546,15 +49546,15 @@\n This will be the text set when the option is False.\n You can use Qt rich text code for different fonts/colors etc.\n Typical template for metric mode in false state, might be: Imperial Mode.\n It is based on PyQt\u2019s QLabel.\n \n 1125 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1126 / 1290\n \n 12.7.2.11 StatusLabel - Controller Variables State Label Display Widget\n This will display a label based on selectable status of the machine controller.\n You can change how the status will be displayed by substituting python formatting code in the text\n template. You can also use rich text for different fonts/colors etc.\n@@ -49593,15 +49593,15 @@\n jograte_angular_status\n Shows the current QtVCP based Angular Jog Rate.\n jogincr_status\n Shows the current QtVCP based Jog increment.\n jogincr_angular_status\n Shows the current QtVCP based Angular Jog increment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1127 / 1290\n \n machine_state_status\n Shows the current machine interpreter state using the text described from the machine_state_list.\n The interpreter states are:\n \u2022 Estopped\n@@ -49640,15 +49640,15 @@\n tool_number_status\n Returns the tool number of the current loaded tool.\n tool_offset_status\n Returns the offset of the current loaded tool, indexed by index_number to select axis (0=x,1=y,etc.).\n user_system_status\n Shows the active user coordinate system (G5x setting).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1128 / 1290\n \n Other Properties\n index_number\n Integer that specifies the tool status index to display.\n state_label_list\n@@ -49677,15 +49677,15 @@\n Toggles between 2 images: axis not homed, axis homed.\n *watch_all_homed\n Would toggle between 2 images: not all homed, all homed.\n *watch_hard_limits\n Would toggle between 2 images or one per joint.\n Here is an example of using it to display an icon of Z axis homing state:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1129 / 1290\n \n Figure 12.89: QtVCP StatusImageSwitcher: Controller Status Image Switcher\n In the properties section notice that:\n \u2022 watch_axis_homed is checked\n \u2022 axis_letter is set to Z\n@@ -49698,15 +49698,15 @@\n \n \u2022 Right click the image name and you should see Copy path.\n \u2022 Click Copy path.\n \u2022 Now double click the image list property so the dialog shows.\n \u2022 Click the New button.\n \u2022 Paste the image path in the entry box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1130 / 1290\n \n Do that again for the next image.\n Use a clear image to represent a hidden icon.\n You can test the images display from the image list by changing the image number. In this case 0 is\n unhomed and 1 would be homed.\n@@ -49740,15 +49740,15 @@\n notify_option\n Hooking into the desktop notification bubbles for error and messages.\n notify_max_messages\n Number of messages shown on screen at one time.\n catch_close_option\n Catching the close event to pop up a \u2019are you sure\u2019 prompt.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1131 / 1290\n \n close_overlay_color\n Color of transparent layer shown when quitting.\n catch_error_option\n Monitoring of the LinuxCNC error channel.\n@@ -49790,15 +49790,15 @@\n tool_overlay_color\n Color of transparent layer shown when the tool dialog is shown.\n ToolUseDesktopNotify\n Option to use desktop notify dialogs for manual tool change dialog.\n ToolFrameless\n Frameless dialogs can not be easily moved by users.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1132 / 1290\n \n fileDialog_option\n Sets up the file choosing dialog.\n file_overlay_color\n Color of transparent layer shown when the file dialog is shown.\n@@ -49836,15 +49836,15 @@\n Color of transparent layer shown when the machineLog dialog is shown.\n runFromLineDialog_option\n Sets up a dialog to display starting options when starting machine execution from a arbitrary\n line.\n runFromLine_overlay_color\n Color of transparent layer shown when the runFromLine dialog is shown.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1133 / 1290\n \n Setting Properties Programmatically The screen designer chooses the default settings of the\n screenOptions widget.\n Once chosen, most won\u2019t ever need to be changed. But if needed, some can be changed in the handler\n file or in stylesheets.\n@@ -49887,15 +49887,15 @@\n Turns all sounds on or off.\n [MCH_MSG_OPTIONS]\n mchnMsg_play_sound (bool)\n To play alert sound when dialog pops.\n mchnMsg_speak_errors (bool)\n To use Espeak to speak error messages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1134 / 1290\n \n mchnMsg_speak_text (bool)\n To use Espeak to speak all other messages.\n mchnMsg_sound_type (str)\n Sound to play when messages displayed. See notes below.\n@@ -49935,15 +49935,15 @@\n \u2013 DONE\n \u2013 ATTENTION\n \u2013 RING\n \u2013 LOGIN\n \u2013 LOGOUT\n \u2013 BELL\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1135 / 1290\n \n These Sound options require python3-gst1.0 installed.\n \u2022 Audio Files\n You can also specify a file path to an arbitrary audio file.\n You can use ~ in path to substitute for the user home file path.\n@@ -49977,15 +49977,15 @@\n jograte_angular_rate\n Selects a angular jograte slider.\n max_velocity_rate\n Selects a maximum velocity rate slider.\n alertState\n String to define style change: read-only, under, over and normal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1136 / 1290\n \n alertUnder\n Sets the float value that signals the stylesheet for under warning.\n alertOver\n Sets the float value that signals the stylesheet for over warning.\n@@ -50021,15 +50021,15 @@\n diameter\n Diameter of the LED.\n color\n Color of the LED when on.\n off_color\n Color of the LED when off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1137 / 1290\n \n alignment\n Qt Alignment hint.\n state\n Current state of LED (for testing in Qt Designer).\n@@ -50066,15 +50066,15 @@\n \u2022 Rapid override rate\n It is based on PyQt\u2019s QProgressBar.\n 12.7.2.19 SystemToolButton - User System Selection Widget\n This widget allows you to manually select a G5x user system by pressing and holding.\n If you don\u2019t set the button text it will automatically update to the current system.\n It is based on PyQt\u2019s QToolButton.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1138 / 1290\n \n 12.7.2.20 MacroTab - Special Macros Widget\n \n Figure 12.90: QtVCP MacroTab: Special Macros Widget\n This widget allows a user to select and adjust special macro programs for doing small jobs.\n@@ -50092,15 +50092,15 @@\n ; MACROOPTIONS = load:yes,save:yes,default:default.txt,path:~/macros\n \n MACROCOMMAND This is the first line in the O-word file.\n It is a comma separated list of text to display above an entry.\n There will be one for every variable required in the O-word function.\n If the macro does not require variables, leave it empty:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1139 / 1290\n \n ; MACROCOMMAND=\n \n MACRODEFAULTS This must be the second line in the O-word file.\n It is a comma separated list of the default values for each variable in the O-word function.\n@@ -50137,15 +50137,15 @@\n MACROOPTIONS This optional line must be the fourth line in the O-word file.\n It is a comma separated list of keyword and data:\n LOAD:yes\n Shows a load button.\n SAVE:yes\n Shows a save button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1140 / 1290\n \n 12.7.2.21 MDILine - MDI Commands Line Entry Widget\n One can enter MDI commands here.\n A popup keyboard is available.\n Embedded Commands There are also embedded commands available from this widget.\n@@ -50182,15 +50182,15 @@\n Disconnects a pin from a signal.\n An error will result if the pin does not exist.\n Running LinuxCNC from terminal may help determine the root cause as error messages from\n hal_lib.c will be displayed there.\n \u2022 Syntax: unlinkp \n \u2022 Example: unlinkp motion.jog-stop\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1141 / 1290\n \n Note\n The MDILine function spindle_inhibit can be used by a GUI\u2019s handler file to inhibit M3, M4, and M5\n spindle commands if necessary.\n \n@@ -50202,15 +50202,15 @@\n default):\n MDI_HISTORY_FILE = \u2019~/.axis_mdi_history\u2019\n \n 12.7.2.23 MDITouchy - Touch Screen MDI Entry Widget\n \n Figure 12.91: QtVCP MDITouchy: Touch Screen MDI Entry Widget\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1142 / 1290\n \n This widget displays buttons and entry lines to use for entering MDI commands.\n Based on LinuxCNC\u2019s Touchy screen\u2019s MDI entry process, its large buttons are most useful for touch\n screens.\n To use MDITouchy:\n@@ -50249,15 +50249,15 @@\n G90\n O endsub\n \n Notice the name of the sub matches the file name and macro name exactly, including case.\n When you invoke the macro by pressing the Macro button you can enter values for parameters (xinc\n and yinc in our example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1143 / 1290\n \n These are passed to the macro as positional parameters: #1, #2\u2026 #N respectively.\n Parameters you leave empty are passed as value 0.\n If there are several different macros, press the Macro button repeatedly to cycle through them.\n In this simple example, if you enter -1 for xinc and invoke the running of the MDI cycle, a rapid G0\n@@ -50270,15 +50270,15 @@\n Figure 12.92: QtVCP OriginOffsetsView: Origins View and Setting Widget\n This widget allows one to visualize and modify User System Origin offsets directly.\n It will update LinuxCNC\u2019s Parameter file for changes made or found.\n The settings can only be changed in LinuxCNC after homing and when the motion controller is idle.\n The display and entry will change between metric and imperial, based on LinuxCNC\u2019s current G20 /\n G21 setting.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1144 / 1290\n \n The current in-use user system will be highlighted.\n Extra actions can be integrated to manipulate settings.\n These actions depend on extra code added either to a combined widget, like originoffsetview dialog,\n or the screens handler code.\n@@ -50317,15 +50317,15 @@\n It can selectably react to:\n \u2022 Machine on\n \u2022 Interpreter idle\n \u2022 E-stop off\n \u2022 All-homed\n It is based on PyQt\u2019s QGridLayout.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.7.2.26 MachineLog - Machine Events Journal Display Widget\n FIXME MachineLog documentation\n 12.7.2.27 JointEnableWidget - FIXME\n FIXME JointEnableWidget documentation\n 12.7.2.28 StatusImageSwitcher - Controller Status Image Switching Widget\n This widget will display images based on LinuxCNC status.\n@@ -50334,15 +50334,15 @@\n \u2022 the state of all homed,\n \u2022 the state of a certain axis homed,\n \u2022 the state of hard limits.\n It is based on PyQt\u2019s FIXME\n \n 1145 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1146 / 1290\n \n 12.7.2.29 FileManager - File Loading Selector Widget\n \n Figure 12.93: QtVCP FileManager: File Loading Selector Widget\n This widget is used to select files to load.\n@@ -50357,15 +50357,15 @@\n \n Stylesheets Properties\n doubleClickSelection (bool)\n Determines whether or not to require double clicking on a folder.\n Single clicking a folder (False) is enabled by default and is intended for touch screen users.\n The following shows an example of how to set this property:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1147 / 1290\n \n #filemanager {\n qproperty-doubleClickSelection: True;\n }\n \n@@ -50388,15 +50388,15 @@\n The tool settings can only be changed in LinuxCNC after homing and when the motion controller is\n idle.\n The display and entry will change between metric and imperial based on LinuxCNC\u2019s current G20/G21\n setting.\n The current in-use tool will be highlighted, and the current selected tool will be highlighted in a\n different color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1148 / 1290\n \n The checkbox beside each tool can be used to select too for an action that depends on extra code\n added either to a combined widget, like the toolOffsetView dialog or the screens handler code.\n Typical actions are load selected tool, delete selected tools, etc.\n Clicking on the columns and rows allows one to adjust the settings.\n@@ -50436,30 +50436,30 @@\n delete_tools()\n Deletes the currently checkbox selected tools.\n get_checked_list()\n Returns a list of tools selected by checkboxs.\n set_all_unchecked()\n Uncheck all selected tools.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Example for handler file executing aforementioned functions.\n self.w.tooloffsetview.add_tool()\n self.w.tooloffsetview.delete_tools()\n toolList = self.w.tooloffsetview.get_checked_list()\n self.w.tooloffsetview.set_all_unchecked()\n \n 12.7.2.32 BasicProbe - Simple Mill Probing Widget\n \n Figure 12.95: QtVCP BasicProbe: Simple Mill Probing Widget\n Widget for probing on a mill. Used by the QtDragon screen.\n \n 1149 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1150 / 1290\n \n 12.7.2.33 VersaProbe - Mill Probing Widget\n \n Figure 12.96: QtVCP VersaProbe: Mill Probing Widget\n Widget for probing on a mill. Used by the QtDragon screen.\n@@ -50477,15 +50477,15 @@\n \n \u2022 Add a function to call a dialog:\n This function must build a message dict to send to the dialog.\n This message will be passed back in the general message with the addition of the return variable.\n It is possible to add extra user information to the message. The dialog will ignore these and pass\n them back.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1151 / 1290\n \n NAME\n Launches code name of dialog to show.\n ID\n A unique id so we process only a dialog that we requested.\n@@ -50526,15 +50526,15 @@\n TYPE (OK|YESNO|OKCANCEL) , ICON (QUESTION|INFO|CRITICAL|WARNING) , PINNAME\n Not implemented yet.\n FOCUSTEXT (overlay text|None)\n Text to display if focus overlay is used. Use None for no text.\n FOCUSCOLOR (QColor(_R, G, B, A_))\n Color to use if focus overlay is used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1152 / 1290\n \n PLAYALERT\n Sound to play if sound is available, i.e., SPEAK .\n When using STATUS \u2019s request-dialog function, the default launch name is MESSAGE.\n It is based on PyQt\u2019s QMessagebox.\n@@ -50544,15 +50544,15 @@\n This is used as a manual tool change prompt.\n It has HAL pins to connect to the machine controller. The pins are named the same as the original\n AXIS manual tool prompt and works the same.\n The tool change dialog can only be launched by HAL pins.\n If there is a Focus Overlay widget present, it will signal it to display.\n It is based on PyQt\u2019s QMessagebox.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1153 / 1290\n \n 12.7.3.3 FileDialog - Load and Save File Chooser Dialog Widget\n \n Figure 12.98: QtVCP FileDialog: Load and Save File Chooser Widget\n This is used to load G-code files.\n@@ -50568,15 +50568,15 @@\n \u2019FILENAME\u2019:\u2019~/linuxcnc/nc_files/someprogram.txt\u2019,\n \u2019EXTENSIONS\u2019:\u2019Text Files (*.txt);;ALL Files (*.*)\u2019\n }\n ACTION.CALL_DIALOG(mess)\n \n And for a save dialog\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1154 / 1290\n \n mess = {\u2019NAME\u2019:\u2019SAVE\u2019,\u2019ID\u2019:\u2019_MY_DIALOG_\u2019,\n \u2019TITLE\u2019:\u2019Save Some text File\u2019,\n \u2019FILENAME\u2019:\u2019~/linuxcnc/nc_files/someprogram.txt\u2019,\n \u2019EXTENSIONS\u2019:\u2019Text Files (*.txt);;ALL Files (*.*)\u2019\n@@ -50588,15 +50588,15 @@\n \n Figure 12.99: QtVCP OriginOffsetDialog: Origin Offset Setting Widget\n This widget allows one to modify User System origin offsets directly in a dialog form.\n If there is an Focus Overlay widget present, it will signal it to display.\n When using STATUS \u2019s request-dialog function, the default launch name is ORIGINOFFSET.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1155 / 1290\n \n 12.7.3.5 ToolOffsetDialog - Tool Offset Setting Dialog Widget\n \n Figure 12.100: QtVCP ToolOffsetDialog: Tool Offset Setting Dialog Widget\n This widget allows one to modify Tool offsets directly in a dialog form.\n@@ -50616,61 +50616,61 @@\n 12.7.3.8 EntryDialog - Edit Line Dialog Widget\n This is a dialog to display an edit line for information entry, such as origin offset.\n It returns the entry via STATUS messages using a Python DICT.\n The DICT contains at minimum, the name of the dialog requested and an ID code.\n When using \u0300 \u0300STATUS \u0300 \u0300\u2019s request-dialog function, the default launch name is ENTRY.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1156 / 1290\n \n 12.7.3.9 CalculatorDialog - Calculator Dialog Widget\n \n Figure 12.101: QtVCP CalculatorDialog: Calculator Dialog Widget\n This is a dialog to display a calculator for numeric entry, such as origin offset.\n It returns the entry via STATUS messages using a Python DICT.\n The DICT contains at minimum, the name of the dialog requested and an ID code.\n When using \u0300 \u0300STATUS \u0300 \u0300\u2019s request-dialog function, the default launch name is CALCULATOR.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.7.3.10 RunFromLine - Run-From-Line Dialog Widget\n \n Figure 12.102: QtVCP RunFromLine: Run-From-Line Dialog Widget\n Dialog to preset spindle settings before running a program from a specific line.\n It is based on PyQt\u2019s QDialog.\n \n 1157 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1158 / 1290\n \n 12.7.3.11 VersaProbeDialog - Part Touch Probing Dialog Widget\n \n Figure 12.103: QtVCP VersaProbeDialog: Part Touch Probing Dialog Widget\n This is a dialog to display a part probing screen based on Verser Probe v2.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1159 / 1290\n \n 12.7.3.12 MachineLogDialog - Machine and Debugging Logs Dialog Widget\n \n Figure 12.104: QtVCP MachineLogDialog: Machine and Debugging Logs Dialog Widget\n This is a dialog to display the machine log and QtVCP\u2019s debugging log.\n It is based on PyQt\u2019s QDialog.\n \n 12.7.4 Other Widgets\n Other available widgets:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1160 / 1290\n \n 12.7.4.1 NurbsEditor - NURBS Editing Widget\n \n Figure 12.105: QtVCP NurbsEditor: NURBS Editing Widget\n The Nurbs editor allows you to manipulate a NURBS based geometry on screen and then convert\n@@ -50679,15 +50679,15 @@\n It is based on PyQt\u2019s QDialog.\n 12.7.4.2 JoyPad - 5 button D-pad Widget\n It is the base class for the HALPad widget.\n This widget looks and acts like a 5 button D-pad, with a LED like indicators in a ring.\n You can put text or icons in each of the button positions.\n You can connect to output signals when the buttons are pressed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1161 / 1290\n \n There are also input slots to change the color of the indicator(s).\n ENUMS There are enumerated constants used to reference indicator positions.\n They are used in Qt Designer editor\u2019s property editor or in Python code.\n NONE , LEFT, L , RIGHT, R , CENTER, C , TOP, T , BOTTOM, B , LEFTRIGHT, X , TOPBOTTOM, A\n@@ -50724,15 +50724,15 @@\n The set_highlight() function must be used prior to set the indicator to use.\n Signals These signals will be sent when buttons are pressed.\n They can be connected to in Qt Designer editor or Python code.\n The first two output a string that indicates the button pressed:\n \n joy_btn_pressed (string) , joy_btn_released (string) , joy_l_pressed (bool) , joy_l_released (boo\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1162 / 1290\n \n They are based on PyQt\u2019s Signal (QtCore.pyqtSignal())\n Slots Slots can be connected to in Qt Designer editor or Python code:\n set_colorStateTrue() , set_colorStateFalse() , set_colorState(_bool_) , set_true_color(_str_)\n \n@@ -50770,15 +50770,15 @@\n \n 12.7.4.3 WebWidget\n This widget will create a html/pdf viewing page using the QtWebKit or QtWebEngine libraries. The\n newer QtWebEngine is preferred if both are on the system.\n If the QtWebEngine library is used with the QtDesigner editor, a placeholder QWidget will show in\n Qesigner. This will be replaced with thw QtWebEngine widget at run time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1163 / 1290\n \n 12.7.5 BaseClass/Mixin Widgets\n These widgets are used to combine different properties and behaviours into other widgets.\n You will see them as a collapsible header in the Qt Designer properties column.\n 12.7.5.1 IndicatedPushButtons\n@@ -50807,15 +50807,15 @@\n Indicated_PushButton #button_estop{\n qproperty-on_color: black;\n qproperty-off_color: yellow;\n }\n \n Options IndicatedPushButton have exclusive options:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1164 / 1290\n \n indicator_HAL_pin_option\n Adds a halpin, named -led that controls the button indicator state.\n indicator_status_option\n Makes the LED indicate the state of these selectable LinuxCNC status:\n@@ -50857,15 +50857,15 @@\n }\n \n Here is how you specify a particular widget by its objectName in Qt Designer:\n ActionButton #estop button [isEstopped=false] {\n color: yellow;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1165 / 1290\n \n Often, having the button disabled and enabled based on the state of LinuxCNC\u2019s motion controller is\n necessary.\n There are several properties that can be selected to aid with this:\n \n@@ -50905,15 +50905,15 @@\n \n 12.7.6 Import-Only Widgets\n These widgets are usually the base class widget for other QtVCP widgets.\n They are not available directly from the Qt Designer editor but could be imported and manually\n inserted.\n They could also be subclassed to make a similar widget with new features.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1166 / 1290\n \n 12.7.6.1 Auto Height\n Widget for measuring two heights with a probe.\n For setup.\n 12.7.6.2 G-code Utility\n@@ -50934,15 +50934,15 @@\n You can also specify subroutines to be pre-opened in tabs.\n [DISPLAY]\n # NGCGUI subroutine path.\n # This path must also be in [RS274NGC] SUBROUTINE_PATH\n NGCGUI_SUBFILE_PATH = ~/linuxcnc/nc_files/examples/ngcgui_lib\n # pre selected programs tabs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1167 / 1290\n \n # specify filenames only, files must be in the NGCGUI_SUBFILE_PATH\n NGCGUI_SUBFILE = slot.ngc\n NGCGUI_SUBFILE = qpocket.ngc\n \n@@ -50966,15 +50966,15 @@\n (info: feedrate -- simple example for setting feedrate)\n o sub\n #\n = #1 (= 6 Feed Rate) ; comments in brackets will be shown in ngcui\n f#\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1168 / 1290\n \n 12.7.6.6 Qt PDF\n Allows adding loadable PDFs to a screen.\n 12.7.6.7 Qt Vismach\n Use this to build/add OpenGl simulated machines.\n@@ -51007,15 +51007,15 @@\n For example, you can catch machine on and off messages.\n Note\n The example below shows the two common ways of connecting signals, one of them using lambda.\n lambda is used to strip off or manipulate arguments from the status message before calling the\n function. You can see the difference in the called function signature: The one that uses lambda does\n not accept the status object - lambda did not pass it to the function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1169 / 1290\n \n \u2022 Place these commands into the [INITIALIZE] section of the Python handler file:\n STATUS.connect(\u2019state-on\u2019, self.on_state_on)\n STATUS.connect(\u2019state-off\u2019, lambda: w, self.on_state_off())\n \n@@ -51060,15 +51060,15 @@\n GET_JOG_FROM_NAME = {\u2019X\u2019:0,\u2019Y\u2019:1,\u2019Z\u2019:2}\n NO_HOME_REQUIRED = False\n HOME_ALL_FLAG\n JOINT_TYPE = self.INI.find(section, \u201dTYPE\u201d) or \u201dLINEAR\u201d\n JOINT_SEQUENCE_LIST\n JOINT_SYNC_LIST\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1170 / 1290\n \n JOG_INCREMENTS = None\n ANGULAR_INCREMENTS = None\n GRID_INCREMENTS\n DEFAULT_LINEAR_JOG_VEL = 15 units per minute\n@@ -51112,15 +51112,15 @@\n \n 12.8.2.4 Helpers\n There are some helper functions - mostly used for widget support:\n \n get_error_safe_setting(_self_, _heading_, _detail_, default=_None_) , convert_metric_to_mac\n Get filter extensions in Qt format.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1171 / 1290\n \n 12.8.2.5 Usage\n \u2022 Import Info module\n Add this Python code to your import section:\n ############################\n@@ -51155,15 +51155,15 @@\n # **** IMPORT SECTION **** #\n ############################\n from qtvcp.core import Action\n \n \u2022 Instantiate Action module\n Add this Python code to your instantiate section:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n ACTION = Action()\n \n \u2022 Access ACTION commands\n@@ -51204,15 +51204,15 @@\n ACTION.ZERO_G92_OFFSET()\n ACTION.ZERO_ROTATIONAL_OFFSET()\n ACTION.ZERO_G5X_OFFSET(num)\n ACTION.RECORD_CURRENT_MODE()\n \n 1172 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ACTION.RESTORE_RECORDED_MODE()\n ACTION.SET_SELECTED_AXIS(jointnum)\n ACTION.DO_JOG(jointnum, direction)\n ACTION.JOG(jointnum, direction, rate, distance=0)\n ACTION.TOGGLE_FLOOD()\n ACTION.SET_FLOOD_ON()\n@@ -51251,15 +51251,15 @@\n This library handles tool offset file changes.\n \n Warning\n LinuxCNC doesn\u2019t handle third party manipulation of the tool file well.\n \n 1173 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1174 / 1290\n \n 12.8.4.1 Helpers\n \n GET_TOOL_INFO(_toolnumber_)\n This will return a Python list of information on the requested tool number.\n@@ -51295,15 +51295,15 @@\n LinuxCNC supports tool wear by adding tool wear information into tool entries above 10000.\n Note\n This also requires remap code to add the wear offsets t tool change time.\n \n 12.8.5 Path\n Path module gives reference to important files paths.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.8.5.1 Referenced Paths\n \n PATH.PREFS_FILENAME\n The preference file path.\n PATH.WORKINGDIR\n The directory QtVCP was launched from.\n@@ -51342,15 +51342,15 @@\n PATH.PLUGIN\n The QtVCP widget plugin folder.\n PATH.VISMACHDIR\n Directory where prebuilt Vismach files are found.\n \n 1175 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1176 / 1290\n \n Not currently used:\n PATH.LOCALEDIR\n Locale translation folder.\n PATH.DOMAIN\n@@ -51384,15 +51384,15 @@\n \u2022 Import VCPWindow module\n Add this Python code to your import section:\n ############################\n # **** IMPORT SECTION **** #\n ############################\n from qtvcp.qt_makegui import VCPWindow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1177 / 1290\n \n \u2022 Instantiate VCPWindow module+ Add this Python code to your instantiate section:\n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n@@ -51431,15 +51431,15 @@\n Load Calibration program:\n AUX_PRGM.load_calibration()\n \n keyboard_onboard()\n Load onboard/Matchbox keyboard\n AUX_PRGM.keyboard_onboard()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1178 / 1290\n \n 12.8.7.2 Usage\n \u2022 Import Aux_program_loader module\n Add this Python code to your import section:\n ############################\n@@ -51474,15 +51474,15 @@\n Note\n Keylookup requires code under the processed_key_event function to call KEYBIND.call().\n Most handler files already have this code.\n \n In the handler file, under the initialized function use this general syntax to create keybindings:\n KEYBIND.add_call(\u201dDEFINED_KEY\u201d,\u201dFUNCTION TO CALL\u201d, USER DATA)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Here we add a keybinding for F10, F11 and F12:\n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # at this point:\n # the widgets are instantiated.\n@@ -51532,15 +51532,15 @@\n Qt.Key_Shift: \u201dKey_Shift\u201d,\n Qt.Key_Control: \u201dKey_Control\u201d,\n Qt.Key_Meta: \u201dKey_Meta\u201d,\n # Qt.Key_Alt: \u201dKey_Alt\u201d,\n \n 1179 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Qt.Key_AltGr: \u201dKey_AltGr\u201d,\n Qt.Key_CapsLock: \u201dKey_CapsLock\u201d,\n Qt.Key_NumLock: \u201dKey_NumLock\u201d,\n Qt.Key_ScrollLock: \u201dKey_ScrollLock\u201d,\n Qt.Key_F1: \u201dKey_F1\u201d,\n Qt.Key_F2: \u201dKey_F2\u201d,\n@@ -51599,15 +51599,15 @@\n Qt.Key_Asterisk: \u201dKey_Asterisk\u201d,\n Qt.Key_Plus: \u201dKey_Plus\u201d,\n Qt.Key_Comma: \u201dKey_Comma\u201d,\n Qt.Key_Minus: \u201dKey_Minus\u201d,\n \n 1180 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Qt.Key_Period: \u201dKey_Period\u201d,\n Qt.Key_Slash: \u201dKey_Slash\u201d,\n Qt.Key_0: \u201dKey_0\u201d,\n Qt.Key_1: \u201dKey_1\u201d,\n Qt.Key_2: \u201dKey_2\u201d,\n Qt.Key_3: \u201dKey_3\u201d,\n@@ -51650,15 +51650,15 @@\n _DETAIL\n Text hidden unless clicked on.\n _PINNAME\n Basename of the HAL pin(s).\n \n 1181 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1182 / 1290\n \n _TYPE\n Specifies whether it is a: Status message - shown in the status bar and the notify dialog.\n Requires no user intervention. OK message - requiring the user to click OK to close the dialog.\n OK messages have two HAL pins:\n@@ -51701,15 +51701,15 @@\n 12.8.10 Notify\n Notify module is used to send messages that are integrated into the desktop.\n It uses the pynotify library.\n Ubuntu/Mint does not follow the standard so you can\u2019t set how long the message stays up for.\n I suggest fixing this with the notify-osd package available from this PPA (DISCONTINUED due to\n move of Ubuntu to Gnome).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1183 / 1290\n \n Notify keeps a list of all the alarm messages since starting in self.alarmpage.\n If you click \u2019Show all messages\u2019 in the notify popup, it will print them to the terminal.\n The ScreenOptions widget can automatically set up the notify system.\n Typically STATUS messages are used to sent notify messages.\n@@ -51742,15 +51742,15 @@\n \u2022 play sounds using the beep library (currently blocks while beeping),\n \u2022 speak words using the espeak library (non blocking while speaking).\n There are default alert sounds using Mint or FreeDesktop default sounds.\n You can play arbitrary sounds or even songs by specifying the path.\n STATUS has messages to control Player module.\n The ScreenOptions widget can automatically set up the audio system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1184 / 1290\n \n 12.8.12.1 Sounds\n Alerts There are default alerts to choose from:\n \u2022 ERROR\n \u2022 READY\n@@ -51784,15 +51784,15 @@\n 12.8.12.3 Example\n To play sounds upon STATUS messages, use these general syntaxes:\n STATUS.emit(\u2019play-alert\u2019,\u2019LOGOUT\u2019)\n STATUS.emit(\u2019play-alert\u2019,\u2019BEEP\u2019)\n STATUS.emit(\u2019play-alert\u2019,\u2019SPEAK This is a test screen for Q t V C P\u2019)\n STATUS.emit(\u2019play-sound\u2019, \u2019PATH TO SOUND\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1185 / 1290\n \n 12.8.13 Virtual Keyboard\n This library allows you to use STATUS messages to launch a virtual keyboard.\n It uses Onboard or Matchbox libraries for the keyboard.\n \n@@ -51819,15 +51819,15 @@\n # **** instantiate libraries section **** #\n ###########################################\n TOOLBAR = ToolBarActions()\n \n 12.8.14.4 Examples\n \u2022 Assigning Tool Actions To Toolbar Buttons\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1186 / 1290\n \n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # At this point:\n@@ -51868,15 +51868,15 @@\n Some require HAL pins to be connected for movement.\n From a terminal (pick one):\n qtvcp vismach_mill_xyz\n qtvcp vismach_scara\n qtvcp vismach_millturn\n qtvcp vismach_5axis_gantry\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1187 / 1290\n \n 12.8.15.2 Primitives Library\n Provides the basic building blocks of a simulated machine.\n Collection\n A collection is an object of individual machine parts.\n@@ -51916,15 +51916,15 @@\n \n Track\n Move and rotate an object to point from one capture() \u2019d coordinate system to another.\n Base object to hold coordinates for primitive shapes.\n CylinderX, CylinderY, CylinderZ\n Build a cylinder on the X, Y or Z axis by giving endpoint (X, Y, or Z) and radii coordinates.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1188 / 1290\n \n Sphere\n Build a sphere from center and radius coordinates.\n \n TriangleXY, TriangleXZ, TriangleYZ\n@@ -51963,15 +51963,15 @@\n # **** IMPORT SECTION **** #\n ############################\n import mill_xyz as MILL\n \n Instantiate and use the simulation widget Instantiate the simulation widget and add it to the\n screen\u2019s main layout:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1189 / 1290\n \n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # At this point:\n@@ -51990,30 +51990,30 @@\n Vismach is a set of Python functions that can be used to create and animate models of machines.\n This chapter is about the Qt embedded version of Vismach, also see: https://sa-cnc.com/linuxcncvismach/ .\n \n 12.9.1 Introduction\n Vismach displays the model in a 3D viewport and the model parts are animated as the values of\n associated HAL pins change.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1190 / 1290\n \n Figure 12.107: QtVismach 3D Viewport\n The Vismach 3D viewport view can be manipulated as follows:\n \u2022 zoom by scroll wheel\n \u2022 pan by middle button drag\n \u2022 rotate by right-button drag\n \u2022 tilt by left button drag\n A Vismach model takes the form of a Python script and can use standard Python syntax.\n This means that there is more than one way to lay out the script, but in the examples given in this\n document the simplest and most basic of them will be used.\n The basic sequence in creating the Vismach model is:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1191 / 1290\n \n 1. Create the parts\n 2. Define how they move\n 3. Assemble into movement groups\n \n@@ -52082,15 +52082,15 @@\n |\n |---tool\n |\n |---tooltip\n |\n |---(tool cylinder function)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1192 / 1290\n \n As you can see, the lowest parts must exist first before those can be grouped with others into an\n assembly. So you build upwards from lowest point in tree and assemble them together.\n The same is applicable for any design of machine: look at the machine arm example and you will see\n that it starts with the tip and adds to the larger part of the arm, then it finally groups with the base.\n@@ -52127,15 +52127,15 @@\n part = AsciiOBJ(data=\u201dv 0.123 0.234 0.345 1.0 ...\u201d)\n \n \u2022 STL model parts are added to the Vismach space in the same locations as they were created in the\n STL or OBJ space, i.e. ideally with a rotational point at their origin.\n Note\n It is much easier to move while building if the origin of the model is at a rotational pivot point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1193 / 1290\n \n 12.9.5.2 Build from Geometric Primitives\n Alternatively parts can be created inside the model script from a range of shape primitives.\n Many shapes are created at the origin and need to be moved to the required location after creation.\n \n@@ -52170,15 +52170,15 @@\n 12.9.6.1 Translating Model parts\n part1 = Translate([part1], x, y, z)\n Move part1 the specified distances in x, y and z.\n 12.9.6.2 Rotating Model Parts\n part1 = Rotate([part1], theta, x, y, z)\n Rotate the part by angle theta [degrees] about an axis between the origin and x, y, z.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1194 / 1290\n \n 12.9.7 Animating Parts\n To animate the model controlled by the values of HAL pins there are four functions: HalTranslate,\n HalRotate, HalToolCylinder and HalToolTriangle.\n For parts to move inside an assembly they need to have their HAL motions defined before being\n@@ -52217,15 +52217,15 @@\n Defines the axis of rotation from the origin the point of coordinates (x,y,z).\n When the part is moved back away from the origin to its correct location, the axis of rotation\n can be considered to remain \u201dembedded\u201d in the part.\n angle_scale\n Rotation angles are in degrees, so for a rotary joint with a 0-1 scaling you would need to use\n an angle scale of 360.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1195 / 1290\n \n 12.9.7.3 HalToolCylinder\n \n tool = HalToolCylinder()\n Make a cylinder to represent a cylindrical mill tool, based on the tool table and current loaded\n@@ -52256,15 +52256,15 @@\n \u2022 Move the head to the spindle or spindle to the head.\n \u2022 Create the draw bar.\n \u2022 Define the motion of the draw bar.\n \u2022 Assemble the three parts into a head assembly.\n \u2022 Define the motion of the head assembly.\n In this example the spindle rotation is indicated by rotation of a set of drive dogs:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1196 / 1290\n \n #Drive dogs\n dogs = Box(-6,-3,94,6,3,100)\n dogs = Color([1,1,1,1],[dogs])\n dogs = HalRotate([dogs],c,\u201dspindle\u201d,360,0,0,1)\n@@ -52306,15 +52306,15 @@\n For example [1,0,0,0.5] for a 50% opacity red.\n myhud = Hud()\n Creates a heads-up display in the Vismach GUI to display items such as axis positions, titles, or\n messages.\n myhud = Hud()\n myhud.show(\u201dMill_XYZ\u201d)\u2018\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1197 / 1290\n \n myhud = HalHud()\n A more advanced version of the Hud that allows HAL pins to be displayed:\n myhud = HalHud()\n myhud.set_background_color(0,.1,.2,0)\n@@ -52356,15 +52356,15 @@\n \n Add it to the Window class Collection so it is never moved from the origin.\n v.model = Collection([origin, model, world])\n \n Start from the cutting tip and work your way back. Add each collection to the model at the origin and\n run the script to confirm the location, then rotate/translate and run the script to confirm again.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.9.11 Basic structure of a QtVismach script\n # imports\n import hal\n from qtvcp.lib.qt_vismach.qt_vismach import *\n # create HAL pins here if needed\n #c = hal.component(\u201dsamplegui\u201d)\n@@ -52407,15 +52407,15 @@\n # if you call this file directly from python3, it will display a PyQt5 window\n # good for confirming the parts of the assembly.\n if __name__ == \u2019__main__\u2019:\n main(model, tooltip, work, size=600, hud=None, lat=-75, lon=215)\n \n 1198 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1199 / 1290\n \n 12.9.12 Builtin Vismach Sample Panels\n QtVCP builtin Vismach Panels\n \n 12.10 QtVCP: Building Custom Widgets\n@@ -52443,15 +52443,15 @@\n \u2022 Injecting important variables,\n \u2022 Calling an extra setup function\n \u2022 Calling a closing cleanup function at shutdown.\n These functions are not called when the Qt Designer editor displays the widgets.\n When QtVCP builds a screen from the .ui file:\n 1. It searches for all the HAL-ified widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1200 / 1290\n \n 2. It finds the ScreenOptions widget, to collect information it needs to inject into the other widgets\n 3. It instantiates each widget and if it is a HAL-ified widget, calls the hal_init() function.\n hal_init() is defined in the base class and it:\n a. Adds variables such as the preference file to every HAL-ified widget.\n@@ -52504,15 +52504,15 @@\n #\n \n 2\n \n y\n 3y\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1201 / 1290\n \n In this case we need access to:\n y\n \n PyQt\u2019s QtWidgets library,\n@@ -52584,15 +52584,15 @@\n #!/usr/bin/env python3\n ###############################\n # Imports\n ###############################\n from PyQt5.QtCore import pyqtProperty\n from qtvcp.widgets.led_widget import LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n from qtvcp.core import Status\n ###########################################\n # **** instantiate libraries section **** #\n ###########################################\n STATUS = Status()\n ##########################################\n@@ -52642,15 +52642,15 @@\n def reset_is_on(self):\n self.is_on = False\n #######################################\n # Qt Designer properties\n \n 1202 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1203 / 1290\n \n #######################################\n invert_state_status = pyqtProperty(bool, get_invert_state, set_invert_state, \u2190reset_invert_state)\n is_estopped_status = pyqtProperty(bool, get_is_estopped, set_is_estopped, \u2190reset_is_estopped)\n is_on_status = pyqtProperty(bool, get_is_on, set_is_on, reset_is_on)\n@@ -52720,15 +52720,15 @@\n self.setState(False)\n self.is_estopped = False\n self.is_on = False\n self.invert_state = False\n \n #\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n y\n \n 1\n \n Defines the name of our custom widget and what other class it inherits from.\n In this case we inherit LED - a QtVCP widget that represents a status light.\n@@ -52789,15 +52789,15 @@\n self.PREFS_\n the instance of an optional preference file\n self.SETTINGS_\n the Qsettings object\n We could use this information to create HAL pins or look up image paths etc.\n STATUS.connect(\u2019state-estop\u2019, lambda w:self._flip_state(True))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1205 / 1290\n \n Lets look at this line more closely:\n \u2022 STATUS is very common theme is widget building.\n STATUS uses GObject message system to send messages to widgets that register to it.\n This line is the registering process.\n@@ -52844,15 +52844,15 @@\n return self.is_on\n def reset_is_on(self):\n self.is_on = False\n \n This is how Qt Designer sets the attributes of the widget.\n This can also be called directly in the widget.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1206 / 1290\n \n #######################################\n # Qt Designer properties\n #######################################\n invert_state_status = pyqtProperty(bool, get_invert_state, set_invert_state, \u2190reset_invert_state)\n@@ -52892,15 +52892,15 @@\n self._last = 0\n self._block_signal = False\n self._auto_label_flag = True\n SettingMenu = QMenu()\n for system in(\u2019G54\u2019, \u2019G55\u2019, \u2019G56\u2019, \u2019G57\u2019, \u2019G58\u2019, \u2019G59\u2019, \u2019G59.1\u2019, \u2019G59.2\u2019, \u2019G59.3\u2019):\n Button = QAction(QIcon(\u2019exit24.png\u2019), system, self)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1207 / 1290\n \n Button.triggered.connect(self[system.replace(\u2019.\u2019,\u2019_\u2019)])\n SettingMenu.addAction(Button)\n self.setMenu(SettingMenu)\n self.dialog = EntryDialog()\n@@ -52943,15 +52943,15 @@\n def ChangeState(self, joint):\n if int(joint) != self._joint:\n self._block_signal = True\n self.setChecked(False)\n self._block_signal = False\n self.hal_pin.set(False)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1208 / 1290\n \n ##############################\n # required class boiler code #\n ##############################\n def __getitem__(self, item):\n@@ -52998,15 +52998,15 @@\n HomeLabel[homed=true] {\n color: green;\n }\n HomeLabel[homed=false] {\n color: red;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.10.6 Use Stylesheets To Change Custom Widget Properties\n class Label(QLabel):\n def __init__(self, parent=None):\n super(Label, self).__init__(parent)\n alternateFont0 = self.font\n # Qproperty getter and setter\n@@ -53051,15 +53051,15 @@\n return Lcnc_GridLayout(parent)\n def name(self):\n return \u201dLcnc_GridLayout\u201d\n def group(self):\n \n 1209 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n return \u201dLinuxCNC - HAL\u201d\n def icon(self):\n return QtGui.QIcon(QtGui.QPixmap(ICON.get_path(\u2019lcnc_gridlayout\u2019)))\n def toolTip(self):\n return \u201dHAL enable/disable GridLayout widget\u201d\n def whatsThis(self):\n@@ -53108,15 +53108,15 @@\n def domXml(self):\n return \u2019\\n\u2019\n def includeFile(self):\n return \u201dqtvcp.widgets.system_tool_button\u201d\n \n 1210 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1211 / 1290\n \n 12.10.7.3 Making a plugin with a MenuEntry dialog box\n It possible to add an entry to the dialog that pops up when you right click the widget in the layout.\n This can do things such as selecting options in a more convenient way.\n This is the plugin used for action buttons.\n@@ -53162,15 +53162,15 @@\n def createWidget(self, parent):\n return ActionButton(parent)\n # This method returns the name of the custom widget class\n def name(self):\n return \u201dActionButton\u201d\n # Returns the name of the group in Qt Designer\u2019s widget box\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n def group(self):\n return \u201dLinuxCNC - Controller\u201d\n # Returns the icon\n def icon(self):\n return QtGui.QIcon(QtGui.QPixmap(ICON.get_path(\u2019actionbutton\u2019)))\n # Returns a tool tip short description\n@@ -53211,15 +53211,15 @@\n self.setWindowTitle(self.tr(\u201dSet Options\u201d))\n def updateWidget(self):\n formWindow = QDesignerFormWindowInterface.findFormWindow(self.widget)\n if formWindow:\n \n 1212 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1213 / 1290\n \n formWindow.cursor().setProperty(\u201destop_action\u201d,\n QtCore.QVariant(self.c_estop.isChecked()))\n self.accept()\n class ActionButtonMenuEntry(QPyDesignerTaskMenuExtension):\n@@ -53258,15 +53258,15 @@\n if self.w.PREFS_:\n # variable name (entry name, default value, type, section name)\n self.int_value = self.w.PREFS_.getpref(\u2019Integer_value\u2019, 75, int, \u2019CUSTOM_FORM_ENTRIES\u2019)\n self.string_value = self.w.PREFS_.getpref(\u2019String_value\u2019, \u2019on\u2019, str, \u2019 \u2190CUSTOM_FORM_ENTRIES\u2019)\n \n Writing preferences at close time In the closing_cleanup__() function, add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1214 / 1290\n \n if self.w.PREFS_:\n # variable name (entry name, variable name, type, section name)\n self.w.PREFS_.putpref(\u2019Integer_value\u2019, self.integer_value, int, \u2019CUSTOM_FORM_ENTRIES\u2019)\n self.w.PREFS_.putpref(\u2019String_value\u2019, self.string_value, str, \u2019CUSTOM_FORM_ENTRIES\u2019)\n@@ -53301,15 +53301,15 @@\n Being able to edit a style on a running screen is convenient.\n Import StyleSheetEditor module in the IMPORT SECTION:\n from qtvcp.widgets.stylesheeteditor import StyleSheetEditor as SSE\n \n Instantiate StyleSheetEditor module in the INSTANTIATE SECTION:\n STYLEEDITOR = SSE()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1215 / 1290\n \n Create a keybinding in the INITIALIZE SECTION: Under the +__init__.(self, halcomp, widgets,\n paths):+ function add:\n KEYBIND.add_call(\u2019Key_F12\u2019,\u2019on_keycall_F12\u2019)\n \n@@ -53353,15 +53353,15 @@\n def return_value(self, w, message):\n num = message.get(\u2019RETURN\u2019)\n id_code = bool(message.get(\u2019ID\u2019) == \u2019FORM__NUMBER\u2019)\n name = bool(message.get(\u2019NAME\u2019) == \u2019ENTRY\u2019)\n if id_code and name and num is not None:\n print(\u2019The {} number from {} was: {}\u2019.format(name, id_code, num))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1216 / 1290\n \n This catches all general messages so it must check the dialog type and id code to confirm it\u2019s our\n dialog. In this case we had requested an ENTRY dialog and our unique id was FORM_NUMBER, so now we\n know the message is for us. ENTRY or CALCULATOR dialogs return a float number.\n \n@@ -53396,15 +53396,15 @@\n Edit the object name, text, and button type for an appropriate action.\n In this example the:\n \u2022 submenu name must be menuRecent,\n \u2022 actions names must be actionAbout, actionQuit, actionMyFunction\n Loads the toolbar_actions library in the IMPORT SECTION\n from qtvcp.lib.toolbar_actions import ToolBarActions\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1217 / 1290\n \n Instantiate ToolBarActions module in the INSTANTIATE LIBRARY SECTION\n TOOLBAR = ToolBarActions()\n \n Configure submenus and actions in the SPECIAL FUNCTIONS SECTION Under the def initialized_\n@@ -53451,15 +53451,15 @@\n if tab in( self.w.tab_auto, self.w.tab_graphics):\n ACTION.RUN(line=0)\n elif tab == self.w.tab_files:\n self.w.filemanager.load()\n elif tab == self.w.tab_mdi:\n self.w.mditouchy.run_command()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1218 / 1290\n \n This function assumes there is a Tab widget, named mainTab, that has tabs with the names tab_auto,\n tab_graphics, tab_filemanager and tab_mdi.\n In this way the cycle start button works differently depending on what tab is shown.\n This is simplified - checking state and error trapping might be helpful.\n@@ -53498,15 +53498,15 @@\n \u2022 Call it btn_toggle_continuous.\n \u2022 Set the AbstractButton property checkable to True.\n \u2022 Set the ActionButton properties incr_imperial_number and incr_mm_number to 0.\n \u2022 Use Qt Designer\u2019s slot editor to use the button signal clicked(bool) to call form\u2019s handler function\n toggle_continuous_clicked().\n See Using Qt Designer To Add Slots section for more information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1219 / 1290\n \n Then add this code snippets to the handler file under the initialized__ function:\n # at this point:\n # the widgets are instantiated.\n # the HAL pins are built but HAL is not set ready\n@@ -53551,15 +53551,15 @@\n We can \u201dclass patch\u201d the library to redirect the function call. In the IMPORT SECTION add:\n from qtvcp.widgets.file_manager import FileManager as FM\n \n Here we are going to:\n 1. Keep a reference to the original function (1) so we can still call it\n 2. Redirect the class to call our custom function (2) in the handler file instead.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1220 / 1290\n \n ##########################################\n # Special Functions called from QtVCP\n #\n ##########################################\n@@ -53605,15 +53605,15 @@\n #####################\n # GENERAL FUNCTIONS #\n #####################\n def our_load(self,fname):\n print(fname)\n self.w.filemanager.super__load(fname)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1221 / 1290\n \n 12.11.11 Adding Widgets Programmatically\n In some situation it is only possible to add widgets with Python code rather then using the Qt\n Designer editor.\n When adding QtVCP widgets programmatically, sometimes there are extra steps to be taken.\n@@ -53655,15 +53655,15 @@\n def __init__(self,halcomp,widgets,paths):\n self.hal = halcomp\n self.w = widgets\n self.PATHS = paths\n STATUS.connect(\u2019actual-spindle-speed-changed\u2019, \\\n lambda w,speed: self.update_spindle(speed))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1222 / 1290\n \n Add the widgets to the tab We need to make sure the Qt Designer widgets are already built before\n we try to add to them. For this, we add a call to self.make_corner_widgets() function to build our\n extra widgets at the right time, i.e. under the initialized__() function:\n ##########################################\n@@ -53768,15 +53768,15 @@\n 4\n \n This sets it as green when on.\n This is the extra function call required with some QtVCP widgets.\n If HAL_NAME is omitted it will use the widget\u2019s objectName if there is one.\n It gives the special widgets reference to:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1223 / 1290\n \n self.HAL_GCOMP\n the HAL component instance\n self.HAL_NAME\n This widget\u2019s name as a string\n@@ -53869,15 +53869,15 @@\n 12.11.12 Update/Read Objects Periodically\n Sometimes you need to update a widget or read a value regularly that isn\u2019t covered by normal\n libraries.\n Here we update an LED based on a watched HAL pin every 100 ms.\n We assume there is an LED named led in the Qt Designer UI file.\n Load the Qhal library for access to QtVCP\u2019s HAL component In the IMPORT SECTION add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1224 / 1290\n \n from qtvcp.core import Qhal\n \n Instantiate Qhal In the INSTANTIATE LIBRARY SECTION add:\n QHAL = Qhal()\n@@ -53919,15 +53919,15 @@\n ########################\n # widgets allows access to widgets from the QtVCP files\n # at this point the widgets and hal pins are not instantiated\n def __init__(self,halcomp,widgets,paths):\n # directly select ZMQ message receiving\n self.w.screen_options.setProperty(\u2019use_receive_zmq_option\u2019,True)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1225 / 1290\n \n This allows an external program to call functions in the handler file.\n Add a function to be called on ZMQ message reception Let\u2019s add a specific function for testing.\n You will need to run LinuxCNC from a terminal to see the printed text.\n #####################\n@@ -53986,15 +53986,15 @@\n \n 1\n \n You will need to know the signature of the function you wish to call. Also note that the message is\n converted to a JSON object. This is because ZMQ sends byte messages not Python objects. json\n converts Python objects to bytes and will be converted back when received.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1226 / 1290\n \n 12.11.13.2 ZMQ Messages Writing\n You may also want to communicate with an external program from the screen.\n In the ScreenOptions widget, you can select the property use_send_zmq_message. You can also set\n this property directly in the handler file, as in this sample.\n@@ -54038,15 +54038,15 @@\n topic, message = sock.recv_multipart()\n print(\u2019{} sent message:{}\u2019.format(topic,json.loads(message)))\n \n 12.11.14 Sending Messages To Status Bar Or Desktop Notify Dialogs\n There are several ways to report information to the user.\n A status bar is used for short information to show the user.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1227 / 1290\n \n Note\n Not all screens have a status bar.\n \n Status bar usage example\n@@ -54087,15 +54087,15 @@\n #####################\n # general functions #\n #####################\n def focusInChanged(self, widget):\n if isinstance(widget.parent(),type(self.w.gcode_editor.editor)):\n print(\u2019G-code Editor\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1228 / 1290\n \n elif isinstance(widget,type(self.w.gcodegraphics)):\n print(\u2019G-code Display\u2019)\n elif isinstance(widget.parent(),type(self.w.mdihistory) ):\n print(\u2019MDI History\u2019)\n@@ -54138,15 +54138,15 @@\n # if the -o option has \u2019camnumber=\u2019 in it, assume it\u2019s the camera number \u2190to use\n elif \u2019camnumber=\u2019 in self.w.USEROPTIONS_[num]:\n try:\n number = int(self.w.USEROPTIONS_[num].strip(\u2019camnumber=\u2019))\n except Exception as e:\n #\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1229 / 1290\n \n print(\u2019Error with cam_align camera selection - not a number - using \u21900\u2019)\n # set the camera number either as default or if -o option changed the \u2019number\u2019\n variable, to that number.\n self.w.camview._camNum = number\n@@ -54178,15 +54178,15 @@\n \u2022 the .ui file,\n \u2022 the handler file, and\n \u2022 possibly the .qss theme file.\n \n 12.12.3 QtVCP Startup To Shutdown\n QtVCP source is located in +src/emc/usr_intf/qtvcp+ folder of LinuxCNC source tree.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1230 / 1290\n \n 12.12.3.1 QtVCP Startup\n When QtVCP first starts:\n 1. It must decide if this object is a screen or a panel.\n 2. It searches for and collects information about paths of required files and useful folders.\n@@ -54220,15 +54220,15 @@\n CONFIGPATH\n Path of the launched configuration\n BASEDIR\n General path, used to derive all paths\n BASENAME\n Generic name used to derive all paths\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1231 / 1290\n \n LIBDIR\n Path of QtVCP\u2019s Python library\n HANDLER\n Path of handler file\n@@ -54265,15 +54265,15 @@\n Warning\n Keybinding is always a difficult-to-get-right-in-all-cases affair.\n \n Custom keybinding functions are to be defined in the handler file.\n Most importantly widgets that require regular key input and not jogging, should be checked for in the\n processed_key_event__ function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1232 / 1290\n \n 12.12.5.4 Preference File\n Some QtVCP widgets use the preference file to record important information.\n This requires the preference file to be set up early in the widget initialization process.\n The easiest way to do this is to use the ScreenOptions widget.\n@@ -54304,15 +54304,15 @@\n By default, if there is a preference file, the dialogs will remember their last size/placement.\n It is possible to override this so they open in the same location each time.\n 12.12.5.7 Styles (Themes)\n While it is possible to set styles in Qt Designer, it is more convenient to change them later if they are\n all set in a separate .qss file.\n The file should be put in the same location as the handler file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1233 / 1290\n \n Chapter 13\n \n User Interface Programming\n 13.1 Panelui\n@@ -54342,15 +54342,15 @@\n loadrt sampler cfg=u depth=1025\n #uncomment to validate the panelui INI file\n #loadusr pyui\n # -d = debug, -v = verbose debug\n # -d will show you keypress identification and commands called\n # -v is for develeper info\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1234 / 1290\n \n loadusr -W panelui -d\n # using simulated buttons instead of the MESA 7I73 card\n # so we load the sim_matrix_kb component to convert HAL pins to keyscan codes\n loadrt sim_matrix_kb\n@@ -54391,15 +54391,15 @@\n This allows one to change the prefix of the HAL pins from panelui to an arbitrary name.\n ZMQ Messaging Setup\n [ZMQ_SETUP]\n TOPIC = \u2019QTVCP\u2019\n SOCKET = \u2019tcp://127.0.0.1:5690\u2019\n ENABLE = True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1235 / 1290\n \n This sets up and enables ZMQ based messaging. TOPIC and SOCKET must match the listening program.\n Radio Buttons Radiobutons allow only one button in the group to be active at a time. Each group\n has its own output pin, separate from each button in the group. Radio button definitions start with\n the text RADIO_BUTTON inside single brackets.\n@@ -54453,15 +54453,15 @@\n \n Toggle Buttons Togglebuttons only change state on each press of the button. Toggle button definitions start with the text TOGGLE_BUTTON inside single brackets.\n [TOGGLE_BUTTONS]\n # Each button name inside double brackets, must be unique and is case sensitive.\n # This button, named \u2019tool_change\u2019is controller by the row 2 column 5 key.\n # It has a BIT output, will output 1 on true state and 0 on false state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1236 / 1290\n \n # It also has a status pin which will follow its current state.\n # DEFAULT sets this to true when first initialized.\n # The _COMMAND are not used since OUTPUT is not set to COMMAND but validation will\n # add the lines regardless\n@@ -54505,15 +54505,15 @@\n \u2022 required argument: axis number (int)\n spindle_forward_adjust\n \u2022 optional argument: starting RPM (int) - default 100\n \u2022 Description: If the spindle is stopped it will start in the forward direction. If it is already running it\n will increase or decrease the rpm depending on what direction the spindle is running in.\n spindle_forward\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1237 / 1290\n \n \u2022 optional argument: starting RPM (int) - default 100\n spindle_reverse\n \u2022 optional argument: starting RPM (int) - default 100\n spindle_reverse_adjust\n@@ -54539,15 +54539,15 @@\n \u2022 Description: Move Z axis to the given machine position\n feed_hold\n \u2022 required argument: state (bool 0 or 1)\n feed_override\n \u2022 required argument: rate (float)\n rapid_override\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \u2022 required argument: rate (float 0-1)\n spindle_override\n \u2022 required argument: rate (float)\n max_velocity\n \u2022 required argument: rate (float)\n optional_stop\n@@ -54579,15 +54579,15 @@\n STATUS_PIN = False\n DEFAULT = FALSE\n TRUE_STATE = 1\n FALSE_STATE = 0\n \n 1238 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1239 / 1290\n \n Here is a sample program that will receive the message and print it to the terminal.\n import zmq\n import json\n # ZeroMQ Context\n@@ -54631,15 +54631,15 @@\n print(wname.metadata)\n # Print the calling widgets internal metadata (from config \u2190file)\n # Call a mdi command to print a msg in LinuxCNC.\n # This requires LinuxCNC to be homed, but does not check for that.\n # parent commands expect a widget_instance - None is substituted\n self.parent.mdi(None,\u2019(MSG, Hello Linuxcnc World!)\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1240 / 1290\n \n # Each call to this function will cycle the mode of LinuxCNC.\n def cycle_mode(self, wname, m):\n if self.current_mode == 0:\n self.current_mode = 1\n@@ -54676,15 +54676,15 @@\n \u2022 establish connections to the command, status and error NML channels as needed\n \u2022 poll the status channel, either periodically or as needed\n \u2022 before sending a command, determine from status whether it is in fact OK to do so (for instance,\n there is no point in sending a Run command if task is in the ESTOP state, or the interpreter is not\n idle)\n \u2022 send the command by using one of the linuxcnc command channel methods\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1241 / 1290\n \n To retrieve messages from the error channel, poll the error channel periodically, and process any\n messages retrieved.\n \u2022 poll the status channel, either periodically or as needed\n \u2022 print any error message and explore the exception code\n@@ -54722,15 +54722,15 @@\n angular_units\n (returns float) - machine angular units per deg, reflects [TRAJ]ANGULAR_UNITS INI value.\n aout\n (returns tuple of floats) - current value of the analog output pins.\n axes\n (returns integer) - number of axes. Derived from [TRAJ]COORDINATES INI value.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1242 / 1290\n \n axis\n (returns tuple of dicts) - reflecting current axis values. See The axis dictionary.\n axis_mask\n (returns integer) - mask of axis available as defined by [TRAJ]COORDINATES in the INI file.\n@@ -54772,15 +54772,15 @@\n exec_state\n (returns integer) - task execution state. One of EXEC_ERROR, EXEC_DONE, EXEC_WAITING_FOR_MO\n EXEC_WAITING_FOR_MOTION_QUEUE, EXEC_WAITING_FOR_IO, EXEC_WAITING_FOR_MOTION_A\n EXEC_WAITING_FOR_DELAY, EXEC_WAITING_FOR_SYSTEM_CMD, EXEC_WAITING_FOR_SPINDLE_\n feed_hold_enabled\n (returns boolean) - enable flag for feed hold.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1243 / 1290\n \n feed_override_enabled\n (returns boolean) - enable flag for feed override.\n feedrate\n (returns float) - current feedrate override, 1.0 = 100%.\n@@ -54822,15 +54822,15 @@\n joint\n (returns tuple of dicts) - reflecting current joint values. See The joint dictionary.\n joint_actual_position\n (returns tuple of floats) - actual joint positions.\n joint_position\n (returns tuple of floats) - Desired joint positions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1244 / 1290\n \n joints\n (returns integer) - number of joints. Reflects [KINS]JOINTS INI value.\n kinematics_type\n (returns integer) - The type of kinematics. One of:\n@@ -54872,15 +54872,15 @@\n \u2022 MOTION_TYPE_TOOLCHANGE\n \u2022 MOTION_TYPE_PROBING\n \u2022 MOTION_TYPE_INDEXROTARY\n \u2022 Or 0 if no motion is currently taking place.\n optional_stop\n (returns integer) - option stop flag.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1245 / 1290\n \n paused\n (returns boolean) - motion paused flag.\n pocket_prepped\n (returns integer) - A Tx command completed, and this pocket is prepared. -1 if no prepared\n@@ -54921,15 +54921,15 @@\n state\n (returns integer) - current command execution status. One of RCS_DONE, RCS_EXEC, RCS_ERROR.\n task_mode\n (returns integer) - current task mode. one of MODE_MDI, MODE_AUTO, MODE_MANUAL.\n task_paused\n (returns integer) - task paused flag.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1246 / 1290\n \n task_state\n (returns integer) - current task state. one of STATE_ESTOP, STATE_ESTOP_RESET, STATE_ON,\n STATE_OFF.\n tool_in_spindle\n@@ -54968,15 +54968,15 @@\n 13.2.3.3 The joint dictionary\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*import linuxcnc\n s = linuxcnc.stat()\n s.poll()\n print(\u201dJoint 1 homed: \u201d, s.joint[1][\u201dhomed\u201d])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1247 / 1290\n \n For each joint, the following dictionary keys are available:\n backlash\n (returns float) - Backlash in machine units. configuration parameter, reflects [JOINT_n]BACKLASH.\n enabled\n@@ -55013,15 +55013,15 @@\n min_position_limit\n (returns float) - minimum limit (soft limit) for joint motion, in machine units. configuration parameter, reflects [JOINT_n]MIN_LIMIT.\n min_soft_limit\n (returns integer) - non-zero means min_position_limit was exceeded.\n output\n (returns float) - commanded output position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1248 / 1290\n \n override_limits\n (returns integer) - non-zero means limits are overridden.\n units\n (returns float) - joint units per mm, or per degree for angular joints.\n@@ -55059,15 +55059,15 @@\n Other commands may be sent only in appropriate state, and those tests can be a bit tricky. For\n instance, an MDI command can be sent only if:\n \u2022 ESTOP has not been triggered, and\n \u2022 the machine is turned on and\n \u2022 the axes are homed and\n \u2022 the interpreter is not running and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1249 / 1290\n \n \u2022 the mode is set to MDI mode\n so an appropriate test before sending an MDI command through linuxcnc.command.mdi() could be:\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*import linuxcnc\n@@ -55108,15 +55108,15 @@\n c.mode(linuxcnc.MODE_MDI)\n c.mode(linuxcnc.MODE_AUTO)\n \n jjogmode, joint_num_or_axis_index)\n jjogmode, joint_num_or_axis_index, velocity)\n jjogmode, joint_num_or_axis_index, velocity, increment)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1250 / 1290\n \n c.mode(linuxcnc.MODE_MANUAL)\n c.override_limits()\n c.program_open(\u201dfoo.ngc\u201d)\n c.reset_interpreter()\n@@ -55153,15 +55153,15 @@\n Constants\n FLOOD_ON\n FLOOD_OFF\n home(int)\n home a given joint.\n jog(command-constant, bool, int[, float[, float]])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1251 / 1290\n \n Syntax\n jog(command, jjogmode, joint_num_or_axis_index, velocity[, distance])\n jog(linuxcnc.JOG_STOP, jjogmode, joint_num_or_axis_index)\n jog(linuxcnc.JOG_CONTINUOUS, jjogmode, joint_num_or_axis_index, velocity)\n@@ -55204,15 +55204,15 @@\n program_open(string)\n open an NGC file.\n rapidrate()\n set rapid override factor\n reset_interpreter()\n reset the RS274NGC interpreter\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1252 / 1290\n \n set_adaptive_feed(int)\n set adaptive feed flag\n set_analog_output(int, float)\n set analog output pin to value\n@@ -55250,15 +55250,15 @@\n # Increase speed of spindle 0 by 100rpm. Spindle must be on first.\n c.spindle(linuxcnc.INCREASE)\n # Increase speed of spindle 2 by 100rpm. Spindle must be on first.\n c.spindle(linuxcnc.SPINDLE_INCREASE, 2)\n # Set speed of spindle 0 to 1024 rpm.\n c.spindle.(linuxcnc.SPINDLE_FORWARD, 1024)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1253 / 1290\n \n # Set speed of spindle 1 to -666 rpm.\n c.spindle.(linuxcnc.SPINDLE_REVERSE, 666, 1)\n # Stop spindle 0.\n c.spindle.(linuxcnc.SPINDLE_OFF)\n@@ -55299,15 +55299,15 @@\n kind, text = error\n if kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR):\n typus = \u201derror\u201d\n else:\n typus = \u201dinfo\u201d\n print(typus, text)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 13.2.7 Reading INI file values\n Here\u2019s an example for reading values from an INI file through the linuxcnc.ini object:\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*# run as:\n # python3 ini-example.py ~/emc2-dev/configs/sim/axis/axis_mm.ini\n import sys\n@@ -55341,15 +55341,15 @@\n 13.2.8.1 members\n \n npts\n number of points.\n \n 1254 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1255 / 1290\n \n 13.2.8.2 methods\n \n start(float)\n start the position logger and run every ARG seconds\n@@ -55386,15 +55386,15 @@\n +\n Create new pin.\n Arguments: pin name suffix, pin type, and pin direction. For parameters, the arguments are:\n parameter name suffix, parameter type, and parameter direction.\n .Example:\n h.newpin(\u201din\u201d, hal.HAL_FLOAT, hal.HAL_IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1256 / 1290\n \n ready\n Tells the HAL system the component is initialized. Locks out adding pins.\n unready\n Allows a component to add pins after ready() has been called. One should call ready() on the\n@@ -55427,15 +55427,15 @@\n Read a pin, param, or signal directly.\n Example\n value = hal.get_value(\u201diocontrol.0.emc-enable-in\u201d)\n \n get_info_pins()\n Returns a list of dicts of all system pins.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n listOfDicts = hal.get_info_pins()\n pinName1 = listOfDicts[0].get(\u2019NAME\u2019)\n pinValue1 = listOfDicts[0].get(\u2019VALUE\u2019)\n pinType1 = listOfDicts[0].get(\u2019TYPE\u2019)\n pinDirection1 = listOfDicts[0].get(\u2019DIRECTION\u2019)\n \n@@ -55471,15 +55471,15 @@\n get_type\n Get the HAL object\u2019s type.\n Returns an integer.\n h.in.get_type()\n \n 1257 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1258 / 1290\n \n get_dir\n Get the HAL object direction type.\n Returns an integer.\n h.in.get_dir()\n@@ -55513,15 +55513,15 @@\n GStat is a Python class used to send messages from LinuxCNC to other Python programs. It uses\n GObject to deliver messages, making it easy to listen for specific information. This is referred to\n as event-driven programming, which is more efficient then every program polling LinuxCNC at the\n same time. GladeVCP, Gscreen, Gmoccapy and QtVCP use GStat extensively. GStat is in the hal_glib\n module.\n Overview\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1259 / 1290\n \n \u2022 First, a program imports the hal_glib module and instantiates GStat.\n \u2022 Then it connects to the messages it wishes to monitor.\n \u2022 GStat checks LinuxCNC\u2019s status every 100 ms and if there are differences from the last check, it\n will send a callback message to all the connected programs with the current status.\n@@ -55559,15 +55559,15 @@\n h.newpin(\u201dg21\u201d, hal.HAL_BIT, hal.HAL_OUT)\n h.ready()\n # connect a GSTAT message to a callback function\n GSTAT.connect(\u201dmetric-mode-changed\u201d,mode_changed)\n # force GSTAT to initialize states\n GSTAT.forced_update()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1260 / 1290\n \n # loop till exit\n try:\n GLib.MainLoop().run()\n except KeyboardInterrupt:\n@@ -55604,15 +55604,15 @@\n def get_handlers(halcomp,builder,useropts):\n return [HandlerClass(halcomp,builder,useropts)]\n \n 13.4.2.3 QtVCP Python extension code pattern\n QtVCP extends GStat, so must be loaded differently but all the messages are available in QtVCP.\n This handler file assumes there are three QLabels named:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1261 / 1290\n \n \u2022 state_label\n \u2022 e_state_label\n \u2022 interp_state_label\n #!/usr/bin/env python3\n@@ -55649,15 +55649,15 @@\n state-off\n (returns nothing) - Sent when LinuxCNC is in machine off state.\n homed\n (returns string) - Sent as each joint is homed.\n all-homed\n (returns nothing) - Sent when all defined joints are homed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1262 / 1290\n \n not-all-homed\n (returns string) - Sends a list of joints not currently homed.\n override_limits_changed\n (returns string) - Sent if LinuxCNC has been directed to override its limits.\n@@ -55698,15 +55698,15 @@\n It is expected to be in the machine\u2019s native units regardless of the current unit mode .\n jogincrement-changed\n (returns float, text) - Sent when jog increment has changed.\n LinuxCNC does not have an internal jog increment.\n This is GStat\u2019s internal jog increment.\n It is expected to be in the machine\u2019s native units regardless of the current unit mode .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1263 / 1290\n \n jogincrement-angular-changed\n (returns float, text) - Sent when angular jog increment has changed.\n LinuxCNC does not have an internal angular jog increment.\n This is GStat\u2019s internal angular jog increment.\n@@ -55747,15 +55747,15 @@\n current-z-rotation\n (returns float) - Sent as the current rotatated angle around the Z axis changes\n requested-spindle-speed-changed\n (returns float) - Sent when the current requested RPM changes\n actual-spindle-speed-changed\n (returns float) - Sent when the actual RPM changes based on the HAL pin spindle.0.speed-in.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n spindle-override-changed\n (returns float) - Sent when the spindle override value changes\n in percent\n feed-override-changed\n (returns float) - Sent when the feed override value changes\n in percent\n@@ -55797,15 +55797,15 @@\n g-code-changed\n (returns string) - Sent when active G-code change\n metric-mode-changed\n (returns bool) - Sent when G21 status changes\n \n 1264 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1265 / 1290\n \n user-system-changed\n (returns string) - Sent when the reference coordinate system (G5x) changes\n mdi-line-selected\n (returns string, string) - intended to be sent when an MDI line is selected by user.\n@@ -55850,15 +55850,15 @@\n This depends on the widget/libraries used.\n mdi-history-changed\n (returns None) - intended to be sent when an MDI history needs to be reloaded.\n This depends on the widget/libraries used.\n \n for a\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1266 / 1290\n \n machine-log-changed\n (returns None) - intended to be sent when machine log has changed.\n This depends on the widget/libraries used.\n update-machine-log\n@@ -55902,15 +55902,15 @@\n integer represents the kind of error. ERROR, TEXT or DISPLAY\n string is the actual error message.\n This depends on the widget/libraries used.\n general\n (returns Python dict) - intended to be sent when message must be sent that is not covered by a\n more specific message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1267 / 1290\n \n General message should be used a sparsely as reasonable because all object connected to it will\n have to parse it.\n It uses a Python dict for communication.\n The dict should include and be checked for a unique id keyname pair:\n@@ -55944,15 +55944,15 @@\n (None) set_jog_increments\n (float, string) get_jog_increments\n (None) is_all_homed\n (nothing) - This will return the current state of all_homed (BOOL).\n machine_is_on\n (nothing) - This will return the current state of machine (BOOL).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1268 / 1290\n \n estop_is_clear\n (nothing) - This will return the state of Estop (BOOL)\n set_tool_touchoff\n (tool,axis,value) - This command will\n@@ -55991,15 +55991,15 @@\n joint-selection-changed message.\n get_selected_joint\n (None) - returns integer representing the internal selected joint number.\n set_selected_axis\n (string) - records the selected axis letter internally.\n Requests the axis to be selected by emitting the axis-selection-changed message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1269 / 1290\n \n get_selected_axis\n (None) - returns string representing the internal selected axis letter.\n is_man_mode\n (None) is_mdi_mode\n@@ -56019,30 +56019,30 @@\n state-tags branch.\n \n 13.5 Vismach\n Vismach is a set of Python functions that can be used to create and animate models of machines.\n Vismach displays the model in a 3D viewport and the model parts are animated as the values of\n associated HAL pins change.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1270 / 1290\n \n The Vismach viewport view can be manipulated as follows:\n \u2022 zoom by scroll wheel or right button drag,\n \u2022 pan by left button drag,\n \u2022 rotate by middle-button drag or shift-drag.\n A Vismach model takes the form of a Python script and can use standard Python syntax. This means\n that there is more than one way to lay out the script, but in the examples given in this document I will\n use the simplest and most basic of them.\n The basic sequence in creating the Vismach model is\n \u2022 Create the HAL pins that control the motion.\n \u2022 Create the parts.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1271 / 1290\n \n \u2022 Define how they move.\n \u2022 Assemble into movement groups.\n \n 13.5.1 Start the script\n@@ -56082,15 +56082,15 @@\n \u2022 cylinder = CylinderX(x1, r1, x2, r2) + cylinder = CylinderY(y1, r1, y2, r2) + cylinder\n = CylinderZ(z1, r1, z2, r2)\n Creates a (optionally tapered) cylinder on the given axis with the given radii at the given points on\n the axis.\n \u2022 sphere = Sphere(x, y, z, r)\n Creates a sphere of radius r at (x,y,z)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1272 / 1290\n \n \u2022 triangle = TriangleXY(x1, y1, x2, y2, x3, y3, z1, z2) + triangle = TriangleXZ(x1, z1,\n x2, z2, x3, z3, y1, y2) + triangle = TriangleYZ(y1, z1, y2, z2, y3, z3, x1, x2)\n Creates a triangular plate between planes defined by the last two values parallel to the specified\n plane, with vertices given by the three coordinate pairs.\n@@ -56128,15 +56128,15 @@\n The function arguments are:\n \u2013 first a collection/part which can be pre-created earlier in the script, or could be created at this\n point if preferred eg part1 = HalTranslate([Box(....)], ...).\n \u2013 The HAL component is the next argument, ie the object returned by the comp = hal.component(...)\n command. After that is the name of the HAL in that will animate the motion, this needs to match\n an existing HAL pin that is part of the HAL component created earlier in the script.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1273 / 1290\n \n \u2013 Then follow the X, Y, Z scales.\n For a Cartesian machine created at 1:1 scale this would typically be 1,0,0 for a motion in the\n positive X direction.\n However if the STL file happened to be in cm and the machine was in inches, this could be fixed\n@@ -56177,15 +56177,15 @@\n head = AsciiSTL(filename=\u201d./head.stl\u201d)\n head = Color([0.3,0.3,0.3,1],[head])\n head = Translate([head],0,0,4)\n head = Collection([head, tool, dogs, draw])\n head = HalTranslate([head],c,\u201dZ\u201d,0,0,0.1)\n # base\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1274 / 1290\n \n base = AsciiSTL(filename=\u201d./base.stl\u201d)\n base = Color([0.5,0.5,0.5,1],[base])\n # mount head on it\n base = Collection([head, base])\n@@ -56226,15 +56226,15 @@\n import hal\n #create the HAL component and pins\n comp = hal.component(\u201dcompname\u201d)\n comp.newpin(\u201dpin_name\u201d, hal.HAL_FLOAT, hal.HAL_IN)\n ...\n #create the floor, tool and work\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n floor = Box(-50, -50, -3, 50, 50, 0)\n work = Capture()\n tooltip = Capture()\n ...\n #Build and assemble the model\n part1 = Collection([Box(-6,-3,94,6,3,100)])\n@@ -56245,23 +56245,23 @@\n #create a top-level model\n model = Collection([base, saddle, head, carousel])\n #Start the visualization\n main(model, tooltip, work, 100, lat=-75, lon=215)\n \n 1275 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1276 / 1290\n \n Part III\n \n Glossary, Copyright & History\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1277 / 1290\n \n Chapter 14\n \n Overleaf\n \n@@ -56281,15 +56281,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1278 / 1290\n \n Chapter 15\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -56323,15 +56323,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1279 / 1290\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -56376,15 +56376,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1280 / 1290\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -56427,15 +56427,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1281 / 1290\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -56479,15 +56479,15 @@\n Rapid\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum speed of the machine. It is often desirable to limit the rapid rate when testing a G-code\n program for the first time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1282 / 1290\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -56529,28 +56529,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1283 / 1290\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1284 / 1290\n \n Chapter 16\n \n Copyright\n 16.1 Legal Section\n@@ -56578,15 +56578,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1285 / 1290\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any\n such manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -56635,15 +56635,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front\n cover must present the full title with all words of the title equally prominent and visible. You may add\n other material on the covers in addition. Copying with changes limited to the covers, as long as they\n preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying\n in other respects.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1286 / 1290\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access\n@@ -56689,15 +56689,15 @@\n Version. N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any\n Invariant Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1287 / 1290\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -56738,15 +56738,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1288 / 1290\n \n this License provided that you also include the original English version of this License. In case of a\n disagreement between the translation and the original English version of this License, the original\n English version will prevail.\n 9. TERMINATION\n@@ -56774,15 +56774,15 @@\n is included in the section entitled \u201dGNU Free Documentation License\u201d.\n If you have no Invariant Sections, write \u201dwith no Invariant Sections\u201d instead of saying which ones\n are invariant. If you have no Front-Cover Texts, write \u201dno Front-Cover Texts\u201d instead of \u201dFront-Cover\n Texts being LIST\u201d; likewise for Back-Cover Texts.\n If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License,\n to permit their use in free software.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1289 / 1290\n \n Chapter 17\n \n LinuxCNC History\n 17.1 Origin\n@@ -56814,15 +56814,15 @@\n interested in improving EMC. Many people requested or coded small improvements to the code. Ray\n Henry wanted to refine the user interface. Since Ray was reluctant to try tampering with the C code\n in which the user interface was written, a simpler method was sought. Fred Proctor of NIST suggested a scripting language and wrote code to interface the Tcl/Tk scripting language to the internal\n NML communications of EMC. With this tool Ray went on to write a Tcl/Tk program that became the\n predominant user interface for EMC at the time.\n For NIST\u2019s perspective, see this paper written by William Shackleford and Frederick Proctor, describing the history of EMC and its transition to open source.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1290 / 1290\n \n By this time interest in EMC as beginning to pick up substantially. As more and more people attempted\n installation of EMC, the difficulty of patching a Linux kernel with the real time extensions and of\n compiling the EMC code became glaringly obvious. Many attempts to document the process and\n write scripts were attempted, some with moderate success. The problem of matching the correct\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_de.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_de.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_de.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_de.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Getting Started V2.9.1, 04 Nov 2023'\n+Title: 'Getting Started V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Getting Started V2.9.1, 04 Nov 2023\n+Getting Started V2.9.1, 06 Nov 2023\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n ii\n \n Contents\n 1 About LinuxCNC\n \n 1\n@@ -113,15 +113,15 @@\n \n 10\n \n 3.7 Review Latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 10\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n iii\n \n 3.8 Set fixed ip address - only for mesa card.\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -251,15 +251,15 @@\n 7.2 GNU Free Documentation License\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 31\n 31\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n iv\n \n The LinuxCNC Team\n \n This handbook is a work in progress. If you are able to help with writing, editing, or graphic preparation please contact any member of the writing team or join and send an email to emc-users@lists.sourceforge\n Copyright \u00a9 2000-2020 LinuxCNC.org\n@@ -277,15 +277,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 1 / 35\n \n Chapter 1\n \n About LinuxCNC\n 1.1 The Software\n@@ -312,15 +312,15 @@\n \u2022 It can simultaneously move up to 9 axes and supports a variety of interfaces.\n \u2022 The control can operate true servos (analog or PWM) with the feedback loop closed by the LinuxCNC\n software at the computer, or open loop with step-servos or stepper motors.\n \u2022 Motion control features include: cutter radius and length compensation, path deviation limited to\n a specified tolerance, lathe threading, synchronized axis motion, adaptive feedrate, operator feed\n override, and constant velocity control.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 2 / 35\n \n \u2022 Support for non-Cartesian motion systems is provided via custom kinematics modules. Available\n architectures include hexapods (Stewart platforms and similar concepts) and systems with rotary\n joints to provide motion such as PUMA or SCARA robots.\n \u2022 LinuxCNC runs on Linux using real time extensions.\n@@ -353,15 +353,15 @@\n 1.3.2 Mailing List\n An Internet Mailing List is a way to put questions out for everyone on that list to see and answer at\n their convenience. You get better exposure to your questions on a mailing list than on the IRC but\n answers take longer. In a nutshell you e-mail a message to the list and either get daily digests or\n individual replies back depending on how you set up your account.\n You can subscribe to the emc-users mailing list at: https://lists.sourceforge.net/lists/listinfo/emc-users\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 3 / 35\n \n 1.3.3 Web Forum\n A web forum can be found at https://forum.linuxcnc.org or by following the link at the top of the\n linuxcnc.org home page.\n This is quite active but the demographic is more user-biased than the mailing list. If you want to be\n@@ -371,15 +371,15 @@\n A Wiki site is a user maintained web site that anyone can add to or edit.\n \n The user maintained LinuxCNC Wiki site contains a wealth of information and tips at: https://wiki.linuxcnc.or\n \n 1.3.5 Bug Reports\n Report bugs to the LinuxCNC github bug tracker.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 4 / 35\n \n Chapter 2\n \n System Requirements\n 2.1 Minimum Requirements\n@@ -407,15 +407,15 @@\n LinuxCNC requires a kernel modified for realtime use to control real machine hardware. It can,\n however run on a standard kernel in simulation mode for purposes such as checking G-code, testing\n config files and learning the system. To work with these kernel versions there are two versions of\n LinuxCNC distributed. The package names are \u201dlinuxcnc\u201d and \u201dlinuxcnc-uspace\u201d.\n The realtime kernel options are preempt-rt, RTAI and Xenomai.\n You can discover the kernel version of your system with the command:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 5 / 35\n \n uname -a\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n@@ -451,15 +451,15 @@\n an extended time will give you the info you need to determine suitability.\n \n 2.3.2 Video Cards\n If your installation pops up with 800 x 600 screen resolution then most likely Debian does not recognize\n your video card or monitor. This can sometimes be worked-around by installing drivers or creating /\n editing Xorg.conf files.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 6 / 35\n \n Chapter 3\n \n Getting LinuxCNC\n This section describes how to install LinuxCNC version 2.9 on a PC already running Debian Bookworm (Debian 12). LinuxCNC requires the PREEMPT_RT real time kernel to ensure the strict timing\n@@ -488,15 +488,15 @@\n sudo apt install linuxcnc-uspace linuxcnc-uspace-dev\n \n Optionally you can install mesaflash if you are using a Mesa card:\n sudo apt install mesaflash\n \n Reboot and log in again as the same user. Open a terminal window and check PREEMPT_RT is installed:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 7 / 35\n \n uname -v\n \n PREEMPT_RT should be displayed in the results.\n That\u2019s it! You are done! You will find LinuxCNC under the CNC menu.\n@@ -527,15 +527,15 @@\n Note\n Raspberry Pis (and most other Single Board Computers, or SBUs) are ARM64 machines. These instructions will feature arm64 kernel and can\u2019t be used for AMD64 machines (which is what many PCs\n are, including all Intel based machines).\n \n 1. Download a Debian Bookworm image from https://raspi.debian.net/daily-images/ and burn to an\n SD card and install in the usual way.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 8 / 35\n \n Note\n There have been reported black screen lockout with the \u201dtested\u201d images on some Pis. It may be\n that removing dtoverlay=vc4-fkms-v3d-pi4 from /boot/config.txt resolves that problem. These\n instructions were tested using the 2023/05/15 daily build.\n@@ -576,15 +576,15 @@\n disable_overscan=1\n dtparam=audio=off\n \n Save and exit nano NOTE: These commands (a) use video graphics resources for 3D acceleration\n (increases performance considerably), (b) don\u2019t overscan (fixes some black border issues), and (c)\n don\u2019t use audio (unknown performance enhancement)\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 9 / 35\n \n Warning\n The first command is only tested on RasPi 4 models, and it specifically references pi4. We have\n commented it out as on one test it seems to cause the Pi to hang. Experiment at your own\n risk.\n@@ -620,15 +620,15 @@\n 3.5 Bookworm Tweaks\n 3.5.1 Basic Tweaks\n To make life easy, there are some standard tweaks you can make to Bookworm which should work on\n both X86 and the pi.\n From the menu settings/Power manager set the power settings to suit your needs. You can turn off\n screen saver and screen lock here Install geany and grub-customizer (x86/AMD64 only):\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 10 / 35\n \n sudo apt install geany grub-customizer\n \n Finally now geany is installed, enable auto login\n sudo geany /etc/lightdm/lightdm.conf\n@@ -661,15 +661,15 @@\n latency-histogram --nobase --sbins 1000\n \n How to evaluate latency is covered in the LinuxCNC documents Among other things, latency is affected\n by: BIOS settings; Isolcpus and other boot time settings; Kernel version used\n Note\n Optimal latency settings are still subject to review following recent changes to the Linux kernel.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 11 / 35\n \n 3.8 Set fixed ip address - only for mesa card.\n Usually we set up the mesa card to have the ip address 10.10.10.10. We need to set a fixed ip address\n of 10.10.10.1 to the network interface that connects to it. Type:\n ip a\n@@ -709,15 +709,15 @@\n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-de\n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-es\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 12 / 35\n \n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-fr\n pin: release o=http://buildbot2.highlab.com/debian/\n@@ -760,15 +760,15 @@\n The r8168-dkms and r8125-dkms drivers are in the non-free packages which are not included in\n sources.list by default.\n You can see your driver if you type the following to identify your NIC name:\n ip a\n \n Now display the NIC info eg:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 13 / 35\n \n sudo apt install ethtool\n ethtool -i enps02\n \n If it seems you could benefit from this driver, continue Type:\n@@ -805,15 +805,15 @@\n sudo apt purge r8168-dkms\n \n 3.11 Installing a later kernel\n Since the release of Debian Bullseye (Linux kernel 5.10), real time performance has been disappointing. In particular, network latency when communicating with a Mesa ethernet card has been generating Error Finishing Read Errors. This means that the network latency left insufficient time for the\n servo thread cycle to complete in time.\n This appears to have been more prevalent with Realtek Network interfaces. Fortunately, each iteration of the Linux kernel has improved results, particularly since the release of 6.x kernels. Debian\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 14 / 35\n \n Bookworm (Debian 12) is using the 6.1 kernel which is quite good. In our testing, we found that latency improved by 265% if we used the 6.3 kernel. We have compiled this version of the kernel for\n your convenience. This image was updated to the final 6.3 kernel on 1 May 2023 and may be updated\n form time to time.\n Only try installing it if you have exhausted all options by following the steps below:\n@@ -909,22 +909,22 @@\n simulation only\n machine control\n & simulation\n machine control\n & simulation\n simulation only\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n Note\n LinuxCNC v2.8 and above is not supported on Ubuntu Lucid or older.\n \n 15 / 35\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 16 / 35\n \n Chapter 4\n \n Running LinuxCNC\n 4.1 Invoking LinuxCNC\n@@ -951,15 +951,15 @@\n applications like PyVCP or GladeVCP.\n \u2013 attic - Obsolete or historical configurations.\n The sim configurations are often the most useful starting point for new users and are organized around\n supported GUIs:\n \u2022 axis - Keyboard and Mouse GUI\n \u2022 craftsman - Touch Screen GUI (no longer maintained ???)\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 17 / 35\n \n \u2022 gmoccapy - Touch Screen GUI\n \u2022 gscreen - Touch Screen GUI\n \u2022 pyvcp_demo - Python Virtual Control Panel\n \u2022 qtaxis - Touch Screen GUI, axis lookalike\n@@ -990,15 +990,15 @@\n \u2022 tormach\n A complete system may be required to use these configurations.\n The apps items are typically either:\n 1. utilities that don\u2019t require starting linuxcnc\n 2. demonstrations of applications that can be used with linuxcnc\n \u2022 info - creates a file with system information that may be useful for problem diagnosis.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 18 / 35\n \n \u2022 gladevcp - Example GladeVCP applications.\n \u2022 halrun - Starts halrun in an terminal.\n \u2022 latency - Applications to investigate latency\n \u2013 latency-histogram-1 - histogram for single servo thread\n@@ -1015,15 +1015,15 @@\n Figure 4.1: LinuxCNC Configuration Selector\n Click any of the listed configurations to display specific information about it. Double-click a configuration or click OK to start the configuration.\n Select Create Desktop Shortcut and then click OK to add an icon on the Ubuntu desktop to directly\n launch this configuration without showing the Configuration Selector screen.\n When you select a configuration from the Sample Configurations section, it will automatically place a\n copy of that config in the ~/linuxcnc/configs directory.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 19 / 35\n \n 4.3 Next steps in configuration\n After finding the sample configuration that uses the same interface hardware as your machine (or a\n simulator configuration), and saving a copy to your home directory, you can customize it according to\n the details of your machine. Refer to the Integrator Manual for topics on configuration.\n@@ -1050,15 +1050,15 @@\n HAL files, local modifications will then prevail.\n The Configuration selector makes a symbolic link in the user configuration directory (named hallib)\n that points to the system HAL file library. This link simplifies copying a library file. For example, to\n copy the library core_sim.hal file in order to make local modifications:\n cd ~/linuxcnc/configs/name_of_configuration\n cp hallib/core_sim.hal core_sim.hal\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 20 / 35\n \n Chapter 5\n \n Updating LinuxCNC\n Updating LinuxCNC to a new minor release (ie to a new version in the same stable series, for example\n@@ -1090,15 +1090,15 @@\n \n You should be running on Debian Buster, Bullseye or Bookworm or Ubuntu 20.04 \u201dFocal Fossa\u201d or\n newer. LinuxCNC will not run on older distributions than these.\n You will also need to check which realtime kernel is being used:\n uname -r\n 6.1.0-10-rt-amd64\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 21 / 35\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n If you see -rtai- in the kernel name then you are running RTAI realtime. See below for the LinuxCNC\n version to install. At this moment there are (tmporariliy) no RTAI packages for LinuxCNC 2.9.0 but it\n@@ -1130,15 +1130,15 @@\n deb https://linuxcnc.org buster base\n 2.9-rtpreempt\n deb https://linuxcnc.org bullseye base\n 2.9-uspace\n deb https://linuxcnc.org bookworm base\n 2.9-uspace\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 22 / 35\n \n \u2022 Click Add Source, then Close in the Software Sources window. If it pops up a window informing\n you that the information about available software is out-of-date, click the Reload button.\n \n 5.1.2 Upgrading to the new version\n@@ -1158,15 +1158,15 @@\n \n 5.1.3 Ubuntu\n \u2022 Click on the Dash Home icon in the top left.\n \u2022 In the Search field, type \u201dupdate\u201d, then click on the Update Manager icon.\n \u2022 Click the Check button to fetch the list of packages available.\n \u2022 Click the Install Updates button to install the new versions of all packages.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 23 / 35\n \n 5.2 Updating without Network\n To update without a network connection you need to download the .deb then install it with dpkg. The\n .debs can be found in https://linuxcnc.org/dists/ .\n You have to drill down from the above link to find the correct deb for your installation. Open a terminal\n@@ -1202,15 +1202,15 @@\n In the extremely unlikely event that you are using canterp, know that the module has moved from\n /usr/lib/libcanterp.so to /usr/lib/linuxcnc/canterp.so, and the [TASK]INTERPRETER setting\n correspondingly needs to change from libcanterp.so to canterp.so.\n \n 5.4 Updating Configuration Files (for 2.9.x)\n No changes should be necessary to configuration files when moving from 2.8 to 2.9\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 24 / 35\n \n 5.4.1 Spindle limits in the INI\n It is now possible to add settings to the [SPINDLE] section of the INI file\n MAX_FORWARD_VELOCITY = 20000 The maximum spindle speed (in rpm)\n MIN_FORWARD_VELOCITY = 3000 The minimum spindle speed (in rpm)\n@@ -1236,15 +1236,15 @@\n \n 5.6 New Drivers\n A framework for controlling ModBus devices using the serial ports on many Mesa cards has been\n introduced. http://linuxcnc.org/docs/2.9/html/drivers/mesa_modbus.html\n \n A new GPIO driver for any GPIO which is supported by the gpiod library is now included: http://linuxcnc.org/docs/2.9/html/drivers/hal_gpio.html\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 25 / 35\n \n Chapter 6\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -1278,15 +1278,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 26 / 35\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -1331,15 +1331,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 27 / 35\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -1382,15 +1382,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 28 / 35\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -1434,15 +1434,15 @@\n Rapid\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum speed of the machine. It is often desirable to limit the rapid rate when testing a G-code\n program for the first time.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 29 / 35\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -1484,28 +1484,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 30 / 35\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 31 / 35\n \n Chapter 7\n \n Legal Section\n Translations of this file provided in the source tree are not legally binding.\n@@ -1532,15 +1532,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 32 / 35\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any\n such manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -1589,15 +1589,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front\n cover must present the full title with all words of the title equally prominent and visible. You may add\n other material on the covers in addition. Copying with changes limited to the covers, as long as they\n preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying\n in other respects.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 33 / 35\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access\n@@ -1643,15 +1643,15 @@\n Version. N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any\n Invariant Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 34 / 35\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -1692,15 +1692,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 35 / 35\n \n this License provided that you also include the original English version of this License. In case of a\n disagreement between the translation and the original English version of this License, the original\n English version will prevail.\n 9. TERMINATION\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_de.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_de.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_de.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_de.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Integrator Information V2.9.1, 04 Nov 2023'\n+Title: 'Integrator Information V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Integrator Information V2.9.1, 04 Nov 2023\n+Integrator Information V2.9.1, 06 Nov 2023\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n ii\n \n Contents\n 1 Stepper Information\n \n 1\n@@ -125,15 +125,15 @@\n \n 18\n \n 3.12.3Wiring Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 18\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 1 / 18\n \n Chapter 1\n \n Stepper Information\n 1.1 Stepper Motor Operation\n@@ -152,15 +152,15 @@\n the time that each coil can exert its full magnetic attraction on the rotor reduces, thereby reducing\n the overall torque. This relationship between speed and torque is largely inversely proportional.\n In the below example, the charging time for three coils is shown when the applied voltage is stepped\n from 0 V to 40 V. While all three coils can easily reach the full current limit of 5 amps (A), the time\n taken varies for each coil. The 4 milli-Henry (mH) coil (blue trace) takes twice as long to reach full\n current than the 2 mH coil (green trace), and the 8 mH (red trace) coil takes twice as long again:\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 2 / 18\n \n If the rate at which step changes are applied to the coils is significantly shorter than the rise time,\n it\u2019s easy to see that the winding has less time to attain full magnetic attraction on the rotor, and thus\n maximum torque is curtailed. In the below example the 2 mH coil can achieve the full 5 A limit before\n the step voltage is removed, but the 4 mH and 8 mH coils cannot:\n@@ -179,15 +179,15 @@\n In most stepper-based CNC systems the voltage of the supply feeding the stepper driver is several\n orders of magnitude greater than the voltage of the motor itself. A typical NEMA23 stepper motor\n may have a rating of only a handful of volts, yet the power supply and driver could be operating at\n 48 VDC or more.\n Nearly all modern stepper motor drivers on the market today are constant-current types. That is,\n the current being applied to each winding is fixed irrespective of how much voltage is being applied.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 3 / 18\n \n Most drivers accomplish this by monitoring the current being drawn through the motor windings and\n rapidly switching the outputs on and off at a very high frequency to maintain this current. Depending\n on the drivers being used, it may even be possible to hear this high frequency whistling in the motors\n themselves when stationary. Because the voltage is rapidly switched on and off to maintain the winding\n@@ -232,15 +232,15 @@\n introduced.\n Several methods exist to help control the effects of resonance, all with varying degrees of complexity,\n effectiveness and side effects:\n \u2022 Microstepping can help reduce resonance by using smaller step changes in current between each\n step. These smaller step changes cause less ringing in the motor and windings and thus cause less\n excitation at the point of resonance.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 4 / 18\n \n \u2022 Ensuring the motor is never operated at a particular frequency for a sustained period is a very basic\n method of reducing resonance, always accelerating or decelerating through the resonant peak.\n \u2022 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\n employed.\n@@ -279,15 +279,15 @@\n in leadscrews, flex in gantries, runout in the spindle and cutting tool, static friction in the stepper\n motor itself, stepper detent error , etc.) that will render such small amounts of resolution completely\n meaningless. In practice, microstepping at rates in excess of 4x or 8x on a CNC machine fitted with\n leadscrews serves little purpose. In some cases it may even be more beneficial to run at lower degrees\n of microstepping or even full steps, and operate the stepper motor through a gear reduction to obtain\n the necessary resolution and torque gains.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 5 / 18\n \n 1.5 Open and Closed Loop\n In the simplest CNC systems employing stepper motors, the host computer and/or stepper driver\n receives no feedback from the motor that it has achieved the desired outcome when commanded to\n begin stepping. The assumption by the software, driver and end user is that the motor operated\n@@ -307,15 +307,15 @@\n to the downstream driver as it would normally when running in open loop. In these situations the\n drivers usually include an alarm output which signals the software to halt when the load placed on\n the stepper becomes too great for the driver to compensate without losing steps.\n More advanced implementations of closed loop operation bring the encoder signal all the way back\n to the host computer, but require that a much higher hardware and software overhead be installed to\n manage the encoder feedback and calculation and delivery of drive compensation.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 6 / 18\n \n Chapter 2\n \n Stepper Timing\n This page is for step and direction timing of stepper drives.\n@@ -378,15 +378,15 @@\n support/motorcontrolmanuals/stepperdrives/g201rev16.html\n \n 1000\n \n Falling\n Edge\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 7 / 18\n \n Gecko\n@@ -479,15 +479,15 @@\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g201rev16.html\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g212rev15.html\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g213vrev7.html\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 8 / 18\n \n Gecko\n@@ -625,15 +625,15 @@\n http://granitedevices.fi/assets/files/vsde_160_manual.pdf\n http://granitedevices.fi/assets/files/vsde_160_dualdc_manual.pdf\n http://www.jvl.dk/files/pdf/lb043gb.pdf\n http://www.jvl.dk/files/pdf/lb043gb.pdf\n http://www.piclist.com/techref/io/stepper/linistep/index.htm\n http://www.piclist.com/techref/io/stepper/THB6064/index.htm\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 9 / 18\n \n *Motion\n@@ -858,15 +858,15 @@\n http://www.kelinginc.net/kL6852.pdf\n https://www.sherline.com/-\n \n http://www.lewetz.de/download/ibstep3se.pdf\n http://www.compumotor.com\n manuals/ZETA/ZETA_Rev_A_Entire.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n www.cncdrive.com\n Dugong\n \n Step\n@@ -1105,15 +1105,15 @@\n http://leadshine.com/UploadFile/Down/EM503d_P.pdf\n http://leadshine.com/UploadFile/Down/EM705d_P.pdf\n http://leadshine.com/UploadFile/Down/EM806d_P.pdf\n http://leadshineusa.com/UploadFile/Down/M415Bm.pdf\n http://leadshineusa.com/UploadFile/Down/M542V2m.pdf\n http://leadshineusa.com/UploadFile/Down/M752m.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n Step\n Time\n 1500\n@@ -1292,15 +1292,15 @@\n 5000\n \n Rising\n Edge\n \n http://cnc4you.co.uk/resources/CW5045.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 12 / 18\n \n Chapter 3\n \n Best Wiring Practices\n 3.1 Electrical Noise\n@@ -1329,15 +1329,15 @@\n this discussion the terms earth and common must be made distinct from each other to avoid confusion.\n \n 3.3 Wire Selection and Use\n Wire comes in many types, sizes and configurations. Wading through all the wire available is a monumental task of its own, but for the purposes of this article it is only necessary to consider the types of\n wires typically used when wiring a CNC controller. Additionally, how the wire is to be used can have\n some effect on the overall system. What follows are some tips that may prove helpful.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 13 / 18\n \n 3.3.1 Single Conductor Wire\n Wire comes in two forms: solid conductor and stranded. Solid core wire is generally cheaper than\n stranded, but more likely to break if used in applications where repeated bending is expected. Fortunately, the prevalence of stranded wire on the market means that its use should be encouraged\n wherever possible.\n@@ -1378,15 +1378,15 @@\n is more bulky than foil and does not provide 100% coverage, but is more flexible than foil shielded\n types. Coverage is typically 70% to 95% depending on how tight the braid has been constructed.\n Despite the lower coverage of braided shield, the effectiveness is greater than foil shielding due to\n the increased bulk of the braid, and copper being a better conductor than aluminum.\n 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 multiconductor cable may also be shielded along with an overall shield being applied to the entire cable\n jacket.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 14 / 18\n \n 3.4 AC Line Voltage\n The incoming mains AC that powers the CNC system can pick up and carry noise into the power\n supplies and other equipment. For example, if the incoming supply is also used to feed large motors,\n electrical noise may be generated on the line feeding the CNC components. Although most modern\n@@ -1424,15 +1424,15 @@\n supply may have optically-isolated signal input lines which provide complete electrical separation of\n the driver\u2019s input and output circuitry for safety and noise immunity purposes. Tying the stepper\n motor and logic control supply commons together in this case may have a detrimental impact on the\n operation of the system.\n In general it makes most sense to keep the commons of the various DC PSUs used in the CNC system\n separate from each other, and separate from the AC mains earth unless there is a specific requirement\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 15 / 18\n \n to tie them together. In most cases the common points of the heavy-duty power sections of the CNC\n system (eg, stepper motor or servo motor drivers, spindle motors etc) will be segregated from common\n points of the electrically-sensitive sections of the CNC (control interface boards, limit switches, tool\n probe circuitry etc) to prevent cross-contamination of the two systems.\n@@ -1472,15 +1472,15 @@\n electrically hostile environments. When grounding the shield in the cable, terminate to the mains\n earth.\n If the controller and interfacing devices can withstand higher control signals, consider altering the\n wiring and power supply requirements to use a bigger voltage for signaling (eg, 12V or 24V). The\n same 2V EMI noise spike that could corrupt a 3.3V limit switch signal will be far less likely to cause\n issues with a limit switch operating with a 24V signal.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 16 / 18\n \n 3.8 Stepper or Servo Motor Drivers\n The metal housing of the driver should be connected to the local mains earth in the CNC system.\n Some driver enclosures will indicate a specific terminal as being the earthing point, in which case this\n point must be connected to earth via a dedicated wire.\n@@ -1515,15 +1515,15 @@\n each other has the tendency to exacerbate EMI interference. Separate conductors by as much distance as possible. If two conductors must cross over each other make the crossing as close to a 90\n degree angle as possible.\n Avoid long loops of excess wire at any peripheral devices - they are great antennas for receiving or\n transmitting noise. Where possible, run wires in close proximity to large earthed structures. If the\n controller enclosure features a large metallic back plate that is earthed, secure all control wiring\n against this surface as much as possible while wiring between two points.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 17 / 18\n \n 3.11 Mechanical Noise\n Very few mechanical switches (eg, an axis limit switch or tool probe input) will close or open perfectly\n when operated. More often than not the switch contacts will physically bounce against each other\n several times within a very short space of time when operated. This may be interpreted by the machine\n@@ -1557,15 +1557,15 @@\n \n 3.12.1 Hardware Documentation\n At a minimum, make sure to save any documentation associated with the installed hardware in a safe\n place. Stepper controllers, break out boards, power supplies, VFDs, interfaces and controllers, servo\n and stepper drivers and any associated device settings are all critical components of the system and\n their documentation should be kept at hand for easy reference.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 18 / 18\n \n 3.12.2 Wiring Schematics\n As the CNC machine is wired, make sure to draw up a schematic that can be referenced to later. The\n schematic does not have to be all that neat, but it should be understandable in such a way that it\n could be easily interpreted at a later date, ideally by anyone who may need to service the equipment.\n"}]}]}]}]}, {"source1": "linuxcnc-doc-en_2.9.1-2_all.deb", "source2": "linuxcnc-doc-en_2.9.1-2_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2023-11-05 11:59:16.000000 debian-binary\n--rw-r--r-- 0 0 0 1384 2023-11-05 11:59:16.000000 control.tar.xz\n--rw-r--r-- 0 0 0 27120588 2023-11-05 11:59:16.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 1388 2023-11-05 11:59:16.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 27119236 2023-11-05 11:59:16.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./control", "source2": "./control", "unified_diff": "@@ -1,13 +1,13 @@\n Package: linuxcnc-doc-en\n Source: linuxcnc\n Version: 2.9.1-2\n Architecture: all\n Maintainer: LinuxCNC Developers \n-Installed-Size: 28033\n+Installed-Size: 28032\n Recommends: xdg-utils\n Suggests: pdf-viewer\n Breaks: linuxcnc-uspace (<= 2.9.0~pre0+git20220402.2500863908-4)\n Replaces: linuxcnc-uspace (<= 2.9.0~pre0+git20220402.2500863908-4)\n Provides: linuxcnc-doc\n Section: misc\n Priority: optional\n"}, {"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -7,19 +7,19 @@\n -rw-r--r-- 0 root (0) root (0) 369 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-gettingstarted.desktop\n -rw-r--r-- 0 root (0) root (0) 358 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-integratorinfo.desktop\n -rw-r--r-- 0 root (0) root (0) 332 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-manualpages.desktop\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/\n -rw-r--r-- 0 root (0) root (0) 1081 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/AUTHORS\n -rw-r--r-- 0 root (0) root (0) 1884 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/INSTALL.adoc.gz\n--rw-r--r-- 0 root (0) root (0) 823280 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Developer.pdf\n--rw-r--r-- 0 root (0) root (0) 26132811 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Documentation.pdf\n+-rw-r--r-- 0 root (0) root (0) 823224 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Developer.pdf\n+-rw-r--r-- 0 root (0) root (0) 26132001 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Documentation.pdf\n -rw-r--r-- 0 root (0) root (0) 404716 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started.pdf\n--rw-r--r-- 0 root (0) root (0) 150052 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Integrator.pdf\n--rw-r--r-- 0 root (0) root (0) 1085128 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Manual_Pages.pdf\n+-rw-r--r-- 0 root (0) root (0) 150033 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Integrator.pdf\n+-rw-r--r-- 0 root (0) root (0) 1085137 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Manual_Pages.pdf\n -rw-r--r-- 0 root (0) root (0) 3761 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/README.adoc.gz\n -rw-r--r-- 0 root (0) root (0) 1529 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/README.axis\n -rw-r--r-- 0 root (0) root (0) 506 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/axis_light_background\n -rw-r--r-- 0 root (0) root (0) 14664 2023-10-07 15:20:24.000000 ./usr/share/doc/linuxcnc/gcode.html\n -rw-r--r-- 0 root (0) root (0) 1868 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/rtfaults.adoc\n -rw-r--r-- 0 root (0) root (0) 5504 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/tklinuxcnc.adoc.gz\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc-doc-en/\n"}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Developer.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Developer.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Developer.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Developer.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Developer Manual V2.9.1, 04 Nov 2023'\n+Title: 'Developer Manual V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Developer Manual V2.9.1, 04 Nov 2023\n+Developer Manual V2.9.1, 06 Nov 2023\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n ii\n \n Contents\n 1 Introduction\n \n 1\n@@ -117,15 +117,15 @@\n \n 15\n \n 3.8.3.1 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 16\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n iii\n \n 3.8.3.2 Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 16\n \n@@ -281,15 +281,15 @@\n \n 19\n \n 3.8.16.1Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 20\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n iv\n \n 3.8.16.2Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 20\n \n@@ -449,15 +449,15 @@\n \n 3.21.3Process line\n \n 27\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n v\n \n 3.21.4Configuration Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 28\n \n@@ -625,15 +625,15 @@\n \n 40\n \n 4.14Others . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 40\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n vi\n \n 5 Coding Style\n \n 41\n \n@@ -781,15 +781,15 @@\n \n 8.4.1 LinuxCNC official Git repo\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 52\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n vii\n \n 8.4.2 Use of Git in the LinuxCNC project . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 53\n \n@@ -876,15 +876,15 @@\n 10.2GNU Free Documentation License\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 63\n 63\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 1 / 67\n \n Chapter 1\n \n Introduction\n \n@@ -904,15 +904,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 2 / 67\n \n Chapter 2\n \n HAL General Reference\n 2.1 HAL Entity Names\n@@ -941,15 +941,15 @@\n functional blocks, each block might have several channels, and each channel has one or more pins.\n This results in a structure that resembles a directory tree. Even though halcmd doesn\u2019t recognize the\n tree structure, proper choice of naming conventions will let it group related items together (since it\n sorts the names). In addition, higher level tools can be designed to recognize such structure, if the\n names provide the necessary information. To do that, all HAL components should follow these rules:\n \u2022 Dots (\u201c.\u201d) separate levels of the hierarchy. This is analogous to the slash (\u201c/\u201d) in a filename.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 3 / 67\n \n \u2022 Hyphens (\u201c-\u201d) separate words or fields in the same level of the hierarchy.\n \u2022 HAL components should not use underscores or \u201cMixedCase\u201d. 1\n \u2022 Use only lowercase letters and numbers in names.\n \n@@ -991,15 +991,15 @@\n number.\n 1 Underlined characters have been removed, but there are still a few cases of broken mixture, for example pid.0.Pgain in\n place of pid.0.p-gain.\n 2 One exception to the \u201dchannel numbers start at zero\u201d rule is the parallel port. Its HAL pins are numbered with the\n corresponding pin number on the DB-25 connector. This is convenient for wiring, but inconsistent with other drivers. There is\n some debate over whether this is a bug or a feature.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 4 / 67\n \n \n An individual I/O channel might have just a single HAL pin associated with it, but most have more\n than one. For example, a digital input has two pins, one is the state of the physical pin, the other\n is the same thing inverted. That allows the configurator to choose between active high and active\n@@ -1041,15 +1041,15 @@\n ppmc.0.write\n Writes all outputs (step generators, pwm, DACs, and digital) on the first Pico Systems ppmc\n board.\n 3 Note to driver programmers: Do NOT implement separate functions for different I/O types unless they are interruptible\n and can work in independent threads. If interrupting an encoder read, reading digital inputs, and then resuming the encoder\n read will cause problems, then implement a single function that does everything.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 5 / 67\n \n Chapter 3\n \n Code Notes\n 3.1 Intended audience\n@@ -1080,15 +1080,15 @@\n \u2022 JOINT - A joint is one of the movable parts of the machine. Joints are distinct from axes, although\n the two terms are sometimes (mis)used to mean the same thing. In LinuxCNC, a joint is a physical\n thing that can be moved, not a coordinate in space. For example, the quill, knee, saddle, and table\n of a Bridgeport mill are all joints. The shoulder, elbow, and wrist of a robot arm are joints, as are\n the linear actuators of a hexapod. Every joint has a motor or actuator of some type associated with\n it. Joints do not necessarily correspond to the X, Y, and Z axes, although for machines with trivial\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 6 / 67\n \n 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\n their distinct meanings. Unfortunately that isn\u2019t necessarily true everywhere else. In particular,\n GUIs for machines with trivial kinematics may gloss over or completely hide the distinction between\n joints and axes. In addition, the INI file uses the term axis for data that would more accurately be\n@@ -1118,19 +1118,19 @@\n 3.4 Architecture overview\n There are four components contained in the LinuxCNC Architecture: a motion controller (EMCMOT),\n a discrete IO controller (EMCIO), a task executor which coordinates them (EMCTASK) and several\n text-mode and graphical User Interfaces. Each of them will be described in the current document,\n both from the design point of view and from the developers point of view (where to find needed data,\n how to easily extend/modify things, etc.).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 7 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 8 / 67\n \n 3.4.1 LinuxCNC software architecture\n At the coarsest level, LinuxCNC is a hierarchy of three controllers: the task level command handler\n and program interpreter, the motion controller, and the discrete I/O controller. The discrete I/O controller is implemented as a hierarchy of controllers, in this case for spindle, coolant, and auxiliary\n (e.g., estop, lube) subsystems. The task controller coordinates the actions of the motion and discrete\n@@ -1161,19 +1161,19 @@\n processes. For realtime motion control, the script first loads the default tpmod and homemod modules\n and then loads the kinematics and motion modules according to settings in halfiles specified by the\n INI file.\n Custom (user-built) homing or trajectory-planning modules can be used in place of the default modules\n via INI file settings or command line options. Custom modules must implement all functions used by\n the default modules. The halcompile utility can be used to create a custom module.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 9 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 10 / 67\n \n 3.6 Block diagrams and Data Flow\n The following figure is a block diagram of a joint controller. There is one joint controller per joint.\n The joint controllers work at a lower level than the kinematics, a level where all joints are completely\n independent. All the data for a joint is in a single joint structure. Some members of that structure are\n@@ -1187,15 +1187,15 @@\n mode, it is determined by the traj planner? In free mode, it is either copied from actualPos, or\n generated by applying forward kins to (2) or (3).\n \u2022 emcmotStatus->joints[n].coarse_pos - This is the desired position, in joint coordinates, but before\n interpolation. It is updated at the traj rate, not the servo rate. In coord mode, it is generated by\n applying inverse kins to (1) In teleop mode, it is generated by applying inverse kins to (1) In free\n mode, it is copied from (3), I think.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 11 / 67\n \n \u2022 \u2019emcmotStatus->joints[n].pos_cmd - This is the desired position, in joint coords, after interpolation.\n A new set of these coords is generated every servo period. In coord mode, it is generated from (2)\n by the interpolator. In teleop mode, it is generated from (2) by the interpolator. In free mode, it is\n generated by the free mode traj planner.\n@@ -1214,26 +1214,26 @@\n because one or more axes aren\u2019t homed. In that case, the options are: A) fake it by copying (1), or\n B) admit that we don\u2019t really know the Cartesian coordinates, and simply don\u2019t update actualPos.\n Whatever approach is used, I can see no reason not to do it the same way regardless of the operating\n mode. I would propose the following: If there are forward kins, use them, unless they don\u2019t work\n because of unhomed axes or other problems, in which case do (B). If no forward kins, do (A), since\n otherwise actualPos would never get updated.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 12 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 3.7 Homing\n 3.7.1 Homing state diagram\n \n 13 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 14 / 67\n \n 3.7.2 Another homing diagram\n \n 3.8 Commands\n This section simply lists all of the commands that can be sent to the motion module, along with detailed\n@@ -1248,15 +1248,15 @@\n The\n SET_TELEOP_VECTOR command only appears in motion-logger.c, with no effect other than its own\n log.\n \n 3.8.1 ABORT\n The ABORT command simply stops all motion. It can be issued at any time, and will always be accepted. It does not disable the motion controller or change any state information, it simply cancels\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 15 / 67\n \n any motion that is currently in progress.1\n 3.8.1.1 Requirements\n None. The command is always accepted and acted on immediately.\n 3.8.1.2 Results\n@@ -1293,15 +1293,15 @@\n and free mode, and GUIs for those machines might never even issue this command. However for nontrivial machines like robots and hexapods, teleop mode is used for most user commanded jog type\n movements.\n 1 It seems that the higher level code (TASK and above) also use ABORT to clear faults. Whenever there is a persistent fault\n (such as being outside the hardware limit switches), the higher level code sends a constant stream of ABORTs to the motion\n controller trying to make the fault go away. Thousands of them\u2026. That means that the motion controller should avoid persistent\n faults. This needs to be looked into.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 16 / 67\n \n 3.8.3.1 Requirements\n The command handler will reject the TELEOP command with an error message if the kinematics\n cannot be activated because the one or more joints have not been homed. In addition, if any joint is in\n motion (GET_MOTION_INPOS_FLAG() == FALSE), then the command will be ignored (with no error\n@@ -1337,15 +1337,15 @@\n None. The command can be issued at any time, and will always be accepted.\n 3.8.5.2 Results\n If the controller is already enabled, nothing. If not, the controller is enabled. Queues and interpolators\n are flushed. Any movement or homing operations are terminated. The amp-enable outputs associated\n with active joints are turned on. If forward kinematics are not available, the machine is switched to\n free mode.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 17 / 67\n \n 3.8.6 DISABLE\n The DISABLE command disables the motion controller.\n 3.8.6.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n@@ -1372,15 +1372,15 @@\n Currently, nothing. (A call to the old extAmpEnable function is currently commented out.) Eventually\n it will set the amp enable HAL pin false.\n \n 3.8.9 ACTIVATE_JOINT\n The ACTIVATE_JOINT command turns on all the calculations associated with a single joint, but does\n not change the joint\u2019s amp enable output pin.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 18 / 67\n \n 3.8.9.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.9.2 Results\n Calculations for the specified joint are enabled. The amp enable pin is not changed, however, any\n@@ -1407,15 +1407,15 @@\n The DISABLE_WATCHDOG command disables a hardware based watchdog (if present).\n 3.8.12.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.12.2 Results\n Currently nothing. The old watchdog was a strange thing that used a specific sound card. A new\n watchdog interface may be designed in the future.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 19 / 67\n \n 3.8.13 PAUSE\n The PAUSE command stops the trajectory planner. It has no effect in free or teleop mode. At this\n point I don\u2019t know if it pauses all motion immediately, or if it completes the current move and then\n pauses before pulling another move from the queue.\n@@ -1442,15 +1442,15 @@\n \n 3.8.16 SCALE\n The SCALE command scales all velocity limits and commands by a specified amount. It is used to\n implement feed rate override and other similar functions. The scaling works in free, teleop, and coord\n modes, and affects everything, including homing velocities, etc. However, individual joint velocity\n limits are unaffected.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 20 / 67\n \n 3.8.16.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.16.2 Results\n All velocity commands are scaled by the specified constant.\n@@ -1480,15 +1480,15 @@\n 3.8.19 JOG_CONT\n The JOG_CONT command initiates a continuous jog on a single joint. A continuous jog is generated\n by setting the free mode trajectory planner\u2019s target position to a point beyond the end of the joint\u2019s\n range of travel. This ensures that the planner will move constantly until it is stopped by either the\n joint limits or an ABORT command. Normally, a GUI sends a JOG_CONT command when the user\n presses a jog button, and ABORT when the button is released.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 21 / 67\n \n 3.8.19.1 Requirements\n The command handler will reject the JOG_CONT command with an error message if machine is not in\n free mode, or if any joint is in motion (GET_MOTION_INPOS_FLAG() == FALSE), or if motion is not\n enabled. It will also silently ignore the command if the joint is already at or beyond its limit and the\n@@ -1525,15 +1525,15 @@\n location, however they also stop when they hit a limit, or on an ABORT command.\n 3.8.21.1 Requirements\n The command handler will silently reject the JOG_ABS command if machine is not in free mode, or if\n any joint is in motion (GET_MOTION_INPOS_FLAG() == FALSE), or if motion is not enabled. It will\n also silently ignore the command if the joint is already at or beyond its limit and the commanded jog\n would make it worse.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 22 / 67\n \n 3.8.21.2 Results\n The free mode trajectory planner for the joint identified by emcmotCommand->axis is activated, the\n target position is set to emcmotCommand->offset, and the velocity limit is set to emcmotCommand>vel. The free mode trajectory planner will generate a smooth trapezoidal move from the present\n position to the target position. The planner can correctly handle changes in the target position that\n@@ -1566,15 +1566,15 @@\n (More later)\n \n 3.8.27 SET_xix\n There are approximately 15 SET_xxx commands, where xxx is the name of some configuration parameter. It is anticipated that there will be several more SET commands as more parameters are added.\n I would like to find a cleaner way of setting and reading configuration parameters. The existing methods require many lines of code to be added to multiple files each time a parameter is added. Much of\n that code is identical or nearly identical for every parameter.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 23 / 67\n \n 3.9 Backlash and Screw Error Compensation\n + FIXME Backlash and Screw Error Compensation\n \n 3.10 Task controller (EMCTASK)\n@@ -1592,15 +1592,15 @@\n iocontrol main loop process:\n \u2022 registers for SIGTERM and SIGINT signals from the OS.\n \u2022 checks to see it HAL inputs have changed\n \u2022 checks if read_tool_inputs() indicates the tool change is finished and set emcioStatus.status\n \u2022 checks for I/O related NML messages\n nml message numbers: from emc.hh:\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 24 / 67\n \n #define EMC_IO_INIT_TYPE\n ((NMLTYPE) 1601)\n #define EMC_TOOL_STAT_TYPE\n ((NMLTYPE) 1199)\n@@ -1647,15 +1647,15 @@\n Base class for producing a linked list - Purpose, to hold pointers to the previous and next nodes, pointer\n to the data, and the size of the data.\n No memory for data storage is allocated.\n \n 3.16 SharedMemory\n Provides a block of shared memory along with a semaphore (inherited from the Semaphore class). Creation and destruction of the semaphore is handled by the SharedMemory constructor and destructor.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 25 / 67\n \n 3.17 ShmBuffer\n Class for passing NML messages between local processes using a shared memory buffer. Much of\n internal workings are inherited from the CMS class.\n \n@@ -1689,15 +1689,15 @@\n message buffer or just buffer). This buffer may exist as a shared memory block accessed by other\n CMS/NML processes, or a local and private buffer for data being transferred by network or serial\n interfaces.\n The buffer is dynamically allocated at run time to allow for greater flexibility of the CMS/NML subsystem. The buffer size must be large enough to accommodate the largest message, a small amount\n for internal use and allow for the message to be encoded if this option is chosen (encoded data will\n be covered later). The following figure is an internal view of the buffer space.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 26 / 67\n \n CMS buffer The CMS base class is primarily responsible for creating the communications pathways\n and interfacing to the operating system.\n \n 3.21 Configuration file format\n@@ -1715,15 +1715,15 @@\n \u2022 neut - a boolean to indicate if the data in the buffer is encoded in a machine independent format, or\n raw.\n \u2022 RPC# - Obsolete - Place holder retained for backward compatibility only.\n \u2022 buffer# - A unique ID number used if a server controls multiple buffers.\n \u2022 max_procs - is the maximum processes allowed to connect to this buffer.\n \u2022 key - is a numerical identifier for a shared memory buffer\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 27 / 67\n \n 3.21.2 Type specific configs\n The buffer type implies additional configuration options whilst the host operating system precludes\n certain combinations. In an attempt to distill published documentation in to a coherent format, only\n the SHMEM buffer type will be covered.\n@@ -1757,15 +1757,15 @@\n \u2022 host - specifies where on the network this process is running.\n \u2022 ops - gives the process read only, write only, or read/write access to the buffer.\n \u2022 server - specifies if this process will running a server for this buffer.\n \u2022 timeout - sets the timeout characteristics for accesses to the buffer.\n \u2022 master - indicates if this process is responsible for creating and destroying the buffer.\n \u2022 c_num - an integer between zero and (max_procs -1)\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 28 / 67\n \n 3.21.4 Configuration Comments\n Some of the configuration combinations are invalid, whilst others imply certain constraints. On a\n Linux system, GLOBMEM is obsolete, whilst PHANTOM is only really useful in the testing stage of an\n application, likewise for FILEMEM. LOCMEM is of little use for a multi-process application, and only\n@@ -1802,15 +1802,15 @@\n Not to be confused with NMLmsg, RCS_STAT_MSG, or RCS_CMD_MSG.\n NML is responsible for parsing the config file, configuring the cms buffers and is the mechanism for\n routing messages to the correct buffer(s). To do this, NML creates several lists for:\n \u2022 cms buffers created or connected to.\n \u2022 processes and the buffers they connect to\n \u2022 a long list of format functions for each message type\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 29 / 67\n \n This last item is probably the nub of much of the malignment of libnml/rcslib and NML in general. Each\n message that is passed via NML requires a certain amount of information to be attached in addition to\n the actual data. To do this, several formatting functions are called in sequence to assemble fragments\n of the overall message. The format functions will include NML_TYPE, MSG_TYPE, in addition to the\n@@ -1849,15 +1849,15 @@\n is to be used.\n \n 3.23 Adding custom NML commands\n LinuxCNC is pretty awesome, but some parts need some tweaking. As you know communication\n is done through NML channels, the data sent through such a channel is one of the classes defined\n in emc.hh (implemented in emc.cc). If somebody needs a message type that doesn\u2019t exist, he should\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 30 / 67\n \n follow these steps to add a new one. (The Message I added in the example is called EMC_IO_GENERIC\n (inherits EMC_IO_CMD_MSG (inherits RCS_CMD_MSG)))\n 1. add the definition of the EMC_IO_GENERIC class to emc2/src/emc/nml_intf/emc.hh\n 2. add the type define: #define EMC_IO_GENERIC_TYPE ((NMLTYPE) 1605)\n@@ -1883,15 +1883,15 @@\n information is copied from the tool table\u2019s source pocket to pocket 0 (which represents the spindle),\n replacing whatever tool information was previously there.\n Note\n In LinuxCNC configured for nonrandom toolchanger, tool 0 (T0) has special meaning: \u201dno tool\u201d. T0\n may not appear in the tool table file, and changing to T0 will result in LinuxCNC thinking it has got\n an empty spindle.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 31 / 67\n \n 3.24.1.2 Random Toolchangers\n Random toolchanger hardware swaps the tool in the spindle (if any) with the requested tool on tool\n change. Thus the pocket that a tool resides in changes as it is swapped in and out of the spindle.\n An example of random toolchanger hardware is a carousel toolchanger.\n@@ -1928,15 +1928,15 @@\n spindle.\n diameter\n Diameter of the tool, in machine units.\n tool length offset\n Tool length offset (also called TLO), in up to 9 axes, in machine units. Axes that don\u2019t have a\n specified TLO get 0.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 32 / 67\n \n 3.24.3 G-codes affecting tools\n The G-codes that use or affect tool information are:\n 3.24.3.1 Txxx\n Tells the toolchanger hardware to prepare to switch to a specified tool xxx.\n@@ -1977,15 +1977,15 @@\n ii. load_tool() with a random toolchanger config swaps tool information between pocket\n 0 (the spindle) and the selected pocket, then saves the tool table.\n \n 2. Back in interp, settings->current_pocket is assigned the new tooldata index from settings->select\n (set by Txxx). The relevant numbered parameters (#5400-#5413) are updated with the new tool\n information from pocket 0 (spindle).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 33 / 67\n \n 3.24.3.3 G43/G43.1/G49\n Apply tool length offset. G43 uses the TLO of the currently loaded tool, or of a specified tool if the\n H-word is given in the block. G43.1 gets TLO from axis-words in the block. G49 cancels the TLO (it\n uses 0 for the offset for all axes).\n@@ -2027,15 +2027,15 @@\n to pocket 0 (the spindle) in interp\u2019s copy of the tool table, settings->tool_table. (This copy\n is not needed on random tool changer machines because there, tools don\u2019t have a home pocket\n and instead we just updated the tool in pocket 0 directly.). The relevant numbered parameters\n (#5400-#5413) are updated from the tool information in the spindle (by copying the information\n from interp\u2019s settings->tool_table to settings->parameters). (FIXME: this is a buglet, the\n params should only be updated if it was the current tool that was modified).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 34 / 67\n \n 5. If the modified tool is currently loaded in the spindle, and if the config is for a nonrandom\n toolchanger, then the new tool information is written to the tool table\u2019s pocket 0 as well, via\n a second call to SET_TOOL_TABLE_ENTRY(). (This second tool-table update is not needed on\n random toolchanger machines because there, tools don\u2019t have a home pocket and instead we\n@@ -2071,15 +2071,15 @@\n Tool number of the tool currently installed in the spindle. Exported on the HAL pin iocontrol.0.tool-n\n (s32).\n emcioStatus.tool.toolTable[]\n An array of CANON_TOOL_TABLE structures, CANON_POCKETS_MAX long. Loaded from the tool table\n file at startup and maintained there after. Index 0 is the spindle, indexes 1-(CANON_POCKETS_MAX1) are the pockets in the toolchanger. This is a complete copy of the tool information, maintained\n separately from Interp\u2019s settings.tool_table.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 35 / 67\n \n 3.24.4.2 interp\n \n settings is of type settings, defined as struct setup_struct in src/emc/rs274ngc/interp_internal.hh\n settings.selected_pocket\n@@ -2117,15 +2117,15 @@\n toolchanger pocket numbers are meaningful. On a nonrandom toolchanger pockets are meaningless; the pocket numbers in the tool table file are ignored and tools are assigned to tool_table\n slots sequentially.\n \n settings.tool_change_at_g30 , settings.tool_change_quill_up , settings.tool_change_with_spindle_\n These are set from INI variables in the [EMCIO] section, and determine how tool changes are\n performed.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 36 / 67\n \n 3.25 Reckoning of joints and axes\n 3.25.1 In the status buffer\n The status buffer is used by Task and the UIs.\n FIXME: axis_mask and axes overspecify the number of axes\n@@ -2153,15 +2153,15 @@\n 3.25.2 In Motion\n The Motion controller realtime component first gets the number of joints from the num_joints loadtime parameter. This determines how many joints worth of HAL pins are created at startup.\n Motion\u2019s number of joints can be changed at runtime using the EMCMOT_SET_NUM_JOINTS command\n from Task.\n The Motion controller always operates on EMCMOT_MAX_AXIS axes. It always creates nine sets of\n axis.*.* pins.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n Chapter 4\n \n NML Messages\n List of NML messages.\n For details see src/emc/nml_intf/emc.hh.\n \n@@ -2193,15 +2193,15 @@\n EMC_JOINT_UNHOME_TYPE\n EMC_JOINT_STAT_TYPE\n \n 4.3 AXIS\n \n 37 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n EMC_AXIS_STAT_TYPE\n \n 4.4 JOG\n EMC_JOG_CONT_TYPE\n EMC_JOG_INCR_TYPE\n EMC_JOG_ABS_TYPE\n@@ -2247,15 +2247,15 @@\n EMC_TRAJ_RIGID_TAP_TYPE\n EMC_TRAJ_STAT_TYPE\n \n 4.6 MOTION\n \n 38 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n EMC_MOTION_INIT_TYPE\n EMC_MOTION_HALT_TYPE\n EMC_MOTION_ABORT_TYPE\n EMC_MOTION_SET_AOUT_TYPE\n EMC_MOTION_SET_DOUT_TYPE\n EMC_MOTION_ADAPTIVE_TYPE\n@@ -2301,15 +2301,15 @@\n EMC_AUX_ESTOP_OFF_TYPE\n EMC_AUX_ESTOP_RESET_TYPE\n EMC_AUX_INPUT_WAIT_TYPE\n EMC_AUX_STAT_TYPE\n \n 39 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 4.10 SPINDLE\n EMC_SPINDLE_ON_TYPE\n EMC_SPINDLE_OFF_TYPE\n EMC_SPINDLE_INCREASE_TYPE\n EMC_SPINDLE_DECREASE_TYPE\n EMC_SPINDLE_CONSTANT_TYPE\n@@ -2348,15 +2348,15 @@\n EMC_HALT_TYPE\n EMC_ABORT_TYPE\n EMC_STAT_TYPE\n EMC_EXEC_PLUGIN_CALL_TYPE\n \n 40 / 67\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 41 / 67\n \n Chapter 5\n \n Coding Style\n This chapter describes the source code style preferred by the LinuxCNC team.\n@@ -2381,15 +2381,15 @@\n if (x) {\n // do something appropriate\n }\n \n The closing brace is on a line of its own, except in the cases where it is followed by a continuation of\n the same statement, i.e. a while in a do-statement or an else in an if-statement, like this:\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 42 / 67\n \n do {\n // something important\n } while (x > 0);\n \n@@ -2432,15 +2432,15 @@\n function.\n However, if you have a complex function, and you suspect that a less-than-gifted first-year high-school\n student might not even understand what the function is all about, you should adhere to the maximum\n limits all the more closely. Use helper functions with descriptive names (you can ask the compiler to\n in-line them if you think it\u2019s performance-critical, and it will probably do a better job of it that you\n would have done).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 43 / 67\n \n Another measure of the function is the number of local variables. They shouldn\u2019t exceed 5-10, or\n you\u2019re doing something wrong. Re-think the function, and split it into smaller pieces. A human brain\n can generally easily keep track of about 7 different things, anything more and it gets confused. You\n know you\u2019re brilliant, but maybe you\u2019d like to understand what you did 2 weeks from now.\n@@ -2478,15 +2478,15 @@\n class name. Rationale: Maintains a common style across C and C++ sources, e.g., get_foo_bar().\n However, boolean methods are easier to read if they avoid underscores and use an is prefix (not to be\n confused with methods that manipulate a boolean). Rationale: Identifies the return value as TRUE or\n FALSE and nothing else, e.g., isOpen, isHomed.\n Do NOT use Not in a boolean name, it leads only leads to confusion when doing logical tests, e.g.,\n isNotOnLimit or is_not_on_limit are BAD.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 44 / 67\n \n Variable names should avoid the use of upper case and underscores except for local or private names.\n The use of global variables should be avoided as much as possible. Rationale: Clarifies which are\n variables and which are methods. Public: e.g., axislimit Private: e.g., maxvelocity_ .\n \n@@ -2527,15 +2527,15 @@\n Use the PEP 8 style for Python code.\n \n 5.11 Comp coding standards\n In the declaration portion of a .comp file, begin each declaration at the first column. Insert extra blank\n lines when they help group related items.\n In the code portion of a .comp file, follow normal C coding style.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 45 / 67\n \n Chapter 6\n \n Building LinuxCNC\n 6.1 Introduction\n@@ -2566,15 +2566,15 @@\n This might fail too! Read this whole document, but especially the section on Setting up the test\n environment.\n \n 6.2 Supported Platforms\n The LinuxCNC project targets modern Debian-based distributions, including Debian, Ubuntu, and\n Mint.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 46 / 67\n \n We continuously test on the platforms listed at http://buildbot.linuxcnc.org.\n LinuxCNC builds on most other Linux distributions, though dependency management will be more\n manual and less automatic. Patches to improve portability to new platforms are always welcome.\n \n@@ -2609,15 +2609,15 @@\n within the build directory. Nothing is installed outside the build directory.\n This is quick and easy, and suitable for rapid iteration of changes.\n The LinuxCNC test suite runs only in a Run-In-Place build.\n Most LinuxCNC developers primarily build using this mode.\n Building for Run-In-Place follows the steps in the Quick Start section at the top of this document,\n possibly with different arguments to src/configure and make.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 47 / 67\n \n 6.3.1.1 src/configure arguments\n The src/configure script configures how the source code will be compiled. It takes many optional\n arguments.\n List all arguments to src/configure by running this:\n@@ -2654,15 +2654,15 @@\n Building just a specific target\n If you want to build just a specific part of LinuxCNC, you can name the thing you want to build\n on the make command line. For example, if you are working on a component named froboz, you\n can build its executable by running:\n $ cd linuxcnc-dev/src\n $ make ../bin/froboz\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 48 / 67\n \n 6.3.2 Building Debian Packages\n When building Debian packages, the LinuxCNC programs are compiled from source and then stored\n in a Debian package, complete with dependency information. This takes more time, and the programs\n can\u2019t be used until the Debian package is installed on a target machine.\n@@ -2701,15 +2701,15 @@\n It takes a single argument which specifies the realtime or non-realtime platform to build for. The\n normal values for this argument are:\n no-docs\n Skip building documentation.\n uspace\n Configure the Debian package for Preempt-RT realtime or for non-realtime (these two are compatible).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 49 / 67\n \n noauto , rtai , xenomai\n Normally, the lists of RTOSes for uspace realtime to support is detected automatically. However,\n if you wish, you may specify one or more of these after uspace to enable support for these RTOSes.\n Or, to disable autodetection, specify noauto.\n@@ -2747,15 +2747,15 @@\n installed yet. Install them all with sudo apt-get install, followed by the package names.\n You can rerun dpkg-checkbuilddeps any time you want, to list any missing packages.\n \n 6.5 Setting up the environment\n This section describes the special steps needed to set up a machine to run the LinuxCNC programs,\n including the tests.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 50 / 67\n \n 6.5.1 Increase the locked memory limit\n LinuxCNC tries to improve its realtime latency by locking the memory it uses into RAM. It does this\n in order to prevent the operating system from swapping LinuxCNC out to disk, which would have bad\n effects on latency.\n@@ -2785,15 +2785,15 @@\n at github, and use that to track and publish your changes.\n After creating your own github fork of LinuxCNC, clone it to your development machine and proceed\n with your hacking as usual.\n We of the LinuxCNC project hope that you will share your changes with us, so that the community\n can benefit from your work. Github makes this sharing very easy: after you polish your changes and\n push them to your github fork, send us a Pull Request.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 51 / 67\n \n Chapter 7\n \n Adding Configuration Selection Items\n Example Configurations can be added to the Configuration Selector by two methods:\n@@ -2804,15 +2804,15 @@\n \n \u2022 Runtime settings \u2014 the configuration selector can also offer configuration subdirectories specified\n at runtime using an exported environamental variable (LINUXCNC_AUX_CONFIGS). This variable\n should be a path list of one or more configuration directories separated by a (:). Typically, this\n variable would be set in a shell starting linuxcnc or in a user\u2019s ~/.profile startup script. Example:\n export LINUXCNC_AUX_CONFIGS=~/myconfigs:/opt/otherconfigs\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 52 / 67\n \n Chapter 8\n \n Contributing to LinuxCNC\n 8.1 Introduction\n@@ -2833,15 +2833,15 @@\n All of the LinuxCNC source is maintained in the Git revision control system.\n \n 8.4.1 LinuxCNC official Git repo\n The official LinuxCNC git repo is at https://github.com/linuxcnc/linuxcnc/\n Anyone can get a read-only copy of the LinuxCNC source tree via git:\n git clone https://github.com/linuxcnc/linuxcnc linuxcnc-dev\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 53 / 67\n \n If you are a developer with push access, then follow github\u2019s instructions for setting up a repository\n that you can push from.\n Note that the clone command put the local LinuxCNC repo in a directory called linuxcnc-dev, instead\n of the default linuxcnc. This is because the LinuxCNC software by default expects configs and G-code\n@@ -2876,15 +2876,15 @@\n 8.5 Overview of the process\n The high-level overview of how to contribute changes to the source goes like this:\n \u2022 Communicate with the project developers and let us know what you\u2019re hacking on. Explain what\n you are doing, and why.\n \u2022 Clone the git repo.\n \u2022 Make your changes in a local branch.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 54 / 67\n \n \u2022 Adding documentation and writing tests is an important part of adding a new feature. Otherwise,\n others won\u2019t know how to use your feature, and if other changes break your feature it can go\n unnoticed without a test.\n \u2022 Share your changes with the other project developers in one of these ways:\n@@ -2918,15 +2918,15 @@\n Use the first line as a summary of the intent of the change (almost like the subject line of an e-mail).\n Follow it with a blank line, then a longer message explaining the change. Example:\n \n 8.7.3 Commit to the proper branch\n Bugfixes should go on the oldest applicable branch. New features should go in the master branch. If\n you\u2019re not sure where a change belongs, ask on irc or on the mailing list.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 55 / 67\n \n 8.7.4 Use multiple commits to organize changes\n When appropriate, organize your changes into a branch (a series of commits) where each commit is\n a logical step towards your ultimate goal. For example, first factor out some complex code into a new\n function. Then, in a second commit, fix an underlying bug. Then, in the third commit, add a new\n@@ -2966,15 +2966,15 @@\n variable, and the declaration of that variable only follows in a later patch.\n While the branch HEAD will build, not every commit might build in such a case. That breaks git\n bisect - something somebody else might use later on to find the commit which introduced a bug. So\n beyond making sure your branch builds, it is important to assure every single commit builds as well.\n \n There\u2019s an automatic way to check a branch for each commit being buildable - see https://dustin.sallings.org/2010/03/28/git-test-sequence.html and the code at https://github.com/dustin/bindir/blob/master/gittest-sequence. Use as follows (in this case testing every commit from origin/master to HEAD, including running regression tests):\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n cd linuxcnc-dev\n git-test-sequence origin/master..\n \n 56 / 67\n \n \u2019(cd src && make && ../scripts/runtests)\u2019\n@@ -3005,15 +3005,15 @@\n 8.9 Other ways to contribute\n There are many ways to contribute to LinuxCNC, that are not addressed by this document. These\n ways include:\n \u2022 Answering questions on the forum, mailing lists, and in IRC\n \u2022 Reporting bugs on the bug tracker, forum, mailing lists, or in IRC\n \u2022 Helping test experimental features\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 57 / 67\n \n Chapter 9\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -3047,15 +3047,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 58 / 67\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -3100,15 +3100,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 59 / 67\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -3151,15 +3151,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 60 / 67\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -3203,15 +3203,15 @@\n Rapid\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum speed of the machine. It is often desirable to limit the rapid rate when testing a G-code\n program for the first time.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 61 / 67\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -3253,28 +3253,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 62 / 67\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 63 / 67\n \n Chapter 10\n \n Legal Section\n Translations of this file provided in the source tree are not legally binding.\n@@ -3301,15 +3301,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 64 / 67\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any\n such manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -3358,15 +3358,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front\n cover must present the full title with all words of the title equally prominent and visible. You may add\n other material on the covers in addition. Copying with changes limited to the covers, as long as they\n preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying\n in other respects.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 65 / 67\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access\n@@ -3412,15 +3412,15 @@\n Version. N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any\n Invariant Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 66 / 67\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -3461,15 +3461,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 67 / 67\n \n this License provided that you also include the original English version of this License. In case of a\n disagreement between the translation and the original English version of this License, the original\n English version will prevail.\n 9. TERMINATION\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'LinuxCNC V2.9.1, 04 Nov 2023'\n+Title: 'LinuxCNC V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-LinuxCNC V2.9.1, 04 Nov 2023\n+LinuxCNC V2.9.1, 06 Nov 2023\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ii\n \n Contents\n \n I Getting Started & Configuration\n \n@@ -118,15 +118,15 @@\n \n 9\n \n 1.3.5.1 Basic Tweaks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n iii\n \n 1.3.6 PREEMPT_RT Tweaks (x86/AMD64 only) . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 10\n \n@@ -284,15 +284,15 @@\n \n 1.6.6.2 The GUI Way . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 24\n \n 1.6.3 Terminal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1.6.6.3 Root Access\n \n iv\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -454,15 +454,15 @@\n \n 2.3.5 Coordinate Systems\n \n 46\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n v\n \n 2.3.5.1 G53 Machine Coordinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 47\n \n@@ -620,15 +620,15 @@\n \n 57\n \n 2.6.1 Lathe Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 57\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n vi\n \n 2.6.2 Lathe Tool Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 57\n \n@@ -782,15 +782,15 @@\n \n 76\n \n 2.7.14.3Float switch (input) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 76\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n vii\n \n 2.7.14.4Ohmic Sensor enable (output) . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 76\n \n@@ -944,15 +944,15 @@\n \n 97\n \n 3.1.11.1Operating without Limit Switches . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 98\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n viii\n \n 3.1.11.2Operating without Home Switches\n \n . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -1013,15 +1013,15 @@\n 4.2.1 What is latency? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134\n 4.2.2 Latency Tests\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135\n \n 4.2.2.1 Latency Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ix\n \n 4.2.2.2 Latency Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137\n 4.2.2.3 Latency Histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137\n 4.2.3 Latency tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138\n 4.2.3.1 Tuning the BIOS for latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139\n@@ -1087,15 +1087,15 @@\n 4.4.2.14[SPINDLE_] Section(s) . . . . . . . . . . . . . . . . . . . . . . . . . . . 166\n 4.4.2.15[EMCIO] Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167\n 4.5 Homing Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167\n 4.5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167\n 4.5.2 Prerequisite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168\n 4.5.3 Separate Home Switch Example Layout . . . . . . . . . . . . . . . . . . . . . . . . . . 168\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n x\n \n 4.5.4 Shared Limit/Home Switch Example Layout . . . . . . . . . . . . . . . . . . . . . . . . 169\n 4.5.5 Homing Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170\n 4.5.6 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172\n 4.5.6.1 HOME_SEARCH_VEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172\n@@ -1139,15 +1139,15 @@\n 4.8.6 Mechanical Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182\n 4.9 Stepper Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.2 Maximum step rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.3 Pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.3.1 Standard Pinout HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xi\n \n 4.9.3.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186\n 4.9.3.3 Changing the standard_pinout.hal . . . . . . . . . . . . . . . . . . . . . . . . . 186\n 4.9.3.4 Changing polarity of a signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187\n 4.9.3.5 Adding PWM Spindle Speed Control\n@@ -1194,15 +1194,15 @@\n 5.1.6 Timing Issues In HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202\n 5.2 HAL Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203\n 5.2.1 HAL Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203\n 5.2.1.1 loadrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204\n 5.2.1.2 addf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204\n 5.2.1.3 loadusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xii\n \n 5.2.1.4 net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206\n 5.2.1.5 setp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207\n 5.2.1.6 sets\n \n@@ -1268,15 +1268,15 @@\n 5.4.3.5 Saving the HAL configuration\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . 221\n \n 5.4.3.6 Exiting halrun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n 5.4.3.7 Restoring the HAL configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xiii\n \n 5.4.3.8 Removing HAL from memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n 5.4.4 Halmeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n 5.4.5 Stepgen Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225\n 5.4.5.1 Installing the components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225\n@@ -1318,15 +1318,15 @@\n 5.6.5 INI settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252\n 5.6.5.1 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252\n 5.7 HAL Component List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253\n 5.7.1 Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253\n 5.7.1.1 User Interfaces (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . 254\n 5.7.1.2 Motion (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xiv\n \n 5.7.1.3 Hardware Drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254\n 5.7.1.4 Mesa and other I/O Cards (Realtime) . . . . . . . . . . . . . . . . . . . . . . . 255\n 5.7.1.5 Utilities (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256\n 5.7.1.6 Signal processing (Realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256\n@@ -1370,15 +1370,15 @@\n 5.8.7 SigGen\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279\n \n 5.8.7.1 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279\n 5.8.7.2 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xv\n \n 5.8.7.3 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280\n 5.8.8 lut5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280\n 5.9 HAL Component Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281\n 5.9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281\n@@ -1423,15 +1423,15 @@\n 5.10.1Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295\n 5.10.2Haltcl Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295\n 5.10.3Haltcl INI-file variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295\n 5.10.4Converting HAL files to Tcl files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296\n 5.10.5Haltcl Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n 5.10.6Haltcl Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xvi\n \n 5.10.7Haltcl Interactive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298\n 5.10.8Haltcl Distribution Examples (sim)\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298\n@@ -1498,15 +1498,15 @@\n 5.13.3Create pins and parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309\n 5.13.3.1Changing the prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309\n 5.13.4Reading and writing pins and parameters . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.4.1Driving output (HAL_OUT) pins . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.4.2Driving bidirectional (HAL_IO) pins . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.5Exiting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xvii\n \n 5.13.6Helpful Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.7Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.8System Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311\n 5.14Canonical Device Interfaces\n@@ -1550,15 +1550,15 @@\n 6.1.1 Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324\n 6.1.2 PCI Port Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327\n 6.1.3 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328\n 6.1.4 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328\n 6.1.5 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328\n 6.1.6 Common problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xviii\n \n 6.1.7 Using DoubleStep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329\n 6.1.8 probe_parport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329\n 6.1.8.1 Installing probe_parport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329\n 6.2 AX5214H Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330\n@@ -1600,15 +1600,15 @@\n 6.3.7.3 DAC & ADC module\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348\n \n 6.3.7.4 Teach Pendant module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349\n 6.3.8 Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xix\n \n 6.3.8.1 GM6-PCI card Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350\n 6.4 GS2 VFD Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350\n 6.4.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350\n 6.4.2 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351\n@@ -1650,15 +1650,15 @@\n 6.7.8 PIN Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360\n 6.7.9 Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360\n 6.7.10HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360\n 6.7.11Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361\n 6.7.12GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n 6.7.12.1Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xx\n \n 6.7.12.2Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364\n 6.7.13StepGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364\n 6.7.13.1Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364\n 6.7.13.2Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365\n@@ -1700,15 +1700,15 @@\n 6.8.5.7 fnct_15_write_multiple_coils . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378\n 6.8.5.8 fnct_16_write_multiple_registers . . . . . . . . . . . . . . . . . . . . . . . . . . 378\n 6.9 Mitsub VFD Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378\n 6.9.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379\n 6.9.2 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379\n 6.9.3 HAL example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxi\n \n 6.9.4 Configuring the Mitsubishi VFD for serial usage . . . . . . . . . . . . . . . . . . . . . 380\n 6.9.4.1 Connecting the Serial Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380\n 6.9.4.2 Modbus setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380\n 6.10Motenc Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381\n@@ -1750,15 +1750,15 @@\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393\n \n 6.13.3.1Pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393\n 6.13.3.2Input latching and output updating . . . . . . . . . . . . . . . . . . . . . . . . 394\n 6.13.3.3Step Waveform Timings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxii\n \n 6.13.3.4HAL Functions, Pins and Parameters . . . . . . . . . . . . . . . . . . . . . . . 395\n 6.14Powermax Modbus Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395\n 6.14.1Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396\n 6.14.2Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396\n@@ -1798,15 +1798,15 @@\n 7.2.6 Spindle Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409\n 7.2.6.1 Spindle Synchronized Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409\n 7.2.6.2 Spindle At Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410\n 7.3 MPG Pendant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410\n 7.4 GS2 Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412\n 7.4.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxiii\n \n 8 ClassicLadder\n \n 414\n \n@@ -1851,15 +1851,15 @@\n \n 8.2.10.1MODBUS Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441\n 8.2.10.2Communication Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441\n 8.2.11Debugging modbus problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441\n 8.2.11.1Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443\n 8.2.11.2Error response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxiv\n \n 8.2.11.3Data response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445\n 8.2.11.4MODBUS Bugs\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446\n@@ -1906,15 +1906,15 @@\n 9.3.2 5-Axis Machine Tool Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485\n 9.3.3 Tool Orientation and Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485\n 9.3.4 Translation and Rotation Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486\n 9.3.5 Table Rotary/Tilting 5-Axis Configurations . . . . . . . . . . . . . . . . . . . . . . . . . 487\n 9.3.5.1 Transformations for a xyzac-trt machine tool with work offsets . . . . . . . 489\n 9.3.5.2 Transformations for a xyzac-trt machine with rotary axis offsets . . . . . . 493\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxv\n \n 9.3.5.3 Transformations for a xyzbc-trt machine with rotary axis offsets . . . . . . 496\n 9.3.6 Table Rotary/Tilting Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499\n 9.3.6.1 Vismach Simulation Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499\n 9.3.6.2 Tool-Length Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499\n@@ -1965,15 +1965,15 @@\n \n 9.6.2.2 Picking a code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514\n 9.6.2.3 Parameter handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515\n 9.6.2.4 Handling results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515\n 9.6.2.5 Execution sequencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515\n 9.6.2.6 An minimal example remapped code . . . . . . . . . . . . . . . . . . . . . . . 515\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxvi\n \n 9.6.3 Configuring Remapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516\n 9.6.3.1 The REMAP statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516\n 9.6.3.2 Useful REMAP option combinations . . . . . . . . . . . . . . . . . . . . . . . . 517\n 9.6.3.3 The argspec parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517\n@@ -2029,15 +2029,15 @@\n \n 9.6.11.4S (Set Speed) : setspeed_prolog and setspeed_epilog . . . . . . . . . . . 540\n 9.6.11.5F (Set Feed) : setfeed_prolog and setfeed_epilog . . . . . . . . . . . . . 540\n 9.6.11.6M61 Set tool number : settool_prolog and settool_epilog . . . . . . . . 541\n 9.6.12Remapped code execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541\n 9.6.12.1NGC procedure call environment during remaps . . . . . . . . . . . . . . . . 541\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxvii\n \n 9.6.12.2Nested remapped codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541\n 9.6.12.3Sequence number during remaps . . . . . . . . . . . . . . . . . . . . . . . . . 541\n 9.6.12.4Debugging flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541\n 9.6.12.5Debugging Embedded Python code . . . . . . . . . . . . . . . . . . . . . . . . 542\n@@ -2083,15 +2083,15 @@\n 9.6.18Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554\n 9.6.19Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554\n 9.6.20Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554\n 9.7 Moveoff Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554\n 9.7.1 Modifying an existing configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555\n 9.8 Stand Alone Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxviii\n \n 9.8.1 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559\n 9.8.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559\n 9.9 External Axis Offsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559\n 9.9.1 INI File Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560\n@@ -2141,15 +2141,15 @@\n \n 10.1AXIS GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570\n 10.1.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570\n 10.1.2Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571\n 10.1.2.1INI settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571\n 10.1.2.2A Typical Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 10.1.3AXIS Window\n \n xxix\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572\n \n@@ -2216,15 +2216,15 @@\n . . . . . . . . . . . . . . . . . . 595\n \n 10.1.14.5\n Read the INI file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596\n 10.1.14.6\n Read LinuxCNC Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxx\n \n 10.1.14.7\n Change the current view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596\n 10.1.14.8\n Creating new AXISUI HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . 596\n@@ -2275,15 +2275,15 @@\n 10.2.5.8User Created Message HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . 621\n 10.2.5.9Spindle Feedback Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622\n 10.2.5.10\n Pins to Indicate Program Progress Information . . . . . . . . . . . . . . . . . 622\n 10.2.5.11\n Tool Related Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxi\n \n 10.2.6Auto Tool Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624\n 10.2.6.1Provided Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625\n 10.2.6.2INI File Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625\n 10.2.6.3Needed Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626\n@@ -2339,15 +2339,15 @@\n 10.4.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647\n 10.4.1.1Glade File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652\n 10.4.1.2PyGTK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652\n 10.4.2GladeVCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653\n 10.4.2.1Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653\n 10.4.2.2Build a GladeVCP Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxii\n \n 10.4.3Building a simple clean-sheet custom screen . . . . . . . . . . . . . . . . . . . . . . . 655\n 10.4.4Handler file example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657\n 10.4.4.1Adding Keybindings Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 658\n 10.4.4.2Linuxcnc State Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658\n@@ -2396,15 +2396,15 @@\n 10.5.3Key Bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670\n 10.5.4Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671\n 10.5.5Virtual Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671\n 10.5.6HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671\n 10.5.7HAL files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672\n 10.5.8Manual Tool Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxiii\n \n 10.5.9Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672\n 10.5.10\n Auto Raise Z Axis on Spindle Pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673\n 10.5.11\n@@ -2474,15 +2474,15 @@\n 10.6.1Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695\n 10.6.2Demonstration Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696\n 10.6.3Library Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698\n 10.6.4Standalone Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699\n 10.6.4.1Standalone NGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699\n 10.6.4.2Standalone PyNGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxiv\n \n 10.6.5Embedding NGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700\n 10.6.5.1Embedding NGCGUI in AXIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700\n 10.6.5.2Embedding PyNGCGUI as a GladeVCP tab page in a GUI . . . . . . . . . . . 701\n 10.6.5.3Additional INI File items required for NCGUI or PyNGCGUI . . . . . . . . . 701\n@@ -2521,15 +2521,15 @@\n 10.8.4.2Package Installation (Buildbot) If The User Has Linux with LinuxCNC v2.8 722\n 10.8.4.3Run In Place Installation If The User Has Linux with LinuxCNC v2.8 . . . . 722\n 10.8.5Creating A QtPlasmaC Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722\n 10.8.5.1Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722\n 10.8.5.2Available I/Os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723\n 10.8.5.3Recommended Settings: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxv\n \n 10.8.5.4Configuring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725\n 10.8.5.5Qt Dependency Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730\n 10.8.5.6Initial Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730\n 10.8.6Migrating to QtPlasmac From PlasmaC (AXIS or GMOCCAPY)\n@@ -2579,15 +2579,15 @@\n 10.8.9.15\n Pause At End Of Cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770\n 10.8.9.16\n Multiple Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770\n 10.8.9.17\n Velocity Reduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxvi\n \n 10.8.9.18\n THC (Torch Height Controller) . . . . . . . . . . . . . . . . . . . . . . . . . . . 772\n 10.8.9.19\n Cutter Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773\n@@ -2662,15 +2662,15 @@\n 10.8.14\n Customizing QtPlasmaC GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800\n 10.8.14.1\n Add A Custom Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800\n 10.8.14.2\n Create A New Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxvii\n \n 10.8.14.3\n Returning To The Default Styling . . . . . . . . . . . . . . . . . . . . . . . . . 801\n 10.8.14.4\n Custom Python Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802\n@@ -2749,15 +2749,15 @@\n \n 10.9.4Index operations\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833\n \n 10.9.5Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxviii\n \n 11 G-code Programming\n \n 834\n \n@@ -2808,15 +2808,15 @@\n 11.3.4Stand Alone Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853\n 11.4G-code Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854\n 11.4.1Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854\n 11.4.2Format of a line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854\n 11.4.2.1/: Block Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855\n 11.4.2.2Line Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxix\n \n 11.4.2.3Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855\n 11.4.2.4Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856\n 11.4.3Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857\n 11.4.3.1Numbered Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858\n@@ -2877,15 +2877,15 @@\n 11.5.2G-Code Quick Reference Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876\n 11.5.3G0 Rapid Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877\n 11.5.3.1Rapid Velocity Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877\n 11.5.4G1 Linear Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877\n 11.5.5G2, G3 Arc Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878\n 11.5.5.1Center Format Arcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xl\n \n 11.5.5.2Center Format Examples\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880\n \n@@ -2966,15 +2966,15 @@\n 11.5.40\n G73 Drilling Cycle with Chip Breaking . . . . . . . . . . . . . . . . . . . . . . . . . . . 903\n 11.5.41\n G74 Left-hand Tapping Cycle with Dwell . . . . . . . . . . . . . . . . . . . . . . . . . . 903\n 11.5.42\n G76 Threading Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xli\n \n 11.5.43\n G80-G89 Canned Cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907\n 11.5.43.1\n Common Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907\n@@ -3052,15 +3052,15 @@\n 11.6.6.2Tool Changer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924\n 11.6.7M7, M8, M9 Coolant Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925\n 11.6.8M19 Orient Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925\n 11.6.9M48, M49 Speed and Feed Override Control . . . . . . . . . . . . . . . . . . . . . . . 926\n 11.6.10\n M50 Feed Override Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlii\n \n 11.6.11\n M51 Spindle Speed Override Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926\n 11.6.12\n M52 Adaptive Feed Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926\n@@ -3133,15 +3133,15 @@\n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941\n \n 11.9.1.2Slotting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942\n 11.9.1.3Grid Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942\n 11.9.1.4Smart Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943\n 11.9.1.5Tool Length Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xliii\n \n 11.9.1.6Hole Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944\n 11.9.1.7Cutter Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944\n 11.9.2Lathe Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945\n 11.9.2.1Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945\n@@ -3215,15 +3215,15 @@\n 12.1PyVCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952\n 12.1.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952\n 12.1.2Panel Construction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953\n 12.1.3Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954\n 12.1.4AXIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954\n 12.1.4.1Example Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xliv\n \n 12.1.5Stand Alone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956\n 12.1.6Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957\n 12.1.6.1Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957\n 12.1.6.2General Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957\n@@ -3280,15 +3280,15 @@\n . . . . . . . . . . . . . . . . . . . . . . . . . 995\n \n 12.3.3.5Integrating into AXIS, like PyVCP . . . . . . . . . . . . . . . . . . . . . . . . . 995\n 12.3.3.6Embedding as a Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996\n 12.3.3.7Integrating into Touchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996\n 12.3.4GladeVCP command line options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlv\n \n 12.3.5Understanding the GladeVCP startup process . . . . . . . . . . . . . . . . . . . . . . . 998\n 12.3.6HAL Widget reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999\n 12.3.6.1Widget and HAL pin naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999\n 12.3.6.2Python attributes and methods of HAL Widgets . . . . . . . . . . . . . . . . . 1000\n@@ -3356,15 +3356,15 @@\n 12.3.7.5A simple example: Execute MDI command on button press\n \n . . . . . . . . . 1036\n \n 12.3.7.6Parameter passing with Action_MDI and ToggleAction_MDI widgets . . . . 1036\n 12.3.7.7An advanced example: Feeding parameters to an O-word subroutine . . . 1037\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlvi\n \n 12.3.7.8Preparing for an MDI Action, and cleaning up afterwards . . . . . . . . . . 1037\n 12.3.7.9Using the LinuxCNC Stat object to deal with status changes . . . . . . . . . 1038\n 12.3.8GladeVCP Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039\n 12.3.8.1User Defined Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039\n@@ -3425,15 +3425,15 @@\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062\n \n 12.5.2.5Libraries Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063\n 12.5.2.6Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063\n 12.5.2.7Local Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.5.2.8Modifying Stock Screens\n \n xlvii\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064\n \n@@ -3477,15 +3477,15 @@\n 12.6.1.5test_led . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089\n 12.6.1.6test_panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090\n 12.6.1.7cam_align . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091\n 12.6.1.8sim_panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093\n 12.6.1.9tool_dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094\n 12.6.2vismach 3D Simulation Panels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlviii\n \n 12.6.2.1QtVCP vismach_mill_xyz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095\n 12.6.2.2QtVCP vismach_router_atc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096\n 12.6.2.3QtVCP vismach_scara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097\n 12.6.2.4QtVCP vismach_millturn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098\n@@ -3535,15 +3535,15 @@\n 12.7.2.1ActionButton - Machine Controller Action Control Widget . . . . . . . . . . 1114\n 12.7.2.2ActionToolButton - Optional Actions Menu Button Widget . . . . . . . . . 1117\n 12.7.2.3RoundButton - Round Shapped ActionButton Widget . . . . . . . . . . . . . 1117\n 12.7.2.4AxisToolButton - Select and Set Axis Widget . . . . . . . . . . . . . . . . . . 1117\n 12.7.2.5CamView - Workpiece Alignment and Origin Setting Widget . . . . . . . . . . 1118\n 12.7.2.6DROLabel - Axis Position Display Widget . . . . . . . . . . . . . . . . . . . . . 1118\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlix\n \n 12.7.2.7GcodeDisplay - G-code Text Display Widget . . . . . . . . . . . . . . . . . . . 1119\n 12.7.2.8GcodeEditor - G-code Program Editor Widget\n \n . . . . . . . . . . . . . . . . . 1120\n@@ -3614,15 +3614,15 @@\n 12.7.3.8EntryDialog - Edit Line Dialog Widget . . . . . . . . . . . . . . . . . . . . . . 1155\n 12.7.3.9CalculatorDialog - Calculator Dialog Widget . . . . . . . . . . . . . . . . . 1156\n 12.7.3.10\n RunFromLine - Run-From-Line Dialog Widget . . . . . . . . . . . . . . . . . . 1157\n 12.7.3.11\n VersaProbeDialog - Part Touch Probing Dialog Widget . . . . . . . . . . . . 1158\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n l\n \n 12.7.3.12\n MachineLogDialog - Machine and Debugging Logs Dialog Widget . . . . . 1159\n 12.7.4Other Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159\n 12.7.4.1NurbsEditor - NURBS Editing Widget . . . . . . . . . . . . . . . . . . . . . . 1160\n@@ -3659,15 +3659,15 @@\n 12.8.5.3Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176\n 12.8.6VCPWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176\n 12.8.6.1Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176\n 12.8.7Aux_program_loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177\n 12.8.7.1Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177\n 12.8.7.2Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n li\n \n 12.8.8Keylookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178\n 12.8.8.1Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178\n 12.8.8.2Key Defines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179\n 12.8.9Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181\n@@ -3736,15 +3736,15 @@\n 12.9.6.1Translating Model parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193\n 12.9.6.2Rotating Model Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193\n 12.9.7Animating Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194\n 12.9.7.1HalTranslate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194\n 12.9.7.2HalRotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194\n 12.9.7.3HalToolCylinder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n lii\n \n 12.9.7.4HalToolTriangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195\n 12.9.8Assembling the model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195\n 12.9.9Other functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196\n 12.9.10\n@@ -3819,15 +3819,15 @@\n 12.11.12\n Update/Read Objects Periodically . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223\n 12.11.13\n External Control With ZMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224\n 12.11.13.1\n ZMQ Messages Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n liii\n \n 12.11.13.2\n ZMQ Messages Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226\n 12.11.14\n Sending Messages To Status Bar Or Desktop Notify Dialogs . . . . . . . . . . . . . . 1226\n@@ -3890,15 +3890,15 @@\n 13.2.3.2The axis dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246\n 13.2.3.3The joint dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246\n 13.2.3.4The spindle dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248\n 13.2.4Preparing to send commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248\n 13.2.5Sending commands through linuxcnc.command . . . . . . . . . . . . . . . . . . . . . 1249\n 13.2.5.1linuxcnc.command attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n liv\n \n 13.2.5.2linuxcnc.command methods: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1250\n 13.2.6Reading the error channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1253\n 13.2.7Reading INI file values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254\n 13.2.8The linuxcnc.positionlogger type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254\n@@ -3955,23 +3955,23 @@\n \n 1289\n \n 17.1Origin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1289\n 17.1.1Name Change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290\n 17.1.2Additional Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1 / 1290\n \n Part I\n \n Getting Started & Configuration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 2 / 1290\n \n Chapter 1\n \n Getting Started with LinuxCNC\n 1.1 About LinuxCNC\n@@ -3999,15 +3999,15 @@\n \u2022 It can simultaneously move up to 9 axes and supports a variety of interfaces.\n \u2022 The control can operate true servos (analog or PWM) with the feedback loop closed by the LinuxCNC\n software at the computer, or open loop with step-servos or stepper motors.\n \u2022 Motion control features include: cutter radius and length compensation, path deviation limited to\n a specified tolerance, lathe threading, synchronized axis motion, adaptive feedrate, operator feed\n override, and constant velocity control.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3 / 1290\n \n \u2022 Support for non-Cartesian motion systems is provided via custom kinematics modules. Available\n architectures include hexapods (Stewart platforms and similar concepts) and systems with rotary\n joints to provide motion such as PUMA or SCARA robots.\n \u2022 LinuxCNC runs on Linux using real time extensions.\n@@ -4044,15 +4044,15 @@\n You can subscribe to the emc-users mailing list at: https://lists.sourceforge.net/lists/listinfo/emc-users\n 1.1.3.3 Web Forum\n A web forum can be found at https://forum.linuxcnc.org or by following the link at the top of the\n linuxcnc.org home page.\n This is quite active but the demographic is more user-biased than the mailing list. If you want to be\n sure that your message is seen by the developers then the mailing list is to be preferred.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 4 / 1290\n \n 1.1.3.4 LinuxCNC Wiki\n A Wiki site is a user maintained web site that anyone can add to or edit.\n \n The user maintained LinuxCNC Wiki site contains a wealth of information and tips at: https://wiki.linuxcnc.or\n@@ -4085,15 +4085,15 @@\n LinuxCNC requires a kernel modified for realtime use to control real machine hardware. It can,\n however run on a standard kernel in simulation mode for purposes such as checking G-code, testing\n config files and learning the system. To work with these kernel versions there are two versions of\n LinuxCNC distributed. The package names are \u201dlinuxcnc\u201d and \u201dlinuxcnc-uspace\u201d.\n The realtime kernel options are preempt-rt, RTAI and Xenomai.\n You can discover the kernel version of your system with the command:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 5 / 1290\n \n uname -a\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n@@ -4124,15 +4124,15 @@\n Laptops are not generally suited to real time software step generation. Again a Latency Test run for\n an extended time will give you the info you need to determine suitability.\n 1.2.3.2 Video Cards\n If your installation pops up with 800 x 600 screen resolution then most likely Debian does not recognize\n your video card or monitor. This can sometimes be worked-around by installing drivers or creating /\n editing Xorg.conf files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 6 / 1290\n \n 1.3 Getting LinuxCNC\n This section describes how to install LinuxCNC version 2.9 on a PC already running Debian Bookworm (Debian 12). LinuxCNC requires the PREEMPT_RT real time kernel to ensure the strict timing\n required for CNC operations are met. We will also cover how to install Debian Bookworm optimised\n for LinuxCNC on the x86/AMD64 and ARM64 platforms for first time users. We will also cover some\n@@ -4168,15 +4168,15 @@\n That\u2019s it! You are done! You will find LinuxCNC under the CNC menu.\n \n 1.3.2 Install Debian Bookworm on a X86/AMD64 machine\n 1. Download Balena Etcher from https://etcher.balena.io/\n 2. Download a Debian Boookworm ISO. There are two versions to consider.\n a. The small netinst .ISO that requires a connection to the internet during the installation (recommended) https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.1.0-amd64netinst.iso\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 7 / 1290\n \n b. The much larger full live install that includes everything in Debian (use if you do not have an\n internet connection). https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-12.1.0-amd64-xfce.iso\n 3. Burn the Debian Image to a USB drive using Balena Etcher.\n 4. Connect the PC to install LinuxCNC on to a wired internet connection (only use wifi if you must).\n@@ -4209,15 +4209,15 @@\n 2. Ensure the Pi is connected to the internet. Boot the Pi. It will open a text based terminal.\n 3. Login using the root account (which does not have a password yet). Type:\n root\n \n and hit enter . Add a password to the root user account. Type:\n passwd\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 8 / 1290\n \n and allocate a password you will never forget!\n Add a new user and allocate a password. I used pi:\n adduser pi\n \n@@ -4257,15 +4257,15 @@\n a. Issue the configuration update command, which will take those changes and write them to the\n /boot/firmware/cmdline.txt and /boot/firmware/config.txt files:\n update-initramfs -u -k all\n \n 1. Install the XFCE graphical environment by typing\n apt install task-xfce-desktop\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 9 / 1290\n \n During the install you will need to select a keyboard layout/language, then tab to the \u201dOK\u201d and press\n Enter.\n Don\u2019t panic if the screen display appears corrupt, just wait until completed.\n Start the graphical environment\n@@ -4298,15 +4298,15 @@\n sudo geany /etc/lightdm/lightdm.conf\n \n scroll down to about line 126 and uncomment (remove #) both of the following lines and add YOUR\n login user name. Eg an example for user matt.\n autologin-user=matt\n autologin-user-timeout=0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 10 / 1290\n \n 1.3.6 PREEMPT_RT Tweaks (x86/AMD64 only)\n isolcpus can make a huge difference to latency on some systems, because it isolates specific CPU\n cores so they are purely used by real time threads (e.g. the LinuxCNC servo thread). The instructions\n below assume a 4 core CPU, e.g. Celeron, i3, i5, etc. Those with 2 cores or more than 4 cores need\n@@ -4348,15 +4348,15 @@\n address 10.10.10.1\n hardware-irq-coalesce-rx-usecs 0\n \n The last line is only required for Intel network cards. It seems to be ignored on non-applicable hardware.\n Save and close geany. Reboot to restart the network. Ping the mesa card to confirm it\u2019s all working:\n ping 10.10.10.10\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 11 / 1290\n \n 1.3.9 Updating LinuxCNC on Debian Bookworm (X86 only)\n The version of LinuxCNC in Bookworm is a bit dated because of the freeze process associated with\n the Debian release process. Fortunately, there is a LinuxCNC buildbot which rebuilds version 2.9\n packages whenever the code base changes. We can \u201dtrick\u201d Debian to get the LinuxCNC repositories\n@@ -4401,15 +4401,15 @@\n sudo apt upgrade\n \n The second last line updates Linux to look at our buildbot.\n The last line upgrades all Linux programs including our LinuxCNC files.\n Repeat running LinuxCNC and note the version. It should have changed to the latest version (which\n can change daily).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12 / 1290\n \n Now any time you wish to update your version of LinuxCNC (and any other Debian programs installed\n on your PC, just type:\n sudo apt update\n sudo apt upgrade\n@@ -4451,15 +4451,15 @@\n \n If you have not installed a later kernel as described above install linux-headers. Type:\n sudo apt install linux-headers-$(uname -r)\n \n You can now install the r8168 or R8125 driver. Depending on your driver Type:\n sudo apt install r8168-dkms\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 13 / 1290\n \n or type:\n sudo apt install r8125-dkms\n \n Reboot and check you still have a network driver with\n@@ -4496,15 +4496,15 @@\n \n 1.3.12 Alternate Install Methods\n The easiest, preferred way to install LinuxCNC is to use the Live/Install Image or Debian Bookworm\n as described above. Both methods are as simple and reliable as we can make it, and are suitable for\n novice users and experienced users alike. Both methods will typically replace any existing operating\n system on your hard drive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 14 / 1290\n \n Experienced users who are familiar with Debian system administration (finding install images, manipulating apt sources, changing kernel flavors, etc.) should note that new installations are supported on\n the platforms listed in the table below. \u201damd64\u201d refers to any 64-bit x86 system, i.e. the installation\n is not specific to AMD processors.\n Please be aware that in Debian Bookworm, the preempt_rt kernel is a dependency of linuxcnc-uspace.\n@@ -4597,15 +4597,15 @@\n Configuration Selector.\n The Configuration Selector offers a selection of configurations organized:\n \u2022 My Configurations - User configurations located in linuxcnc/configs in your home directory.\n \u2022 Sample Configurations - Sample configurations, when selected, are copied to linuxcnc/configs. Once\n a sample configuration was copied to your local directory, the launcher will offer it as My Configurations. The names under which these local configurations are presented correspond to the names\n of the directories within the configs/ directory:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 15 / 1290\n \n \u2013 sim - Configurations that include simulated hardware. These can be used for testing or learning\n how LinuxCNC works.\n \u2013 by_interface - Configurations organized by GUI.\n \u2013 by_machine - Configurations organized by machine.\n@@ -4638,15 +4638,15 @@\n \u2022 vigilant\n \u2022 vitalsystems\n Related hardware may be required to use these configurations as starting points for a system.\n The by_machine configurations are organized around complete, known systems like:\n \u2022 boss\n \u2022 cooltool\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 16 / 1290\n \n \u2022 scortbot erIII\n \u2022 sherline\n \u2022 smithy\n \u2022 tormach\n@@ -4665,15 +4665,15 @@\n \u2022 parport - Applications to test parport.\n \u2022 pyvcp - Example pyvcp applications.\n \u2022 xhc-hb04 - Applications to test an xhc-hb04 USB wireless MPG\n Note\n Under the Apps directory, only applications that are usefully modified by the user are offered for\n copying to the user\u2019s directory.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 17 / 1290\n \n Figure 1.1: LinuxCNC Configuration Selector\n Click any of the listed configurations to display specific information about it. Double-click a configuration or click OK to start the configuration.\n Select Create Desktop Shortcut and then click OK to add an icon on the Ubuntu desktop to directly\n launch this configuration without showing the Configuration Selector screen.\n@@ -4689,15 +4689,15 @@\n All configurations listed under Sample Configurations/sim are intended to run on any computer. No\n specific hardware is required and real-time support is not needed.\n These configurations are useful for studying individual capabilities or options. The sim configurations\n are organized according to the graphical user interface used in the demonstration. The directory for\n axis contains the most choices and subdirectories because it is the most tested GUI. The capabilities\n demonstrated with any specific GUI may be available in other GUIs as well.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 18 / 1290\n \n 1.4.5 Configuration Resources\n 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\n at least one INI file (iniflename.ini) that is used to describe a specific configuration.\n File resources within the copied directory will typically include one or more INI file (filename.ini)\n@@ -4739,15 +4739,15 @@\n The details will depend on which platform you\u2019re running on. Open a terminal then type lsb_release\n -ic to find this information out:\n lsb_release -ic\n Distributor ID: Debian\n Codename:\n Buster\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 19 / 1290\n \n You should be running on Debian Buster, Bullseye or Bookworm or Ubuntu 20.04 \u201dFocal Fossa\u201d or\n newer. LinuxCNC will not run on older distributions than these.\n You will also need to check which realtime kernel is being used:\n uname -r\n@@ -4784,15 +4784,15 @@\n deb https://linuxcnc.org buster base\n 2.9-rtpreempt\n deb https://linuxcnc.org bullseye base\n 2.9-uspace\n deb https://linuxcnc.org bookworm base\n 2.9-uspace\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 20 / 1290\n \n \u2022 Click Add Source, then Close in the Software Sources window. If it pops up a window informing\n you that the information about available software is out-of-date, click the Reload button.\n 1.5.1.2 Upgrading to the new version\n Now your computer knows where to get the new version of the software, next we need to install it.\n@@ -4809,15 +4809,15 @@\n will be automatically upgraded to the new one.\n 1.5.1.3 Ubuntu\n \u2022 Click on the Dash Home icon in the top left.\n \u2022 In the Search field, type \u201dupdate\u201d, then click on the Update Manager icon.\n \u2022 Click the Check button to fetch the list of packages available.\n \u2022 Click the Install Updates button to install the new versions of all packages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 21 / 1290\n \n 1.5.2 Updating without Network\n To update without a network connection you need to download the .deb then install it with dpkg. The\n .debs can be found in https://linuxcnc.org/dists/ .\n You have to drill down from the above link to find the correct deb for your installation. Open a terminal\n@@ -4852,15 +4852,15 @@\n In the extremely unlikely event that you are using canterp, know that the module has moved from\n /usr/lib/libcanterp.so to /usr/lib/linuxcnc/canterp.so, and the [TASK]INTERPRETER setting\n correspondingly needs to change from libcanterp.so to canterp.so.\n \n 1.5.4 Updating Configuration Files (for 2.9.x)\n No changes should be necessary to configuration files when moving from 2.8 to 2.9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 22 / 1290\n \n 1.5.4.1 Spindle limits in the INI\n It is now possible to add settings to the [SPINDLE] section of the INI file\n MAX_FORWARD_VELOCITY = 20000 The maximum spindle speed (in rpm)\n MIN_FORWARD_VELOCITY = 3000 The minimum spindle speed (in rpm)\n@@ -4893,15 +4893,15 @@\n 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 \n 1.6.1 Automatic Login\n 1.6.1.1 Debian\n Debian Stretch uses the Xfce desktop environment by default, with the lightDM display manager\n lightDM. To get automatic login with Stretch:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 23 / 1290\n \n \u2022 In a terminal, use the command:\n $ /usr/sbin/lightdm --show-config\n \n \u2022 Make a note of the absolute path to the configuration file lightdm.conf.\n@@ -4937,15 +4937,15 @@\n \n 1.6.4 Man Pages\n A man page (short for manual page) is a form of software documentation usually found on a Unix or\n Unix-like operating system like Linux.\n To view a man page open up a terminal to find out something about the find command in the terminal\n window type:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 24 / 1290\n \n man find\n \n Use the Page Up and Page Down keys to view the man page and the Q key to quit viewing.\n Note\n@@ -4977,15 +4977,15 @@\n 1. Right click on the desktop and select Create Launcher\n 2. Type a name in like sudo edit\n 3. Type gksudo \u201dgnome-open %u\u201d as the command and save the launcher to your desktop\n 4. Drag a file onto your launcher to open and edit\n 1.6.6.3 Root Access\n In Ubuntu you can become root by typing in \u201dsudo -i\u201d in a terminal window then typing in your password. Be careful, because you can really foul things up as root if you don\u2019t know what you\u2019re doing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 25 / 1290\n \n 1.6.7 Terminal Commands\n 1.6.7.1 Working Directory\n To find out the path to the present working directory in the terminal window type:\n pwd\n@@ -5021,15 +5021,15 @@\n pwd\n \n And pwd might return the following result:\n /home/joe\n \n With this information put the command together like this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 26 / 1290\n \n find /home/joe/linuxcnc -name \\*.ini -print\n \n The -name is the name of the file your looking for and the -print tells it to print out the result to the\n terminal window. The \\*.ini tells find to return all files that have the .ini extension. The backslash is\n@@ -5063,15 +5063,15 @@\n and Add. Give it a name and put gnome-terminal in the command box.\n \n 1.6.9 Hardware Problems\n 1.6.9.1 Hardware Info\n To find out what hardware is connected to your motherboard in a terminal window type:\n lspci -v\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 27 / 1290\n \n 1.6.9.2 Monitor Resolution\n During installation Ubuntu attempts to detect the monitor settings. If this fails you are left with a\n generic monitor with a maximum resolution of 800x600.\n Instructions for fixing this are located here:\n@@ -5084,15 +5084,15 @@\n is the same as f0, e.g., a file named f0 in the startup directory\n ../f1\n refers to a file f1 in the parent directory\n ../../f2\n refers to a file f2 in the parent of the parent directory\n ../../../f3 etc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 28 / 1290\n \n Chapter 2\n \n General User Information\n 2.1 User Foreword\n@@ -5121,15 +5121,15 @@\n The Composition rule allows us to build a predictable control system from the many modules available by making them connectable. We achieve connectability by setting up standard interfaces to sets\n of modules and following those standards.\n The Separation rule requires that we make distinct parts that do little things. By separating functions\n debugging is much easier and replacement modules can be dropped into the system and comparisons\n easily made.\n 1 Found at link:https://en.wikipedia.org/wiki/Separation_of_mechanism_and_policy, 2022-11-13\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 29 / 1290\n \n What does the Unix way mean for you as a user of LinuxCNC. It means that you are able to make\n choices about how you will use the system. Many of these choices are a part of machine integration,\n but many also affect the way you will use your machine. As you read you will find many places where\n you will need to make comparisons. Eventually you will make choices, \u201dI\u2019ll use this interface rather\n@@ -5164,15 +5164,15 @@\n \u2022 the high level controllers that coordinate the generation and execution of motion control of the CNC\n machine, namely the motion controller (EMCMOT), the discrete input/output controller (EMCIO)\n and the task executor (EMCTASK).\n The below illustration is a simple block diagram showing what a typical 3-axis CNC mill with stepper\n motors might look like:\n 2 Found at link:https://en.wikipedia.org/wiki/Unix_philosophy, 07/06/2008\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 30 / 1290\n \n Figure 2.1: Simple LinuxCNC Controlled Machine\n A computer running LinuxCNC sends a sequence of pulses via the parallel port to the stepper drives,\n each of which has one stepper motor connected to it. Each drive receives two independent signals;\n one signal to command the drive to move its associated stepper motor in a clockwise or anti-clockwise\n@@ -5194,15 +5194,15 @@\n The INI file contains all the basic hardware information regarding the operation of the CNC mill,\n such as the number of steps each stepper motor must turn to complete one full revolution, the\n maximum rate at which each stepper may operate at, the limits of travel of each axis or the\n configuration and behaviour of limit switches on each axis.\n \u2013 My_CNC.hal\n This HAL file contains information that tells LinuxCNC how to link the internal virtual signals to\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 31 / 1290\n \n physical connections beyond the computer. For example, specifying pin 4 on the parallel port to\n send out the Z axis step direction signal, or directing LinuxCNC to cease driving the X axis motor\n when a limit switch is triggered on parallel port pin 13.\n \u2013 custom.hal\n@@ -5229,85 +5229,85 @@\n 2.2.3 Graphical User Interfaces\n A graphical user interface is the part of the LinuxCNC that the machine tool operator interacts with.\n LinuxCNC comes with several types of user interfaces which may be chosen from by editing certain\n fields contained in the INI file:\n AXIS\n AXIS, the standard keyboard GUI interface. This is also the default GUI launched when a Configuration Wizard is used to create a desktop icon launcher:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 2.2: AXIS, the standard keyboard GUI interface\n \n Touchy\n Touchy, a touch screens GUI:\n \n 32 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 2.3: Touchy, a touch screen GUI\n \n Gscreen\n Gscreen, a user-configurable touch screen GUI:\n \n 33 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 34 / 1290\n \n Figure 2.4: Gscreen, a configurable base touch screen GUI\n \n GMOCCAPY\n GMOCCAPY, a touch screen GUI based on Gscreen. GMOCCAPY is also designed to work equally\n well in applications where a keyboard and mouse are the preferred methods of controlling the\n GUI:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 35 / 1290\n \n Figure 2.5: GMOCCAPY, a touch screen GUI based on Gscreen\n \n NGCGUI\n NGCGUI, a subroutine GUI that provides wizard-style programming of G code. NGCGUI may be\n run as a standalone program or embedded into another GUI as a series of tabs. The following\n screenshot shows NGCGUI embedded into AXIS:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 36 / 1290\n \n Figure 2.6: NGCGUI, a graphical interface integrated into AXIS\n \n TkLinuxCNC\n TkLinuxCNC, another interface based on Tcl/Tk. Once the most popular interface after AXIS.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 37 / 1290\n \n Figure 2.7: TkLinuxCNC graphical interface\n \n QtDragon\n QtDragon, a touch screen GUI based on QtVCP using the PyQt5 library. It comes in two versions\n QtDragon and QtDragon_hd. They are very similar in features but QtDragon_hd is made for\n larger monitors.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 38 / 1290\n \n Figure 2.8: QtDragon, a touch screen GUI based on QtVCP\n \n QtPlasmaC\n QtPlasmaC, a touch screen plasma cutting GUI based on QtVCP using the PyQt5 library. It comes\n in three aspect ratios, 16:9, 4:3, and 9:16.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 39 / 1290\n \n Figure 2.9: QtPlasmaC, a touch screen plasma cutting GUI based on QtVCP\n \n 2.2.4 User Interfaces\n These User interfaces are a way to interact with LinuxCNC outside of the graphical user interfaces.\n@@ -5321,41 +5321,41 @@\n add indicators, readouts, switches or sliders to the basic appearance of one of the GUIs for increased\n flexibility or functionality. Two styles of Virtual Control Panel are offered in LinuxCNC:\n PyVCP\n PyVCP, a Python-based virtual control panel that can be added to the AXIS GUI. PyVCP only\n utilises virtual signals contained within the Hardware Abstraction Layer, such as the spindle-atspeed indicator or the Emergency Stop output signal, and has a simple no-frills appearance. This\n makes it an excellent choice if the user wants to add a Virtual Control Panel with minimal fuss.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 40 / 1290\n \n Figure 2.10: PyVCP Example Embedded Into AXIS GUI\n \n GladeVCP\n GladeVCP, a Glade-based virtual control panel that can be added to the AXIS or Touchy GUIs.\n GladeVCP has the advantage over PyVCP in that it is not limited to the display or control of HAL\n virtual signals, but can include other external interfaces outside LinuxCNC such as window or\n network events. GladeVCP is also more flexible in how it may be configured to appear on the\n GUI:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 41 / 1290\n \n Figure 2.11: GladeVCP Example Embedded Into AXIS GUI\n \n QtVCP\n QtVCP, a PyQt5-based virtual control panel that can be added to most GUIs or run as a standalone\n panel. QtVCP has the advantage over PyVCP in that it is not limited to the display or control of\n HAL virtual signals, but can include other external interfaces outside LinuxCNC such as window\n or network events by extending with python code. QtVCP is also more flexible in how it may be\n configured to appear on the GUI with many special widgets:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 42 / 1290\n \n Figure 2.12: QtVCP Example Embedded Into QtDragon GUI\n \n 2.2.6 Languages\n LinuxCNC uses translation files to translate LinuxCNC User Interfaces into many languages including\n@@ -5370,15 +5370,15 @@\n the lessons learned. A beautiful finish, tight tolerances and caution during the work are evidence of\n lessons learned. No machine nor program can replace human experience.\n Now that you start working with the LinuxCNC software, you have to put yourself in the shoes of an\n operator. You must be in the role of someone in charge of a machine. It\u2019s a machine that will wait\n for your commands and then execute the orders that you will give it. In these pages, we will give the\n explanations which will help you to become a good CNC operator with LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 43 / 1290\n \n 2.2.8 Modes of Operation\n When LinuxCNC is running, there are three different major modes used for inputting commands.\n These are Manual, Auto, and Manual Data Input (MDI). Changing from one mode to another makes\n a big difference in the way that the LinuxCNC control behaves. There are specific things that can be\n@@ -5417,15 +5417,15 @@\n cam detector is not employed with G64 Pn.\n The basic acceleration and deceleration described above is not complex and there is no compromise\n to be made. In the INI file the specified machine constraints, such as maximum axis velocity and axis\n acceleration, must be obeyed by the trajectory planner.\n For more information on the Trajectory Planner INI options see the Trajectory Section in the INI\n chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 44 / 1290\n \n 2.3.1.2 Path Following\n A less straightforward problem is that of path following. When you program a corner in G-code, the\n trajectory planner can do several things, all of which are right in some cases:\n \u2022 It can decelerate to a stop exactly at the coordinates of the corner, and then accelerate in the new\n@@ -5466,15 +5466,15 @@\n backward compatibility for old G-code programs. See the G64 section of the G-code chapter.\n Blending without tolerance\n The controlled point will touch each specified movement at at least one point. The machine\n will never move at such a speed that it cannot come to an exact stop at the end of the current\n movement (or next movement, if you pause when blending has already started). The distance\n from the end point of the move is as large as it needs to be to keep up the best contouring feed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 45 / 1290\n \n Naive CAM Detector\n Successive G1 moves that involve only the XYZ axes that deviate less than Q- from a straight\n line are merged into a single straight line. This merged movement replaces the individual G1\n movements for the purposes of blending with tolerance. Between successive movements, the\n@@ -5507,15 +5507,15 @@\n the feed rate in units per second, the acceleration time is ta = F/A and the acceleration distance is\n da = F*ta /2. The deceleration time and distance are the same, making the critical distance d = da +\n dd = 2 * da = F2 /A.\n For example, for a feed rate of 1 inch per second and an acceleration of 10 inches/sec2 , the critical\n distance is 12 /10 = 1/10 = 0.1 inches.\n For a feed rate of 0.5 inch per second, the critical distance is 52 /100 = 25/100 = 0.025 inches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 46 / 1290\n \n 2.3.2 G-code\n 2.3.2.1 Defaults\n When LinuxCNC first starts up many G- and M-codes are loaded by default. The current active G- and\n M-codes can be viewed on the MDI tab in the Active G-codes: window in the AXIS interface. These\n@@ -5548,15 +5548,15 @@\n There are several options when doing manual tool changes. See the [EMCIO] section for information\n on configuration of these options. Also see the G28 and G30 section of the G-code chapter.\n \n 2.3.5 Coordinate Systems\n The Coordinate Systems can be confusing at first. Before running a CNC machine you must understand the basics of the coordinate systems used by LinuxCNC. In depth information on the LinuxCNC\n Coordinate Systems is in the Coordinate System section of this manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 47 / 1290\n \n 2.3.5.1 G53 Machine Coordinate\n When you home LinuxCNC you set the G53 Machine Coordinate System to 0 for each axis homed.\n No other coordinate systems or tool offsets are changed by homing.\n The only time you move in the G53 machine coordinate system is when you program a G53 on the\n@@ -5588,22 +5588,22 @@\n in relation to the material.\n Note also the position of the limit switches and the direction of activation of their cams. Several\n combinations are possible, for example it is possible (contrary to the drawing) to place a single fixed\n limit switch in the middle of the table and two mobile cams to activate it. In this case the limits will\n be reversed, +X will be on the right of the table and -X on the left. This inversion does not change\n anything from the point of view of the direction of movement of the tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 48 / 1290\n \n Figure 2.14: Typical Mill Configuration\n The following diagram shows a typical lathe showing direction of travel of the tool and limit switches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 2.15: Typical Lathe Configuration\n \n 2.4 Starting LinuxCNC\n 2.4.1 Running LinuxCNC\n LinuxCNC is started with the script file linuxcnc.\n linuxcnc [options] []\n@@ -5618,15 +5618,15 @@\n $ linuxcnc [Options] path/to/your_ini_file\n Name the configuration INI file using its path\n $ linuxcnc [Options] -l\n Use the previously used configuration INI file\n \n 49 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 50 / 1290\n \n Options:\n -d: Turn on \u201ddebug\u201d mode\n -v: Turn on \u201dverbose\u201d mode\n -r: Disable redirection of stdout and stderr to ~/linuxcnc_print.txt and\n@@ -5652,15 +5652,15 @@\n or GladeVCP objects with HAL pins you must use the postgui HAL file to make any connections to\n those pins. See the [HAL] section of the INI configuration for more information.\n 2.4.1.1 Configuration Selector\n If no INI file is passed to the linuxcnc script it loads the configuration selector so you can choose and\n save a sample configuration. Once a sample configuration has been saved it can be modified to suit\n your application. The configuration files are saved in linuxcnc/configs directory.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 51 / 1290\n \n 2.5 CNC Machine Overview\n This section gives a brief description of how a CNC machine is viewed from the input and output ends\n of the Interpreter.\n \n@@ -5675,15 +5675,15 @@\n with two motors for one axis is better handled by kinematics rather than by a second linear axis.\n Note\n If the motion of mechanical components is not independent, as with hexapod machines, the\n RS274/NGC language and the canonical machining functions will still be usable, as long as the lower\n levels of control know how to control the actual mechanisms to produce the same relative motion of\n tool and workpiece as would be produced by independent axes. This is called kinematics.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 52 / 1290\n \n Note\n With LinuxCNC, the case of the XYYZ gantry machine with two motors for one axis is better handled\n by the kinematics than by an additional linear axis.\n \n@@ -5714,15 +5714,15 @@\n \n 2.5.2 Control and Data Components\n 2.5.2.1 Linear Axes\n The X, Y, and Z axes form a standard right-handed coordinate system of orthogonal linear axes. Positions of the three linear motion mechanisms are expressed using coordinates on these axes.\n The U, V and W axes also form a standard right-handed coordinate system. X and U are parallel, Y\n and V are parallel, and Z and W are parallel (when A, B, and C are rotated to zero).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 53 / 1290\n \n 2.5.2.2 Rotational Axes\n The rotational axes are measured in degrees as wrapped linear axes in which the direction of positive\n rotation is counterclockwise when viewed from the positive end of the corresponding X, Y, or Z-axis.\n By wrapped linear axis, we mean one on which the angular position increases without limit (goes\n@@ -5762,15 +5762,15 @@\n revolution modes are being used, in which case see section G93-G94-G95-Mode).\n 1. If any of XYZ are moving, F is in units per minute in the XYZ cartesian system, and all other axes\n (ABCUVW) move so as to start and stop in coordinated fashion.\n 2. Otherwise, if any of UVW are moving, F is in units per minute in the UVW cartesian system, and\n all other axes (ABC) move so as to start and stop in coordinated fashion.\n 3 If the parallelism requirement is violated, the system builder will have to say how to distinguish clockwise from counterclockwise.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 54 / 1290\n \n 3. Otherwise, the move is pure rotary motion and the F word is in rotary units in the ABC pseudocartesian system.\n 2.5.2.6 Cooling\n Flood or droplets cooling can be enabled separately. RS274/NGC language stops them together. See\n section about cooling control.\n@@ -5797,15 +5797,15 @@\n machining center. The Z-axis is, of course, perpendicular to the XY-plane, the X-axis to the YZ-plane,\n and the Y-axis to the XZ-plane.\n 2.5.2.11 Tool Carousel\n Zero or one tool is assigned to each slot in the tool carousel.\n 2.5.2.12 Tool Change\n A machining center may be commanded to change tools.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 55 / 1290\n \n 2.5.2.13 Pallet Shuttle\n The two pallets may be exchanged by command.\n 2.5.2.14 Speed Override\n The speed override buttons can be activated (they function normally) or rendered inoperative (they no\n@@ -5836,15 +5836,15 @@\n 2.5.3.2 Block Delete Switch\n If the block delete switch is on, lines of G-code which start with a slash (the block delete character)\n are not interpreted. If the switch is off, such lines are interpreted. Normally the block delete switch\n should be set before starting the NGC program.\n 2.5.3.3 Optional Program Stop Switch\n If this switch is on and an M1 code is encountered, program execution is paused.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 56 / 1290\n \n 2.5.4 Tool Table\n A tool table is required to use the Interpreter. The file tells which tools are in which tool changer slots\n and what the size and type of each tool is. The name of the tool table is defined in the INI file:\n [EMCIO]\n@@ -5893,15 +5893,15 @@\n 0.0\n 0.0\n \n Comment\n G28 Home X\n G28 Home Y\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 57 / 1290\n \n See the Parameters section for more information.\n \n 2.6 Lathe User Information\n This chapter will provide information specific to lathes.\n@@ -5932,30 +5932,30 @@\n L1,L10,L11. There is also a built-in tool table editor in the AXIS display. The maximum number of\n entries in the tool table is 56. The maximum tool and pocket number is 99999.\n Earlier versions of LinuxCNC had two different tool table formats for mills and lathes, but since the\n 2.4.x release, one tool table format is used for all machines. Just ignore the parts of the tool table that\n don\u2019t pertain to your machine, or which you don\u2019t need to use. For more information on the specifics\n of the tool table format, see the Tool Table Section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 58 / 1290\n \n 2.6.3 Lathe Tool Orientation\n The following figure shows the lathe tool orientations with the center line angle of each orientation\n and info on FRONTANGLE and BACKANGLE.\n The FRONTANGLE and BACKANGLE are clockwise starting at a line parallel to Z+.\n \n Figure 2.16: Lathe Tool Orientations\n In AXIS the following figures show what the Tool Positions look like, as entered in the tool table.\n Tool Positions 1, 2, 3 & 4Tool Positions 123 & 4 23 & 4 3 & 4\n \n Tool Positions 5, 6, 7 & 8Tool Positions 567 & 8 67 & 8 7 & 8\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 59 / 1290\n \n 2.6.4 Tool Touch Off\n When running in lathe mode in AXIS you can set the X and Z in the tool table using the Touch Off\n window. If you have a tool turret you normally have Touch off to fixture selected when setting up your\n turret. When setting the material Z zero you have Touch off to material selected. For more information\n@@ -5981,15 +5981,15 @@\n The Z axis offsets can be a bit confusing at first because there are two elements to the Z offset. There\n is the tool table offset, and the machine coordinate offset. First we will look at the tool table offsets.\n One method is to use a fixed point on your lathe and set the Z offset for all tools from this point. Some\n use the spindle nose or chuck face. This gives you the ability to change to a new tool and set its Z\n offset without having to reset all the tools.\n A typical session might be:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 60 / 1290\n \n 1. Home each axis if not homed.\n 2. Make sure no offsets are in effect for the current coordinate system.\n 3. Set the current tool with Tn M6 G43 where n is the tool number.\n 4. Select the Z axis in the Manual Control window.\n@@ -6022,15 +6022,15 @@\n Constant Surface Speed CSS or Constant Surface Speed uses the machine X origin modified by\n the tool X offset to compute the spindle speed in RPM. CSS will track changes in tool offsets. The X\n machine origin should be when the reference tool (the one with zero offset) is at the center of rotation.\n For more information see the G96 Section.\n Feed per Revolution Feed per revolution will move the Z axis by the F amount per revolution. This\n is not for threading, use G76 for threading. For more information see the G95 Section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 61 / 1290\n \n 2.6.6 Arcs\n Calculating arcs can be mind challenging enough without considering radius and diameter mode on\n lathes as well as machine coordinate system orientation. The following applies to center format arcs.\n On a lathe you should include G18 in your preamble as the default is G17 even if you\u2019re in lathe mode,\n@@ -6058,15 +6058,15 @@\n The control point for the tool follows the programmed path. The control point is the intersection of a\n line parallel to the X and Z axis and tangent to the tool tip diameter, as defined when you touch off the\n X and Z axes for that tool. When turning or facing straight sided parts the cutting path and the tool\n edge follow the same path. When turning radius and angles the edge of the tool tip will not follow the\n programmed path unless cutter comp is in effect. In the following figures you can see how the control\n point does not follow the tool edge as you might assume.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 62 / 1290\n \n Figure 2.17: Control point\n \n 2.6.7.2 Cutting Angles without Cutter Comp\n Now imagine we program a ramp without cutter comp. The programmed path is shown in the following\n@@ -6074,29 +6074,29 @@\n same as long as we are moving in an X or Z direction only.\n \n Figure 2.18: Ramp Entry\n Now as the control point progresses along the programmed path the actual cutter edge does not follow\n the programmed path as shown in the following figure. There are two ways to solve this, cutter comp\n and adjusting your programmed path to compensate for tip radius.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 63 / 1290\n \n Figure 2.19: Ramp Path\n In the above example it is a simple exercise to adjust the programmed path to give the desired actual\n path by moving the programmed path for the ramp to the left the radius of the tool tip.\n 2.6.7.3 Cutting a Radius\n In this example we will examine what happens during a radius cut without cutter comp. In the next\n figure you see the tool turning the OD of the part. The control point of the tool is following the\n programmed path and the tool is touching the OD of the part.\n \n Figure 2.20: Turning Cut\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 64 / 1290\n \n In this next figure you can see as the tool approaches the end of the part the control point still follows\n the path but the tool tip has left the part and is cutting air. You can also see that even though a radius\n has been programmed the part will actually end up with a square corner.\n \n@@ -6104,15 +6104,15 @@\n Now you can see as the control point follows the radius programmed the tool tip has left the part and\n is now cutting air.\n \n Figure 2.22: Radius Cut\n In the final figure we can see the tool tip will finish cutting the face but leave a square corner instead\n of a nice radius. Notice also that if you program the cut to end at the center of the part a small amount\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 65 / 1290\n \n of material will be left from the radius of the tool. To finish a face cut to the center of a part you have\n to program the tool to go past center at least the nose radius of the tool.\n \n Figure 2.23: Face Cut\n@@ -6133,15 +6133,15 @@\n width.\n Plasma torches are similar in design to the automotive spark plug. They consist of negative and\n positive sections separated by a center insulator. Inside the torch, the pilot arc starts in the gap\n between the negatively charged electrode and the positively charged tip. Once the pilot arc has\n ionised the plasma gas, the superheated column of gas flows through the small orifice in the torch tip,\n which is focused on the metal to be cut.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 66 / 1290\n \n In a Plasma Cutting Torch a cool gas enters Zone B, where a pilot arc between the electrode and the\n torch tip heats and ionises the gas. The main cutting arc then transfers to the workpiece through the\n column of plasma gas in Zone C. By forcing the plasma gas and electric arc through a small orifice, the\n torch delivers a high concentration of heat to a small area. The stiff, constricted plasma arc is shown\n@@ -6157,15 +6157,15 @@\n works well, and starts quickly. But, because of the high frequency high voltage power that is required\n generated to ionise the air, it has some drawbacks. It often interferes with surrounding electronic\n circuitry, and can even damage components. Also a special circuit is needed to create a Pilot arc.\n Inexpensive models will not have a pilot arc, and require touching the consumable to the work to\n start. Employing a HF circuit also can increase maintenance issues, as there are usually adjustable\n points that must be cleaned and readjusted from time to time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 67 / 1290\n \n 2.7.2.2 Blowback Start\n This start type uses air pressure supplied to the cutter to force a small piston or cartridge inside the\n torch head back to create a small spark between the inside surface of the consumable, ionising the\n air, and creating a small plasma flame. This also creates a \u201dpilot arc\u201d that provides a plasma flame\n@@ -6190,15 +6190,15 @@\n If the torch is too high or too low then the edges can become excessively bevelled. It is also critical\n that the torch is held perpendicular to the surface.\n \u2022 Torch to work distance can impact edge bevel\n \n \u2022 Negative cut angle: torch too low, increase torch to work distance.\n \u2022 Positive cut angle: torch too high, decrease torch to work distance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 68 / 1290\n \n Note\n A slight variation in cut angles may be normal, as long as it is within tolerance.\n \n The ability to precisely control the cutting height in such a hostile and ever changing environment is\n@@ -6224,15 +6224,15 @@\n \u2022 Blowback start to minimise electrical noise to simplify construction\n \u2022 A Machine torch is preferred but many have used hand torches.\n \u2022 A fully shielded torch tip to allow ohmic sensing\n If you have the budget, a higher end machines will supply:\n \u2022 Manufacturer provided cut charts which will save many hours and material waste calibrating cut\n parameters\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 69 / 1290\n \n \u2022 Dry Contacts for ArcOK\n \u2022 Terminals for Arc On switch\n \u2022 Raw arc voltage or divided arc voltage output\n \u2022 Optionally a RS485 interface if using a Hypertherm plasma cutter and want to control it from the\n@@ -6276,15 +6276,15 @@\n A plasma table builder should connect one side of these pins to field power and the other to an input\n pin. This then allows the CNC controller to know when a valid arc is established and also when an\n arc is lost unexpectedly. There is a potential trap here when the input is a high impedance circuit\n such as a Mesa card. If the dry contacts are a simple relay, there is a high probability that the current\n passing through the relay is less than the minimum current specification. Under these conditions, the\n relay contacts can suffer from a buildup of oxide which over time can result in intermittent contact\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 70 / 1290\n \n operation. To prevent this from happening, a pull down resistor should be installed on the controller\n input pin. Care should be taken to ensure that this resistor is selected to ensure the minimum current\n passes through the relay and is of sufficient wattage to handle the power in the circuit. Finally, the\n resistor should be mounted in such a way that the generated heat does not damage anything whilst\n@@ -6324,15 +6324,15 @@\n of the material surface. This ohmic sensing circuit is operating in an extremely hostile environment\n so a number of failsafes need to be implemented to ensure safety of both the CNC electronics and\n the operator. In plasma cutting, the earth clamp attached to the material is positive and the torch is\n negative. It is recommended that:\n 1. Ohmic sensing only be implemented where the torch has a shield that is isolated from the torch\n tip that conveys the cutting arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 71 / 1290\n \n 2. The ohmic circuit uses a totally separate isolated power supply that activates an opto-isolated\n relay to enable the probing signal to be transmitted to the CNC controller.\n 3. The positive side of the circuit should be at the torch\n 4. Both sides of the circuit needs to be isolated by opto-isolated relays until probing is being undertaken\n@@ -6354,15 +6354,15 @@\n threshold above which it is deemed contact is made and an output is enabled. By monitoring the voltage, a lower \u201cbreak circuit\u201d threshold can be set to build in strong switch hysteresis. This minimises\n false triggering. In our testing, we found the material sensing using this method was more sensitive\n and robust as well as being simpler to implement the wiring. One further advantage is using software\n outputs instead of physical I/O pins is that it frees up pins to use for other purposes. This advantage\n is helpful to get the most out of the Mesa 7I96 which has limited I/O pins.\n The following circuit diagram shows how to implement a hypersensing circuit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 72 / 1290\n \n We used a 15 W Mean Well HDR-15 Ultra Slim DIN Rail Supply 24 V DIN rail based isolated power\n supply. This is a double insulated Isolation Class II device that will withstand any arc voltage that\n might be applied to the terminals.\n 2.7.7.4 Example HAL Code for Hypersensing\n@@ -6379,15 +6379,15 @@\n setp ohmicsense.thcad-fullscale\n \n 140200\n 988300\n 32\n 5\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 73 / 1290\n \n setp ohmicsense.volt-divider\n 4.9\n setp ohmicsense.ohmic-threshold\n 22.0\n@@ -6420,15 +6420,15 @@\n \n 2.7.10 Torch Breakaway\n It is recommended that a mechanism is provided to allow the torch to \u201cbreak away\u201d or fall off in the\n case of impact with the material or a cut part that has tipped up. A sensor should be installed to allow\n the CNC controller to detect if this has occurred and pause the running program. Usually a break\n away is implemented using magnets to secure the torch to the Z axis stage.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 74 / 1290\n \n 2.7.11 Corner Lock / Velocity Anti-Dive\n The LinuxCNC trajectory planner is responsible for translating velocity and acceleration commands\n into motion that obey the laws of physics. For example, motion will slow when negotiating a corner.\n Whilst this is not a problem with milling machines or routers, this poses a particular problem for\n@@ -6459,15 +6459,15 @@\n Hypertherm\u2019s True Hole Technology also look on PlasmaSpider, user seanp has posted extensively on\n his work using simple air plasma.\n The generally accepted method to get good holes from 37mm dia. and down to material thickness\n with minimal taper using an air plasma is:\n 1. Use recommended cutting current for consumables.\n 2. Use fixed (no THC) recommended cutting height for consumables.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 75 / 1290\n \n 3. Cut from 60% to 70% of the recommended feed rate of consumables and materials.\n 4. Start lead in at or near center of hole.\n 5. Use perpendicular lead in.\n 6. No lead out, either a slight over burn or early torch off depending on what works best for you.\n@@ -6504,15 +6504,15 @@\n 2.7.14.1 Arc OK (input)\n \u2022 Inverter closes dry contacts when a valid arc is established\n \u2022 Connect Field power to one Inverter ArcOK terminal.\n \u2022 Connect other Inverter Ok Terminal to input pin.\n \u2022 Usually connected to one of the \u0300 \u0300motion.digital- \u0300 <\n \u0300 nn> pins for use from G-code with M66\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 76 / 1290\n \n 2.7.14.2 Torch On (output)\n \u2022 Triggers a relay to close the torch on switch in the inverter.\n \u2022 Connect the torch on terminals on the inverter to the relay output terminals.\n \u2022 Connect one side of the coil to the output pin.\n@@ -6543,15 +6543,15 @@\n 2.7.14.5 Ohmic Sensing (input)\n \u2022 Take care to follow the ohmic sensing schematic shown previously.\n \u2022 An isolated power supply triggers a relay when the torch shield contacts the material.\n \u2022 Connect field power to one output terminal and the other to the input.\n \u2022 Take care to observe relay polarity if opto-coupled solid State relays are used.\n \u2022 Usually connected to motion.probe-input and may be or\u2019d with the float switch.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 77 / 1290\n \n As can be seen, plasma tables are pin intensive and we have already consumed about 15 inputs before\n the normal estops are added. Others have other views but it is the writer\u2019s opinion that the Mesa\n 7I76E is preferred over the cheaper 7I96 to allow for MPG\u2019s, scale and axis selection switch and other\n features you may wish to add over time. If your table uses servos, there are a number of alternatives.\n@@ -6594,15 +6594,15 @@\n G42.1 D#<_hal[plasmac_run.kerf-width-f]> for right of programmed path\n G40 to turn compensation off\n \n Note\n Integrators should familiarise themselves with the LinuxCNC documentation for the various LinuxCNC\n G-code commands mentioned above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 78 / 1290\n \n 2.7.16 External Offsets and Plasma Cutting\n External Offsets were introduced to LinuxCNC with version 2.8. By external, it means that we can\n apply an offset external to the G-code that the trajectory planner knows nothing about. It easiest\n to explain with an example. Picture a lathe with an external offset being applied by a mathematical\n@@ -6653,15 +6653,15 @@\n \u2022 Full scale\n \u2022 0V\n \n 928 kHz (928 kHz/32 = 29 kHz)\n \n 121.6 kHz (121.6 kHz/32 = 3.8 kHz)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 79 / 1290\n \n Because the full scale is 10 Volts, then the frequency per Volt is:\n (29000 Hz - 3800 Hz) / 10 V = 2520 Hz per Volt\n So assuming we have a 5 Volt input, the calculated frequency would be:\n (2520 Hz/V * 5 V) + 3800 Hz = 16400 Hz\n@@ -6694,15 +6694,15 @@\n as 24:1 (and 50:1 becomes 75:1). This is not a problem with more reputable brands (e.g., Thermal\n Dynamics, Hypertherm, ESAB etc). So if you are seeing lower than expected cutting voltages, it might\n be preferable to reconfigure the THCAD to read raw arc voltage.\n Remembering that plasma arc voltages are potentially lethal, here are some suggested criteria.\n Pilot Arc Start Because there is not likely to be any significant EMI, you should be able to safely\n install the THCAD in your control panel if you have followed our construction guidelines.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 80 / 1290\n \n \u2022 If you do not have a voltage divider, either install scaling resistors inside the plasma cutter and\n install the THCAD in the control panel or follow the suggestions for HF start machines.\n \u2022 If you have a voltage divider, install a THCAD-10 in your control panel. We\u2019ve had no problems with\n this configuration with a 120 A Thermal Dynamics plasma cutter.\n@@ -6740,15 +6740,15 @@\n located away from the electronics and the plasma machine. This hardware also allows the use of 24\n Volt logic systems which are much more noise tolerant. Components should be mounted in a metal\n enclosure connected to the mains earth. It is strongly recommended that an EMI filter is installed on\n the mains power connection. The simplest way is to use a EMI filtered mains power IEC connector\n commonly used on PC\u2019s and electric appliances which allows this to be achieved with no extra work.\n Plan the layout of components in the enclosure so that mains power, high voltage motor wires and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 81 / 1290\n \n logic signals are kept as separate as possible from each other. If they do have to cross, keep them at\n 90 degrees.\n Peter Wallace from Mesa Electronics suggests: \u201dIf you have a CNC compatible plasma source with a\n voltage divider, I would mount the THCAD inside your electronics enclosure with all the other motion\n@@ -6793,15 +6793,15 @@\n is relatively straightforward if you use the axis or joint position from one of the motion pins and the\n lincurve component to map downdraft zones to the correct output pin.\n \n 2.7.22 Designing For Speed And Acceleration\n In plasma cutting, speed and acceleration are king. The higher the acceleration, the less the machine\n needs to slow down when negotiating corners. This implies that the gantry should be as light as\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 82 / 1290\n \n possible without sacrificing torsional stiffness. A 100 mm x 100 mm x 2 mm aluminium box section\n has equivalent torsional stiffness to an 80 mm x 80 mm T slot extrusion yet is 62% lighter. So does the\n convenience of T slots outweigh the additional construction?\n \n@@ -6842,29 +6842,29 @@\n 2.7.26 Post Processors For Plasma Cutting\n CAM programs (Computer Aided Manufacture) are the bridge between CAD (Computer Aided Design)\n and the final CNC (Computer Numerical Control) operation. They often include a user configurable\n post processor to define the code that is generated for a specific machine or dialect of G-code.\n Many LinuxCNC users are perfectly happy with using Inkscape to convert SVG vector based files to\n G-code. If you are using a plasma cutter for hobby or home use, consider this option.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 83 / 1290\n \n However, if your needs are more complex, probably the best and most reasonably priced solution\n is SheetCam. SheetCam supports both Windows and Linux and post processors are available for it\n including the QtPlasmaC configuration. SheetCam allows you to nest parts over a full sheet of material\n and allows you to configure toolsets and code snippets to suit your needs. SheetCam post processors\n are text files written in the Lua programming language and are generally easy to modify to suit your\n exact requirements. For further information, consult the SheetCam web site and their support forum.\n Another popular post-processor is included with the popular Fusion360 package but the included\n post-processors will need some customisation.\n LinuxCNC is a CNC application and discussions of CAM techniques other than this introductory discussion are out of scope of LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 84 / 1290\n \n Chapter 3\n \n Configuration Wizards\n 3.1 Stepper Configuration Wizard\n@@ -6875,15 +6875,15 @@\n & direction.\n StepConf is installed when you install LinuxCNC and is in the CNC menu.\n StepConf places a file in the linuxcnc/config directory to store the choices for each configuration you\n create. When you change something, you need to pick the file that matches your configuration name.\n The file extension is .stepconf.\n The StepConf Wizard works best with at least 800 x 600 screen resolution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 85 / 1290\n \n 3.1.2 Start Page\n \n Figure 3.1: StepConf Entry Page\n The three first radio buttons are self-explanatory:\n@@ -6894,15 +6894,15 @@\n StepConf Wizard. StepConf will highlight the lastconf that was built.\n \u2022 Import - Import a Mach configuration file and attempt to convert it to a LinuxCNC config file. After\n the import, you will go though the pages of StepConf to confirm/modify the entries. The original\n mach XML file will not be changed.\n These next options will be recorded in a preference file for the next run of StepConf.\n \u2022 Create Desktop Shortcut - This will place a link on your desktop to the files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 86 / 1290\n \n \u2022 Create Desktop Launcher - This will place a launcher on your desktop to start your application.\n \u2022 Create Simulated Hardware - This allows you to build a config for testing, even if you don\u2019t have\n the actual hardware.\n \n@@ -6914,15 +6914,15 @@\n \u2022 Machine Name - Choose a name for your machine. Use only uppercase letters, lowercase letters,\n digits, - and _.\n \u2022 Axis Configuration - Choose XYZ (Mill), XYZA (4-axis mill) or XZ (Lathe).\n \u2022 Machine Units - Choose Inch or mm. All subsequent entries will be in the chosen units. Changing\n this also changes the default values in the Axes section. If you change this after selecting values in\n any of the axes sections, they will be over-written by the default values of the selected units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 87 / 1290\n \n \u2022 Driver Type - If you have one of the stepper drivers listed in the pull down box, choose it. Otherwise,\n select Other and find the timing values in your driver\u2019s data sheet and enter them as nano seconds\n in the Driver Timing Settings. If the data sheet gives a value in microseconds, multiply by 1000.\n For example, enter 4.5 \u00b5s as 4500 ns.\n@@ -6951,15 +6951,15 @@\n worst case numbers are. Run the test at least a few minutes. The longer you run the test the better it\n will be at catching events that might occur at less frequent intervals. This is a test for your computer\n only, so no hardware needs to be connected to run the test.\n \n Warning\n Do not attempt run LinuxCNC while the latency test is running.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 88 / 1290\n \n Figure 3.3: Latency Test\n Latency is how long it takes the PC to stop what it is doing and respond to an external request. In our\n case, the request is the periodic heartbeat that serves as a timing reference for the step pulses. The\n lower the latency, the faster you can run the heartbeat, and the faster and smoother the step pulses\n@@ -6975,15 +6975,15 @@\n If your Max Jitter number is less than about 15-20 \u00b5s (15000-20000 ns), the computer should give very\n nice results with software stepping. If the max latency is more like 30-50 \u00b5s, you can still get good\n results, but your maximum step rate might be a little disappointing, especially if you use microstepping\n or have very fine pitch leadscrews. If the numbers are 100 \u00b5s or more (100,000 ns), then the PC is not\n a good candidate for software stepping. Numbers over 1 millisecond (1,000,000 ns) mean the PC is\n not a good candidate for LinuxCNC, regardless of whether you use software stepping or not.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 89 / 1290\n \n 3.1.5 Parallel Port Setup\n \n Figure 3.4: Parallel Port Setup Page\n You may specify the address as a hexadecimal (often 0x378) or as linux\u2019s default port number (probably\n@@ -6992,15 +6992,15 @@\n if the signal is inverted (0V for true/active, 5V for false/inactive).\n \u2022 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).\n \u2022 Inputs and Outputs - If the input or output is not used set the option to Unused.\n \u2022 External E-Stop - This can be selected from an input pin drop down box. A typical E-Stop chain uses\n all normally closed contacts.\n \u2022 Homing & Limit Switches - These can be selected from an input pin drop down box for most configurations.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 90 / 1290\n \n \u2022 Charge Pump - If your driver board requires a charge pump signal select Charge Pump from the\n drop down list for the output pin you wish to connect to your charge pump input. The charge pump\n output is connected to the base thread by StepConf. The charge pump output will be about 1/2 of\n the maximum step rate shown on the Basic Machine Configuration page.\n@@ -7012,15 +7012,15 @@\n \n Figure 3.5: Parallel Port 2 Setup Page\n The second Parallel port (if selected) can be configured and It\u2019s pins assigned on this page. No step and\n direction signals can be selected. You may select in or out to maximizes the number of input/output\n pins that are available. You may specify the address as a hexadecimal (often 0x378) or as linux\u2019s\n default port number (probably 1).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 91 / 1290\n \n 3.1.7 Axis Configuration\n \n Figure 3.6: Axis Configuration Screen\n \u2022 Motor Steps Per Revolution - The number of full steps per motor revolution. If you know how many\n@@ -7031,15 +7031,15 @@\n If not, enter 1:1.\n \u2022 Leadscrew Pitch - Enter the pitch of the leadscrew here. If you chose Inch units, enter the number\n of threads per inch. If you chose mm units, enter the number of millimeters per revolution (e.g.,\n enter 2 for 2mm/rev). If the machine travels in the wrong direction, enter a negative number here\n instead of a positive number, or invert the direction pin for the axis.\n \u2022 Maximum Velocity - Enter the maximum velocity for the axis in units per second.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 92 / 1290\n \n \u2022 Maximum Acceleration - The correct values for these items can only be determined through experimentation. See Finding Maximum Velocity to set the speed and Finding Maximum Acceleration to\n set the acceleration.\n \u2022 Home Location - The position the machine moves to after completing the homing procedure for this\n axis. For machines without home switches, this is the location the operator manually moves the\n@@ -7068,15 +7068,15 @@\n Pulse rate at max speed determines the BASE_PERIOD. Values above 20000Hz may lead to slow\n response time or even lockups (the fastest usable pulse rate varies from computer to computer)\n \u2022 Axis SCALE - The number that will be used in the INI file [SCALE] setting. This is how many steps\n per user unit.\n \u2022 Test this axis - This will open a window to allow testing for each axis. This can be used after filling\n out all the information for this axis.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 93 / 1290\n \n Figure 3.7: Axis Test\n Test this axis is a basic tester that only outputs step and direction signals to try different values for\n acceleration and velocity.\n Important\n@@ -7099,15 +7099,15 @@\n If the machine did not obviously stall, click the Run button off. The axis now returns to the position\n where it started. If the position is incorrect, then the axis stalled or lost steps during the test. Reduce\n Velocity and start the test again.\n If the machine doesn\u2019t move, stalls, or loses steps, no matter how low you turn Velocity, verify the\n following:\n \u2022 Correct step waveform timings\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 94 / 1290\n \n \u2022 Correct pinout, including Invert on step pins\n \u2022 Correct, well-shielded cabling\n \u2022 Physical problems with the motor, motor coupling, leadscrew, etc.\n Once you have found a speed at which the axis does not stall or lose steps during this testing procedure,\n@@ -7119,15 +7119,15 @@\n Velocity. Once you have found a value at which the axis does not stall or lose steps during this testing\n procedure, reduce it by 10% and use that as the axis Maximum Acceleration.\n \n 3.1.8 Spindle Configuration\n \n Figure 3.8: Spindle Configuration Page\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 95 / 1290\n \n This page only appears when Spindle PWM is chosen in the Parallel Port Pinout page for one of the\n outputs.\n 3.1.8.1 Spindle Speed Control\n If Spindle PWM appears on the pinout, the following information should be entered:\n@@ -7172,29 +7172,29 @@\n Change the spindle speed by entering a different S-number: S800. Valid numbers (at this point) range\n from 1 to 1000.\n For two different S-numbers, measure the actual spindle speed in RPM. Record the S-numbers and\n actual spindle speeds. Run StepConf again. For Speed enter the measured speed, and for PWM enter\n the S-number divided by 1000.\n Because most spindle drivers are somewhat nonlinear in their response curves, it is best to:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 96 / 1290\n \n \u2022 Make sure the two calibration speeds are not too close together in RPM.\n \u2022 Make sure the two calibration speeds are in the range of speeds you will typically use while milling.\n For instance, if your spindle will go from 0 RPM to 8000 RPM, but you generally use speeds from 400\n RPM (10%) to 4000 RPM (100%), then find the PWM values that give 1600 RPM (40%) and 2800 RPM\n (70%).\n \n 3.1.9 Options\n \n Figure 3.9: Advanced Options Configuration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 97 / 1290\n \n \u2022 Include Halui - This will add the Halui user interface component. See the HALUI Chapter for more\n information on.\n \u2022 Include PyVCP - This option adds the PyVCP panel base file or a sample file to work on. See the\n PyVCP Chapter for more information.\n@@ -7219,15 +7219,15 @@\n Before the hard stop there is a limit switch. If the limit switch is encountered during normal operation,\n LinuxCNC shuts down the motor amplifier. The distance between the hard stop and limit switch must\n be long enough to allow an unpowered motor to coast to a stop.\n Before the limit switch there is a soft limit. This is a limit enforced in software after homing. If a MDI\n command or G-code program would pass the soft limit, it is not executed. If a jog would pass the soft\n limit, it is terminated at the soft limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 98 / 1290\n \n The home switch can be placed anywhere within the travel (between hard stops). As long as external\n hardware does not deactivate the motor amplifiers when the limit switch is reached, one of the limit\n switches can be used as a home switch.\n The zero position is the location on the axis that is 0 in the machine coordinate system. Usually the\n@@ -7255,15 +7255,15 @@\n LinuxCNC expects a TRUE value when a switch is closed, so the corresponding Invert box must be\n checked on the pinout configuration page. The pull up resistor show in the diagrams pulls the input\n high until the connection to ground is made and then the input goes low. Otherwise the input might\n float between on and off when the circuit is open. Typically for a parallel port you might use 47 k\u03a9;.\n \n Figure 3.11: Normally Closed Switches (N/C) wiring in series (simplified diagram)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 99 / 1290\n \n Figure 3.12: Normally Open Switches (N/O) wiring in parallel (simplified diagram)\n The following combinations of switches are permitted in StepConf:\n \u2022 Combine home switches for all axes\n \u2022 Combine limit switches for all axes\n@@ -7286,15 +7286,15 @@\n The other is to use PnCconf to build a config that is close to what you want and then hand edit everything to tailor it to your needs. This would be the choice if you need extensive modifications beyond\n PnCconf\u2019s scope or just want to tinker with / learn about LinuxCNC.\n You navigate the wizard pages with the forward, back, and cancel buttons there is also a help button\n that gives some help information about the pages, diagrams and an output page.\n Tip\n PnCconf\u2019s help page should have the most up to date info and has additional details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 100 / 1290\n \n 3.2.1 Step by Step Instructions\n \n Figure 3.13: PnCconf Splash\n \n@@ -7306,15 +7306,15 @@\n PnCconf places a note in those files. It also allows you to select desktop shortcut / launcher options.\n A desktop shortcut will place a folder icon on the desktop that points to your new configuration files.\n Otherwise you would have to look in your home folder under linuxcnc/configs.\n A Desktop launcher will add an icon to the desktop for starting your config directly. You can also\n launch it from the main menu by using the Configuration Selector LinuxCNC found in CNC menu and\n selecting your config name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 101 / 1290\n \n 3.2.3 Basic Machine Information\n \n Figure 3.14: PnCconf Basic\n \n@@ -7326,15 +7326,15 @@\n Tip\n Defaults are not converted when using metric so make sure they are sane values!\n \n Computer Response Time\n The servo period sets the heart beat of the system. Latency refers to the amount of time the\n computer can be longer then that period. Just like a railroad, LinuxCNC requires everything\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 102 / 1290\n \n on a very tight and consistent time line or bad things happen. LinuxCNC requires and uses a\n real time operating system, which just means it has a low latency ( lateness ) response time\n when LinuxCNC requires its calculations and when doing LinuxCNCs calculations it cannot be\n interrupted by lower priority requests (such as user input to screen buttons or drawing etc).\n@@ -7381,15 +7381,15 @@\n of the parport. You can either enter the Linux parallel port numbering system (0,1,or 2) or enter\n the actual address. The address for an on board parport is often 0x0278 or 0x0378 (written in\n hexadecimal) but can be found in the BIOS page. The BIOS page is found when you first start\n your computer you must press a key to enter it (such as F2). On the BIOS page you can find\n the parallel port address and set the mode such as SPP, EPP, etc on some computers this info is\n displayed for a few seconds during start up. For PCI parallel port cards the address can be found\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 103 / 1290\n \n by pressing the parport address search button. This pops up the help output page with a list of\n all the PCI devices that can be found. In there should be a reference to a parallel port device\n with a list of addresses. One of those addresses should work. Not all PCI parallel ports work\n properly. Either type can be selected as in (maximum amount of input pins) or out (maximum\n@@ -7417,15 +7417,15 @@\n \u2022 has no graphical window\n \u2022 look can be changed with custom themes\n QtPlasmaC\n \u2022 fully featured plasmac configuration based on the QtVCP infrastructure.\n \u2022 mouse/keyboard operation or touchscreen operation\n \u2022 no VCP integration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 104 / 1290\n \n 3.2.4 External Configuration\n This page allows you to select external controls such as for jogging or overrides.\n \n Figure 3.15: External Controls\n@@ -7436,15 +7436,15 @@\n switch based OEM joystick.\n Joystick jogging\n Requires a custom device rule to be installed in the system. This is a file that LinuxCNC uses to\n connect to Linux\u2019s device list. PnCconf will help to prepare this file.\n \u2022 Search for device rule will search the system for rules, you can use this to find the name of\n devices you have already built with PnCconf.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 105 / 1290\n \n \u2022 Add a device rule will allow you to configure a new device by following the prompts. You will\n need your device available.\n \u2022 test device allows you to load a device, see its pin names and check its functions with halmeter.\n joystick jogging uses HALUI and hal_input components.\n@@ -7461,15 +7461,15 @@\n PnCconf allows overrides of feed rates and/or spindle speed using a pulse generator (MPG) or\n switches (eg. rotary).\n \n 3.2.5 GUI Configuration\n Here you can set defaults for the display screens, add virtual control panels (VCP), and set some\n LinuxCNC options..\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 106 / 1290\n \n Figure 3.16: GUI Configuration\n \n Front-end GUI Options\n The default options allows general defaults to be chosen for any display screen.\n@@ -7480,15 +7480,15 @@\n Touchy defaults are options specific to Touchy. Most of Touchy\u2019s options can be changed while Touchy\n is running using the preference page. Touchy uses GTK to draw its screen, and GTK supports themes.\n Themes controls the basic look and feel of a program. You can download themes from the net or edit\n them yourself. There are a list of the current themes on the computer that you can pick from. To help\n some of the text to stand out PnCconf allows you to override the Themes\u2019s defaults. The position and\n force max options can be used to move Touchy to a second monitor if the system is capable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 107 / 1290\n \n QtPlasmaC options are specific to QtPlasmac, any common options that are not required will be disabled. If QtPlasmac is selected then the following screen will be a user button setup screen that is\n specific to QtPlasmaC and VCP options will not be available.\n VCP options\n Virtual Control Panels allow one to add custom controls and displays to the screen. AXIS and\n@@ -7528,15 +7528,15 @@\n You can select a GTK theme which sets the basic look and feel of the panel. You Usually want this to\n match the front-end screen. These options will be used if you press the Display sample button. With\n GladeVCP depending on the front-end screen, you can select where the panel will display.\n You can force it to be stand-alone or with AXIS it can be in the center or on the right side, with Touchy\n it can be in the center.\n Defaults and Options\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 108 / 1290\n \n \u2022 Require homing before MDI / Running\n \u2013 If you want to be able to move the machine before homing uncheck this checkbox.\n \u2022 Popup Tool Prompt\n \u2013 Choose between an on screen prompt for tool changes or export standard signal names for\n@@ -7552,15 +7552,15 @@\n custom HAL code to support tool changers.\n \n 3.2.6 Mesa Configuration\n The Mesa configuration pages allow one to utilize different firmwares. On the basic page you selected\n a Mesa card here you pick the available firmware and select what and how many components are\n available.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 109 / 1290\n \n Figure 3.17: Mesa Board Configuration\n Parport address is used only with Mesa parport card, the 7i43. An on board parallel port usually uses\n 0x278 or 0x378 though you should be able to find the address from the BIOS page. The 7i43 requires\n the parallel port to use the EPP mode, again set in the BIOS page. If using a PCI parallel port the\n@@ -7570,15 +7570,15 @@\n \n PDM PWM and 3PWM base frequency sets the balance between ripple and linearity. If using Mesa\n daughter boards the docs for the board should give recommendations.\n \n Important\n It\u2019s important to follow these to avoid damage and get the best performance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 110 / 1290\n \n The 7i33 requires PDM and a PDM base frequency of 6 MHz\n The 7i29 requires PWM and a PWM base frequency of 20 kHz\n The 7i30 requires PWM and a PWM base frequency of 20 kHz\n The 7i40 requires PWM and a PWM base frequency of 50 kHz\n@@ -7604,49 +7604,49 @@\n the I/O setup pages. Only I/O tabs will be shown for available connectors, depending on the Mesa\n board.\n \n 3.2.7 Mesa I/O Setup\n The tabs are used to configure the input and output pins of the Mesa boards. PnCconf allows one to\n create custom signal names for use in custom HAL files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 111 / 1290\n \n Figure 3.18: Mesa I/O C2 Setup\n On this tab with this firmware the components are setup for a 7i33 daughter board, usually used with\n closed loop servos. Note the component numbers of the encoder counters and PWM drivers are not\n in numerical order. This follows the daughter board requirements.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 112 / 1290\n \n Figure 3.19: Mesa I/O C3 Setup\n On this tab all the pins are GPIO. Note the 3 digit numbers - they will match the HAL pin number.\n GPIO pins can be selected as input or output and can be inverted.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 113 / 1290\n \n Figure 3.20: Mesa I/O C4 Setup\n On this tab there are a mix of step generators and GPIO. Step generators output and direction pins\n can be inverted. Note that inverting a Step Gen-A pin (the step output pin) changes the step timing.\n It should match what your controller expects.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3.2.8 Parallel port configuration\n \n The parallel port can be used for simple I/O similar to Mesa\u2019s GPIO pins.\n \n 114 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 115 / 1290\n \n 3.2.9 Axis Configuration\n \n Figure 3.21: Axis Drive Configuration\n This page allows configuring and testing of the motor and/or encoder combination. If using a servo\n@@ -7658,15 +7658,15 @@\n Handbook 1 standards or AXIS graphical display will not make much sense. Hopefully the help\n page and diagrams can help figure this out. Note that axis directions are based on TOOL movement not table movement. There is no acceleration ramping with the open loop test so start with\n lower DAC numbers. By moving the axis a known distance one can confirm the encoder scaling.\n The encoder should count even without the amp enabled depending on how power is supplied to\n the encoder.\n 1 \u201daxis nomenclature\u201d in the chapter \u201dNumerical Control\u201d in the \u201dMachinery\u2019s Handbook\u201d published by Industrial Press.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 116 / 1290\n \n Warning\n If the motor and encoder do not agree on counting direction then the servo will run away when\n using PID control.\n \n@@ -7712,15 +7712,15 @@\n \u2022 Note that we want raw output such that our measured result is identical to the commanded output.\n This means\n \u2013 cmd=a*raw+b\n \u2013 raw=(cmd-b)/a\n \u2022 As a result, the a and b coefficients from the linear fit can be used as the scale and offset for the\n controller directly.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 117 / 1290\n \n MAX OUTPUT\n 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\n scaling to raw output units. The value is applied symmetrically to both the plus and the minus\n side.\n@@ -7737,25 +7737,25 @@\n speed.\n Brushless Motor Control\n These options are used to allow low level control of brushless motors using special firmware and\n daughter boards. It also allows conversion of HALL sensors from one manufacturer to another.\n It is only partially supported and will require one to finish the HAL connections. Contact the\n mail-list or forum for more help.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 118 / 1290\n \n Figure 3.22: Axis Scale Calculation\n The scale settings can be directly entered or one can use the calculate scale button to assist. Use the\n check boxes to select appropriate calculations. Note that pulley teeth requires the number of teeth\n not the gear ratio. Worm turn ratio is just the opposite it requires the gear ratio. If your happy with\n the scale press apply otherwise push cancel and enter the scale directly.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 119 / 1290\n \n Figure 3.23: Axis Configuration\n Also refer to the diagram tab for two examples of home and limit switches. These are two examples\n of many different ways to set homing and limits.\n \n@@ -7766,15 +7766,15 @@\n Remember positive and negative directions refer to the TOOL not the table as per the Machinists\n handbook.\n On a typical knee or bed mill\n \u2022 when the TABLE moves out that is the positive Y direction\n \u2022 when the TABLE moves left that is the positive X direction\n \u2022 when the TABLE moves down that is the positive Z direction\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 120 / 1290\n \n \u2022 when the HEAD moves up that is the positive Z direction\n On a typical lathe\n \u2022 when the TOOL moves right, away from the chuck\n \u2022 that is the positive Z direction\n@@ -7819,15 +7819,15 @@\n will be zero.\n (machine) ORIGIN\n The Origin is the MACHINE zero point. (not the zero point you set your cutter / material at).\n LinuxCNC uses this point to reference everything else from. It should be inside the software\n limits. LinuxCNC uses the home switch location to calculate the origin position (when using\n home switches or must be manually set if not using home switches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 121 / 1290\n \n Travel distance\n This is the maximum distance the axis can travel in each direction. This may or may not be able\n to be measured directly from origin to limit switch. The positive and negative travel distances\n should add up to the total travel distance.\n@@ -7867,29 +7867,29 @@\n Use Compensation File\n Allows specifying a Comp filename and type. Allows sophisticated compensation. See AXIS\n Section of the INI chapter.\n Use Backlash Compensation\n Allows setting of simple backlash compensation. Can not be used with Compensation File. See\n AXIS Section of the INI chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 122 / 1290\n \n Figure 3.24: AXIS Help Diagram\n The diagram should help to demonstrate an example of limit switches and standard axis movement\n directions. In this example the Z axis was two limit switches, the positive switch is shared as a home\n switch. The MACHINE ORIGIN (zero point) is located at the negative limit. The left edge of the carriage is the negative trip pin and the right the positive trip pin. We wish the FINAL HOME POSITION\n to be 4 inches away from the ORIGIN on the positive side. If the carriage was moved to the positive\n limit we would measure 10 inches between the negative limit and the negative trip pin.\n \n 3.2.10 Spindle Configuration\n If you select spindle signals then this page is available to configure spindle control.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 123 / 1290\n \n Tip\n Many of the option on this page will not show unless the proper option was selected on previous\n pages!\n \n@@ -7901,15 +7901,15 @@\n \u2022 If you picked a VCP spindle display option then spindle-at-speed scale and filter settings may be\n shown.\n \u2022 Spindle-at-speed allows LinuxCNC to wait till the spindle is at the requested speed before moving\n the axis. This is particularly handy on lathes with constant surface feed and large speed diameter\n changes. It requires either encoder feedback or a digital spindle-at-speed signal typically connected\n to a VFD drive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 124 / 1290\n \n \u2022 If using encoder feedback, you may select a spindle-at-speed scale setting that specifies how close\n the actual speed must be to the requested speed to be considered at-speed.\n \u2022 If using encoder feedback, the VCP speed display can be erratic - the filter setting can be used to\n smooth out the display. The encoder scale must be set for the encoder count / gearing used.\n@@ -7924,25 +7924,25 @@\n HALUI Chapter for more info on using custom halcmds. There are several ladder program options.\n The Estop program allows an external ESTOP switch or the GUI frontend to throw an Estop. It also\n has a timed lube pump signal. The Z auto touch-off is with a touch-off plate, the GladeVCP touch-off\n button and special HALUI commands to set the current user origin to zero and rapid clear. The serial\n modbus program is basically a blank template program that sets up ClassicLadder for serial modbus.\n See the ClassicLadder Chapter in the manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 125 / 1290\n \n Figure 3.26: PnCconf, advanced options\n \n 3.2.12 HAL Components\n On this page you can add additional HAL components you might need for custom HAL files. In this\n way one should not have to hand edit the main HAL file, while still allowing user needed components.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 126 / 1290\n \n Figure 3.27: HAL Components\n The first selection is components that pncconf uses internally. You may configure pncconf to load\n extra instances of the components for your custom HAL file.\n Select the number of instances your custom file will need, PnCconf will add what it needs after them.\n@@ -7953,15 +7953,15 @@\n heading Thread command. The components will be added to the thread between reading of\n inputs and writing of outputs, in the order you write them in the thread command.\n \n 3.2.13 Advanced Usage Of PnCconf\n PnCconf does its best to allow flexible customization by the user. PnCconf has support for custom\n signal names, custom loading of components, custom HAL files and custom firmware.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 127 / 1290\n \n There are also signal names that PnCconf always provides regardless of options selected, for user\u2019s\n custom HAL files With some thought most customizations should work regardless if you later select\n different options in PnCconf.\n Eventually if the customizations are beyond the scope of PnCconf\u2019s frame work you can use PnCconf\n@@ -7993,15 +7993,15 @@\n Loading Custom Firmware\n PnCconf searches for firmware on the system and then looks for the XML file that it can convert\n to what it understands. These XML files are only supplied for officially released firmware from\n the LinuxCNC team. To utilize custom firmware one must convert it to an array that PnCconf\n understands and add its file path to PnCconf\u2019s preference file. By default this path searches the\n desktop for a folder named custom_firmware and a file named firmware.py.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 128 / 1290\n \n The hidden preference file is in the user\u2019s home file, is named .pncconf-preferences and require one\n to select show hidden files in your file manager to see and edit it or on the command line you use ls\n with the -a option. The contents of this file can be seen when you first load PnCconf - press the help\n button and look at the output page.\n@@ -8012,15 +8012,15 @@\n \u2022 custom.hal is for HAL commands that don\u2019t have to be run after the GUI frontend loads. It is\n run after the configuration-named HAL file.\n \u2022 custom_postgui.hal is for commands that must be run after AXIS loads or a standalone PyVCP\n display loads.\n \u2022 custom_gvcp.hal is for commands that must be run after GladeVCP is loaded.\n \u2022 shutdown.hal is for commands to run when LinuxCNC shuts down in a controlled manner.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 129 / 1290\n \n Chapter 4\n \n Configuration\n 4.1 Integrator Concepts\n@@ -8040,15 +8040,15 @@\n \u2022 /home/fred/linuxcnc/nc_files\n \u2022 /home/fred/linuxcnc/configs/mill\n \u2013 /home/fred/linuxcnc/configs/mill/mill.ini\n \u2013 /home/fred/linuxcnc/configs/mill/mill.hal\n \u2013 /home/fred/linuxcnc/configs/mill/mill.var\n \u2013 /home/fred/linuxcnc/configs/mill/tool.tbl\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 130 / 1290\n \n 4.1.1.2 Command Line\n If you run LinuxCNC from the command line and specify the name and location of the INI file the file\n locations can be in a different place. To view the options for running LinuxCNC from the command\n line run linuxcnc -h.\n@@ -8083,15 +8083,15 @@\n drive requirements affect the shortest period you can use.\n Worst case latencies might only happen a few times a minute, and the odds of bad latency happening\n just as the motor is changing direction are low. So you can get very rare errors that ruin a part every\n once in a while and are impossible to troubleshoot.\n 1 This section refers to using stepgen, LinuxCNC\u2019s built-in step generator. Some hardware devices have their own step\n generator and do not use LinuxCNC\u2019s built-in one. In that case, refer to your hardware manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 131 / 1290\n \n The simplest way to avoid this problem is to choose a BASE_PERIOD that is the sum of the longest timing requirement of your drive, and the worst case latency of your computer. This is not always the best\n choice. For example, if you are running a drive with a 20 \u00b5s direction signal hold time requirement,\n and your latency test said you have a maximum latency of 11 \u00b5s , then if you set the BASE_PERIOD\n to 20+11 = 31 \u00b5s you get a not-so-nice 32,258 steps per second in one mode and 16,129 steps per\n@@ -8122,15 +8122,15 @@\n system might. These differences exist because servos are a closed loop system, unlike stepper motors\n which are generally run open loop. What does closed loop mean? Let\u2019s look at a simplified diagram\n of how a servomotor system is connected.\n 2 steplen refers to a parameter that adjusts the performance of LinuxCNC\u2019s built-in step generator, stepgen, which is a HAL\n component. This parameter adjusts the length of the step pulse itself. Keep reading, all will be explained eventually.\n 3 dirhold refers to a parameter that adjusts the length of the direction hold time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 132 / 1290\n \n Figure 4.1: Servo Loop\n This diagram shows that the input signal (and the feedback signal) drive the summing amplifier, the\n summing amplifier drives the power amplifier, the power amplifier drives the motor, the motor drives\n the load (and the feedback device), and the feedback device (and the input signal) drive the motor.\n@@ -8148,15 +8148,15 @@\n They are three common mathematical techniques that are applied to the task of getting a working\n process to follow a set point. In the case of LinuxCNC the process we want to control is actual axis\n position and the set point is the commanded axis position.\n 4 If it helps, the closest equivalent to this in the digital world are state machines, sequential machines and so forth, where\n what the outputs are doing now depends on what the inputs (and the outputs) were doing before. If it doesn\u2019t help, then\n nevermind.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 133 / 1290\n \n Figure 4.2: PID Loop\n By tuning the three constants in the PID controller algorithm, the controller can provide control action\n designed for specific process requirements. The response of the controller can be described in terms\n of the responsiveness of the controller to an error, the degree to which the controller overshoots the\n@@ -8184,15 +8184,15 @@\n 4.1.4.4 Derivative term\n The rate of change of the process error is calculated by determining the slope of the error over time\n (i.e., its first derivative with respect to time) and multiplying this rate of change by the derivative gain.\n The derivative term slows the rate of change of the controller output and this effect is most noticeable\n close to the controller set point. Hence, derivative control is used to reduce the magnitude of the\n overshoot produced by the integral component and improve the combined controller-process stability.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 134 / 1290\n \n 4.1.4.5 Loop tuning\n If the PID controller parameters (the gains of the proportional, integral and derivative terms) are\n chosen incorrectly, the controlled process input can be unstable, i.e., its output diverges, with or\n without oscillation, and is limited only by saturation or mechanical breakage. Tuning a control loop\n@@ -8229,15 +8229,15 @@\n stepping).\n Latency is far more important than CPU speed. A lowly Pentium II that responds to interrupts within\n 10 microseconds each and every time can give better results than the latest and fastest P4 Hyperthreading beast.\n The CPU isn\u2019t the only factor in determining latency. Motherboards, video cards, USB ports, and a\n number of other things can hurt the latency. The best way to find out what you are dealing with is to\n run the latency test.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 135 / 1290\n \n Generating step pulses in software has one very big advantage - it\u2019s free. Just about every PC has a\n parallel port that is capable of outputting step pulses that are generated by the software. However,\n software step pulses also have some disadvantages:\n \u2022 limited maximum step rate\n@@ -8261,15 +8261,15 @@\n \n This will start the latency test with a base-thread period of 50uS and a servo-thread period of 1mS.\n For available options, on the command line enter:\n latency-test -h\n \n After starting a latency test you should see something like this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 136 / 1290\n \n Figure 4.3: HAL Latency Test\n While the test is running, you should abuse the computer. Move windows around on the screen. Surf\n the web. Copy some large files around on the disk. Play some music. Run an OpenGL program such\n as glxgears. The idea is to put the PC through its paces while the latency test checks to see what the\n@@ -8293,15 +8293,15 @@\n (several milliseconds) when using the onboard video. But a $5 used video card solved the problem.\n LinuxCNC does not require bleeding edge hardware.\n \n For more information on stepper tuning see the Stepper Tuning Chapter.\n Additional command line tools are available for examining latency when LinuxCNC is not\n running.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 137 / 1290\n \n 4.2.2.2 Latency Plot\n latency-plot makes a strip chart recording for a base and a servo thread. It may be useful to see spikes\n in latency when other applications are started or used. Usage:\n latency-plot --help\n@@ -8343,15 +8343,15 @@\n 25000, min: 5000)\n (servo thread interval, default: 1000000, min: 25000)\n (base bin size, default: 100\n (servo bin size, default: 100\n (base bins, default: 200\n (servo bins, default: 200\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n --logscale\n --text\n --show\n --nobase\n --verbose\n --nox\n@@ -8380,15 +8380,15 @@\n and they all may benefit from tuning for optimal latency.\n A primary goal in tuning the system for LinuxCNC is to reserve a CPU for the exclusive use of LinuxCNC\u2019s realtime tasks, so that other tasks (both user programs and kernel threads) do not interfere\n with LinuxCNC\u2019s access to that CPU.\n When specific tuning options are believed to be universally helpful LinuxCNC does this tuning automatically at startup, but many tuning options are machine-specific and cannot be done automatically.\n The person installing LinuxCNC will need to experimentally determine the optimal tuning for their\n system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 139 / 1290\n \n 4.2.3.1 Tuning the BIOS for latency\n PC BIOSes vary wildly in their latency behavior.\n Tuning the BIOS is tedious because you have to reboot the computer, make one small tweak in the\n BIOS, boot Linux, and run the latency test (potentially for a long time) to see what effects your BIOS\n@@ -8424,15 +8424,15 @@\n parallel port that is capable of outputting step pulses that are generated by the software. However,\n software step pulses also have some disadvantages:\n \u2022 limited maximum step rate\n \u2022 jitter in the generated pulses\n \u2022 loads the CPU\n This chapter has some steps that can help you get the best results from software generated steps.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 140 / 1290\n \n 4.3.1.1 Run a Latency Test\n The CPU is not the only factor determining latency. Motherboards, graphics cards, USB ports and\n many other things can degrade it. The best way to know what to expect from a PC is to run the RT\n latency tests.\n@@ -8472,15 +8472,15 @@\n Step Pulse \u201d0\u201d Time: 2.0 \u00b5s min (Step on rising edge)\n Step Pulse \u201d1\u201d Time: 1.0 \u00b5s min\n Direction Setup:\n 200 ns (0.2 \u00b5s) before step pulse rising edge\n 200 ns (0.2 \u00b5s) hold after step pulse rising edge\n From the Xylotex datasheet:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 141 / 1290\n \n Minimum DIR setup time before rising edge of STEP Pulse 200 ns Minimum\n DIR hold time after rising edge of STEP pulse 200 ns\n Minimum STEP pulse high time 2.0 \u00b5s\n Minimum STEP pulse low time 1.0 \u00b5s\n@@ -8525,15 +8525,15 @@\n will lock up. If you are aiming for periods of less than 25 \u00b5s, you should start at 25 \u00b5s or more, run\n LinuxCNC, and see how things respond. If all is well, you can gradually decrease the period. If the\n mouse pointer starts getting sluggish, and everything else on the PC slows down, your period is a\n little too short. Go back to the previous value that let the computer run smoothly.\n In this case, suppose you started at 25 \u00b5s, trying to get to 13 \u00b5s, but you find that around 16 \u00b5s is the\n limit - any less and the computer doesn\u2019t respond very well. So you use 16 \u00b5s. With a 16 \u00b5s period and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 142 / 1290\n \n 11 \u00b5s latency, the shortest output time will be 16-11 = 5 \u00b5s. The drive only needs 2 \u00b5s, so you have\n some margin. Margin is good - you don\u2019t want to lose steps because you cut the timing too close.\n What is the maximum step rate? Remember, two periods to make a step. You settled on 16 \u00b5s for the\n period, so a step takes 32 \u00b5s. That works out to a not bad 31,250 steps per second.\n@@ -8575,15 +8575,15 @@\n step rate that you will be able to generate.\n I\u2019ve added a few things to the spreadsheet to calculate max speed and stepper electrical calculations.\n \n 4.4 INI Configuration\n 4.4.1 The INI File Components\n A typical INI file follows a rather simple layout that includes;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 143 / 1290\n \n \u2022 comments\n \u2022 sections\n \u2022 variables\n Each of these elements is separated on single lines. Each end of line or newline character creates a\n@@ -8622,15 +8622,15 @@\n \u2022 [RS274NGC] settings used by the G-code interpreter\n \u2022 [EMCMOT] settings used by the real time motion controller\n \u2022 [TASK] settings used by the task controller\n \u2022 [HAL] specifies .hal files\n \u2022 [HALUI] MDI commands used by HALUI\n \u2022 [APPLICATIONS] Other applications to be started by LinuxCNC\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 144 / 1290\n \n \u2022 [TRAJ] additional settings used by the real time motion controller\n \u2022 [JOINT_n] individual joint variables\n \u2022 [AXIS_l] individual axis variables\n \u2022 [KINS] kinematics variables\n@@ -8668,15 +8668,15 @@\n TYPE = LINEAR\n ...\n SCALE = 16000\n \n To introduce a custom section with its own variables, add the section and variables to the INI file.\n Custom Section Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 145 / 1290\n \n [PROBE]\n Z_FEEDRATE = 50\n Z_OFFSET = 12\n Z_SAFE_DISTANCE = -10\n@@ -8716,15 +8716,15 @@\n #INCLUDE /home/myusername/myincludes/display.inc\n #INCLUDE ~/linuxcnc/myincludes/rs274ngc.inc\n \n The #INCLUDE directives are supported for one level of expansion only \u2014 an included file may not\n include additional files. The recommended file extension is .inc. Do not use a file extension of .ini for\n included files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 146 / 1290\n \n 4.4.2 INI File Sections\n 4.4.2.1 [EMC] Section\n \u2022 VERSION = 1.1 - The version number for the configuration. Any value other than 1.1 will cause the\n configuration checker to run and try to update the configuration to the new style joint axes type of\n@@ -8757,15 +8757,15 @@\n value.\n \u2022 CONE_BASESIZE = .25 - Override the default cone/tool base size of .5 in the graphics display.\n \u2022 MAX_FEED_OVERRIDE = 1.2 - The maximum feed override the user may select. 1.2 means 120% of\n the programmed feed rate.\n \u2022 MIN_SPINDLE_OVERRIDE = 0.5 - The minimum spindle override the user may select. 0.5 means 50%\n of the programmed spindle speed. (This is used to set the minimum spindle speed.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 147 / 1290\n \n \u2022 MIN_SPINDLE_0_OVERRIDE = 0.5 - The minimum spindle override the user may select. 0.5 means\n 50% of the programmed spindle speed. (This is used to set the minimum spindle speed.) On multi\n spindle machine there will be entries for each spindle number. Only used by the QtVCP based user\n interfaces.\n@@ -8801,15 +8801,15 @@\n powered CPU may see improvement with a longer setting. Usually the default is fine.\n \u2022 PREVIEW_TIMEOUT = 5 - Timeout (in seconds) for loading graphical preview of G-code. Currently\n AXIS only.\n Note\n The following [DISPLAY] items are used by GladeVCP and PyVCP, see the embedding a tab section of\n the GladeVCP Chapter or the PyVCP Chapter for more information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 148 / 1290\n \n \u2022 EMBED_TAB_NAME = GladeVCP demo\n \n \u2022 EMBED_TAB_COMMAND = halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID\\} -u ./glad\n ./gladevcp/manual-example.ui\n@@ -8847,15 +8847,15 @@\n \u2022 LATHE = 1 - Any non-empty value (including \u201d0\u201d) causes axis to use \u201dlathe mode\u201d with a top view\n and with Radius and Diameter on the DRO.\n \u2022 BACK_TOOL_LATHE = 1 - Any non-empty value (including \u201d0\u201d) causes axis to use \u201dback tool lathe\n mode\u201d with inverted X axis.\n \u2022 FOAM = 1 - Any non-empty value (including \u201d0\u201d) causes axis to change the display for foam-cutter\n mode.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 149 / 1290\n \n \u2022 GEOMETRY = XYZABCUVW - Controls the preview and backplot of motion. This item consists of a\n sequence of axis letters and control characters, optionally preceded with a \u201d-\u201d sign:\n 1. The letters X, Y, Z specify translation along the named coordinate.\n 2. The letters A, B, C specify rotation about the corresponding axes X, Y, Z.\n@@ -8897,15 +8897,15 @@\n configurations on one computer.\n \u2022 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\n third, and left and right bracket to the fourth. If unspecified, the default is determined from the\n [TRAJ]COORDINATES, [DISPLAY]LATHE and [DISPLAY]FOAM values.\n \u2022 JOG_INVERT = - For each axis letter, the jog direction is inverted. The default is \u201dX\u201d for lathes and\n blank otherwise.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 150 / 1290\n \n Note\n The settings for JOG_AXES and JOG_INVERT apply to world mode jogging by axis coordinate letter\n and are in effect while in world mode after successful homing. When operating in joint mode prior\n to homing, keyboard jog keys are assigned in a fixed sequence: left/right: joint0, up/down: joint1,\n@@ -8944,15 +8944,15 @@\n The program file associated with an extension must have either the full path to the program or be\n located in a directory that is on the system path.\n \n It is also possible to specify an interpreter:\n PROGRAM_EXTENSION = .py Python Script\n py = python\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 151 / 1290\n \n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle. Many more G-code generators are on the LinuxCNC Wiki site\n https://wiki.linuxcnc.org/.\n@@ -8994,15 +8994,15 @@\n \u2022 PARAMETER_FILE = myfile.var - The file located in the same directory as the INI file which contains\n the parameters used by the interpreter (saved between runs).\n \u2022 ORIENT_OFFSET = 0 - A float value added to the R word parameter of an M19 Orient Spindle operation. Used to define an arbitrary zero position regardless of encoder mount orientation.\n \u2022 RS274NGC_STARTUP_CODE = G17 G20 G40 G49 G64 P0.001 G80 G90 G92.1 G94 G97 G98 - A string\n of NC codes that the interpreter is initialized with. This is not a substitute for specifying modal Gcodes at the top of each NGC file, because the modal codes of machines differ, and may be changed\n by G-code interpreted earlier in the session.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 152 / 1290\n \n \u2022 SUBROUTINE_PATH = ncsubroutines:/tmp/testsubs:lathesubs:millsubs - Specifies a colon (:)\n separated list of up to 10 directories to be searched when single-file subroutines are specified in Gcode. These directories are searched after searching [DISPLAY]PROGRAM_PREFIX (if it is specified)\n and before searching [WIZARD]WIZARD_ROOT (if specified). The paths are searched in the order\n that they are listed. The first matching subroutine file found in the search is used. Directories are\n@@ -9054,15 +9054,15 @@\n \u2022 OWORD_WARNONLY = 0 (Default: 0)\n Warn rather than error in case of errors in O-word subroutines.\n \u2022 DISABLE_G92_PERSISTENCE = 0 (Default: 0) Allow to clear the G92 offset automatically when config\n start-up.\n \u2022 DISABLE_FANUC_STYLE_SUB = 0 (Default: 0) If there is reason to disable Fanuc subroutines set it to\n 1.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 153 / 1290\n \n Note\n The above six options were controlled by the FEATURES bitmask in versions of LinuxCNC prior to 2.8.\n This INI tag will no longer work.\n For reference:\n@@ -9097,15 +9097,15 @@\n (home_parms) may be included if supported by the named module. The setting may be overridden\n from the command line using the -m option ($ linuxcnc -h).\n 4.4.2.6 [TASK] Section\n \u2022 TASK = milltask - Specifies the name of the task executable. The task executable does various\n things, such as\n \u2013 communicate with the UIs over NML,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 154 / 1290\n \n \u2013 communicate with the realtime motion planner over non-HAL shared memory, and\n \u2013 interpret G-code. Currently there is only one task executable that makes sense for 99.9% of users,\n milltask.\n \u2022 CYCLE_TIME = 0.010 - The period, in seconds, at which TASK will run. This parameter affects the\n@@ -9143,15 +9143,15 @@\n HALFILE = LIB:halcheck.tcl [nopopup]\n \n Note\n The LIB:halcheck.tcl line should be the last [HAL]HALFILE. Specify the nopopup option to suppress\n the popup message and allow immediate starting. Connections made using a POSTGUI_HALFILE are\n not checked.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 155 / 1290\n \n \u2022 TWOPASS = ON - Use twopass processing for loading HAL components. With TWOPASS processing,\n lines of files specified in [HAL]HALFILE are processed in two passes. In the first pass (pass0), all\n HALFILES are read and multiple appearances of loadrt and loadusr commands are accumulated.\n These accumulated load commands are executed at the end of pass0. This accumulation allows\n@@ -9190,15 +9190,15 @@\n (first character is / or ~), a relative filename (first characters of filename are ./), or as a file in the\n INI file directory. If no executable file is found using these names, then the user search PATH is\n used to find the application.\n Examples:\n \u2013 Simulate inputs to HAL pins for testing (using sim_pin \u2014 a simple GUI to set inputs to parameters,\n unconnected pins, or signals with no writers):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 156 / 1290\n \n APP = sim_pin motion.probe-input halui.abort motion.analog-in-00\n \n \u2013 Invoke halshow with a previuosly saved watchlist. Since LinuxCNC sets the working directory to\n the directory for the INI file, you can refer to files in that directory (example: my.halshow):\n@@ -9241,15 +9241,15 @@\n 10 / (2.0 * 100 * 0.001) = 50 segments to always reach maximum velocity along the fastest axis.\n In practice, this number isn\u2019t that important to tune, since the look ahead rarely needs the full depth\n unless you have lots of very short segments. If during testing, you notice strange slowdowns and\n can\u2019t figure out where they come from, first try increasing this depth using the formula above.\n If you still see strange slowdowns, it may be because you have short segments in the program. If\n this is the case, try adding a small tolerance for Naive CAM detection. A good rule of thumb is this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 157 / 1290\n \n # min_length ~= v_req * t_c\n # where:\n # v_req = desired velocity in UU / sec\n # t_c = servo period (seconds)\n@@ -9294,15 +9294,15 @@\n Finally, no amount of tweaking will speed up a tool path with lots of small, tight corners, since you\u2019re\n limited by cornering acceleration.\n \u2022 SPINDLES = 3 - The number of spindles to support. It is imperative that this number matches the\n \u201dnum_spindles\u201d parameter passed to the motion module.\n \u2022 COORDINATES = X Y Z - The names of the axes being controlled. Only X, Y, Z, A, B, C, U, V, W are\n valid. Only axes named in COORDINATES are accepted in G-code. It is permitted to write an axis\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 158 / 1290\n \n name more than once (e.g., X Y Y Z for a gantry machine). For the common trivkins kinematics,\n joint numbers are assigned in sequence according to the trivkins parameter coordinates=. So, for\n trivkins coordinates=xz, joint0 corresponds to X and joint1 corresponds to Z. See the kinematics\n man page ($ man kins) for information on trivkins and other kinematics modules.\n@@ -9345,15 +9345,15 @@\n \u2022 TPMOD = alternate_trajectory_planning module [tp_parms=value]\n The TPMOD variable is optional. If specified, use a specified (user-built) module instead of the default\n (tpmod). Module parameters (tp_parms) may be included if supported by the named module. The\n setting may be overridden from the command line using the -t option ($ linuxcnc -h).\n \u2022 NO_PROBE_JOG_ERROR = 0 - Allow to bypass probe tripped check when you jog manually.\n \u2022 NO_PROBE_HOME_ERROR = 0 - Allow to bypass probe tripped check when homing is in progress.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 159 / 1290\n \n 4.4.2.11 [KINS] Section\n \u2022 JOINTS = 3 - Specifies the number of joints (motors) in the system. For example, a trivkins XYZ\n machine with a single motor for each axis has 3 joints. A gantry machine with one motor on each\n of two of the axes, and two motors on the third axis, has 4 joints. (This config variable may be used\n@@ -9391,15 +9391,15 @@\n offsets:\n axis..eoffset-enable\n axis..eoffset-count\n axis..eoffset-scale\n \n See the chapter: External Axis Offsets for usage information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 160 / 1290\n \n 4.4.2.13 [JOINT_] Sections\n The specifies the joint number 0 \u2026 (num_joints-1) The value of num_joints is set by [KINS]JOINTS=.\n The [JOINT_0], [JOINT_1], etc. sections contains general parameters for the individual components\n in the joint control module. The joint section names begin numbering at 0, and run through the number\n@@ -9437,15 +9437,15 @@\n by a space. The first value is the nominal value (the commanded position). The second and third\n values depend on the setting of COMP_FILE_TYPE. Points in between nominal values are interpolated\n between the two nominals. Compensation files must start with the smallest nominal and be in\n ascending order to the largest value of nominals. File names are case sensitive and can contain\n letters and/or numbers. Currently the limit inside LinuxCNC is for 256 triplets per joint.\n If COMP_FILE is specified for a joint, BACKLASH is not used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 161 / 1290\n \n \u2022 COMP_FILE_TYPE = 0 or 1 - Specifies the type of compensation file. The first value is the nominal\n (commanded) position for both types.\n A COMP_FILE_TYPE must be specified for each COMP_FILE.\n \u2013 Type 0: The second value specifies the actual position as the joint is moving in the positive direction (increasing value). The third value specifies the actual position as the joint is moving in the\n@@ -9487,15 +9487,15 @@\n produce a ramp of error trip points. You could think of this as a graph where one dimension is speed\n and the other is permitted following error. As speed increases the amount of following error also\n increases toward the FERROR value.\n \u2022 FERROR = 1.0 - FERROR is the maximum allowable following error, in machine units. If the difference\n 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\n file, velocity-proportional following errors are used. Here, the maximum allowable following error\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 162 / 1290\n \n is proportional to the speed, with FERROR applying to the rapid rate set by [TRAJ]MAX_VELOCITY, and\n proportionally smaller following errors for slower speeds. The maximum allowable following error\n will always be greater than MIN_FERROR. This prevents small following errors for stationary axes\n from inadvertently aborting motion. Small following errors will always be present due to vibration,\n@@ -9535,15 +9535,15 @@\n Additional sequences may be specified with numbers increasing by 1 (in absolute value). Skipping\n of sequence numbers is not allowed. If a HOME_SEQUENCE is omitted, the joint will not be homed\n by the \u201dHome All\u201d function. More than one joint can be homed at the same time by specifying the\n same sequence number for more than one joint. A negative sequence number is used to defer the\n final move for all joints having that (negative or positive) sequence number. For additional info, see:\n HOME SEQUENCE.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 163 / 1290\n \n \u2022 VOLATILE_HOME = 0 - When enabled (set to 1) this joint will be unhomed if the Machine Power is\n off or if E-Stop is on. This is useful if your machine has home switches and does not have position\n feedback such as a step and direction driven machine.\n These parameters are relevant to joints controlled by servos.\n@@ -9577,15 +9577,15 @@\n for the motor amplifier. The units on the I gain are volts per machine unit second, e.g.,\n \u2022 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.\n The units on the D gain are volts per machine unit per second, e.g.,\n \u2022 FF0 = 0 - The 0th order feed forward gain. This number is multiplied by the commanded position,\n resulting in a contribution to the computed voltage for the motor amplifier. The units on the FF0\n gain are volts per machine unit, e.g.,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 164 / 1290\n \n \u2022 FF1 = 0 - The 1st order feed forward gain. This number is multiplied by the change in commanded\n position per second, resulting in a contribution to the computed voltage for the motor amplifier. The\n units on the FF1 gain are volts per machine unit per second, e.g.,\n \u2022 FF2 = 0 - The 2nd order feed forward gain. This number is multiplied by the change in commanded\n@@ -9625,15 +9625,15 @@\n -10\n -9\n \n Measured\n -9.93\n -8.83\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 165 / 1290\n \n Table 4.1: (continued)\n Raw\n 0\n 1\n@@ -9672,15 +9672,15 @@\n section. For stepper systems, this is the number of step pulses issued per machine unit. For a linear\n joint one machine unit will be equal to the setting of LINEAR_UNITS. For an angular joint one unit is\n equal to the setting in ANGULAR_UNITS. For servo systems, this is the number of feedback pulses per\n machine unit. A second number, if specified, is ignored.\n For example, on a 1.8 degree stepper motor with half-stepping, and 10 revs/inch gearing, and desired\n machine units of inch, we have:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 166 / 1290\n \n Note\n Old INI and HAL files used INPUT_SCALE for this value.\n \n \u2022 ENCODER_SCALE = 20000 (Optionally used in PnCconf built configs) - Specifies the number of pulses\n@@ -9717,15 +9717,15 @@\n must not be run in reverse. In this context \u201dmax\u201d refers to the absolute magnitude of the spindle\n speed.\n \u2022 MIN_REVERSE_VELOCITY = 3000 \u0300This setting is equivalent to MIN_FORWARD_VELOCITY but for reverse spindle rotation. It will default to the MIN_FORWARD_VELOCITY if omitted.\n \u2022 INCREMENT = 200 Sets the step size for spindle speed increment / decrement commands. This can\n have a different value for each spindle. This setting is effective with AXIS and Touchy but note that\n some control screens may handle things differently.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 167 / 1290\n \n \u2022 HOME_SEARCH_VELOCITY = 100 - FIXME: Spindle homing not yet working. Sets the homing speed\n (rpm) for the spindle. The spindle will rotate at this velocity during the homing sequence until the\n spindle index is located, at which point the spindle position will be set to zero. Note that it makes\n no sense for the spindle home position to be any value other than zero, and so there is no provision\n@@ -9763,15 +9763,15 @@\n absolute encoders. Homing seems simple enough - just move each joint to a known location, and set\n LinuxCNC\u2019s internal variables accordingly. However, different machines have different requirements,\n and homing is actually quite complicated.\n Note\n While it is possible to use LinuxCNC without homing switches/home procedures or limit switches, It\n defeats the extra security of the soft limits.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 168 / 1290\n \n 4.5.2 Prerequisite\n Homing relies on some fundamental machine assumptions.\n \u2022 The negative and positive directions are based on Tool Movement which can be different from the\n actual machine movement. I.e., on a mill typically the table moves rather then the tool.\n@@ -9798,15 +9798,15 @@\n While it is possible to use LinuxCNC with the G53 machine origin outside the soft machine limits, if\n you use G28 or G30 without setting the parameters it goes to the origin by default. This would trip\n the limit switches before getting to position.\n \n 4.5.3 Separate Home Switch Example Layout\n This example shows minimum and maximum limit switches with a separate home switch.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 169 / 1290\n \n Figure 4.6: Demonstrative Separate Switch Layout\n \u2022 A is the negative soft limit\n \u2022 B is the G53 machine coordinate Origin\n \u2022 C is the home switch trip point\n@@ -9825,15 +9825,15 @@\n Homing sets the G53 coordinate system, while the machine origin (zero point) can be anywhere,\n setting the zero point at the negative soft limit makes all G53 coordinates positive, which is probably\n easiest to remember. Do this by setting MIN_LIMIT = 0 and make sure MAX_LIMIT is positive.\n \n 4.5.4 Shared Limit/Home Switch Example Layout\n This example shows a maximum limit switch and a combined minimum limit/home switch.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 170 / 1290\n \n Figure 4.7: Demonstrative Shared Switch Layout\n \u2022 A is the negative soft limit.\n \u2022 B is the G53 machine coordinate Origin.\n \u2022 C is the home switch trip point shared with (-L) minimum limit trip.\n@@ -9852,21 +9852,21 @@\n 4.5.5 Homing Sequence\n \n There are four possible homing sequences defined by the sign of HOME_SEARCH_VEL and HOME_LATCH_V\n along with the associated configuration parameters as shown in the following table. Two basic conditions exist, HOME_SEARCH_VEL and HOME_LATCH_VEL are the same sign or they are opposite\n signs. For a more detailed description of what each configuration parameter does, see the following\n section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 171 / 1290\n \n Figure 4.8: Homing Sequences\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 172 / 1290\n \n 4.5.6 Configuration\n The following determines exactly how the home sequence behaves. They are defined in an [JOINT_n]\n section of the INI file.\n Homing Type\n@@ -9920,15 +9920,15 @@\n value is zero.\n 4.5.6.3 HOME_FINAL_VEL\n This variable has units of machine-units per second.\n It specifies the speed that LinuxCNC uses when it makes its move from HOME_OFFSET to the HOME\n position. If the HOME_FINAL_VEL is missing from the INI file, then the maximum joint speed is used\n to make this move. The value must be a positive number.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 173 / 1290\n \n 4.5.6.4 HOME_IGNORE_LIMITS\n Can hold the values YES / NO. The default value for this parameter is NO. This flag determines whether\n LinuxCNC will ignore the limit switch input for this joint while homing. This setting will not ignore\n limit inputs for other joints. If you do not have a separate home switch set this to YES and connect the\n@@ -9963,15 +9963,15 @@\n of that point to HOME_OFFSET, LinuxCNC makes a move to HOME as the final step of the homing\n process. The default value is zero. Note that even if this parameter is the same as HOME_OFFSET,\n the joint will slightly overshoot the latched position as it stops. Therefore there will always be a\n small move at this time (unless HOME_SEARCH_VEL is zero, and the entire search/latch stage was\n skipped). This final move will be made at the joint\u2019s maximum velocity unless HOME_FINAL_VEL has\n been set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 174 / 1290\n \n Note\n The distinction between HOME_OFFSET and HOME is that HOME_OFFSET first establishes the origin\n location and scale on the machine by applying the HOME_OFFSET value to the location where home\n was found, and then HOME says where the joint should move to on that scale.\n@@ -10007,15 +10007,15 @@\n The initial HOME_SEQUENCE number may be 0, 1 (or -1). The absolute value of sequence numbers must increment by one \u2014 skipping sequence numbers is not supported. If a sequence number is\n omitted, HOME ALL homing will stop upon completion of the last valid sequence number.\n Negative HOME_SEQUENCE values indicate that joints in the sequence should synchronize the\n final move to [JOINT_n]HOME by waiting until all joints in the sequence are ready. If any joint has a\n negative HOME_SEQUENCE value, then all joints with the same absolute value (positive or negative)\n of the HOME_SEQUENCE item value will synchronize the final move.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 175 / 1290\n \n A negative HOME_SEQUENCE also applies to commands to home a single joint. If the HOME_SEQUENCE\n value is negative, all joints having the same absolute value of that HOME_SEQUENCE will be homed\n together with a synchronized final move. If the HOME_SEQUENCE value is zero or positive, a\n command to home the joint will home only the specified joint.\n@@ -10059,15 +10059,15 @@\n 4.5.6.13 LOCKING_INDEXER\n If this joint is a locking rotary indexer, it will unlock before homing, and lock afterward.\n 4.5.6.14 Immediate Homing\n If a joint does not have home switches or does not have a logical home position like a rotary joint and\n you want that joint to home at the current position when the \u201dHome All\u201d button is pressed in the AXIS\n GUI, then the following INI entries for that joint are needed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 176 / 1290\n \n HOME_SEARCH_VEL = 0\n HOME_LATCH_VEL = 0\n HOME_USE_INDEX = NO\n HOME_OFFSET = 0 (Or the home position offset (HOME))\n@@ -10113,15 +10113,15 @@\n net hsequence_select => motion.homing-inhibit\n \n Note\n INI HAL pins (like ini.N.home_sequence) are not available until milltask starts so execution of the\n above HAL commands should be deferred using a postgui HAL file or a delayed [APPLICATION]APP=\n script.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 177 / 1290\n \n Note\n Realtime synchronization of joint jogging for multiple joints requires additional HAL connections for the Manual-Pulse-Generator (MPG) type jog pins (joint.N.enable, joint.N.scale,\n joint.N.counts).\n \n@@ -10154,15 +10154,15 @@\n \n 4.6.2 Usage\n INI file options:\n [EMCIO] section\n PROTOCOL_VERSION = 2\n Defaults to 2. Setting to 1 will emulate old iocontrol behaviour.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 178 / 1290\n \n EMCIO = iov2 -support-start-change\n You need to explicitly enable the start-change protocol by adding the -support-start-change option; otherwise the start-change pin remains low and start-change-ack is ignored. The reason for\n this is better backwards compatibility.\n [TASK] section\n@@ -10195,15 +10195,15 @@\n \u2022 iocontrol.0.user-request-enable (bit, out) TRUE when the user has requested that E-stop be cleared\n Additional pins added by I/O Control V2\n \u2022 emc-abort: (bit, out) signals emc-originated abort to toolchanger.\n \u2022 emc-abort-ack: (bit, in) Acknowledge line from toolchanger for previous signal, or jumpered to\n abort-tool-change if not used in toolchanger. NB: after signaling an emc-abort, iov2 will block until\n emc-abort-ack is raised.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 179 / 1290\n \n \u2022 emc-reason: (S32, out) convey cause for EMC-originated abort to toolchanger. Usage: UI informational. Valid during emc-abort TRUE.\n \u2022 start-change: (bit, out) asserted at the very beginning of an M6 operation, before any spindle-off,\n quill-up, or move-to-toolchange-position operations are executed.\n \u2022 start-change-ack: (bit, in) acknowledgment line for start-change.\n@@ -10239,15 +10239,15 @@\n \u2022 EMC_ABORT_AUX_ESTOP = 2,\n \u2022 EMC_ABORT_MOTION_OR_IO_RCS_ERROR = 3,\n \u2022 EMC_ABORT_TASK_STATE_OFF = 4,\n \u2022 EMC_ABORT_TASK_STATE_ESTOP_RESET = 5,\n \u2022 EMC_ABORT_TASK_STATE_ESTOP = 6,\n \u2022 EMC_ABORT_TASK_STATE_NOT_ON = 7,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 180 / 1290\n \n \u2022 EMC_ABORT_TASK_ABORT = 8,\n \u2022 EMC_ABORT_USER = 100\n iov2 adds one more code, namely EMC_ABORT_BY_TOOLCHANGER_FAULT = 101 which is signaled\n when an M6 aborts due to the toolchanger-faulted pin being TRUE.\n@@ -10284,15 +10284,15 @@\n [DISPLAY]\n DISPLAY = axis\n LATHE = 1\n ...\n [KINS]\n KINEMATICS = trivkins\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 181 / 1290\n \n JOINTS = 3\n [TRAJ]\n COORDINATES = X Z\n ...\n@@ -10335,15 +10335,15 @@\n hardware can interrupt the processing which could cause missed steps when running a CNC machine.\n This is the first thing you need to do. Follow the instructions here to run the latency test.\n \n 4.8.2 Sherline\n If you have a Sherline several predefined configurations are provided. This is on the main menu\n CNC/EMC then pick the Sherline configuration that matches yours and save a copy.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 182 / 1290\n \n 4.8.3 Xylotex\n If you have a Xylotex you can skip the following sections and go straight to the Stepper Config Wizard.\n LinuxCNC has provided quick setup for the Xylotex machines.\n \n@@ -10442,15 +10442,15 @@\n \n Leadscrew\n Teeth\n \n Leadscrew\n Pitch\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Axis\n \n Steps/Rev.\n \n 183 / 1290\n \n@@ -10500,15 +10500,15 @@\n Leadscrew Pitch =\n 5.00 mm per turn\n From the above information: - The leadscrew moves 5.00 mm per turn. - The motor turns 3.000 times\n per 1 leadscrew turn. - The drive takes 8 microstep inputs to make the stepper step once. - The drive\n needs 1600 steps to turn the stepper one revolution.\n So the scale needed is:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 184 / 1290\n \n 4.9 Stepper Configuration\n 4.9.1 Introduction\n The preferred way to set up a standard stepper machine is with the Step Configuration Wizard. See\n the Stepper Configuration Wizard Chapter.\n@@ -10546,15 +10546,15 @@\n The ones relevant for our pinout are:\n signals: Xstep, Xdir & Xen\n pins: parport.0.pin-XX-out & parport.0.pin-XX-in\n \n Depending on what you have chosen in your INI file you are using either standard_pinout.hal or xylotex_pinout.hal. These are two files that instruct the HAL how to link the various signals & pins.\n Further on we\u2019ll investigate the standard_pinout.hal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 4.9.3.1 Standard Pinout HAL\n This file contains several HAL commands, and usually looks like this:\n # standard pinout config file for 3-axis steppers\n # using a parport for I/O\n #\n # first load the parport driver\n@@ -10600,15 +10600,15 @@\n ### that\u2019s ok, hook the same signal to all the axes, but be sure to\n ### set HOME_IS_SHARED and HOME_SEQUENCE in the INI file.\n ###\n # net homeswitches <= parport.0.pin-10-in\n \n 185 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 186 / 1290\n \n # net homeswitches => joint.0.home-sw-in\n # net homeswitches => joint.1.home-sw-in\n # net homeswitches => joint.2.home-sw-in\n ###\n@@ -10644,15 +10644,15 @@\n net Xstep parport.0.pin-02-out\n net Xdir parport.0.pin-03-out\n \n or basically any other out pin you like.\n Hint: make sure you don\u2019t have more than one signal connected to the same pin.\n 5 The fastest thread in the LinuxCNC setup, usually the code gets executed every few tens of microseconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 187 / 1290\n \n 4.9.3.4 Changing polarity of a signal\n If external hardware expects an \u201dactive low\u201d signal, set the corresponding -invert parameter. For\n instance, to invert the spindle control signal:\n setp parport.0.pin-09-invert TRUE\n@@ -10686,15 +10686,15 @@\n 4.10 Stepper Diagnostics\n If what you get is not what you expect many times you just got some experience. Learning from the\n experience increases your understanding of the whole. Diagnosing problems is best done by divide\n and conquer. By this I mean if you can remove 1/2 of the variables from the equation each time you\n will find the problem the fastest. In the real world this is not always the case, but it\u2019s usually a good\n place to start.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 188 / 1290\n \n 4.10.1 Common Problems\n 4.10.1.1 Stepper Moves One Step\n The most common reason in a new installation for a stepper motor not to move is that the step and\n direction signals are exchanged. If you press the jog forward and jog backward keys, alternately , and\n@@ -10724,15 +10724,15 @@\n If you added backlash you need to increase the STEPGEN_MAXACCEL up to double the MAX_ACCELERATIO\n in the AXIS section of the INI file for each axis you added backlash to. LinuxCNC uses \u201dextra acceleration\u201d at a reversal to take up the backlash. Without backlash correction, step generator acceleration\n can be just a few percent above the motion planner acceleration.\n 4.10.2.2 RTAPI Error\n When you get this error:\n RTAPI: ERROR: Unexpected realtime delay on task n\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 189 / 1290\n \n This error is generated by rtapi based on an indication from RTAI that a deadline was missed. It is\n usually an indication that the BASE_PERIOD in the [EMCMOT] section of the ini file is set too low. You\n should run the Latency Test for an extended period of time to see if you have any delays that would\n cause this problem. If you used the Stepconf Wizard, run it again, and test the Base Period Jitter\n@@ -10778,15 +10778,15 @@\n G0 Z1.000\n G0 Z0.500\n #1000 = [#1000 - 1]\n o101 endwhile\n ( msg, Done...Z should be exactly .5\u201d above table )\n M2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 190 / 1290\n \n 4.11 Filter Programs\n 4.11.1 Introduction\n Most of LinuxCNC\u2019s screens have the ability to send loaded files through a filter program or use the\n filter program to make G-code. Such a filter can do any desired task: Something as simple as making\n@@ -10808,15 +10808,15 @@\n PROGRAM_EXTENSION = .py Python Script\n py = python\n \n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 191 / 1290\n \n Figure 4.9: Circular Holes\n If the filter program sends lines to stderr of the form:\n FILTER_PROGRESS=10\n \n@@ -10836,15 +10836,15 @@\n time.sleep(.1)\n # output a line of G-code\n print(\u2019G0 X1\u2019, file=sys.stdout)\n # update progress\n print(\u2019FILTER_PROGRESS={}\u2019.format(i), file=sys.stderr)\n except:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 192 / 1290\n \n # This causes an error message\n print(\u2019Error; But this was only a test\u2019, file=sys.stderr)\n raise SystemExit(1)\n \n@@ -10887,15 +10887,15 @@\n raise SystemExit(1)\n def process(self):\n try:\n # get next line of code\n codeLine = self.temp[self.line]\n # process the line somehow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 193 / 1290\n \n # push out processed code\n print(codeLine, file=sys.stdout)\n self.line +=1\n # update progress\n@@ -10917,15 +10917,15 @@\n else:\n path = None\n app = QApplication(sys.argv)\n w = CustomDialog(path=path)\n w.show()\n sys.exit( app.exec_() )\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 194 / 1290\n \n Chapter 5\n \n HAL (Hardware Abstraction Layer)\n 5.1 HAL Introduction\n@@ -10949,15 +10949,15 @@\n reminiscent of what CNC machines need to do, or space craft.\n Any machine controller needs to know:\n \u2022 about its internal state and how this maps to the environment (machine coordinates, state of switches/regulators),\n \u2022 how actuators are expected to change that state,\n \u2022 how allow for updates of the internal state by sensors (encoders, probes).\n The HAL layer consists of parts (referred to as \u201dcomponents\u201d) that\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 195 / 1290\n \n \u2022 are connected with each other, e.g., to update position data or have the planning algorithm tell the\n motors about the next step.\n \u2022 may know how to communicate with hardware,\n \u2022 may simply process incoming data and provide data outputs to other components,\n@@ -10991,15 +10991,15 @@\n but none of these interfaces are HAL itself.\n HAL itself is not a program, it consists of one or more lists of loaded programs (the components) that\n are periodically executed (in strict sequence), and an area of shared-memory that these components\n use to interchange data. The main HAL script runs only once at machine startup, setting up the\n realtime threads and the shared-memory locations, loading the components and setting up the data\n links between them (the \u201dsignals\u201d and \u201dpins\u201d).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 196 / 1290\n \n In principle multiple machines could share a common HAL to allow them to inter-operate, however\n the current implementation of LinuxCNC is limited to a single interpreter and a single Task module.\n Currently this is almost always a G-code interpreter and \u201dmilltask\u201d (which was found to also work well\n for lathes and adequately for robots) but these modules are selectable at load-time. With an increasing\n@@ -11040,15 +11040,15 @@\n number of components that know a lot about CNC and present that information via pins. There are\n pins representing\n \u2022 static information about the machine\n \u2022 the current state of the machine\n \u2013 end switches\n \u2013 positions counted by steppers or as measured by encoders\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 197 / 1290\n \n \u2022 recipients for instructions\n \u2013 manual control of machine position (\u201djogging\u201d)\n \u2013 positions that stepper motors should take next\n In a analogy to electronic cables, pins can be wired, so the value changing in one pin serves as input\n@@ -11088,15 +11088,15 @@\n \u2013 developing over time.\n \n 5.1.3 HAL System Design\n HAL is based on traditional system design techniques. HAL is based on the same principles that\n are used to design hardware circuits and systems, so it is useful to examine those principles first. Any\n system, including a CNC machine, consists of interconnected components. For the CNC machine,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 198 / 1290\n \n those components might be the main controller, servo amps or stepper drives, motors, encoders, limit\n switches, pushbutton pendants, perhaps a VFD for the spindle drive, a PLC to run a toolchanger, etc.\n The machine builder must aselect, mount and wire these pieces together to make a complete system.\n \n@@ -11118,15 +11118,15 @@\n black boxes. During the design stage, he decides which parts he is going to use - steppers or servos,\n which brand of servo amp, what kind of limit switches and how many, etc. The integrator\u2019s decisions\n about which specific components to use is based on what that component does and the specifications\n supplied by the manufacturer of the device. The size of a motor and the load it must drive will affect\n the choice of amplifier needed to run it. The choice of amplifier may affect the kinds of feedback\n needed by the amp and the velocity or position signals that must be sent to the amp from a control.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 199 / 1290\n \n In the HAL world, the integrator must decide what HAL components are needed. Usually every interface card will require a driver. Additional components may be needed for software generation of step\n pulses, PLC functionality, and a wide variety of other tasks.\n 5.1.3.2 Interconnection Design\n The designer of a hardware system not only selects the parts, he also decides how those parts will be\n@@ -11152,15 +11152,15 @@\n HAL provides the software equivalents of a voltmeter, oscilloscope, signal generator, and other tools\n needed for testing and tuning a system. The same commands used to build the system can be used to\n make changes as needed.\n 5.1.3.5 Summary\n This document is aimed at people who already know how to do this kind of hardware system integration, but who do not know how to connect the hardware to LinuxCNC. See the Remote Start Example\n section in the HAL UI Examples documentation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 200 / 1290\n \n Figure 5.2: Remote Start Example (Schema)\n The traditional hardware design as described above ends at the edge of the main control. Outside the\n control are a bunch of relatively simple boxes, connected together to do whatever is needed. Inside,\n the control is a big mystery \u2014 one huge black box that we hope works.\n@@ -11185,15 +11185,15 @@\n because these terms are not arranged in alphabetical order. They are arranged by their relationship\n or flow in the HAL way of things.\n Component\n When we talked about hardware design, we referred to the individual pieces as parts, building\n blocks, black boxes, etc. The HAL equivalent is a component or HAL component. This document\n uses HAL component when there is likely to be confusion with other kinds of components, but\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 201 / 1290\n \n normally just uses component. A HAL component is a piece of software with well-defined inputs,\n outputs, and behavior, that can be installed and interconnected as needed.\n Many HAL Components model the behaviour of a tangible part of a machine, and a pin may\n indeed be meant to be connected to a physical pin on the device to communicate with it, hence\n@@ -11235,15 +11235,15 @@\n Currently there are 4 types, as follows:\n \u2022 bit - a single TRUE/FALSE or ON/OFF value\n \u2022 float - a 64 bit floating point value, with approximately 53 bits of resolution and over 1000 bits\n of dynamic range.\n \u2022 u32 - a 32 bit unsigned integer, legal values are 0 to 4,294,967,295\n \u2022 s32 - a 32 bit signed integer, legal values are -2,147,483,647 to +2,147,483,647\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 202 / 1290\n \n Function\n Real hardware components tend to act immediately on their inputs. For example, if the input\n voltage to a servo amp changes, the output also changes automatically. However software components cannot act automatically. Each component has specific code that must be executed to\n do whatever that component is supposed to do. In some cases, that code simply runs as part\n@@ -11287,15 +11287,15 @@\n de-energizes the coil. So the relay still switches rapidly between on and off, but at a rate determined\n by how often the PLC evaluates the rung.\n In HAL, the function is the code that evaluates the rung(s). In fact, the HAL-aware realtime version\n of ClassicLadder exports a function to do exactly that. Meanwhile, a thread is the thing that runs the\n function at specific time intervals. Just like you can choose to have a PLC evaluate all its rungs every\n 10 ms, or every second, you can define HAL threads with different periods.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 203 / 1290\n \n What distinguishes one thread from another is not what the thread does - that is determined by which\n functions are connected to it. The real distinction is simply how often a thread runs.\n In LinuxCNC you might have a 50 \u00b5s thread and a 1 ms thread. These would be created based on\n BASE_PERIOD and SERVO_PERIOD, the actual times depend on the values in your INI file.\n@@ -11310,15 +11310,15 @@\n 5.2.1 HAL Commands\n More detailed information can be found in the man page for halcmd: run man halcmd in a terminal\n window.\n To see the HAL configuration and check the status of pins and parameters use the HAL Configuration\n window on the Machine menu in AXIS. To watch a pin status open the Watch tab and click on each\n pin you wish to watch and it will be added to the watch window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 204 / 1290\n \n Figure 5.3: HAL Configuration Window\n \n 5.2.1.1 loadrt\n The command loadrt loads a real time HAL component. Real time component functions need to be\n@@ -11332,15 +11332,15 @@\n The addf command adds a function to a real-time thread. If the StepConf wizard was used to create\n the configuration, two threads have been created ( \u0300 \u0300base-thread \u0300 \u0300 and \u0300 \u0300servo-thread \u0300 \u0300).\n addf adds function functname to thread threadname. Default is to add the function in the order they\n are in the file. If position is specified, adds the function to that spot in the thread. A negative position\n indicates the position with respect to the end of the thread. For example 1 is start of thread, -1 is the\n end of the thread, -3 is third from the end.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 205 / 1290\n \n For some functions it is important to load them in a certain order, like the parport read and write\n functions. The function name is usually the component name plus a number. In the following example\n the component or2 is loaded and show function shows the name of the or2 function.\n $ halrun\n@@ -11405,15 +11405,15 @@\n the same name as the first argument of the command.\n \n -Wn \n \n to wait for the component, which will have the given . This only\n applies if the component has a name option.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n -w\n \n to wait for the program to exit\n \n -i\n \n@@ -11448,15 +11448,15 @@\n A pin can be connected to a signal if it obeys the following rules:\n \u2022 An IN pin can always be connected to a signal.\n \u2022 An IO pin can be connected unless there\u2019s an OUT pin on the signal.\n \u2022 An OUT pin can be connected only if there are no other OUT or IO pins on the signal.\n The same signal-name can be used in multiple net commands to connect additional pins, as long as\n the rules above are obeyed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 207 / 1290\n \n Figure 5.4: Signal Direction\n This example shows the signal xStep with the source being stepgen.0.out and with two readers,\n parport.0.pin-02-out and parport.0.pin-08-out. Basically the value of stepgen.0.out is sent to\n the signal xStep and that value is then sent to parport.0.pin-02-out and parport.0.pin-08-out.\n@@ -11479,15 +11479,15 @@\n 5.2.1.5 setp\n The command setp sets the value of a pin or parameter. The valid values will depend on the type of\n the pin or parameter. It is an error if the data types do not match.\n Some components have parameters that need to be set before use. Parameters can be set before use\n or while running as needed. You cannot use setp on a pin that is connected to a signal.\n Syntax and Examples of setp\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 208 / 1290\n \n setp \n setp parport.0.pin-08-out TRUE\n \n 5.2.1.6 sets\n@@ -11524,15 +11524,15 @@\n linkps parport.0.pin-02-out X-Step\n \n The linkps command has been superseded by the net command.\n the command newsig creates a new HAL signal by the name and the data type of .\n Type must be bit, s32, u32 or float. Error if already exists.\n Syntax and Examples of newsig\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 209 / 1290\n \n newsig \n newsig Xstep bit\n \n More information can be found in the HAL manual or the man pages for halrun.\n@@ -11561,15 +11561,15 @@\n you used the Stepper Config Wizard.\n \u2022 custom.hal This file is loaded next and before the GUI loads. This is where you put your custom\n HAL commands that you want loaded before the GUI is loaded.\n \u2022 custom_postgui.hal This file is loaded after the GUI loads. This is where you put your custom HAL\n commands that you want loaded after the GUI is loaded. Any HAL commands that use PyVCP\n widgets need to be placed here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 210 / 1290\n \n 5.2.4 HAL Parameter\n Two parameters are automatically added to each HAL component when it is created. These parameters allow you to scope the execution time of a component.\n .time\n \n@@ -11616,15 +11616,15 @@\n \n out\n False\n False\n False\n True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 211 / 1290\n \n 5.2.5.2 not\n The not component is a bit inverter.\n Syntax\n not [count=n] | [names=name1[,name2...]]\n@@ -11674,15 +11674,15 @@\n \n out\n True\n True\n True\n False\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 212 / 1290\n \n 5.2.5.4 xor2\n The xor2 component is a two input xor (exclusive or)-gate.\n Syntax\n xor2[count=n] | [names=name1[,name2...]]\n@@ -11731,15 +11731,15 @@\n 5.2.7.1 weighted_sum\n The weighted sum converts a group of bits into an integer. The conversion is the sum of the weights\n of the bits present plus any offset. It\u2019s similar to binary coded decimal but with more options. The\n hold bit interrupts the input processing, so that the sum value no longer changes.\n Syntax for loading component weighted_sum\n loadrt weighted_sum wsum_sizes=size[,size,...]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 213 / 1290\n \n Creates groups of \u0300 \u0300weighted_sum \u0300 \u0300s, each with the given number of input bits (size).\n To update the weighted_sum, the process_wsums must be attached to a thread.\n Add process_wsums to servo thread\n addf process_wsums servo-thread\n@@ -11828,15 +11828,15 @@\n loadrt and2 count=3\n \n Configurations are more readable if you specify with the names= option for components where it is\n supported, e.g.:\n Example load command resulting in explicitly named components aa, ab, ac.\n loadrt and2 names=aa,ab,ac\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 214 / 1290\n \n It can be a maintenance problem to keep track of the components and their names, since when you\n add (or remove) a component, you must find and update the single loadrt directive applicable to the\n component.\n TWOPASS processing is enabled by including an INI file parameter in the [HAL] section,\n@@ -11878,15 +11878,15 @@\n you use a derivative component to estimate the velocities and accelerations on each (x,y,z) coordinate,\n using the count= method will give arcane component names like ddt.0, ddt.1, ddt.2, etc.\n Alternatively, using the names= option like:\n loadrt ddt names=xvel,yvel,zvel\n ...\n loadrt ddt names=xaccel,yaccel,zaccel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 215 / 1290\n \n results in components sensibly named xvel, yvel, zvel, xaccel, yaccel, zaccel.\n Many comps supplied with the distribution are created with the halcompile utility and support the\n names= option. These include the common logic components that are the glue of many LinuxCNC\n configurations.\n@@ -11929,15 +11929,15 @@\n are expected. More complex parameter items included in specialized LinuxCNC components may not\n be handled properly.\n A .hal file may be excluded from TWOPASS processing by including a magic comment line anywhere in\n the .hal file. The magic comment line must begin with the string: #NOTWOPASS. Files specified with this\n magic comment are sourced by halcmd using the -k (keep going if failure) and -v (verbose) options.\n This exclusion provision can be used to isolate problems or for loading any special LinuxCNC component that does not require or benefit from TWOPASS processing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 216 / 1290\n \n Ordinarily, the loadrt ordering of realtime components is not critical, but loadrt ordering for special\n components can be enforced by placing the such loadrt directives in an excluded file.\n Note\n While the order of loadrt directives is not usually critical, ordering of addf directives is often very\n@@ -11975,15 +11975,15 @@\n \n 5.4.2 Halcmd\n halcmd is a command line tool for manipulating HAL. A more complete man page exists for halcmd and\n installed together with LinuxCNC, from source or from a package. If LinuxCNC has been compiled as\n run-in-place, the man page is not installed but is accessible in the LinuxCNC main directory with the\n following command:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 217 / 1290\n \n $ man -M docs/man halcmd\n \n 5.4.2.1 Notation\n For this tutorial, commands for the operating system are typically shown without the prompt provided\n@@ -12024,15 +12024,15 @@\n 5.4.3 A Simple Example\n 5.4.3.1 Loading a component\n For this tutorial, we are going to assume that you have successfully installed the Live CD and, if using\n a RIP 1 , invoke the rip-environment script to prepare your shell. In that case, all you need to do is load\n 1 Run In Place, when the source files have been downloaded to a user directory and are compiled and executed directly from\n there.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 218 / 1290\n \n the required RTOS and RTAPI modules into memory. Just run the following command from a terminal\n window:\n Loading HAL\n cd linuxcnc\n@@ -12113,15 +12113,15 @@\n siggen.0.frequency\n siggen.0.offset\n siggen.0.sawtooth\n siggen.0.sine\n siggen.0.square\n siggen.0.triangle\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 219 / 1290\n \n This command displays all of the pins in the current HAL. A complex system could have dozens or\n hundreds of pins. But right now there are only nine pins. Of these pins eight are floating point and\n one is bit (boolean). Six carry data out of the siggen component and three are used to transfer settings\n into the component. Since we have not yet executed the code contained within the component, some\n@@ -12197,15 +12197,15 @@\n \n Time, Max-Time )\n 0,\n 0 )\n \n 2 CodeAddr and Arg fields were used during development and should probably disappear.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 220 / 1290\n \n It did. The period is not exactly 1,000,000 ns because of hardware limitations, but we have a thread\n that runs at approximately the correct rate, and which can handle floating point functions. The next\n step is to connect the function to the thread:\n Add Function\n@@ -12313,15 +12313,15 @@\n 3 float OUT\n 3 float OUT\n \n We did two show pin commands in quick succession, and you can see that the outputs are no longer\n zero. The sine, cosine, sawtooth, and triangle outputs are changing constantly. The square output is\n also working, however it simply switches from +1.0 to -1.0 every cycle.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 221 / 1290\n \n 5.4.3.4 Changing Parameters\n The real power of HAL is that you can change things. For example, we can use the setp command to\n set the value of a parameter. Let\u2019s change the amplitude of the signal generator from 1.0 to 5.0:\n Set Pin\n@@ -12405,15 +12405,15 @@\n # realtime thread/function links\n addf siggen.0.update test-thread\n \n The output of the save command is a sequence of HAL commands. If you start with an empty HAL\n and run all these commands, you will get the configuration that existed when the save command was\n issued. To save these commands for later use, we simply redirect the output to a file:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 222 / 1290\n \n Save configuration to a file with halcmd\n halcmd: save all saved.hal\n \n 5.4.3.6 Exiting halrun\n@@ -12448,15 +12448,15 @@\n halmeter\n \n Two windows will appear. The selection window is the largest and includes three tabs:\n \u2022 One lists all the pins currently defined in HAL,\n \u2022 one lists all the signals,\n \u2022 one lists all the parameters.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 223 / 1290\n \n Click on a tab, then click on one of the items to select it. The small window will show the name and\n value of the selected item. The display is updated approximately 10 times per second. To free screen\n space, the selection window can be closed with the Close button. On the little window, hidden under\n the selection window at program launch, the Select button, re-opens the selection window and the\n@@ -12483,27 +12483,27 @@\n \n At this point we have the siggen component loaded and running. It\u2019s time to start halmeter.\n Starting Halmeter\n halcmd: loadusr halmeter\n \n The first window you will see is the \u201dSelect Item to Probe\u201d window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 224 / 1290\n \n Figure 5.5: Halmeter Select Window\n This dialog has three tabs. The first tab displays all of the HAL pins in the system. The second one\n displays all the signals, and the third displays all the parameters. We would like to look at the pin\n siggen.0.cosine first, so click on it then click the \u201dClose\u201d button. The probe selection dialog will\n close, and the meter looks something like the following figure.\n \n Figure 5.6: Halmeter Window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 225 / 1290\n \n To change what the meter displays press the \u201dSelect\u201d button which brings back the \u201dSelect Item to\n Probe\u201d window.\n You should see the value changing as siggen generates its cosine wave. Halmeter refreshes its display\n about 5 times per second.\n@@ -12577,15 +12577,15 @@\n siggen.0.sawtooth\n siggen.0.sine\n siggen.0.square\n siggen.0.triangle\n stepgen.0.counts\n stepgen.0.dir\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3\n 3\n 3\n 3\n 3\n 3\n@@ -12751,15 +12751,15 @@\n the velocity input of the first step pulse generator. The first step is to connect the signal to the signal\n generator output. To connect a signal to a pin we use the net command.\n net command\n halcmd: net X-vel <= siggen.0.cosine\n \n To see the effect of the net command, we show the signals again.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 227 / 1290\n \n halcmd: show sig\n Signals:\n Type\n float\n@@ -12838,15 +12838,15 @@\n Every time it is executed, it calculates the values of the sine, cosine, triangle, and square outputs. To\n make smooth signals, it needs to run at specific intervals.\n The other three functions are related to the step pulse generators.\n The first one, stepgen.capture_position, is used for position feedback. It captures the value of an\n internal counter that counts the step pulses as they are generated. Assuming no missed steps, this\n counter indicates the position of the motor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 228 / 1290\n \n The main function for the step pulse generator is stepgen.make_pulses. Every time make_pulses\n runs it decides if it is time to take a step, and if so sets the outputs accordingly. For smooth step\n pulses, it should run as frequently as possible. Because it needs to run so fast, make_pulses is highly\n optimized and performs only a few calculations. Unlike the others, it does not need floating point\n@@ -12921,15 +12921,15 @@\n fine, we want the table speed to vary from +1 to -1 inches per second. However the scaling of the step\n pulse generator isn\u2019t quite right. By default, it generates an output frequency of 1 step per second\n with an input of 1.0. It is unlikely that one step per second will give us one inch per second of table\n movement. Let\u2019s assume instead that we have a 5 turn per inch leadscrew, connected to a 200 step\n per rev stepper with 10x microstepping. So it takes 2000 steps for one revolution of the screw, and\n 5 revolutions to travel one inch. That means the overall scaling is 10000 steps per inch. We need\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 229 / 1290\n \n to multiply the velocity input to the step pulse generator by 10000 to get the proper output. That\n is exactly what the parameter stepgen.n.velocity-scale is for. In this case, both the X and Y axis\n have the same scaling, so we set the scaling parameters for both to 10000.\n halcmd: setp stepgen.0.position-scale 10000\n@@ -12966,24 +12966,24 @@\n halcmd loadusr halscope\n \n If LinuxCNC is not running or the autosave.halscope file does not match the pins available in the\n current running LinuxCNC the scope GUI window will open, immediately followed by a Realtime\n function not linked dialog that looks like the following figure. To change the sample rate left click on\n the samples box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 230 / 1290\n \n Figure 5.7: Realtime function not linked dialog\n This dialog is where you set the sampling rate for the oscilloscope. For now we want to sample once\n per millisecond, so click on the 989 \u00b5s thread slow and leave the multiplier at 1. We will also leave\n the record length at 4000 samples, so that we can use up to four channels at one time. When you\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 231 / 1290\n \n select a thread and then click OK, the dialog disappears, and the scope window looks something like\n the following figure.\n \n Figure 5.8: Initial scope window\n@@ -12995,33 +12995,33 @@\n length - more channels means shorter records, since the memory available for the record is fixed at\n approximately 16,000 samples.\n The channel buttons run across the bottom of the halscope screen. Click button 1, and you will see the\n Select Channel Source dialog as shown in the following figure. This dialog is very similar to the one\n used by Halmeter. We would like to look at the signals we defined earlier, so we click on the Signals\n tab, and the dialog displays all of the signals in the HAL (only two for this example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 232 / 1290\n \n Figure 5.9: Select Channel Source\n To choose a signal, just click on it. In this case, we want channel 1 to display the signal X-vel. Click\n on the Signals tab then click on X-vel and the dialog closes and the channel is now selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 233 / 1290\n \n Figure 5.10: Select Signal\n The channel 1 button is pressed in, and channel number 1 and the name X-vel appear below the row\n of buttons. That display always indicates the selected channel - you can have many channels on the\n screen, but the selected one is highlighted, and the various controls like vertical position and scale\n always work on the selected one.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 234 / 1290\n \n Figure 5.11: Halscope\n To add a signal to channel 2, click the 2 button. When the dialog pops up, click the Signals tab, then\n click on Y-vel. We also want to look at the square and triangle wave outputs. There are no signals\n connected to those pins, so we use the Pins tab instead. For channel 3, select siggen.0.triangle\n@@ -13032,15 +13032,15 @@\n have a 4000 sample record length, and are acquiring 1000 samples per second, it will take halscope\n about 2 seconds to fill half of its buffer. During that time a progress bar just above the main screen\n will show the buffer filling. Once the buffer is half full, the scope waits for a trigger. Since we haven\u2019t\n configured one yet, it will wait forever. To manually trigger it, click the Force button in the Trigger\n section at the top right. You should see the remainder of the buffer fill, then the screen will display\n the captured waveforms. The result will look something like the following figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 235 / 1290\n \n Figure 5.12: Captured Waveforms\n The Selected Channel box at the bottom tells you that the purple trace is the currently selected one,\n channel 4, which is displaying the value of the pin siggen.0.square. Try clicking channel buttons 1\n through 3 to highlight the other three traces.\n@@ -13048,30 +13048,30 @@\n The traces are rather hard to distinguish since all four are on top of each other. To fix this, we use\n the Vertical controls in the box to the right of the screen. These controls act on the currently selected\n channel. When adjusting the gain, notice that it covers a huge range - unlike a real scope, this one\n can display signals ranging from very tiny (pico-units) to very large (Tera-units). The position control\n moves the displayed trace up and down over the height of the screen only. For larger adjustments the\n offset button should be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 236 / 1290\n \n Figure 5.13: Vertical Adjustment\n The large Selected Channel button at the bottom indicates that channel 1 is currently selected channel\n and that it matches the X-vel signal. Try clicking on the other channels to put their traces in evidence\n and to be able to move them with the Pos cursor.\n 5.4.6.4 Triggering\n Using the Force button is a rather unsatisfying way to trigger the scope. To set up real triggering,\n click on the Source button at the bottom right. It will pop up the Trigger Source dialog, which is\n simply a list of all the probes that are currently connected. Select a probe to use for triggering by\n clicking on it. For this example we will use channel 3, the triangle wave as shown in the following\n figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 237 / 1290\n \n Figure 5.14: Trigger Source Dialog\n After setting the trigger source, you can adjust the trigger level and trigger position using the sliders\n in the Trigger box along the right edge. The level can be adjusted from the top to the bottom of the\n screen, and is displayed below the sliders. The position is the location of the trigger point within\n@@ -13081,15 +13081,15 @@\n point is visible as a vertical line in the progress box above the screen. The trigger polarity can be\n changed by clicking the button just below the trigger level display. It will then become descendant.\n Note that changing the trigger position stops the scope once the position has been adjusted, you\n relaunch the scope by clicking on the Normal button of Run mode the group.\n Now that we have adjusted the vertical controls and triggering, the scope display looks something\n like the following figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 238 / 1290\n \n Figure 5.15: Waveforms with Triggering\n \n 5.4.6.5 Horizontal Adjustments\n To look closely at part of a waveform, you can use the zoom slider at the top of the screen to expand the\n@@ -13097,15 +13097,15 @@\n visible. However, sometimes simply expanding the waveforms isn\u2019t enough and you need to increase\n the sampling rate. For example, we would like to look at the actual step pulses that are being generated in our example. Since the step pulses may be only 50 \u00b5s long, sampling at 1 kHz isn\u2019t fast enough.\n To change the sample rate, click on the button that displays the number of samples and sample rate\n to bring up the Select Sample Rate dialog figure. For this example, we will click on the 50 \u00b5s thread,\n fast, which gives us a sample rate of about 20 kHz. Now instead of displaying about 4 seconds worth\n of data, one record is 4000 samples at 20 kHz, or about 0.20 seconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 239 / 1290\n \n Figure 5.16: Sample Rate Dialog\n \n 5.4.6.6 More Channels\n Now let\u2019s look at the step pulses. Halscope has 16 channels, but for this example we are using only 4\n@@ -13114,15 +13114,15 @@\n if off, and do the same for channel 4. Even though the channels are turned off, they still remember\n what they are connected to, and in fact we will continue to use channel 3 as the trigger source.\n To add new channels, select channel 5, and choose pin stepgen.0.dir, then channel 6, and select\n stepgen.0.step. Then click run mode Normal to start the scope, and adjust the horizontal zoom to\n 5 ms per division. You should see the step pulses slow down as the velocity command (channel 1)\n approaches zero, then the direction pin changes state and the step pulses speed up again. You might\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 240 / 1290\n \n want toincrease the gain on channel 1 to about 20 milli per division to better see the change in the\n velocity command. The result should look like the following figure.\n \n Figure 5.17: Step Pulses\n@@ -13134,15 +13134,15 @@\n If the scope_rt component was not already loaded, halscope will load it and request 80000 total samples, so that when sampling 4 channels at a time there will be 20000 samples per channel. (If scope_rt\n was already loaded, the numeric argument to halscope will have no effect).\n \n 5.5 HAL Examples\n All of these examples assume you are starting with a StepConf-based configuration and have two\n threads base-thread and servo-thread. The StepConf wizard will create an empty custom.hal and a\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 241 / 1290\n \n custom_postgui.hal file. The custom.hal file will be loaded after the configuration HAL file and the\n custom_postgui.hal file is loaded after the GUI has been loaded.\n \n 5.5.1 Connecting Two Outputs\n@@ -13204,15 +13204,15 @@\n pin. From the direction arrow you can see that the button is and output and the or2.0.in0 is an input.\n The output from or2 goes to the input of the LED.\n \n 5.5.2 Manual Toolchange\n In this example it is assumed that you\u2019re rolling your own configuration and wish to add the HAL\n Manual Toolchange window. The HAL Manual Toolchange is primarily useful if you have presettable\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 242 / 1290\n \n tools and you store the offsets in the tool table. If you need to touch off for each tool change then it is\n best just to split up your G-code. To use the HAL Manual Toolchange window you basically have to\n 1. load the hal_manualtoolchange component,\n 2. then send the iocontrol tool change to the hal_manualtoolchange change and\n@@ -13252,15 +13252,15 @@\n Make the connections.\n setp mult2.in1 60\n net xpos-cmd ddt.0.in\n net X-IPS mult2.0.in0 <= ddt.0.out\n net X-ABS abs.0.in <= mult2.0.out\n net X-IPM abs.0.out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 243 / 1290\n \n In this last section we are setting the mult2.0.in1 to 60 to convert the inch per second to inch per\n minute (IPM) that we get from the ddt.0.out.\n The xpos-cmd sends the commanded position to the ddt.0.in. The ddt computes the derivative of the\n change of the input.\n@@ -13274,15 +13274,15 @@\n 5.5.4 Soft Start Details\n This example shows how the HAL components lowpass, limit2 or limit3 can be used to limit how fast\n a signal changes.\n In this example we have a servo motor driving a lathe spindle. If we just used the commanded\n spindle speeds on the servo it will try to go from present speed to commanded speed as fast as it\n can. This could cause a problem or damage the drive. To slow the rate of change we can send the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 244 / 1290\n \n spindle.N.speed-out through a limiter before the PID, so that the PID command value changes to\n new settings more slowly.\n Three built-in components that limit a signal are:\n \u2022 limit2 limits the range and first derivative of a signal.\n@@ -13321,15 +13321,15 @@\n Next to set up a trigger signal click on the Source None button and select square. The button will\n change to Source Chan 1.\n Next click on Single in the Run Mode radio buttons box. This will start a run and when it finishes you\n will see your traces.\n To separate the signals so you can see them better click on a channel then use the Pos slider in the\n Vertical box to set the positions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 245 / 1290\n \n To see the effect of changing the set point values of any of the components you can change them in\n the terminal window. To see what different gain settings do for lowpass just type the following in the\n terminal window and try different settings.\n setp lowpass.0.gain *.01\n@@ -13343,15 +13343,15 @@\n 5.5.5 Stand Alone HAL\n In some cases you might want to run a GladeVCP screen with just HAL. For example say you had a\n stepper driven device that all you need is to run a stepper motor. A simple Start/Stop interface is all\n you need for your application so no need to load up and configure a full blown CNC application.\n In the following example we have created a simple GladeVCP panel with one stepper.\n Basic Syntax\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 246 / 1290\n \n # load the winder.glade GUI and name it winder\n loadusr -Wn winder gladevcp -c winder -u handler.py winder.glade\n # load realtime components\n loadrt threads name1=fast period1=50000 fp1=0 name2=slow period2=1000000\n@@ -13390,15 +13390,15 @@\n default is 4 each. The number of Spindles is set with num_spindles, default is 1.\n Pin and parameter names starting with axis.L and joint.N are read and updated by the motion-controller\n function.\n Motion is loaded with the motmod command. A kins should be loaded before motion.\n loadrt motmod base_period_nsec=[\u2019period\u2019] servo_period_nsec=[\u2019period\u2019]\n traj_period_nsec=[\u2019period\u2019] num_joints=[\u20190-9\u2019]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 247 / 1290\n \n num_dio=[\u20191-64\u2019] num_aio=[\u20191-16\u2019] unlock_joints_mask=[\u20190xNN\u2019]\n num_spindles=[\u20191-8\u2019]\n \n \u2022 base_period_nsec = 50000 - the Base task period in nanoseconds. This is the fastest thread in the\n@@ -13436,15 +13436,15 @@\n \u2022 motion.adaptive-feed - (float, in) When adaptive feed is enabled with M52 P1 , the commanded\n velocity is multiplied by this value. This effect is multiplicative with the NML-level feed override\n value and motion.feed-hold. As of version 2.9 of LinuxCNC it is possible to use a negative adaptive\n feed value to run the G-code path in reverse.\n \u2022 motion.analog-in-00 - (float, in) These pins (00, 01, 02, 03 or more if configured) are controlled by\n M66.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 248 / 1290\n \n \u2022 motion.analog-out-00 - (float, out) These pins (00, 01, 02, 03 or more if configured) are controlled\n by M67 or M68.\n \u2022 motion.coord-error - (bit, out) TRUE when motion has encountered an error, such as exceeding a\n soft limit\n@@ -13482,15 +13482,15 @@\n 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\n adjustments.\n \u2022 motion.teleop-mode - (bit, out) TRUE when motion is in teleop mode, as opposed to coordinated\n mode\n \u2022 motion.tooloffset.x \u2026 motion.tooloffset.w - (float, out, one per axis) shows the tool offset in effect;\n it could come from the tool table (G43 active), or it could come from the G-code (G43.1 active)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 249 / 1290\n \n \u2022 motion.on-soft-limit - (bit, out) TRUE when the machine is on a soft limit.\n \u2022 motion.probe-input - (bit, in) G38.n uses the value on this pin to determine when the probe has made\n contact. TRUE for probe contact closed (touching), FALSE for probe contact open.\n \u2022 motion.program-line - (s32, out) The current program line while executing. Zero if not running or\n@@ -13521,15 +13521,15 @@\n to determine whether the realtime motion controller is meeting its timing constraints\n \u2022 motion.servo.last-period-ns - (float, RO)\n 5.6.1.4 Functions\n Generally, these functions are both added to the servo-thread in the order shown.\n \u2022 motion-command-handler - Receives and processes motion commands\n \u2022 motion-controller - Runs the LinuxCNC motion controller\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 250 / 1290\n \n 5.6.2 Spindle\n LinuxCNC can control upto eight spindles. Motion will produce the following pins: The N (integer\n between 0 and 7) substitutes the spindle number.\n 5.6.2.1 Pins\n@@ -13566,15 +13566,15 @@\n \u2022 spindle.N.orient-angle - (float,out) Desired spindle orientation for M19. Value of the M19 R word\n parameter plus the value of the [RS274NGC]ORIENT_OFFSET INI parameter.\n \u2022 spindle.N.orient-mode - (s32,out) Desired spindle rotation mode M19. Default 0.\n \u2022 spindle.N.orient - (out,bit) Indicates start of spindle orient cycle. Set by M19. Cleared by any of\n M3, M4, or M5. If spindle-orient-fault is not zero during spindle-orient true, the M19 command fails\n with an error message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 251 / 1290\n \n \u2022 spindle.N.is-oriented - (in, bit) Acknowledge pin for spindle-orient. Completes orient cycle. If\n spindle-orient was true when spindle-is-oriented was asserted, the spindle-orient pin is cleared and\n the spindle-locked pin is asserted. Also, the spindle-brake pin is asserted.\n \u2022 spindle.N.orient-fault - (s32, in) Fault code input for orient cycle. Any value other than zero will\n@@ -13613,15 +13613,15 @@\n See the motion man page motion(9) for details on the pins and parameters.\n \n 5.6.4 iocontrol\n iocontrol - accepts non-realtime I/O commands via NML, interacts with HAL .\n iocontrol\u2019s HAL pins are turned on and off in non-realtime context. If you have strict timing requirements or simply need more I/O, consider using the realtime synchronized I/O provided by motion\n instead.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 252 / 1290\n \n 5.6.4.1 Pins\n \u2022 iocontrol.0.coolant-flood (bit, out) TRUE when flood coolant is requested.\n \u2022 iocontrol.0.coolant-mist (bit, out) TRUE when mist coolant is requested.\n \u2022 iocontrol.0.emc-enable-in (bit, in) Should be driven FALSE when an external E-Stop condition exists.\n@@ -13651,15 +13651,15 @@\n \u2022 ini.N.home_offset - (float, in) [JOINT_N]HOME_OFFSET\n \u2022 ini.N.home_offset - (s32, in) [JOINT_N]HOME_SEQUENCE\n \u2022 ini.L.min_limit - (float, in) [AXIS_L]MIN_LIMIT\n \u2022 ini.L.max_limit - (float, in) [AXIS_L]MAX_LIMIT\n \u2022 ini.L.max_velocity - (float, in) [AXIS_L]MAX_VELOCITY\n \u2022 ini.L.max_acceleration - (float, in) [AXIS_L]MAX_ACCELERATION\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 253 / 1290\n \n Note\n The per-axis min_limit and max_limit pins are honored continuously after homing. The per-axis\n ferror and min_ferror pins are honored when the machine is on and not in position. The per-axis\n max_velocity and max_acceleration pins are sampled when the machine is on and the motion_state\n@@ -13692,15 +13692,15 @@\n If you do not find the man page or the name of the man page is already taken by another UNIX tool\n with the LinuxCNC man page residing in another section, then try to explicitly specify the section, as\n in man _sectionno_ axis, with sectionno = 1 for non-realtime and 9 for realtime components.\n Note\n See also the Man Pages section of the docs main page or the directory listing. To search in the man\n pages, use the UNIX tool apropos.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 254 / 1290\n \n 5.7.1.1 User Interfaces (non-realtime)\n axis\n axis-remote\n gmoccapy\n@@ -13781,15 +13781,15 @@\n gs2_vfd\n hy_gt_vfd\n \n Communicate with Mesa ethernet cards\n HAL non-realtime component for Automation Direct GS2 VFDs\n HAL non-realtime component for Huanyang GT-series VFDs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n hy_vfd\n mb2hal\n mitsub_vfd\n monitorxhc-hb04\n pi500_vfd\n pmx485\n@@ -13872,15 +13872,15 @@\n Pluto-P driver for the parallel port FPGA, for steppers\n serport\n Hardware driver for the digital I/O bits of the 8250 and 16550 serial port\n sserial\n hostmot2 - Smart Serial LinuxCNC HAL driver for the Mesa Electronics\n HostMot2 Smart-Serial remote cards\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n thc\n \n 256 / 1290\n \n Torch Height Control using a Mesa THC card or any analog to velocity input\n \n@@ -13963,15 +13963,15 @@\n Toggles between a specified number of output bits\n Inverter\n One-shot pulse generator\n Two-input OR gate\n 8-bit binary match detector.\n IEC TOF timer - delay falling edge on a signal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 257 / 1290\n \n toggle\n toggle2nist\n ton\n timedelay\n@@ -14062,15 +14062,15 @@\n updown\n Counts up or down, with optional limits and wraparound behavior.\n wcomp\n Window comparator.\n weighted_sumConvert a group of bits to an integer.\n xhc_hb04_util xhc-hb04 convenience utility\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 258 / 1290\n \n bin2gray\n Converts a number to the gray-code representation\n bitslice\n Converts an unsigned-32 input into individual bits\n@@ -14138,15 +14138,15 @@\n \n Accepts NML motion commands, interacts with HAL in realtime\n \n 3 When the input is a position, this means that the position is limited.\n 4 When the input is a position, this means that position and velocity are limited.\n 5 When the input is a position, this means that the position, velocity, and acceleration are limited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 259 / 1290\n \n 5.7.1.9 Motor control (Realtime)\n at_pid\n bldc\n clarke2\n@@ -14217,15 +14217,15 @@\n hal_exit.3hal\n hal_export_funct.3hal\n hal_float_t.3hal\n hal_get_lock.3hal\n hal_init.3hal\n hal_link.3hal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n hal_malloc.3hal\n hal_param_bit_new.3hal\n hal_param_bit_newf.3hal\n hal_param_float_new.3hal\n hal_param_float_newf.3hal\n hal_param_new.3hal\n@@ -14276,15 +14276,15 @@\n rtapi_exit.3rtapi\n rtapi_get_clocks.3rtapi\n rtapi_get_msg_level.3rtapi\n rtapi_get_time.3rtapi\n \n 260 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 261 / 1290\n \n rtapi_inb.3rtapi\n rtapi_init.3rtapi\n rtapi_module_param.3rtapi\n RTAPI_MP_ARRAY_INT.3rtapi\n@@ -14329,21 +14329,21 @@\n limits. It is a realtime component only, and depending on CPU speed, etc., is capable of maximum step\n rates of 10 kHz to perhaps 50 kHz. The step pulse generator block diagram shows three block diagrams, each is a single step pulse generator. The first diagram is for step type 0, (step and direction).\n The second is for step type 1 (up/down, or pseudo-PWM), and the third is for step types 2 through\n 14 (various stepping patterns). The first two diagrams show position mode control, and the third one\n shows velocity mode. Control mode and step type are set independently, and any combination can be\n selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 5.19: Step Pulse Generator Block Diagram position mode\n \n 262 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 263 / 1290\n \n Loading stepgen component\n halcmd: loadrt stepgen step_type= [ctrl_type=]\n \n \n@@ -14393,15 +14393,15 @@\n \u2022 (bit) stepgen. \u0300\n ____.phase-C \u0300 - Phase C output (step types 3-14 only).\n \u2022 (bit) stepgen. \u0300\n ____.phase-D \u0300 - Phase D output (step types 5-14 only).\n \u2022 (bit) stepgen. \u0300\n ____.phase-E \u0300 - Phase E output (step types 11-14 only).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 264 / 1290\n \n 5.8.1.2 Parameters\n \u2022 (float) stepgen. \u0300\n ____.position-scale \u0300 - Steps per position unit. This parameter is used for\n both output and feedback.\n@@ -14450,15 +14450,15 @@\n takes effect the first time the code runs. Since one step requires steplen ns high and stepspace ns low,\n the maximum frequency is 1,000,000,000 divided by (steplen + stepspace)\u2019. If maxfreq is set higher\n than that limit, it will be lowered automatically. If maxfreq is zero, it will remain zero, but the output\n frequency will still be limited.\n When using the parallel port driver the step frequency can be doubled using the parport reset function\n together with StepGen\u2019s doublefreq setting.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 265 / 1290\n \n Figure 5.20: Step and Direction Timing\n Step Type 1 Step type 1 has two outputs, up and down. Pulses appear on one or the other, depending\n on the direction of travel. Each pulse is steplen ns long, and the pulses are separated by at least\n stepspace ns. The maximum frequency is the same as for step type 0. If maxfreq is set higher than\n@@ -14470,33 +14470,33 @@\n \n Step Type 2 - 14 Step types 2 through 14 are state based, and have from two to five outputs. On\n each step, a state counter is incremented or decremented. The Two-and-Three-Phase, Four-Phase,\n and Five-Phase show the output patterns as a function of the state counter. The maximum frequency\n is 1,000,000,000 divided by steplen, and as in the other modes, maxfreq will be lowered if it is above\n the limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 5.21: Two-and-Three-Phase Step Types\n \n 266 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 267 / 1290\n \n Figure 5.22: Four-Phase Step Types\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 268 / 1290\n \n Figure 5.23: Five-Phase Step Types\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 269 / 1290\n \n 5.8.1.4 Functions\n The component exports three functions. Each function acts on all of the step pulse generators running different generators in different threads is not supported.\n \u2022 (funct) stepgen.make-pulses - High speed function to generate and count pulses (no floating point).\n \u2022 (funct) stepgen.update-freq - Low speed function does position to velocity conversion, scaling and\n@@ -14530,15 +14530,15 @@\n is no default value, if is not not specified, no PWM generator will be installed. The\n maximum number of frequency generators is 8 (as defined by MAX_CHAN in pwmgen.c). Each generator is independent, but all are updated by the same function(s), at the same time. In the descriptions\n that follow, is the number of specific generators. The numbering of PWM generators starts\n at 0.\n Unloading PWMgen\n unloadrt pwmgen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 270 / 1290\n \n 5.8.2.1 Output Types\n The PWM generator supports three different output types.\n \u2022 Output type 0 - PWM output pin only. Only positive commands are accepted, negative values are\n treated as zero (and will be affected by the parameter min-dc if it is non-zero).\n@@ -14583,15 +14583,15 @@\n to zero when disabled, regardless of this setting).\n \u2022 (float) pwmgen. \u0300\n ____.max-dc \u0300 - Maximum duty cycle, between 0.0 and 1.0.\n \u2022 (float) pwmgen. \u0300\n ____.curr-dc \u0300 - Current duty cycle - after all limiting and rounding (read\n only).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 271 / 1290\n \n 5.8.2.4 Functions\n The component exports two functions. Each function acts on all of the PWM generators - running\n different generators in different threads is not supported.\n \u2022 (funct) pwmgen.make-pulses - High speed function to generate PWM waveforms (no floating point).\n@@ -14612,15 +14612,15 @@\n The base thread should be 1/2 count speed to allow for noise and timing variation. For example if you\n have a 100 pulse per revolution encoder on the spindle and your maximum RPM is 3000 the maximum\n base thread should be 25 \u00b5s. A 100 pulse per revolution encoder will have 400 counts. The spindle\n speed of 3000 RPM = 50 RPS (revolutions per second). 400 * 50 = 20,000 counts per second or 50 \u00b5s\n between counts.\n The Encoder Counter Block Diagram is a block diagram of one channel of an encoder counter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 272 / 1290\n \n Figure 5.24: Encoder Counter Block Diagram\n Loading Encoder\n halcmd: loadrt encoder [num_chan=]\n \n@@ -14634,15 +14634,15 @@\n \n 5.8.3.1 Pins\n \u2022 encoder.__.counter-mode (bit, I/O) (default: FALSE) - Enables counter mode. When true,\n the counter counts each rising edge of the phase-A input, ignoring the value on phase-B. This is\n useful for counting the output of a single channel (non-quadrature) sensor. When false, it counts in\n quadrature mode.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 273 / 1290\n \n \u2022 encoder.__.missing-teeth (s32, In) (default: 0) - Enables the use of missing-tooth index.\n This allows a single IO pin to provide both position and index information. If the encoder wheel has\n 58 teeth with two missing, spaced as if there were 60(common for automotive crank sensors) then\n the position-scale should be set to 60 and missing-teeth to 2. To use this mode counter-mode should\n@@ -14681,15 +14681,15 @@\n pulse.\n \u2022 encoder.__.reset (bit, In) - When True, force counts and position to zero immediately.\n \u2022 encoder.__.velocity (float, Out) - Velocity in scaled units per second. encoder uses an\n algorithm that greatly reduces quantization noise as compared to simply differentiating the position\n output. When the magnitude of the true velocity is below min-speed-estimate, the velocity output\n is 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 274 / 1290\n \n \u2022 encoder.__.x4-mode (bit, I/O) (default: TRUE) - Enables times-4 mode. When true, the\n counter counts each edge of the quadrature waveform (four counts per full cycle). When false, it\n only counts once per full cycle. In counter-mode, this parameter is ignored. The 1x mode is useful\n for some jogwheels.\n@@ -14706,15 +14706,15 @@\n \n 5.8.4 PID\n This component provides Proportional/Integral/Derivative control loops. It is a realtime component\n only. For simplicity, this discussion assumes that we are talking about position loops, however this\n component can be used to implement other feedback loops such as speed, torch height, temperature,\n etc. The PID Loop Block Diagram is a block diagram of a single PID loop.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 275 / 1290\n \n Figure 5.25: PID Loop Block Diagram\n Loading PID\n halcmd: loadrt pid [num_chan=] [debug=1]\n \n@@ -14727,15 +14727,15 @@\n cluttering the pin list.\n Unloading PID\n halcmd: unloadrt pid\n \n 5.8.4.1 Pins\n The three most important pins are\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 276 / 1290\n \n \u2022 (float) pid. \u0300\n ____.command \u0300 - The desired position, as commanded by another system\n component.\n \u2022 (float) pid. \u0300\n@@ -14773,15 +14773,15 @@\n \u2022 (float) pid..deadband - Amount of error that will be ignored\n \u2022 (float) pid..maxerror - Limit on error\n \u2022 (float) pid..maxerrorI - Limit on error integrator\n \u2022 (float) pid..maxerrorD - Limit on error derivative\n \u2022 (float) pid..maxcmdD - Limit on command derivative\n \u2022 (float) pid..maxcmdDD - Limit on command 2nd derivative\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 277 / 1290\n \n \u2022 (float) pid..maxoutput - Limit on output value\n All max* limits are implemented so that if the value of this parameter is zero, there is no limit.\n If debug=1 was specified when the component was installed, four additional pins will be exported:\n \u2022 (float) pid..errorI - Integral of error.\n@@ -14814,15 +14814,15 @@\n ____.phase-A \u0300 - Quadrature output.\n \u2022 (bit) sim-encoder. \u0300\n ____.phase-B \u0300 - Quadrature output.\n \u2022 (bit) sim-encoder. \u0300\n ____.phase-Z \u0300 - Index pulse output.\n When .speed is positive, .phase-A leads .phase-B.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 278 / 1290\n \n 5.8.5.2 Parameters\n \u2022 (u32) sim-encoder. \u0300\n ____.ppr \u0300 - Pulses Per Revolution.\n \u2022 (float) sim-encoder. \u0300\n@@ -14860,15 +14860,15 @@\n 5.8.6.1 Pins\n Each individual filter has two pins.\n \u2022 (bit) debounce. \u0300\n ____.____.in \u0300 - Input of filter in group .\n \u2022 (bit) debounce. \u0300\n ____.____.out \u0300 - Output of filter in group .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 279 / 1290\n \n 5.8.6.2 Parameters\n Each group of filters has one parameter6 .\n \u2022 (s32) debounce. \u0300\n ____.delay \u0300 - Filter delay for all filters in group .\n@@ -14907,15 +14907,15 @@\n \u2022 (float) siggen. \u0300\n ____.triangle \u0300 - Triangle wave output.\n \u2022 (float) siggen. \u0300\n ____.square \u0300 - Square wave output.\n 6 Each individual filter also has an internal state variable. There is a compile time switch that can export that variable as a\n parameter. This is intended for testing, and simply wastes shared memory under normal circumstances.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 280 / 1290\n \n All five outputs have the same frequency, amplitude, and offset.\n In addition to the output pins, there are three control pins:\n \u2022 (float) siggen. \u0300\n ____.frequency \u0300 - Sets the frequency in Hertz, default value is 1 Hz.\n@@ -14993,15 +14993,15 @@\n 0\n \n Output\n \n 7 Prior to version 2.1, frequency, amplitude, and offset were parameters. They were changed to pins to allow control by\n other components.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 281 / 1290\n \n Table 5.6: (continued)\n Bit 4\n 0\n 0\n@@ -15184,15 +15184,15 @@\n function is 0xa. The hexadecimal prefix is 0x.\n \n 5.9 HAL Component Generator\n 5.9.1 Introduction\n This section introduces to the compilation HAL components, i.e. the addition of some machinists\u2019\n knowledge on how to deal with the machine. It should be noted that such components do not nec-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 282 / 1290\n \n essarily deal with the hardware directly. They often do, but not necessarily, e.g. there could be a\n component to convert between imperial and metric scales, so this section does not require to dive\n into the interaction with hardware.\n Writing a HAL component can be a tedious process, most of it in setup calls to rtapi_ and hal_ functions\n@@ -15232,15 +15232,15 @@\n loadrt threads name1=servo-thread period1=1000000\n loadrt ddt\n addf ddt.0 servo-thread\n \n More information on loadrt and addf can be found in the HAL Basics.\n To test your component you can follow the examples in the HAL Tutorial.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 283 / 1290\n \n 5.9.4 Definitions\n \u2022 component - A component is a single real-time module, which is loaded with halcmd loadrt. One\n .comp file specifies one component. The component name and file name must match.\n \u2022 instance - A component can have zero or more instances. Each instance of a component is created\n@@ -15274,15 +15274,15 @@\n \u2022 option OPT (VALUE);\n \u2022 variable CTYPE STARREDNAME ([SIZE]);\n \u2022 description DOC;\n \u2022 examples DOC;\n \u2022 notes DOC;\n \u2022 see_also DOC;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 284 / 1290\n \n \u2022 license LICENSE;\n \u2022 author AUTHOR;\n \u2022 include HEADERFILE;\n Parentheses indicate optional items. A vertical bar indicates alternatives. Words in CAPITALS indicate\n@@ -15333,15 +15333,15 @@\n \u2022 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\n array is created its size will be CONDSIZE.\n \u2022 DOC - A string that documents the item. String can be a C-style \u201ddouble quoted\u201d string, like:\n \u201dSelects the desired edge: TRUE means falling, FALSE means rising\u201d\n \n or a Python-style \u201dtriple quoted\u201d string, which may include embedded newlines and quote characters, such as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 285 / 1290\n \n \u201d\u201d\u201dThe effect of this parameter, also known as \u201dthe orb of zot\u201d,\n will require at least two paragraphs to explain.\n Hopefully these paragraphs have allowed you to understand \u201dzot\u201d\n better.\u201d\u201d\u201d\n@@ -15379,15 +15379,15 @@\n items for numbered instances are named component-name..item-name.\n \u2022 option default_count number - (default: 1) Normally, the module parameter count defaults to 1. If\n specified, the count will default to this value instead.\n \u2022 option count_function yes - (default: no) Normally, the number of instances to create is specified in\n the module parameter count; if count_function is specified, the value returned by the function int\n get_count(void) is used instead, and the count module parameter is not defined.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 286 / 1290\n \n \u2022 option rtapi_app no - (default: yes) Normally, the functions rtapi_app_main() and rtapi_app_exit()\n are automatically defined. With option rtapi_app no, they are not, and must be provided in the C\n code. Use the following prototypes:\n \u2018int rtapi_app_main(void);\u2018\n@@ -15431,15 +15431,15 @@\n command-line with --extra-compile-args=\u201d-I\u2026..\u201d. This alternative provides a way to set extra flags\n in cases where the input file is a .c file rather than a .comp file.\n \u2022 option homemod yes - (default: no)\n Module is a custom Homing module loaded using [EMCMOT]HOMEMOD=modulename .\n \u2022 option tpmod yes - (default: no)\n Module is a custom Trajectory Planning (tp) module loaded using [TRAJ]TPMOD=modulename .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 287 / 1290\n \n If an option\u2019s VALUE is not specified, then it is equivalent to specifying option \u2026 yes.\n The result of assigning an inappropriate value to an option is undefined.\n The result of using any other option is undefined.\n \n@@ -15472,15 +15472,15 @@\n 5.9.8 Restrictions\n Though HAL permits a pin, a parameter, and a function to have the same name, halcompile does not.\n Variable and function names that can not be used or are likely to cause problems include:\n \u2022 Anything beginning with _comp.\n \u2022 comp_id\n \u2022 fperiod\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 288 / 1290\n \n \u2022 rtapi_app_main\n \u2022 rtapi_app_exit\n \u2022 extra_setup\n \u2022 extra_cleanup\n@@ -15517,15 +15517,15 @@\n they do in realtime functions.\n \n 5.9.10 Components with one function\n If a component has only one function and the string \u201dFUNCTION\u201d does not appear anywhere after ;;,\n then the portion after ;; is all taken to be the body of the component\u2019s single function. See the Simple\n Comp for an example of this.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 289 / 1290\n \n 5.9.11 Component Personality\n If a component has any pins or parameters with an \u201dif condition\u201d or \u201d[maxsize : condsize]\u201d, it is called a\n component with personality. The personality of each instance is specified when the module is loaded.\n Personality can be used to create pins only when needed. For instance, personality is used in the logic\n@@ -15560,15 +15560,15 @@\n \n Or, it can process and compile in one step, leaving example.ko (or example.so for the simulator) in the\n current directory:\n halcompile --compile rtexample.comp\n \n Or it can simply process, leaving example.c in the current directory:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 290 / 1290\n \n halcompile rtexample.comp\n \n halcompile can also compile and install a component written in C, using the --install and --compile\n options shown above:\n@@ -15606,15 +15606,15 @@\n pin out float out;\n param r float value = 1.0;\n function _;\n license \u201dGPL\u201d; // indicates GPL v2 or later\n ;;\n FUNCTION(_) { out = value; }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 291 / 1290\n \n 5.9.15.2 sincos\n This component computes the sine and cosine of an input angle in radians. It has different capabilities\n than the \u201dsine\u201d and \u201dcosine\u201d outputs of siggen, because the input is an angle, rather than running\n freely based on a \u201dfrequency\u201d parameter.\n@@ -15660,15 +15660,15 @@\n // set this I/O port to 0 so that EXTRA_CLEANUP does not release the IO\n // ports that were never requested.\n io[extra_arg] = 0;\n return -EBUSY;\n }\n ioaddr = io[extra_arg];\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 292 / 1290\n \n return 0;\n }\n EXTRA_CLEANUP() {\n int i;\n@@ -15710,15 +15710,15 @@\n ;;\n #include \n void user_mainloop(void) {\n while(1) {\n usleep(1000);\n FOR_ALL_INSTS() out = drand48();\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 293 / 1290\n \n }\n }\n \n 5.9.15.7 logic\n@@ -15764,15 +15764,15 @@\n logic.1.in-03, logic.1.in-04,\n \n \u2022 3-input AND and XOR gates: logic.2.and, logic.2.xor, logic.2.in-00, logic.2.in-01, logic.2.in-02\n 5.9.15.8 General Functions\n This example shows how to call functions from the main function. It also shows how to pass reference\n of HAL pins to those functions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 294 / 1290\n \n component example;\n pin in s32 in;\n pin out bit out1;\n pin out bit out2;\n@@ -15816,15 +15816,15 @@\n level languages.\n The haltcl facility provides a means to use Tcl scripting and its features for computation, looping,\n branching, procedures, etc. in INI files. To use this functionality, you use the Tcl language and the\n extension .tcl for HAL files.\n The .tcl extension is understood by the main script (linuxcnc) that processes INI files. Haltcl files\n are identified in the the HAL section of INI files (just like HAL files).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 295 / 1290\n \n Example\n [HAL]\n HALFILE = conventional_file.hal\n HALFILE = tcl_based_file.tcl\n@@ -15871,15 +15871,15 @@\n ...\n \n The INI file values are accessible by text substitution in HAL files using the form:\n [SECTION]ITEM\n \n The same INI file values are accessible in Tcl files using the form of a Tcl global array variable:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 296 / 1290\n \n $::SECTION(ITEM)\n \n For example, an INI file item like:\n [JOINT_0]\n@@ -15921,15 +15921,15 @@\n above. The process can be automated with scripts that convert using these substitutions.\n [SECTION]ITEM ---> $::SECTION(ITEM)\n gets\n ---> hal gets\n list\n ---> hal list\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 297 / 1290\n \n 5.10.5 Haltcl Notes\n In haltcl, the value argument for the sets and setp commands is implicitly treated as an expression in\n the Tcl language.\n Example\n@@ -15972,15 +15972,15 @@\n net ${axis}vel => ddt.$ddt.in\n net ${axis}acc <= ddt.$ddt.out\n incr ddt\n }\n puts [show sig *vel]\n puts [show sig *acc]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 298 / 1290\n \n 5.10.7 Haltcl Interactive\n The halrun command recognizes haltcl files. With the -T option, haltcl can be run interaactively as a\n Tcl interpreter. This capability is useful for testing and for standalone HAL applications.\n Example\n@@ -16016,15 +16016,15 @@\n ...\n \n When halui starts it will read the MDI_COMMAND fields in the INI and export pins from 00 to the number\n of MDI_COMMAND \u2019s found in the INI, up to a maximum of 64 commands. These pins can be connected\n like any HAL pins. A common method is to use buttons provided by virtual control panels like shown\n in the example Example for MDI_COMMAND connections.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 299 / 1290\n \n Example 5.1 Example for MDI_COMMAND connections\n HAL file\n net quill-up\n halui.mdi-command-00 <= pyvcp.quillup\n@@ -16064,15 +16064,15 @@\n \u2022 halui.estop.reset (bit, in) - pin for requesting E-Stop reset\n 5.11.4.3 Feed Override\n \u2022 halui.feed-override.count-enable (bit, in) - must be true for counts or direct-value to work.\n \u2022 halui.feed-override.counts (s32, in) - counts * scale = FO percentage. Can be used with an encoder\n or direct-value.\n \u2022 halui.feed-override.decrease (bit, in) - pin for decreasing the FO (-=scale)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 300 / 1290\n \n \u2022 halui.feed-override.increase (bit, in) - pin for increasing the FO (+=scale)\n \u2022 halui.feed-override.reset (bit, in) - pin for resetting the FO (scale=1.0)\n \u2022 halui.feed-override.direct-value (bit, in) - false when using encoder to change counts, true when\n setting counts directly.\n@@ -16096,15 +16096,15 @@\n \u2022 halui.lube.on (bit, in) - pin for requesting lube on\n 5.11.4.8 Machine\n \u2022 halui.machine.units-per-mm (float out) - pin for machine units-per-mm (inch:1/25.4, mm:1) according to inifile setting: [TRAJ]LINEAR_UNITS\n \u2022 halui.machine.is-on (bit, out) - indicates machine on\n \u2022 halui.machine.off (bit, in) - pin for requesting machine off\n \u2022 halui.machine.on (bit, in) - pin for requesting machine on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 301 / 1290\n \n 5.11.4.9 Max Velocity\n The maximum linear velocity can be adjusted from 0 to the MAX_VELOCITY that is set in the [TRAJ]\n section of the INI file.\n \u2022 halui.max-velocity.count-enable (bit, in) - must be true for counts or direct-value to work.\n@@ -16138,15 +16138,15 @@\n limit\n \u2022 halui.joint.N.on-soft-max-limit (bit out) - status pin telling that joint N is on the positive software\n limit\n \u2022 halui.joint.N.on-soft-min-limit (bit out) - status pin telling that joint N is on the negative software\n limit\n \u2022 halui.joint.N.override-limits (bit out) - status pin telling that joint N\u2019s limits are temporarily overridden\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 302 / 1290\n \n \u2022 halui.joint.N.unhome (bit in) - pin for unhoming joint N\n \u2022 halui.joint.selected (u32 out) - selected joint number (0 \u2026 num_joints-1)\n \u2022 halui.joint.selected.has-fault (bit out) - status pin selected joint is faulted\n \u2022 halui.joint.selected.home (bit in) - pin for homing the selected joint\n@@ -16179,15 +16179,15 @@\n \u2022 halui.joint.selected.increment (float in) - pin for setting the jog increment for the selected joint when\n using increment-plus/minus\n \u2022 halui.joint.selected.increment-minus (bit in) - a rising edge will will make the selected joint jog in\n the negative direction by the increment amount\n \u2022 halui.joint.selected.increment-plus (bit in) - a rising edge will will make the selected joint jog in the\n positive direction by the increment amount\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 303 / 1290\n \n \u2022 halui.joint.selected.minus (bit in) - pin for jogging the selected joint in negative direction at the\n halui.joint.jog-speed velocity\n \n \u2022 halui.joint.selected.plus (bit in) - pin for jogging the selected joint in positive direction at the halui.joint.jogspeed velocity\n@@ -16220,15 +16220,15 @@\n \u2022 halui.axis.selected.increment-plus (bit in) - a rising edge will will make the selected axis jog in the\n positive direction by the increment amount\n \u2022 halui.axis.selected.minus (bit in) - pin for jogging the selected axis in negative direction at the\n halui.axis.jog-speed velocity\n \u2022 halui.axis.selected.plus (pin in) - for jogging the selected axis bit in in positive direction at the\n halui.axis.jog-speed velocity\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 304 / 1290\n \n 5.11.4.15 Mode\n \u2022 halui.mode.auto (bit, in) - pin for requesting auto mode\n \u2022 halui.mode.is-auto (bit, out) - indicates auto mode is on\n \u2022 halui.mode.is-joint (bit, out) - indicates joint by joint jog mode is on\n@@ -16258,15 +16258,15 @@\n \u2022 halui.rapid-override.count-enable (bit in (default: TRUE)) - When TRUE, modify Rapid Override\n when counts changes.\n \u2022 halui.rapid-override.counts (s32 in) - counts X scale = Rapid Override percentage. Can be used\n with an encoder or direct-value.\n \u2022 halui.rapid-override.decrease (bit in) - pin for decreasing the Rapid Override (-=scale)\n \u2022 halui.rapid-override.direct-value (bit in) - pin to enable direct value Rapid Override input\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 305 / 1290\n \n \u2022 halui.rapid-override.increase (bit in) - pin for increasing the Rapid Override (+=scale)\n \u2022 halui.rapid-override.scale (float in) - pin for setting the scale on changing the Rapid Override\n \u2022 halui.rapid-override.value (float out) - current Rapid Override value\n \u2022 halui.rapid-override.reset (bit, in) - pin for resetting the Rapid Override value (scale=1.0)\n@@ -16291,15 +16291,15 @@\n \u2022 halui.spindle.N.is-on (bit, out) - indicates spindle is on (either direction)\n \u2022 halui.spindle.N.reverse (bit, in)- starts the spindle with a CCW motion\n \u2022 halui.spindle.N.runs-backward (bit, out) - indicates spindle is on, and in reverse\n \u2022 halui.spindle.N.runs-forward (bit, out) - indicates spindle is on, and in forward\n \u2022 halui.spindle.N.start (bit, in) - starts the spindle\n \u2022 halui.spindle.N.stop (bit, in) - stops the spindle\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 306 / 1290\n \n 5.11.4.20 Tool\n \u2022 halui.tool.length-offset.a (float out) - current applied tool length offset for the A axis\n \u2022 halui.tool.length-offset.b (float out) - current applied tool length offset for the B axis\n \u2022 halui.tool.length-offset.c (float out) - current applied tool length offset for the C axis\n@@ -16320,15 +16320,15 @@\n To connect a remote program start button to LinuxCNC you use the halui.program.run pin and the\n halui.mode.auto pin. You have to insure that it is OK to run first by using the halui.mode.is-auto\n pin. You do this with an and2 component. The following figure shows how this is done. When the\n Remote Run Button is pressed it is connected to both halui.mode.auto and and2.0.in0. If it is OK\n for auto mode the pin halui.mode.is-auto will be on. If both the inputs to the and2.0 component\n are on the and2.0.out will be on and this will start the program.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 307 / 1290\n \n Figure 5.26: Remote Start Example\n The hal commands needed to accomplish the above are:\n net program-start-btn halui.mode.auto and2.0.in0 <= \n net program-run-ok and2.0.in1 <= halui.mode.is-auto\n@@ -16351,15 +16351,15 @@\n Your input and output pins are connected to the pins wired to the other controller. They may be\n parallel port pins or any other I/O pins that you have access to.\n \n This system works in the following way. When an M0 is encountered in your G-code, the halui.program.is-p\n signal goes true. This turns on your output pin so that the external controller knows that LinuxCNC\n is paused.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 308 / 1290\n \n To resume the LinuxCNC G-code program, when the external controller is ready it will make its output\n true. This will signal LinuxCNC that it should resume executing G-code.\n Difficulties in timing\n \u2022 The \u201dresume\u201d input return signal should not be longer than the time required to get the G-code\n@@ -16409,15 +16409,15 @@\n Name\n passthrough.in\n passthrough.out\n \n halcmd: setp passthrough.in 3.14\n halcmd: show pin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Component Pins:\n Owner Type Dir\n 03\n float IN\n 03\n float OUT\n@@ -16475,15 +16475,15 @@\n h.ready()\n \n Once all the pins and parameters have been created, call the .ready() method.\n 5.13.3.1 Changing the prefix\n The prefix can be changed by calling the .setprefix() method. The current prefix can be retrieved by\n calling the .getprefix() method.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 310 / 1290\n \n 5.13.4 Reading and writing pins and parameters\n For pins and parameters which are also proper Python identifiers, the value may be accessed or set\n using the attribute syntax:\n h.out = h.in\n@@ -16519,15 +16519,15 @@\n \n 5.13.7 Constants\n Use these to specify details rather then the value they hold.\n \u2022 HAL_BIT\n \u2022 HAL_FLOAT\n \u2022 HAL_S32\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 311 / 1290\n \n \u2022 HAL_U32\n \u2022 HAL_IN\n \u2022 HAL_OUT\n \u2022 HAL_RO\n@@ -16559,15 +16559,15 @@\n 5.14.2.1 Pins\n \n (bit) in\n State of the hardware input.\n (bit) in-not\n Inverted state of the input.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 312 / 1290\n \n 5.14.2.2 Parameters\n None\n 5.14.2.3 Functions\n \n@@ -16593,15 +16593,15 @@\n The canonical analog input (I/O type: adcin). This is expected to be used for analog to digital converters, which convert e.g. voltage to a continuous range of values.\n 5.14.4.1 Pins\n \n (float) value\n The hardware reading, scaled according to the scale and offset parameters.\n value = ((input reading, in hardware-dependent units) * scale) - offset\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 313 / 1290\n \n 5.14.4.2 Parameters\n \n (float) scale\n The input voltage (or current) will be multiplied by scale before being output to value.\n@@ -16636,15 +16636,15 @@\n (float) scale\n This should be set so that an input of 1 on the value pin will cause the analog output pin to read\n 1 volt.\n (float) high_limit (optional)\n When calculating the value to output to the hardware, if value + offset is greater than high_limit,\n then high_limit will be used instead.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 314 / 1290\n \n (float) low_limit (optional)\n When calculating the value to output to the hardware, if value + offset is less than low_limit,\n then low_limit will be used instead.\n (float) bit_weight (optional)\n@@ -16684,15 +16684,15 @@\n lists will disappear, and the small window will display the name and value of the selected item. The\n display is updated approximately 10 times per second. If you click \u201dAccept\u201d instead of \u201dOK\u201d, the small\n window will display the name and value of the selected item, but the large window will remain on the\n screen. This is convenient if you want to look at a number of different items quickly.\n You can have many halmeters running at the same time, if you want to monitor several items. If\n you want to launch a halmeter without tying up a shell window, type halmeter & to run it in the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 315 / 1290\n \n background. You can also make halmeter start displaying a specific item immediately, by adding\n pin|sig|par[am] __ to the command line. It will display the pin, signal, or parameter \n as soon as it starts - if there is no such item, it will simply start normally. And finally, if you specify an\n item to display, you can add -s before the pin|sig|param to tell halmeter to use a small window. The\n@@ -16706,15 +16706,15 @@\n of your screen. For example:\n loadusr halmeter pin hm2.0.stepgen.00.velocity-fb -g 0 500\n \n See the man page for more options and the section Halmeter.\n \n Figure 5.27: Halmeter selection window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 316 / 1290\n \n Figure 5.28: Halmeter watch window\n \n 5.15.3 Halshow\n halshow (complete usage description) can be started from the command line to show details for selected components, pins, parameters, signals, functions, and threads of a running HAL. The WATCH\n@@ -16728,15 +16728,15 @@\n (this help)\n --fformat format_string_for_float\n --iformat format_string_for_int\n Notes:\n Create watchfile in halshow using: \u2019File/Save Watch List\u2019.\n LinuxCNC must be running for standalone usage.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 317 / 1290\n \n Figure 5.29: Halshow Watch Tab\n A watchfile created using the File/Save Watch List menu item is formatted as a single line with tokens\n \u201dpin+\u201d, \u201dparam+\u201d, \u201dsig=+\u201d, followed by the appropriate pin, param, or signal name. The token-name\n pairs are separated by a space character.\n@@ -16749,15 +16749,15 @@\n pin+joint.0.pos-hard-limit\n pin+joint.1.pos-hard-limit\n sig+estop-loop\n \n When loading a watchfile with the File/Load Watch List menu item, the token-name pairs may appear\n as single or multiple lines. Blank lines and lines beginning with a # character are ignored.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 318 / 1290\n \n 5.15.4 Halscope\n Halscope is an oscilloscope for the HAL. It lets you capture the value of pins, signals, and parameters\n as a function of time. Complete operating instructions should be located here eventually. For now,\n refer to section Section 5.4.6 in the tutorial chapter, which explains the basics.\n@@ -16808,15 +16808,15 @@\n For complete information, see the man page:\n man sim_pin\n \n sim_pin Example (with LinuxCNC running)\n halcmd loadrt mux2 names=example; halcmd net sig_example example.in0\n sim_pin example.sel example.in1 sig_example &\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 319 / 1290\n \n Figure 5.30: sim_pin Window\n \n 5.15.6 Simulate Probe\n simulate_probe is a simple GUI to simulate activation of the pin motion.probe-input. Usage:\n@@ -16824,15 +16824,15 @@\n \n Figure 5.31: simulate_probe Window\n \n 5.15.7 HAL Histogram\n hal-histogram is a command line utility to display histograms for HAL pins.\n Usage:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 320 / 1290\n \n hal-histogram --help | -?\n or\n hal-histogram [Options] [pinname]\n \n@@ -16872,15 +16872,15 @@\n 1. LinuxCNC (or another HAL application) must be running.\n 2. If no pinname is specified, default is: motion-command-handler.time.\n 3. This app may be opened for 5 pins.\n 4. Pintypes float, s32, u32, bit are supported.\n 5. The pin must be associated with a thread supporting floating point. For a base thread, this may\n require using loadrt motmod ... base_thread_fp=1 .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 321 / 1290\n \n Figure 5.32: hal-histogram Window\n \n 5.15.8 Halreport\n halreport is a command-line utility that generates a report about HAL connections for a running\n@@ -16891,15 +16891,15 @@\n 3. Each pin\u2019s component_function, thread, and addf-order.\n 4. Non-realtime component pins having non-ordered functions.\n 5. Identification of unknown functions for unhandled components.\n 6. Signals with no output.\n 7. Signals with no inputs.\n 8. Functions with no addf.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 322 / 1290\n \n 9. Warning tags for components marked as deprecated/obsolete in docs.\n 10. Real names for pins that use alias names.\n The report can be generated from the command line and directed to an output file (or stdout if no\n outfilename is specified):\n@@ -16975,15 +16975,15 @@\n \n servo-thread 004\n servo-thread 008\n \n In the example above, the HALFILE uses halcmd aliases to simplify pin names for an hostmot2 FPGA\n board with commands like:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 323 / 1290\n \n alias pin hm2_7i92.0.stepgen.00.position-fb h.00.position-fb\n \n Note\n Questionable component function detection may occur for\n@@ -16997,15 +16997,15 @@\n Component pins that cannot be associated with a known thread function report the function as \u201dUnknown\u201d.\n \n halreport generates a connections report (without pin types, and current values) for a running HAL\n application to aid in designing and verifying connections. This helps with the understanding what the\n source of a pin value is. Use this information with applications like halshow, halmeter, halscope or\n the halcmd show command in a terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 324 / 1290\n \n Chapter 6\n \n Hardware Drivers\n 6.1 Parallel Port Driver\n@@ -17038,15 +17038,15 @@\n The parport driver can control up to 8 ports (defined by MAX_PORTS in hal_parport.c). The ports are\n numbered starting at zero.\n \n 6.1.1 Loading\n The hal_parport driver is a real time component so it must be loaded into the real time thread with\n loadrt. The configuration string describes the parallel ports to be used, and (optionally) their types.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 325 / 1290\n \n If the configuration string does not describe at least one port, it is an error.\n loadrt hal_parport cfg=\u201dport [type] [port [type] ...]\u201d\n \n Specifying the Port Numbers below 16 refer to parallel ports detected by the system. This is the\n@@ -17070,15 +17070,15 @@\n 2 to 9 explicitly specified as outputs. Note that you must know the base address of the parallel ports\n to configure the drivers correctly. For ISA bus ports, this is usually not a problem, since the ports\n are almost always at a well-known address, such as 0x278 or 0x378 which are typically configured\n in the BIOS. The addresses of PCI bus cards are usually found with lspci -v in an I/O ports line, or\n in a kernel message after running sudo modprobe -a parport_pc. There is no default address, so if\n does not contain at least one address, it is an error.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 326 / 1290\n \n Figure 6.1: Parport block diagram\n Type For each parallel port handled by the hal_parport driver, a type can optionally be specified. The\n type is one of in, out, epp, or x.\n Table 6.1: Parallel Port Direction\n@@ -17138,15 +17138,15 @@\n out\n out\n in\n in\n in\n in\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 327 / 1290\n \n Table 6.1: (continued)\n Pin\n 14\n 15\n@@ -17209,15 +17209,15 @@\n direction.\n loadrt hal_parport cfg=\u201d0x378 0xc000\u201d\n \n Please note that your values will differ. The Netmos cards are Plug-N-Play, and might change their\n settings depending on which slot you put them into, so if you like to get under the hood and re-arrange\n things, be sure to check these values before you start LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 328 / 1290\n \n 6.1.3 Pins\n \u2022 parport.

.pin- \u0300\n ____-out \u0300 (bit) Drives a physical output pin.\n \u2022 parport.

.pin- \u0300\n@@ -17261,15 +17261,15 @@\n in the same thread as write. If -reset is TRUE, then the reset function will set the pin to the value\n of -out-invert. This can be used in conjunction with stepgen\u2019s doublefreq to produce one step per\n period. The stepgen stepspace for that pin must be set to 0 to enable doublefreq.\n The individual functions are provided for situations where one port needs to be updated in a very fast\n thread, but other ports can be updated in a slower thread to save CPU time. It is probably not a good\n idea to use both an -all function and an individual function at the same time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 329 / 1290\n \n 6.1.6 Common problems\n If loading the module reports\n insmod: error inserting \u2019/home/jepler/emc2/rtlib/hal_parport.ko\u2019:\n -1 Device or resource busy\n@@ -17311,15 +17311,15 @@\n \n Then use of this module will probably be necessary.\n Finally, HAL parport components should be loaded:\n loadrt probe_parport\n loadrt hal_parport ...\n 1 In the LinuxCNC packages for Ubuntu, the file /etc/modprobe.d/emc2 generally prevents parport_pc from being automatically loaded.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 330 / 1290\n \n 6.2 AX5214H Driver\n The Axiom Measurement & Control AX5214H is a 48 channel digital I/O board. It plugs into an ISA\n bus, and resembles a pair of 8255 chips. In fact it may be a pair of 8255 chips, but I\u2019m not sure.\n If/when someone starts a driver for an 8255 they should look at the ax5214 code, much of the work is\n@@ -17358,15 +17358,15 @@\n module, and FALSE drives it high, turning OFF the OPTO-22 module. If -invert is TRUE, then setting\n the HAL out- pin TRUE will drive the physical pin high and turn the module OFF.\n \n 6.2.4 Functions\n \u2022 (funct) ax5214..read \u2014 Reads all digital inputs on one board.\n \u2022 (funct) ax5214..write \u2014 Writes all digital outputs on one board.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 331 / 1290\n \n 6.3 General Mechatronics Driver\n General Mechatronics GM6-PCI card based motion control system\n For detailed description, please refer to the System integration manual.\n The GM6-PCI motion control card is based on an FPGA and a PCI bridge interface ASIC. A small\n@@ -17385,15 +17385,15 @@\n loadrt hal_gm\n \n During loading (or attempted loading) the driver prints some useful debugging messages to the kernel\n log, which can be viewed with dmesg.\n Up to 3 boards may be used in one system.\n The following connectors can be found on the GM6-PCI card:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 332 / 1290\n \n Figure 6.2: GM6-PCI card connectors and LEDs\n \n 6.3.1 I/O connectors\n \n@@ -17429,15 +17429,15 @@\n 2\n IOx/0\n \n Each pin can be configured as digital input or output. GM6-PCI motion control card has 4 general\n purpose I/O (GPIO) connectors, with eight configurable I/O on each. Every GPIO pin and parameter\n name begins as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 333 / 1290\n \n gm..gpio.\n \n where is from 0 to 3.\n State of the first pin of the first GPIO connector on the GM6-PCI card.\n@@ -17485,15 +17485,15 @@\n When True, pin value will be inverted.\n Used when pin is configured as output.\n \n 6.3.2 Axis connectors\n \n Figure 6.4: Pin numbering of axis connectors\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 334 / 1290\n \n Table 6.5: Pinout of axis connectors\n 1\n 2\n 3\n@@ -17521,15 +17521,15 @@\n modules to the axis connectors. Seven different system configurations are presented in the System integration manual for evaluating typical applications. Also the detailed description of the Axis modules\n can be found in the System integration manual.\n For evaluating the appropriate servo-drive structure the modules have to be connected as the following\n block diagram shows:\n \n Figure 6.5: Servo axis interfaces\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 335 / 1290\n \n 6.3.2.2 Encoder\n The GM6-PCI motion control card has six encoder modules. Each encoder module has three channels:\n \u2022 Channel-A\n \u2022 Channel-B\n@@ -17593,15 +17593,15 @@\n calculate velocity. It greatly reduces\n quantization noise as compared to\n simply differentiating the position\n output. When the measured velocity is\n below min-speed-estimate, the\n velocity output is 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 336 / 1290\n \n Table 6.7: Encoder parameters\n Parameters\n .counter-mode\n \n@@ -17676,15 +17676,15 @@\n example, if position-scale is 2000, then\n 1000 counts of the encoder will\n produce a position of 0.5 units.\n \n Setting encoder module of axis 0 to receive 500 CPR quadrature encoder signal and use\n reset to round position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 337 / 1290\n \n setp gm.0.encoder.0.counter-mode 0\n # 0: quad, 1: stepDir\n setp gm.0.encoder.0.index-mode 1\n # 0: reset pos at index, 1:round pos at index\n@@ -17755,15 +17755,15 @@\n \n Parameter description\n When 0, module produces Step/Dir signal.\n When 1, it produces Up/Down step signals.\n And when it is 2, it produces quadrature\n output signals.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 338 / 1290\n \n Table 6.9: (continued)\n Parameters\n .control-type\n \n@@ -17820,15 +17820,15 @@\n Minimum time between two step pulses in\n nano-seconds.\n Minimum time between step pulse and\n direction change in nanoseconds.\n \n For evaluating the appropriate values see the timing diagrams below:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 339 / 1290\n \n Figure 6.6: Reference signal timing diagrams\n Setting StepGen module of axis 0 to generate 1000 step pulse per position unit\n setp gm.0.stepgen.0.step-type 0\n setp gm.0.stepgen.0.control-type 0\n@@ -17846,15 +17846,15 @@\n # step generator, let interpolator control it.\n setp gm.0.stepgen.0.position-scale 1000 # 1000 step/position unit\n setp gm.0.stepgen.0.steplen 1000\n # 1000 ns = 1 \u00b5s\n setp gm.0.stepgen.0.stepspace1000\n # 1000 ns = 1 \u00b5s\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 340 / 1290\n \n setp gm.0.stepgen.0.dirdelay 2000\n \n # 2000 ns = 2 \u00b5s\n \n@@ -17907,15 +17907,15 @@\n direction\n (bit, In)\n \n Pin description\n Enable DAC output. When enable is\n false, DAC output is 0.0 V.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 341 / 1290\n \n Table 6.11: (continued)\n Pins\n \n Type and\n@@ -17978,15 +17978,15 @@\n gm..can-gm.\n \n where is from 0 to 5. For example, gm.0.can-gm.0.position refers to the output position\n of axis 0 in position units.\n HAL pins are updated by function:\n gm..write\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 342 / 1290\n \n 6.3.3.1 Pins\n Table 6.13: CAN module pins\n Pins\n \n@@ -18032,15 +18032,15 @@\n \n Pin description\n Indicates that watchdog timer is expired.\n \n Watchdog timer overrun causes the set of power-enable to low in hardware.\n 6.3.4.2 Parameters\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 343 / 1290\n \n Table 6.16: Watchdog parameters\n Parameters\n \n Type and\n@@ -18145,15 +18145,15 @@\n 2\n V+\n (Ext.)\n \n The GM6-PCI motion control card has two limit- and one homing switch input for each joint. All the\n names of these pins begin as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 344 / 1290\n \n gm..joint.\n \n where is from 0 to 5. For example, gm.0.joint.0.home-sw-in indicates the state of the\n axis 0 home switch.\n@@ -18209,15 +18209,15 @@\n 6.3.6 Status LEDs\n 6.3.6.1 CAN\n Color: Orange\n \u2022 Blink, during data communication.\n \u2022 On, when any of the buffers are full - communication error.\n \u2022 Off, when no data communication.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 345 / 1290\n \n 6.3.6.2 RS485\n Color: Orange\n \u2022 Blink, during initialization of modules on the bus\n \u2022 On, when the data communication is up between all initialized modules.\n@@ -18242,15 +18242,15 @@\n Available module types:\n \u2022 8-channel relay output module - gives eight NO-NC relay output on a three pole terminal connector\n for each channel.\n \u2022 8-channel digital input module - gives eight optical isolated digital input pins.\n \u2022 8 channel ADC and 4-channel DAC module - gives four digital-to-analogue converter outputs and\n eight analogue-to-digital inputs. This module is also optically isolated from the GM6-PCI card.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 346 / 1290\n \n Automatic node recognizing Each node connected to the bus was recognized by the GM6-PCI card\n automatically. During starting LinuxCNC, the driver export pins and parameters of all available modules automatically.\n Fault handling If a module does not answer regularly the GM6-PCI card drops down the module. If\n a module with output do not gets data with correct CRC regularly, the module switch to error state\n@@ -18280,15 +18280,15 @@\n Type and\n direction\n (bit, Out)\n \n Pin description\n Output pin for relay\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 347 / 1290\n \n Table 6.21: Relay output module parameters\n Parameters\n \n Type and\n@@ -18351,15 +18351,15 @@\n # First input of the node.\n # Identifies the first GM6-PCI motion control card (PCI card address\n # Selects node with address 0 on the RS485 bus\n # Selects the first digital input module\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 348 / 1290\n \n 6.3.7.3 DAC & ADC module\n For pinout, connection and electrical charasteristics of the module, please refer to the System integration manual.\n All the pins and parameters are updated by the following function:\n gm..rs485\n@@ -18431,15 +18431,15 @@\n #\n .adc-0\n \n # First analogue channel of the node.\n # Identifies the first GM6-PCI motion control card (PCI card address \u2190# Selects node with address 0 on the RS485 bus\n # Selects the first analogue input of the module\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 349 / 1290\n \n 6.3.7.4 Teach Pendant module\n For pinout, connection and electrical charasteristics of the module, please refer to the System integration manual.\n All the pins and parameters are updated by the following function:\n gm..rs485\n@@ -18521,15 +18521,15 @@\n # First analogue channel of the node.\n # Identifies the first GM6-PCI motion control card (PCI card address\n # Selects node with address 0 on the RS485 bus\n # Selects the first analogue input of the module\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 350 / 1290\n \n 6.3.8 Errata\n 6.3.8.1 GM6-PCI card Errata\n The revision number in this section refers to the revision of the GM6-PCI card device.\n Rev. 1.2\n@@ -18562,15 +18562,15 @@\n number you set on the GS2.\n \u2022 -v or --verbose Turn on debug messages.\n \u2022 -A or --accel-seconds (default: 10.0) Seconds to accelerate the spindle from 0 to max. RPM.\n \u2022 -D or --decel-seconds (default: 0.0) Seconds to decelerate the spindle from max. RPM to 0. If\n set to 0.0 the spindle will be allowed to coast to a stop without controlled deceleration.\n 2 In Europe the equivalent can be found under the brand name Omron.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 351 / 1290\n \n \u2022 -R or --braking-resistor This argument should be used when a braking resistor is installed on the\n GS2 VFD (see Appendix A of the GS2 manual). It disables deceleration over-voltage stall prevention\n (see GS2 modbus Parameter 6.05), allowing the VFD to keep braking even in situations where the\n motor is regenerating high voltage. The regenerated voltage gets safely dumped into the braking\n@@ -18600,15 +18600,15 @@\n \u2022 .spindle-on (bit, in) 1 for ON and 0 for OFF sent to VFD\n \u2022 .status-1 (s32, out) Drive Status of the VFD (see the GS2 manual)\n \u2022 .status-2 (s32, out) Drive Status of the VFD (see the GS2 manual)\n Note\n The status value is a sum of all the bits that are on. So a 163 which means the drive is in the run\n mode is the sum of 3 (run) + 32 (freq set by serial) + 128 (operation set by serial).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 352 / 1290\n \n 6.4.3 Parameters\n With being gs2_vfd or the name given during loading with the -n option:\n \u2022 .error-count (s32, RW)\n \u2022 .loop-time (float, RW) how often the modbus is polled (default: 0.1)\n@@ -18680,15 +18680,15 @@\n 31\n 26\n 24\n 21\n 19\n 23\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12\n 13\n 14\n 15\n 16\n 17\n@@ -18775,15 +18775,15 @@\n 6.5.5 Functions\n \u2022 hal_pi_gpio.read - Add this to the base thread to update the HAL pin values to match the physical\n input values.\n \u2022 hal_pi_gpio.write - Add this to the base thread to update the physical pins to match the HAL values.\n Typically the read function will be early in the call list, before any encoder counters and the write\n function will be later in the call list, after stepgen.make-pulses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 354 / 1290\n \n 6.5.6 Pin Numbering\n The GPIO connector and the pinout has been consistent since around 2015. These older Pi models\n are probably a poor choice for LinuxCNC anyway. However, this driver is designed to work with them,\n and will detect and correctly configure for the two alternative pinouts.\n@@ -18860,15 +18860,15 @@\n active-high\n active-high\n active-high\n active-high\n active-high\n active-high\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n line\n line\n line\n line\n line\n line\n@@ -18989,15 +18989,15 @@\n \u2022 hal_gpio.NAME-in-not - HAL_OUT An inverted version of the above, for convenience\n \u2022 hal_gpio.NAME-out - HAL_IN use this pin to transfer a HAL bit value to a physical output\n \n 6.6.4 Parameters\n \u2022 hal_gpio.reset_ns - HAL_RW - \u201dsetp\u201d this parameter to control the pulse length of pins added to the\n \u201dreset\u201d list. The value will be limited between 0 and thread-period / 4.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 356 / 1290\n \n 6.6.5 Functions\n \u2022 hal_gpio.read - Add this to the base thread to update the HAL pin values to match the physical input\n values.\n \u2022 hal_gpio.write - Add this to the base thread to update the physical pins to match the HAL values.\n@@ -19033,15 +19033,15 @@\n \n 6.6.8 Author\n Andy Pugh\n \n 6.6.9 Known Bugs\n None at this time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 357 / 1290\n \n 6.7 Mesa HostMot2 Driver\n 6.7.1 Introduction\n HostMot2 is an FPGA configuration developed by Mesa Electronics for their line of Anything I/O motion\n control cards. The firmware is open source, portable and flexible. It can be configured (at compiletime) with zero or more instances (an object created at runtime) of each of several Modules: encoders\n@@ -19070,15 +19070,15 @@\n need a firmware binary.\n \n 6.7.3 Installing Firmware\n Depending on how you installed LinuxCNC you may have to open the Synaptic Package Manager from\n the System menu and install the package for your Mesa card. The quickest way to find them is to do a\n search for hostmot2 in the Synaptic Package Manager. Mark the firmware for installation, then apply.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 358 / 1290\n \n 6.7.4 Loading HostMot2\n The LinuxCNC support for the HostMot2 firmware is split into a generic driver called hostmot2 and\n two low-level I/O drivers for the Anything I/O boards. The low-level I/O drivers are hm2_7i43 and\n hm2_pci (for all the PCI- and PC-104/Plus-based Anything I/O boards). The hostmot2 driver must be\n@@ -19115,15 +19115,15 @@\n \n 6.7.6 HostMot2 Functions\n \u2022 hm2_..read - Read all inputs, update input HAL pins.\n \u2022 hm2_..write - Write all outputs.\n \u2022 hm2_..read_gpio - Read the GPIO input pins only. (This function is not\n available on the 7I43 due to limitations of the EPP bus.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 359 / 1290\n \n \u2022 hm2_..write_gpio - Write the GPIO control registers and output pins\n only. (This function is not available on the 7I43 due to limitations of the EPP bus.)\n Note\n The above read_gpio and write_gpio functions should not normally be needed, since the GPIO bits are\n@@ -19169,15 +19169,15 @@\n [ 1141.053418] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 (PWM or Up) (Output)\n [ 1141.053422] hm2/hm2_5i20.0: IO Pin 008 (P2-17): IOPort\n [ 1141.053425] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 (Dir or Down) ( \u2190Output)\n [ 1141.053429] hm2/hm2_5i20.0: IO Pin 010 (P2-21): IOPort\n [ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin Not-Enable (Output)\n ...\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 360 / 1290\n \n [ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output)\n [ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output)\n [ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output)\n [ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output)\n@@ -19206,15 +19206,15 @@\n mothercard on LinuxCNC startup. If you are using Run In Place, you must still install a hostmot2firmware- package. There is more information about firmware and configuration in the Configurations section.\n \n 6.7.10 HAL Pins\n The HAL pins for each configuration can be seen by opening up Show HAL Configuration from the\n Machine menu. All the HAL pins and parameters can be found there. The following figure is of the\n 5I20 configuration used above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 361 / 1290\n \n Figure 6.9: 5i20 HAL Pins\n \n 6.7.11 Configurations\n 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\u2019s look\n@@ -19230,15 +19230,15 @@\n (and save a 7I47). So in this way we can save two ports (48 bits) for GPIO.\n Here are tables of the firmwares available in the official packages. There may be additional firmwares\n available at the Mesanet.com website that have not yet made it into the LinuxCNC official firmware\n packages, so check there too.\n 3x20 (6-port various) Default Configurations (The 3x20 comes in 1M, 1.5M, and 2M gate versions. So\n far, all firmware is available in all gate sizes.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Firmware\n SV24\n SVST16_24\n \n Encoder\n 24\n@@ -19451,15 +19451,15 @@\n 0\n 4\n \n GPIO\n 0\n 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Firmware\n SVST8_4IM2\n \n Encoder\n 8 (+IM)\n \n@@ -19564,15 +19564,15 @@\n \u2022 in - (Bit, Out) Normal state of the hardware input pin. Both full GPIO pins and I/O pins used as\n inputs by active module instances have this pin.\n \u2022 in_not - (Bit, Out) Inverted state of the hardware input pin. Both full GPIO pins and I/O pins used\n as inputs by active module instances have this pin.\n \u2022 out - (Bit, In) Value to be written (possibly inverted) to the hardware output pin. Only full GPIO pins\n have this pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 364 / 1290\n \n 6.7.12.2 Parameters\n \u2022 invert_output - (Bit, RW) This parameter only has an effect if the is_output parameter is true. If this\n parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin.\n Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.\n@@ -19609,15 +19609,15 @@\n \u2022 position-cmd - (Float, In) Target position of stepper motion, in user-defined position units.\n \u2022 position-fb - (Float, Out) Feedback position in user-defined position units (counts / position_scale).\n \u2022 velocity-cmd - (Float, In) Target velocity of stepper motion, in user-defined position units per second.\n This pin is only used when the stepgen is in velocity control mode (control-type=1).\n \u2022 velocity-fb - (Float, Out) Feedback velocity in user-defined position units per second.\n 3 At present, the firmware supports multi-phase stepper outputs, but the driver doesn\u2019t. Interested volunteers are solicited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 365 / 1290\n \n 6.7.13.2 Parameters\n \u2022 dirhold - (u32, RW) Minimum duration of stable Direction signal after a step ends, in nanoseconds.\n \u2022 dirsetup - (u32, RW) Minimum duration of stable Direction signal before a step begins, in nanoseconds.\n \u2022 maxaccel - (Float, RW) Maximum acceleration, in position units per second per second. If set to 0,\n@@ -19652,15 +19652,15 @@\n The function of the Out0 and Out1 I/O pins varies with output-type parameter (see below).\n The hm2 pwmgen representation is similar to the software pwmgen component. Each pwmgen instance has the following pins and parameters:\n 6.7.14.1 Pins\n \u2022 enable - (Bit, In) If true, the pwmgen will set its Not-Enable pin false and output its pulses. If enable\n is false, pwmgen will set its Not-Enable pin true and not output any signals.\n \u2022 value - (Float, In) The current pwmgen command value, in arbitrary units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 366 / 1290\n \n 6.7.14.2 Parameters\n \u2022 output-type - (s32, RW) This emulates the output_type load-time argument to the software pwmgen\n component. This parameter may be changed at runtime, but most of the time you probably want\n to set it at startup and then leave it alone. Accepted values are 1 (PWM on Out0 and Direction on\n@@ -19702,15 +19702,15 @@\n the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and\n I/O pins used as outputs by active module instances have this parameter.\n \n 6.7.15 Encoder\n Encoders have names like hm2_..encoder... Instance is a twodigit number that corresponds to the HostMot2 encoder instance number. There are num_encoders\n instances, starting with 00.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 367 / 1290\n \n Each encoder uses three or four input I/O pins, depending on how the firmware was compiled. Threepin encoders use A, B, and Index (sometimes also known as Z). Four-pin encoders use A, B, Index, and\n Index-mask.\n The hm2 encoder representation is similar to the one described by the Canonical Device Interface\n (in the HAL General Reference document), and to the software encoder component. Each encoder\n@@ -19747,15 +19747,15 @@\n direction is B.\n \u2022 vel-timeout - (Float, RW) When the encoder is moving slower than one pulse for each time that the\n driver reads the count from the FPGA (in the hm2_read() function), the velocity is harder to estimate.\n The driver can wait several iterations for the next pulse to arrive, all the while reporting the upper\n bound of the encoder velocity, which can be accurately guessed. This parameter specifies how long\n to wait for the next pulse, before reporting the encoder stopped. This parameter is in seconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 368 / 1290\n \n 6.7.16 5I25 Configuration\n 6.7.16.1 Firmware\n The 5I25 firmware comes preloaded for the daughter card it is purchased with. So the firmware=xxx.BIT\n is not part of the hm2_pci configuration string when using a 5I25.\n@@ -19789,15 +19789,15 @@\n maxlimit: +10\n maxfullscale: 10\n If you wanted to say scale the analog out of a channel to IPS for a velocity mode servo (say 24 IPS\n max) you could set the limits like this:\n minlimit: -24\n maxlimit: +24\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 369 / 1290\n \n maxfullscale: 24\n If you wanted to scale the analog out of a channel to RPM for a 0 to 6000 RPM spindle with 0-10 V\n control you could set the limits like this:\n minlimit: 0\n@@ -19829,15 +19829,15 @@\n to facilitate the low level protocol debug.\n \u2022 You have more than one device to connect. MB2HAL is very efficiently managing multiple devices,\n transactions and links. Currently I am monitoring two axis drivers using a Rs232 port, a VFD driver\n using another Rs232 port, and a remote I/O using TCP/IP.\n \u2022 You want a protocol to connect your Arduino to HAL. Look the included sample configuration file,\n sketch and library for Arduino Modbus.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 370 / 1290\n \n 6.8.2 Usage\n a. Create a config file from the example below\n 1. Set component name (optional)\n Set HAL_MODULE_NAME=mymodule (default HAL_MODULE_NAME=mb2hal)\n@@ -19917,15 +19917,15 @@\n The serial port. For example \u201d/dev/ttyS0\u201d. Ignored if\n LINK_TYPE=serial\n LINK_TYPE=tcp.\n SERIAL_BAUD Integer If\n The baud rate. Ignored if LINK_TYPE=tcp.\n LINK_TYPE=serial\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 371 / 1290\n \n Value\n Type\n Required\n Description\n@@ -20018,15 +20018,15 @@\n parameter above.\n \n 6.8.3.3 Error codes\n While debugging transactions, note the returned \u201dret[]\u201d value correspond to:\n Modbus protocol exceptions:\n \u2022 0x01 - ILLEGAL_FUNCTION - the FUNCTION code received in the query is not allowed or invalid.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 372 / 1290\n \n \u2022 0x02 - ILLEGAL_DATA_ADDRESS - the DATA ADDRESS received in the query is not an allowable\n address for the slave or is invalid.\n \u2022 0x03 - ILLEGAL_DATA_VALUE - a VALUE contained in the data query field is not an allowable value\n or is invalid.\n@@ -20062,15 +20062,15 @@\n # ++++++++++++++++++++++++\n [MB2HAL_INIT]\n #OPTIONAL: Debug level of init and INI file parsing.\n # 0 = silent.\n # 1 = error messages (default).\n # 2 = OK confirmation messages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 373 / 1290\n \n # 3 = debugging messages.\n # 4 = maximum debugging messages (only in transactions).\n INIT_DEBUG=3\n #OPTIONAL: Set to 1.1 to enable the new functions:\n@@ -20115,15 +20115,15 @@\n SERIAL_BAUD=115200\n #if LINK_TYPE=serial then REQUIRED (only 1st time).\n #if LINK_TYPE=tcp then IGNORED\n #Data bits. One of 5,6,7,8.\n SERIAL_BITS=8\n #if LINK_TYPE=serial then REQUIRED (only 1st time).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 374 / 1290\n \n #if LINK_TYPE=tcp then IGNORED\n #Data parity. One of: even, odd, none.\n SERIAL_PARITY=none\n #if LINK_TYPE=serial then REQUIRED (only 1st time).\n@@ -20207,15 +20207,15 @@\n #\n Both pin values are added and limited to 65535 (UINT16_MAX). Normally use one and let \u2190the other open (read as 0).\n # fnct_15_write_multiple_coils:\n #\n mb2hal.m.n.bit\n (input)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 375 / 1290\n \n # fnct_16_write_multiple_registers:\n #\n mb2hal.m.n.float\n (input)\n@@ -20278,15 +20278,15 @@\n -0x07 Unsuccessful programming request using function code 13 or \u219014.\n #MEMORY_PARITY_ERROR\n -0x08 SLAVE parity error in MEMORY.\n #GATEWAY_PROBLEM_PATH\n -0x0A (-10) Gateway path(s) not available.\n #GATEWAY_PROBLEM_TARGET -0x0B (-11) The target device failed to repond (generated by \u2190master, not slave).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n #/* Program or connection */\n #COMM_TIME_OUT\n -0x0C (-12)\n #PORT_SOCKET_FAILURE\n -0x0D (-13)\n #SELECT_FAILURE\n@@ -20343,15 +20343,15 @@\n HAL_TX_NAME=XDrive02\n MAX_UPDATE_RATE=10.0\n DEBUG=1\n [TRANSACTION_07]\n \n 376 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 377 / 1290\n \n MB_TX_CODE=fnct_06_write_single_register\n FIRST_ELEMENT=20\n NELEMENTS=1\n HAL_TX_NAME=XDrive03\n@@ -20384,15 +20384,15 @@\n 6.8.5.3 fnct_03_read_holding_registers\n \u2022 mb2hal.m.n.float float out\n \u2022 mb2hal.m.n.int s32 out\n 6.8.5.4 fnct_04_read_input_registers\n \u2022 mb2hal.m.n.float float out\n \u2022 mb2hal.m.n.int s32 out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 378 / 1290\n \n 6.8.5.5 fnct_05_write_single_coil\n \u2022 mb2hal.m.n.bit bit in\n NELEMENTS needs to be 1 or PIN_NAMES must contain just one name.\n 6.8.5.6 fnct_06_write_single_register\n@@ -20423,15 +20423,15 @@\n This component is loaded using the halcmd \u201dloadusr\u201d command:\n loadusr -Wn coolant mitsub_vfd spindle=02 coolant=01\n \n The above command says:\n loadusr, wait for coolant pins to be ready, component mitsub_vfd, with 2 slaves named spindle (slave\n #2) and coolant (slave #1)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 379 / 1290\n \n 6.9.1 Command Line Options\n The command line options are:\n \u2022 -b or --baud : set the baud rate - all networked VFDs must be the same\n \u2022 -p or --port : sets the port to use such as /dev/ttyUSB0\n@@ -20457,15 +20457,15 @@\n \u2022 .scale-fb (float, in) Scales the motor-fb pin to arbitrary units. default 1 = Hertz.\n \u2022 .scale-amps (float, in) Scales the motor-amps pin to arbitrary units. default 1 = amps.\n \u2022 .scale-power (float, in) Scales the motor-power pin to arbitrary units. default 1 = .\n \u2022 .estop (bit, in) puts the VFD into emergency-stopped status.\n \u2022 .status-bit-N (bit, out) N = 0 to 7, status bits are user configurable on the VFD. Bit 3 should be\n set to at speed and bit 7 should be set to alarm. Others are free to be set as required.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 380 / 1290\n \n 6.9.3 HAL example\n #\n # example usage of the Mitsubishi VFD driver\n #\n@@ -20524,15 +20524,15 @@\n Fr-A700 F700 E700 D700 technical manual for the 700 series\n The VFD must have PR settings adjusted manually for serial communication.\n One must power cycle the VFD for some of these to register eg PR 79\n \u2022 PR 77 set to 1 -to unlock other PR modification.\n \u2022 PR 79 set to 1 or 0 -for communication thru serial.\n \u2022 PR 117 set to 0-31 -slave number, driver must reference same number.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 381 / 1290\n \n \u2022 PR 118 tested with 96 -baud rate (can be set to 48,96,192) if driver is also set.\n \u2022 PR 119 set to 0 -stop bit/data length (8 bits, two stop)\n \u2022 PR 120 set to 0 -no parity\n \u2022 PR 121 set to 1-10 -if 10 (maximum) COM errors then VFD faults.\n@@ -20568,15 +20568,15 @@\n \u2022 (bit) motenc..enc--reset-count - If this pin is true, the counter will immediately\n be reset to zero, and the pin will be cleared.\n \u2022 (float) motenc..dac--value - Analog output value for DAC (in user units, see -gain\n and -offset)\n \u2022 (float) motenc..adc--value - Analog input value read by ADC (in user units, see\n -gain and -offset)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 382 / 1290\n \n \u2022 (bit) motenc..in- - State of digital input pin, see canonical digital input.\n \u2022 (bit) motenc..in--not - Inverted state of digital input pin, see canonical digital\n input.\n \u2022 (bit) motenc..out- - Value to be written to digital output, seen canonical digital\n@@ -20622,15 +20622,15 @@\n \u2022 (funct) motenc..encoder-read - Reads all encoder counters.\n \u2022 (funct) motenc..adc-read - Reads the analog-to-digital converters.\n \u2022 (funct) motenc..digital-in-read - Reads digital inputs.\n \u2022 (funct) motenc..dac-write - Writes the voltages to the DACs.\n \u2022 (funct) motenc..digital-out-write - Writes digital outputs.\n \u2022 (funct) motenc..misc-update - Updates misc stuff.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 383 / 1290\n \n 6.11 Opto22 Driver\n PCI AC5 ADAPTER CARD / HAL DRIVER\n \n 6.11.1 The Adapter Card\n@@ -20666,15 +20666,15 @@\n signal to this pin to write to an I/O point of the card. The PINNUMBER represents the position in\n the relay rack.Eg. PINNUMBER 23 is position 23 in a Opto22 relay rack and would be pin 1 on the\n 50 pin header connector.\n \u2022 opto_ac5.[BOARDNUMBER].led[NUMBER] OUT bit - Turns one of the 4 onboard LEDs on/off. LEDs\n are numbered 0 to 3.\n BOARDNUMBER can be 0-3 PORTNUMBER can be 0 or 1. Port 0 is closest to the card bracket.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 384 / 1290\n \n 6.11.4 Parameters\n \u2022 opto_ac5.[BOARDNUMBER].port[PORTNUMBER].out-[PINNUMBER]-invert W bit - When TRUE,\n invert the meaning of the corresponding -out pin so that TRUE gives LOW and FALSE gives HIGH.\n \n@@ -20711,15 +20711,15 @@\n 24 bits represented in a BINARY number. Bit 1 is the rightmost number:\n 16 zeros for the 16 inputs and 8 ones for the 8 outputs\n 000000000000000011111111\n \n This converts to FF on the calculator, so 0xff is the number to use for portconfig0 and/or portconfig1\n when loading the driver.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 385 / 1290\n \n 6.11.7 Pin Numbering\n HAL pin 00 corresponds to bit 1 (the rightmost) which represents position 0 on an Opto22 relay rack.\n HAL pin 01 corresponds to bit 2 (one spot to the left of the rightmost) which represents position 1 on\n an Opto22 relay rack. HAL pin 23 corresponds to bit 24 (the leftmost) which represents position 23\n@@ -20762,15 +20762,15 @@\n addresses, so if one is at 00, the next would have to be 02.)\n Alternatively, the 8 digital output pins can be used as additional digital outputs, it works the same\n way as above with the syntax : extradout=0xnn\u2019. The extradac and extradout options are mutually\n exclusive on each board, you can only specify one.\n The UPC and PPMC encoder boards can timestamp the arrival of encoder counts to refine the derivation of axis velocity. This derived velocity can be fed to the PID hal component to produce smoother D\n term response. The syntax is : timestamp=0xnn[,0xmm], this works the same way as above to select\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 386 / 1290\n \n which board is being configured. Default is to not enable the timestamp option. If you put this option\n on the command line, it enables the option. The first n selects the EPP bus, the second one matches\n the address of the board having the option enabled. The driver checks the revision level of the board\n to make sure it has firmware supporting the feature, and produces an error message if the board does\n@@ -20813,15 +20813,15 @@\n function has to be enabled in the HAL command line that starts the PPMC driver, with the timestamp=0x00 option.\n \u2022 (All float output) ppmc..encoder..position - Encoder position, in user units.\n \u2022 (All bit bidir) ppmc..encoder..index-enable - Connect to joint.#.index-enable for\n home-to-index. This is a bidirectional HAL signal. Setting it to true causes the encoder hardware\n to reset the count to zero on the next encoder index pulse. The driver will detect this and set the\n signal back to false.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 387 / 1290\n \n \u2022 (PPMC float output) ppmc..DAC..value - sends a signed value to the 16-bit Digital\n to Analog Converter on the PPMC DAC16 board commanding the analog output voltage of that DAC\n channel.\n \u2022 (UPC bit input) ppmc..pwm..enable - Enables a PWM generator.\n@@ -20860,15 +20860,15 @@\n an output value equal to the 1/scale value will produce an output of + or - value Volts. So, if the\n scale parameter is 0.1 and you send a value of 0.5, the output will be 5.0 Volts.\n \u2022 (UPC float) ppmc..pwm..scale - Scaling for PWM generator. If scale is X, then the\n duty cycle will be 100% when the value pin is X (or -X).\n \u2022 (UPC float) ppmc..pwm..max-dc - Maximum duty cycle, from 0.0 to 1.0.\n \u2022 (UPC float) ppmc..pwm..min-dc - Minimum duty cycle, from 0.0 to 1.0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 388 / 1290\n \n \u2022 (UPC float) ppmc..pwm..duty-cycle - Actual duty cycle (used mostly for troubleshooting.)\n \u2022 (UPC bit) ppmc..pwm..bootstrap - If true, the PWM generator will generate a\n short sequence of pulses of both polarities when E-stop goes false, to reset the shutdown latches\n on some PWM servo drives.\n@@ -20903,15 +20903,15 @@\n These writes are organized into blocks of contiguous registers to be written in a block to minimize\n CPU overhead.\n \n 6.13 Pluto P Driver\n 6.13.1 General Info\n The Pluto-P is a FPGA board featuring the ACEX1K chip from Altera.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 389 / 1290\n \n 6.13.1.1 Requirements\n 1. A Pluto-P board\n 2. An EPP-compatible parallel port, configured for EPP mode in the system BIOS or a PCI EPP\n compatible parallel port card.\n@@ -20948,15 +20948,15 @@\n isolation and protection. Traditional parallel port optoisolator boards do not work with pluto_servo\n due to the bidirectional nature of the EPP protocol.\n 6.13.1.4 LED\n \u2022 When the device is unprogrammed, the LED glows faintly. When the device is programmed, the\n LED glows according to the duty cycle of PWM0 (LED = UP0 xor DOWN0) or STEPGEN0 (LED =\n STEP0 xor DIR0).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 390 / 1290\n \n 6.13.1.5 Power\n \u2022 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\n these VCC pins. The required current is not yet known, but is probably around 50mA plus I/O\n current.\n@@ -20987,15 +20987,15 @@\n The PWM period is approximately 19.5 kHz (40 MHz / 2047). A PDM-like mode is also available.\n \u2022 18 digital outputs: 10 dedicated, 8 shared with PWM functions. (Example: A lathe with unidirectional PWM spindle control may use 13 total digital outputs)\n \u2022 20 digital inputs: 8 dedicated, 12 shared with Quadrature functions. (Example: A lathe with index\n pulse only on the spindle may use 13 total digital inputs.)\n \u2022 EPP communication with the PC. The EPP communication typically takes around 100 \u00b5s on machines\n tested so far, enabling servo rates above 1 kHz.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 391 / 1290\n \n 6.13.2.1 Pinout\n \u2022 UPx - The up (up/down mode) or pwm (pwm+direction mode) signal from PWM generator X. May be\n used as a digital output if the corresponding PWM channel is unused, or the output on the channel\n is always negative. The corresponding digital output invert may be set to TRUE to make UPx active\n@@ -21025,15 +21025,15 @@\n \n Behavior if both\n functions used\n When pwm-0-pwmdir is\n TRUE, this pin is the PWM\n output\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 392 / 1290\n \n Table 6.27: (continued)\n Primary function\n \n Alternate Function\n@@ -21146,15 +21146,15 @@\n \n 6.13.2.2 Input latching and output updating\n \u2022 PWM duty cycles for each channel are updated at different times.\n \u2022 Digital outputs OUT0 through OUT9 are all updated at the same time. Digital outputs OUT10\n through OUT17 are updated at the same time as the pwm function they are shared with.\n \u2022 Digital inputs IN0 through IN19 are all latched at the same time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 393 / 1290\n \n \u2022 Quadrature positions for each channel are latched at different times.\n 6.13.2.3 HAL Functions, Pins and Parameters\n A list of all loadrt arguments, HAL function names, pin names and parameter names is in the manual\n page, pluto_servo.9.\n@@ -21181,15 +21181,15 @@\n \u2022 OUTx - Dedicated digital output #x\n \u2022 GND - Ground\n \u2022 VCC - +3.3V regulated DC\n While the extended main connector has a superset of signals usually found on a Step & Direction DB25\n connector\u20144 step generators, 9 inputs, and 6 general-purpose outputs\u2014the layout on this header is\n different than the layout of a standard 26-pin ribbon cable to DB25 connector.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 394 / 1290\n \n Figure 6.11: Pluto-Step Pinout\n \n 6.13.3.2 Input latching and output updating\n \u2022 Step frequencies for each channel are updated at different times.\n@@ -21198,15 +21198,15 @@\n \u2022 Feedback positions for each channel are latched at different times.\n 6.13.3.3 Step Waveform Timings\n The firmware and driver enforce step length, space, and direction change times. Timings are rounded\n up to the next multiple of 1.6\u03bcs, with a maximum of 49.6\u03bcs. The timings are the same as for the software stepgen component, except that dirhold and dirsetup have been merged into a single parameter\n dirtime which should be the maximum of the two, and that the same step timings are always applied\n to all channels.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 395 / 1290\n \n Figure 6.12: Pluto-Step Timings\n \n 6.13.3.4 HAL Functions, Pins and Parameters\n A list of all loadrt arguments, HAL function names, pin names and parameter names is in the manual\n@@ -21221,15 +21221,15 @@\n \n This component is loaded using the halcmd \u201dloadusr\u201d command:\n loadusr -Wn pmx485 pmx485 /dev/ttyUSB0\n \n This will load the pmx485 component using the /dev/ttyUSB0 port and wait for it to become ready.\n It is necessary to name the port to use for communications.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 396 / 1290\n \n 6.14.1 Pins\n \u2022 pmx485.mode-set (bit, in) # set cutting mode\n \u2022 pmx485.current-set (bit, in) # set cutting current\n \u2022 pmx485.pressure-set (bit, in) # set gas pressure\n@@ -21260,15 +21260,15 @@\n \u2022 Disconnect the Powermax power supply from its power source for approximately 30 seconds. When\n you power the system back ON, it will no longer be in remote mode.\n \n 6.14.3 Reference:\n \u2022 Hypertherm Application Note #807220\n \u201dPowermax45 XP/65/85/105/125\u00ae Serial Communication Protocol\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 397 / 1290\n \n 6.15 Servo To Go Driver\n The Servo-To-Go (STG) is one of the first PC motion control cards supported by LinuxCNC. It is an\n ISA card and it exists in different flavors (all supported by this driver). The board includes up to 8\n channels of quadrature encoder input, 8 channels of analog input and output, 32 bits digital I/O, an\n@@ -21308,15 +21308,15 @@\n 6.15.2 Pins\n \u2022 stg..counts - (s32) Tracks the counted encoder ticks.\n \u2022 stg..position - (float) Outputs a converted position.\n \u2022 stg..dac-value - (float) Drives the voltage for the corresponding DAC.\n \u2022 stg..adc-value - (float) Tracks the measured voltage from the corresponding ADC.\n \u2022 stg.in- - (bit) Tracks a physical input pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 398 / 1290\n \n \u2022 stg.in--not - (bit) Tracks a physical input pin, but inverted.\n \u2022 stg.out- - (bit) Drives a physical output pin\n For each pin, is the axis number, and is the logic pin number of the STG if\n IIOO is defined, there are 16 input pins (in-00 .. in-15) and 16 output pins (out-00 .. out-15), and they\n@@ -21350,15 +21350,15 @@\n and ShuttlePRO2 devices with LinuxCNC\u2019s HAL.\n If the driver is started without command-line arguments, it will probe all /dev/hidraw* device files for\n Shuttle devices, and use all devices found. If it is started with command-line arguments, it will only\n probe the devices specified.\n The ShuttleXpress has five momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 399 / 1290\n \n The ShuttlePRO has 13 momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n The ShuttlePRO2 has 15 momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n@@ -21396,15 +21396,15 @@\n .spring-wheel-s32 (s32 out)\n The current deflection of the spring-wheel (the outer wheel). It\u2019s 0 at rest, and ranges from -7 at\n the counter-clockwise extreme to +7 at the clockwise extreme.\n .spring-wheel-f (float out)\n The current deflection of the spring-wheel (the outer wheel). It\u2019s 0.0 at rest, -1.0 at the counterclockwise extreme, and +1.0 at the clockwise extreme. The Shuttle devices report the springwheel position as an integer from -7 to +7, so this pin reports only 15 discrete values in it\u2019s\n range.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 400 / 1290\n \n 6.17 VFS11 VFD Driver\n This is a non-realtime HAL program to control the S11 series of VFDs from Toshiba.\n vfs11_vfd supports serial and TCP connections. Serial connections may be RS232 or RS485. RS485 is\n supported in full- and half-duplex mode. TCP connections may be passive (wait for incoming connection), or active outgoing connections, which may be useful to connect to TCP-based devices or through\n@@ -21437,15 +21437,15 @@\n \u2022 .acceleration-pattern (bit, in) when true, set acceleration and deceleration times as defined in\n registers F500 and F501 respectively. Used in PID loops to choose shorter ramp times to avoid\n oscillation.\n \u2022 .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.\n \u2022 .at-speed (bit, out) when drive is at commanded speed (see speed-tolerance below)\n \u2022 .current-load-percentage (float, out) reported from the VFD\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 401 / 1290\n \n \u2022 .dc-brake (bit, in) engage the DC brake. Also turns off spindle-on.\n \u2022 .enable (bit, in) enable the VFD. If false, all operating parameters are still read but control is\n released and panel control is enabled (subject to VFD setup).\n \u2022 .err-reset (bit, in) reset errors (alarms a.k.a Trip and e-stop status). Resetting the VFD may\n@@ -21482,15 +21482,15 @@\n \u2022 .status (s32, out) Drive Status of the VFD (see the TOSVERT VF-S11 Communications Function\n Instruction Manual, register FD01). A bitmap.\n \u2022 .trip-code (s32, out) trip code if VF-S11 is in tripped state.\n \u2022 .error-count (s32, out) number of Modbus transactions which returned an error\n \u2022 .max-speed (bit, in) ignore the loop-time parameter and run Modbus at maximum speed, at the\n expense of higher CPU usage. Suggested use during spindle positioning.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 402 / 1290\n \n 6.17.3 Parameters\n Where is vfs11_vfd or the name given during loading with the -n option.\n \u2022 .frequency-limit (float, RO) upper limit read from VFD setup.\n \u2022 .loop-time (float, RW) how often the Modbus is polled (default interval 0.1 seconds)\n@@ -21526,15 +21526,15 @@\n # 1 2\n STOPBITS=1\n #rs232 rs485\n SERIAL_MODE=rs485\n # up down none\n # this feature might not work with a stock Ubuntu\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n # libmodbus5/libmodbus-dev package, and generate a warning\n # execution will continue as if RTS_MODE=up were given.\n RTS_MODE=up\n #--------------------# modbus timers in seconds\n # inter-character timer\n BYTE_TIMEOUT=0.5\n@@ -21573,15 +21573,15 @@\n # see orient.9 and motion.9\n net spindle-orient spindle.0.orient spindle-vfd.max-speed spindle-vfd.jog-mode\n # take precedence over control panel\n setp spindle-vfd.enable 1\n \n 403 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 404 / 1290\n \n 6.17.6 Panel operation\n The vfs11_vfd driver takes precedence over panel control while it is enabled (see enable pin), effectively disabling the panel. Clearing the enable pin re-enables the panel. Pins and parameters can still\n be set, but will not be written to the VFD untile the enable pin is set. Operating parameters are still\n read while bus control is disabled. Exiting the vfs11_vfd driver in a controlled way will release the\n@@ -21615,15 +21615,15 @@\n protocol. So the last parameter which you\u2019d want to change is the protocol - set from Toshiba Inverter\n Protocol to Modbus; thereafter, the Windows app is useless.\n To increase the upper frequency limit, the UL and FH parameters must be changed on the panel. I\n increased them from 50 to 80.\n See dump-params.mio for a description of non-standard VF-S11 parameters of my setup. This file is\n for the modio Modbus interactive utility.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 405 / 1290\n \n 6.17.9 Programming Note\n The vfs11_vfd driver uses the libmodbus version 3 library which is more recent than the version 2\n code used in gs2_vfd.\n The Ubuntu libmodbus5 and libmodbus-dev packages are only available starting from Ubuntu 12\n@@ -21631,15 +21631,15 @@\n Therefore, building vfs11_vfd using this library might generate a warning if RTS_MODE= is specified\n in the INI file.\n To use the full functionality on lucid and precise:\n \u2022 remove the libmodbus packages: sudo apt-get remove libmodbus5 libmodbus-dev\n \u2022 build and install libmodbus version 3 from source as outlined here.\n Libmodbus does not build on Ubuntu Hardy, hence vfs11_vfd is not available on Hardy.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 406 / 1290\n \n Chapter 7\n \n Hardware Examples\n 7.1 PCI Parallel Port\n@@ -21670,15 +21670,15 @@\n and then added the following lines so the parport will be read and written:\n addf parport.1.read base-thread\n addf parport.1.write base-thread\n \n After doing the above then run your config and verify that the parallel port got loaded in Machine/Show\n HAL Configuration window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 407 / 1290\n \n 7.2 Spindle Control\n LinuxCNC can control up to 8 spindles. The number is set in the INI file. The examples below all\n refer to a single-spindle config with spindle control pins with names like spindle.0... In the case of a\n multiple spindle machine all that changes is that additional pins exist with names such as spindle.6...\n@@ -21714,15 +21714,15 @@\n \n 7.2.3 Spindle Enable\n If you need a spindle enable signal, link your output pin to spindle.0.on. To link these pins to a\n parallel port pin put something like the following in your .hal file, making sure you pick the pin that\n is connected to your control device.\n net spindle-enable spindle.0.on => parport.0.pin-14-out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 408 / 1290\n \n 7.2.4 Spindle Direction\n If you have direction control of your spindle, then the HAL pins spindle.N.forward and spindle.N.reverse\n are controlled by the G-codes M3 and M4. Spindle speed Sn must be set to a positive non-zero value\n for M3/M4 to turn on spindle motion.\n@@ -21764,15 +21764,15 @@\n # the output of spindle ramp is sent to the scale in\n net spindle-ramped <= spindle-ramp.out => scale.0.in\n # to know when to start the motion we send the near component\n # (named spindle-at-speed) to the spindle commanded speed from\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 409 / 1290\n \n # the signal spindle-cmd and the actual spindle speed\n # provided your spindle can accelerate at the maxv setting.\n net spindle-cmd => spindle-at-speed.in1\n net spindle-ramped => spindle-at-speed.in2\n@@ -21812,15 +21812,15 @@\n 1 In this example, we will assume that some encoders have already been issued to axes/joints 0, 1, and 2. So the next encoder\n available for us to attach to the spindle would be number 3. Your situation may differ.\n 2 The HAL encoder index-enable is an exception to the rule in that it behaves as both an input and an output, see the Encoder\n Section for details\n 3 It is because we selected non-quadrature simple counting\u2026 above that we can get away with quadrature counting without\n having any B quadrature input.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 410 / 1290\n \n 7.2.6.2 Spindle At Speed\n To enable LinuxCNC to wait for the spindle to be at speed before executing a series of moves, the\n spindle.N.at-speed needs to turn true at the moment the spindle is at the commanded speed. To\n achieve this you need spindle feedback from an encoder. Since the feedback and the commanded\n@@ -21860,15 +21860,15 @@\n loadrt encoder num_chan=1\n loadrt mux4 count=1\n addf encoder.capture-position servo-thread\n addf encoder.update-counters base-thread\n addf mux4.0 servo-thread\n # If your MPG outputs a quadrature signal per click set x4 to 1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 411 / 1290\n \n # If your MPG puts out 1 pulse per click set x4 to 0\n setp encoder.0.x4-mode 0\n # For velocity mode, set to 1\n # In velocity mode the axis stops when the dial is stopped\n@@ -21915,15 +21915,15 @@\n loadrt ilowpass\n addf ilowpass.0 servo-thread\n setp ilowpass.0.scale 1000\n setp ilowpass.0.gain 0.01\n # If your MPG outputs a quadrature signal per click set x4 to 1\n # If your MPG puts out 1 pulse per click set x4 to 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 412 / 1290\n \n setp encoder.0.x4-mode 0\n # For velocity mode, set to 1\n # In velocity mode the axis stops when the dial is stopped\n # even if that means the commanded motion is not completed,\n@@ -21966,15 +21966,15 @@\n 7.4.1 Example\n This example shows the connections needed to use an Automation Direct GS2 VFD to drive a spindle.\n The spindle speed and direction is controlled by LinuxCNC.\n Using the GS2 component involves very little to set up. We start with a StepConf Wizard generated\n config. Make sure the pins with \u201dSpindle CW\u201d and \u201dSpindle PWM\u201d are set to unused in the parallel\n port setup screen.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 413 / 1290\n \n In the custom.hal file we place the following to connect LinuxCNC to the GS2 and have LinuxCNC\n control the drive.\n GS2 Example\n # load the non-realtime component for the Automation Direct GS2 VFDs\n@@ -22003,15 +22003,15 @@\n \u2022 P4.00 (Source of Frequency Command) must be set to Frequency determined by RS232C/RS485\n communication interface, 05.\n \u2022 P9.01 (Transmission Speed) must be set to 9600 baud, 01.\n \u2022 P9.02 (Communication Protocol) must be set to \u201dModbus RTU mode, 8 data bits, no parity, 2 stop\n bits\u201d, 03.\n A PyVCP panel based on this example is here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 414 / 1290\n \n Chapter 8\n \n ClassicLadder\n 8.1 ClassicLadder Introduction\n@@ -22041,15 +22041,15 @@\n along the top and bottom of the page while the rungs are drawn vertically from left to right.\n A program in ladder logic, also called a ladder diagram, is similar to a schematic for a set of relay\n circuits. Ladder logic is useful because a wide variety of engineers and technicians can understand\n and use it without much additional training because of the resemblance.\n Ladder logic is widely used to program PLCs, where sequential control of a process or manufacturing\n operation is required. Ladder logic is useful for simple but critical control systems, or for reworking\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 415 / 1290\n \n old hardwired relay circuits. As programmable logic controllers became more sophisticated it has\n also been used in very complex automation systems.\n Ladder logic can be thought of as a rule-based language, rather than a procedural language. A rung in\n the ladder represents a rule. When implemented with relays and other electromechanical devices, the\n@@ -22079,15 +22079,15 @@\n \n The input on the left, B0, a normally open contact, is connected to the coil (output) on the right, Q0.\n Now imagine a voltage gets applied to the leftmost end, because the input B0 turns true (e.g. the\n input is activated, or the user pushed the NO contact). The voltage has a direct path to reach the coil\n (output) on the right, Q0. As a consequence, the Q0 coil (output) will turn from 0/off/false to 1/on/true.\n If the user releases B0, the Q0 output quickly returns to 0/off/false.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 416 / 1290\n \n 8.1.4 Basic Latching On-Off Circuit\n Building on the above example, suppose we add a switch that closes whenever the coil Q0 is active.\n This would be the case in a relay, where the coil can activate the switch contacts; or in a contactor,\n where there are often several small auxiliary contacts in addition to the large 3-phase contacts that\n@@ -22119,15 +22119,15 @@\n back on.\n 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\n also a very safe circuit, in that if start and stop are both pressed at the same time, the stop function\n always wins.\n This is the basic building block of much of ladder programming, so if you are new to it, you would do\n well to make sure that you understand how this circuit operates.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 417 / 1290\n \n 8.2 ClassicLadder Programming\n 8.2.1 Ladder Concepts\n ClassicLadder is a type of programming language originally implemented on industrial PLCs (it\u2019s\n called Ladder Programming). It is based on the concept of relay contacts and coils, and can be used\n@@ -22156,15 +22156,15 @@\n 8.2.3.1 Files\n Typically ClassicLadder components are placed in the custom.hal file if your working from a Stepconf\n generated configuration. These must not be placed in the custom_postgui.hal file or the Ladder Editor\n menu will be grayed out.\n Note\n Ladder files (.clp) must not contain any blank spaces in the name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 418 / 1290\n \n 8.2.3.2 Realtime Module\n Loading the ClassicLadder real time module (classicladder_rt) is possible from a HAL file, or directly\n using a halcmd instruction. The first line loads real time the ClassicLadder module. The second line\n adds the function classicladder.0.refresh to the servo thread. This line makes ClassicLadder update\n@@ -22243,15 +22243,15 @@\n \n Objects of most interest are numPhysInputs, numPhysOutputs, numS32in, and numS32out.\n Changing these numbers will change the number of HAL bit pins available. numPhysInputs and\n numPhysOutputs control how many HAL bit (on/off) pins are available. numS32in and numS32out\n control how many HAL signed integers (+- integer range) pins are available.\n For example (you don\u2019t need all of these to change just a few):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 419 / 1290\n \n loadrt classicladder_rt numRungs=12 numBits=100 numWords=10\n numTimers=10 numMonostables=10 numCounters=10 numPhysInputs=10\n numPhysOutputs=10 numArithmExpr=100 numSections=4 numSymbols=200\n numS32in=5 numS32out=5\n@@ -22285,29 +22285,29 @@\n If you first load ladder program with the --nogui option then load ClassicLadder again with no options\n the GUI will display the last loaded ladder program.\n In AXIS you can load the GUI from File/Ladder Editor\u2026\n \n 8.2.5 ClassicLadder GUI\n If you load ClassicLadder with the GUI it will display two windows: Section display, and section manager.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 420 / 1290\n \n 8.2.5.1 Sections Manager\n When you first start up ClassicLadder you get an empty Sections Manager window.\n \n Figure 8.1: Sections Manager Default Window\n This window allows you to name, create or delete sections and choose what language that section\n uses. This is also how you name a subroutine for call coils.\n 8.2.5.2 Section Display\n When you first start up ClassicLadder you get an empty Section Display window. Displayed is one\n empty rung.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 421 / 1290\n \n Figure 8.2: Section Display Default Window\n Most of the buttons are self explanatory:\n The Vars button is for looking at variables, toggle it to display one, the other, both, then none of the\n windows.\n@@ -22325,15 +22325,15 @@\n %Q and the first %W (in an equation). You might see some funny labels, such as (103) in the rungs.\n This is displayed (on purpose) because of an old bug- when erasing elements older versions sometimes\n didn\u2019t erase the object with the right code. You might have noticed that the long horizontal connection\n button sometimes did not work in the older versions. This was because it looked for the free code but\n found something else. The number in the brackets is the unrecognized code. The ladder program will\n still work properly, to fix it erase the codes with the editor and save the program.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 422 / 1290\n \n 8.2.5.3 The Variable Windows\n 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\n other, both, then none of the variable windows.\n \n@@ -22344,28 +22344,28 @@\n areas at the top allow you to select what 15 variables will be displayed in each column. For instance,\n if the %B Variable column were 15 entries high, and you entered 5 at the top of the column, variables\n %B5 to %B19 would be displayed. The check boxes allow you to set and unset %B variables manually\n as long as the ladder program isn\u2019t setting them as outputs. Any Bits that are set as outputs by the\n program when ClassicLadder is running can not be changed and will be displayed as checked if on\n and unchecked if off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 423 / 1290\n \n Figure 8.4: Watch Window\n The Watch Window displays variable status. The edit box beside it is the number stored in the variable\n and the drop-down box beside that allow you to choose whether the number to be displayed in hex,\n decimal or binary. If there are symbol names defined in the symbols window for the word variables\n showing and the display symbols checkbox is checked in the section display window, symbol names\n will be displayed. To change the variable displayed, type the variable number, e.g. %W2 (if the\n display symbols check box is not checked) or type the symbol name (if the display symbols checkbox\n is checked) over an existing variable number/name and press the Enter Key.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 424 / 1290\n \n 8.2.5.4 Symbol Window\n \n Figure 8.5: Symbol Names window\n This is a list of symbol names to use instead of variable names to be displayed in the section window\n@@ -22373,30 +22373,30 @@\n and capital letters), symbol name. If the variable can have a HAL signal connected to it (%I, %Q, and\n %W-if you have loaded s32 pin with the real time module) then the comment section will show the\n current HAL signal name or lack thereof. Symbol names should be kept short to display better. Keep\n in mind that you can display the longer HAL signal names of %I, %Q and %W variable by clicking on\n them in the section window. Between the two, one should be able to keep track of what the ladder\n program is connected to!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 425 / 1290\n \n 8.2.5.5 The Editor window\n \n Figure 8.6: Editor Window\n \u2022 Add - adds a rung after the selected rung\n \u2022 Insert - inserts a rung before the selected rung\n \u2022 Delete - deletes the selected rung\n \u2022 Modify - opens the selected rung for editing\n Starting from the top left image:\n \u2022 Object Selector, Eraser\n \u2022 N.O. Input, N.C. Input, Rising Edge Input, Falling Edge Input\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 426 / 1290\n \n \u2022 Horizontal Connection, Vertical Connection, Long Horizontal Connection\n \u2022 Timer IEC Block, Counter Block, Compare Variable\n \u2022 Old Timer Block, Old Monostable Block (These have been replaced by the IEC Timer)\n \u2022 COILS - N.O. Output, N.C. Output, Set Output, Reset Output\n@@ -22425,21 +22425,21 @@\n \u2022 Compare - creates a compare block to compare variable to values or other variables, e.g. %W1<=5\n or %W1=%W2. Compare cannot be placed in the right most side of the section display.\n \u2022 Variable Assignment - creates an assignment block so you to assign values to variables, e.g. %W2=7\n or %W1=%W2. ASSIGNMENT functions can only be placed at the right most side of the section display.\n 8.2.5.6 Config Window\n The config window shows the current project status and has the Modbus setup tabs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 427 / 1290\n \n Figure 8.7: Config Window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 428 / 1290\n \n 8.2.6 Ladder objects\n 8.2.6.1 CONTACTS\n Represent switches or relay contacts. They are controlled by the variable letter and number assigned\n to them.\n@@ -22476,15 +22476,15 @@\n The time intervals can be set in multiples of 100&8239;ms, seconds, or minutes.\n There are also Variables for IEC timers that can be read and/or written to in compare or operate\n blocks.\n \u2022 %TMxxx.Q - timer done (Boolean, read write)\n \u2022 %TMxxx.P - timer preset (read write)\n \u2022 %TMxxx.V - timer value (read write)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 429 / 1290\n \n 8.2.6.3 TIMERS\n Represent count down timers. This is deprecated and replaced by IEC Timers.\n Timers have 4 contacts.\n \u2022 E - enable (input) starts timer when true, resets when goes false\n@@ -22514,15 +22514,15 @@\n 8.2.6.5 COUNTERS\n Represent up/down counters.\n There are 7 contacts:\n \u2022 R - reset (input) will reset the count to 0.\n \u2022 P - preset (input) will set the count to the preset number assigned from the edit menu.\n \u2022 U - up count (input) will add one to the count.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 430 / 1290\n \n \u2022 D - down count (input) will subtract one from the count.\n \u2022 E - under flow (output) will be true when the count rolls over from 0 to 9999.\n \u2022 D - done (output) will be true when the count equals the preset.\n \u2022 F - overflow (output) will be true when the count rolls over from 9999 to 0.\n@@ -22555,15 +22555,15 @@\n %W1<2*%C0.V\n \n To find out if S32in bit 2 is equal to 10 the syntax would be:\n %IW2=10\n \n Note: Compare uses the arithmetic equals not the double equals that programmers are used to.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 431 / 1290\n \n 8.2.6.7 VARIABLE ASSIGNMENT\n For variable assignment, e.g. assign this number (or evaluated number) to this variable %xxx, there\n 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.\n When a new variable assignment block is opened be sure to delete the # symbol when you enter an\n@@ -22580,23 +22580,23 @@\n when LinuxCNC is started.\n \n The following figure shows an Assignment and a Comparison Example. %QW0 is a S32out bit and\n %IW0 is a S32in bit. In this case the HAL pin classicladder.0.s32out-00 will be set to a value of\n 5 and when the HAL pin classicladder.0.s32in-00 is 0 the HAL pin classicladder.0.out-00 will\n be set to True.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 8.8: Assign/Compare Ladder Example\n \n Figure 8.9: Assignment Expression Example\n \n 432 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 433 / 1290\n \n Figure 8.10: Comparison Expression Example\n \n 8.2.6.8 COILS\n Coils represent relay coils. They are controlled by the variable letter and number assigned to them.\n@@ -22622,15 +22622,15 @@\n If you use a N.C. contact with a N.C. coil the logic will work (when the coil is energized the\n contact will be closed) but that is really hard to follow!\n \n A JUMP COIL is used to JUMP to another section, like a goto in BASIC programming language.\n If you look at the top left of the sections display window you will see a small label box and a longer\n comment box beside it. Now go to Editor\u2192Modify then go back to the little box, type in a name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 434 / 1290\n \n Go ahead and add a comment in the comment section. This label name is the name of this rung only\n and is used by the JUMP COIL to identify where to go.\n When placing a JUMP COIL, add it in the rightmost position and change the label to the rung you want\n to JUMP to.\n@@ -22677,15 +22677,15 @@\n \u2022 %M \u0300\n __xx__.P \u0300 - Monostable xx preset (integer)\n \u2022 %C \u0300\n __xx__.D \u0300 - Counter xx done (Boolean, user read only)\n \u2022 %C \u0300\n __xx__.E \u0300 - Counter xx empty overflow (Boolean, user read only)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 435 / 1290\n \n \u2022 %C \u0300\n __xx__.F \u0300 - Counter xx full overflow (Boolean, user read only)\n \u2022 %C \u0300\n __xx__.V \u0300 - Counter xx current value (integer)\n@@ -22724,15 +22724,15 @@\n Selector arrow, Eraser\n Ordinary step, Initial (Starting) step\n Transition, Step and Transition\n Transition Link-Downside, Transition Link-Upside\n Pass-through Link-Downside, Pass-through Link-Upside Jump\n Link, Comment Box\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 436 / 1290\n \n Figure 8.11: Sequence Editor Window\n \u2022 ORDINARY STEP - has a unique number for each one\n \u2022 STARTING STEP - a sequential program must have one. This is where the program will start.\n \u2022 TRANSITION - shows the variable that must be true for control to pass through to the next step.\n@@ -22743,15 +22743,15 @@\n \u2022 PASS-THROUGH LINK-DOWNSIDE - splits the logic flow to two lines that BOTH must be true to\n continue (Think AND logic)\n \u2022 PASS-THROUGH LINK-UPSIDE - combines two concurrent (AND logic) logic lines back together\n \u2022 JUMP LINK - connects steps that are not underneath each other such as connecting the last step to\n the first\n \u2022 COMMENT BOX - used to add comments\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 437 / 1290\n \n To use links, you must have steps already placed. Select the type of link, then select the two steps or\n transactions one at a time. It takes practice!\n With sequential programming: The variable %X \u0300\n __xxx__ (e.g., \u0300\n@@ -22785,21 +22785,21 @@\n \u2022 6 - write single register\n \u2022 8 - echo test\n \u2022 15 - write multiple coils\n \u2022 16 - write multiple registers\n If you do not specify a --modmaster when loading the ClassicLadder non-realtime program this page\n will not be displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 438 / 1290\n \n Figure 8.12: Modbus I/O Config\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 439 / 1290\n \n Figure 8.13: Modbus Communication Config\n \u2022 SERIAL PORT - For IP blank. For serial the location/name of serial driver, e.g., /dev/ttyS0 ( or\n /dev/ttyUSB0 for a USB-to-serial converter).\n \u2022 SERIAL SPEED - Should be set to speed the slave is set for - 300, 600, 1200, 2400, 4800, 9600,\n@@ -22814,15 +22814,15 @@\n \u2022 DEBUG LEVEL - Set this to 0-3 (0 to stop printing debug info besides no-response errors).\n \u2022 READ COILS/INPUTS MAP TO - Select what variables that read coils/inputs will update. (B or Q).\n \u2022 WRITE COILS MAP TO - Select what variables that write coils will updated from (B,Q,or I).\n \u2022 READ REGISTERS/HOLDING - Select what variables that read registers will update (W or QW).\n \u2022 WRITE REGISTERS MAP TO - Select what variables that read registers will updated from (W, QW,\n or IW).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 440 / 1290\n \n \u2022 SLAVE ADDRESS - For serial the slaves ID number usually settable on the slave device (usually\n 1-256). For IP the slave IP address plus optionally the port number.\n \u2022 TYPE ACCESS - This selects the MODBUS function code to send to the slave (eg what type of\n request).\n@@ -22861,15 +22861,15 @@\n \u2022 ClassicLadder uses RTU protocol (not ASCII).\n \u2022 8 data bits, No parity is used, and 1 stop bit is also known as 8-N-1.\n \u2022 Baud rate must be the same for slave and master. ClassicLadder can only have one baud rate so all\n the slaves must be set to the same rate.\n \u2022 Pause inter frame is the time to pause after receiving an answer.\n \u2022 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).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 441 / 1290\n \n 8.2.10.1 MODBUS Info\n \u2022 ClassicLadder can use distributed inputs/outputs on modules using the Modbus protocol (\u201dmaster\u201d:\n polling slaves).\n \u2022 The slaves and theirs I/O can be configured in the config window.\n@@ -22899,24 +22899,24 @@\n 8.2.11 Debugging modbus problems\n A good reference for the protocol: https://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf.\n If you run linuxcnc/classicladder from a terminal, it will print the Modbus commands and slave responses.\n Here we set ClassicLadder to request slave 1, to read holding registers (function code 3) starting\n at address 8448 (0x2100). We ask for 1 (2 byte wide) data element to be returned. We map it to a\n ClassicLadder variable starting at 2.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 442 / 1290\n \n Figure 8.14: Modbus I/O Register Setup\n Note in this image we have set the debug level to 1 so modbus messages are printed to the terminal. We\n have mapped our read and written holding registers to ClassicLadder\u2019s %W variables so our returned\n data will be in %W2 as in the other image we mapped the data starting at the 2nd element.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 443 / 1290\n \n Figure 8.15: Modbus Communication Setup\n \n 8.2.11.1 Request\n Lets look at an example of reading one hold register at 8448 Decimal (0x2100 Hex).\n@@ -22944,15 +22944,15 @@\n (2\n 1 to 125 (0x7D)\n Bytes)\n (2\n Calculated\n bytes) automatically\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 444 / 1290\n \n Here is an example sent command as printed in the terminal (all Hex):\n INFO CLASSICLADDERModbus I/O module to send: Lgt=8 \n code-83 ) 2 C0 F1\n \n (Slave address-1\n@@ -23063,15 +23063,15 @@\n \u2022 Slave number = 1 (0x1) = Slave address 1\n \u2022 Requested function code = 3 (0x3) = read holding register requested\n \u2022 count of byte registers = 2 (0x1) = return 2 bytes (each register value is 2 bytes wide)\n \u2022 value of highbyte = 0 (0x0) = high byte value of address 8448 (0x2100)\n \u2022 value of lowbyte = 0 (0x0) = high byte value of address 8448 (0x2100)\n \u2022 Checksum = (0xB844)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 446 / 1290\n \n (high and low bytes are combined to create a 16 bit value and then transferred to ClassicLadder\u2019s\n variable.) Read Registers can be mapped to %W or %QW (internal memory or HAL out pins). Write\n registers can be mapped from %W, %QW or %IW (internal memory, HAL out pins or HAL in pins). The\n variable number will start at the number entered in the modbus I/O registry setup page\u2019s column:\n@@ -23090,15 +23090,15 @@\n \n 8.2.12 Setting up ClassicLadder\n In this section we will cover the steps needed to add ClassicLadder to a Stepconf Wizard generated\n config. On the advanced Configuration Options page of Stepconf Wizard check off \u201dInclude ClassicLadder PLC\u201d.\n \n Figure 8.16: Stepconf ClassicLadder\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 447 / 1290\n \n 8.2.12.1 Add the Modules\n If you used the Stepconf Wizard to add ClassicLadder you can skip this step.\n To manually add ClassicLadder you must first add the modules. This is done by adding a couple of\n lines to the custom.hal file.\n@@ -23114,48 +23114,48 @@\n window open the Editor. In the Editor window select Modify. Now a Properties window pops up and\n the Section Display shows a grid. The grid is one rung of ladder. The rung can contain branches.\n A simple rung has one input, a connector line and one output. A rung can have up to six horizontal\n branches. While it is possible to have more than one circuit in a run the results are not predictable.\n \n Figure 8.17: Section Display with Grid\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 448 / 1290\n \n Now click on the N.O. input in the Editor Window.\n \n Figure 8.18: Editor Window\n Now click in the upper left grid to place the N.O. Input into the ladder.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 449 / 1290\n \n Figure 8.19: Section Display with Input\n Repeat the above steps to add a N.O. output to the upper right grid and use the Horizontal Connection\n to connect the two. It should look like the following. If not, use the Eraser to remove unwanted\n sections.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 450 / 1290\n \n Figure 8.20: Section Display with Rung\n Now click on the OK button in the Editor window. Now your Section Display should look like this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 451 / 1290\n \n Figure 8.21: Section Display Finished\n To save the new file select Save As and give it a name. The .clp extension will be added automatically.\n It should default to the running config directory as the place to save it.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 452 / 1290\n \n Figure 8.22: Save As Dialog\n Again if you used the Stepconf Wizard to add ClassicLadder you can skip this step.\n To manually add a ladder you need to add add a line to your custom.hal file that will load your ladder\n file. Close your LinuxCNC session and add this line to your custom.hal file.\n@@ -23166,15 +23166,15 @@\n \n 8.3 ClassicLadder Examples\n 8.3.1 Wrapping Counter\n To have a counter that wraps around you have to use the preset pin and the reset pin. When you\n create the counter set the preset at the number you wish to reach before wrapping around to 0. The\n logic is if the counter value is over the preset then reset the counter and if the underflow is on then\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 453 / 1290\n \n set the counter value to the preset value. As you can see in the example when the counter value is\n greater than the counter preset the counter reset is triggered and the value is now 0. The underflow\n output %Q2 will set the counter value at the preset when counting backwards.\n \n@@ -23184,15 +23184,15 @@\n This example shows you how to reject extra pulses from an input. Suppose the input pulse %I0 has\n an annoying habit of giving an extra pulse that spoils our logic. The TOF (Timer Off Delay) prevents\n the extra pulse from reaching our cleaned up output %Q0. How this works is when the timer gets\n an input the output of the timer is on for the duration of the time setting. Using a normally closed\n contact %TM0.Q the output of the timer blocks any further inputs from reaching our output until it\n times out.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 454 / 1290\n \n Figure 8.24: Reject Extra Pulse\n \n 8.3.3 External E-Stop\n The External E-Stop example is in the /config/classicladder/cl-estop folder. It uses a PyVCP panel to\n@@ -23206,15 +23206,15 @@\n \n Next we add ClassicLadder to our custom.hal file by adding these two lines:\n loadrt classicladder_rt\n addf classicladder.0.refresh servo-thread\n \n Next we run our config and build the ladder as shown here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 455 / 1290\n \n Figure 8.25: E-Stop Section Display\n After building the ladder select Save As and save the ladder as estop.clp\n Now add the following line to your custom.hal file.\n # Load the ladder\n@@ -23225,15 +23225,15 @@\n \u2022 %I1 = Input from LinuxCNC\u2019s E-Stop\n \u2022 %I2 = Input from LinuxCNC\u2019s E-Stop Reset Pulse\n \u2022 %I3 = Input from the PyVCP panel reset button\n \u2022 %Q0 = Output to LinuxCNC to enable\n \u2022 %Q1 = Output to external driver board enable pin (use a N/C output if your board had a disable pin)\n Next we add the following lines to the custom_postgui.hal file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 456 / 1290\n \n # E-Stop example using PyVCP buttons to simulate external components\n # The PyVCP checkbutton simulates a normally closed external E-Stop\n net ext-estop classicladder.0.in-00 <= pyvcp.py-estop\n # Request E-Stop Enable from LinuxCNC\n@@ -23267,36 +23267,36 @@\n \u201dpy-reset\u201d\n \u201dReset\u201d\n \n \n \n Now start up your config and it should look like this.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 457 / 1290\n \n Figure 8.26: AXIS E-Stop\n Note that in this example like in real life you must clear the remote E-Stop (simulated by the checkbox)\n before the AXIS E-Stop or the external Reset will put you in OFF mode. If the E-Stop in the AXIS screen\n was pressed, you must press it again to clear it. You cannot reset from the external after you do an\n E-Stop in AXIS.\n \n 8.3.4 Timer/Operate Example\n In this example we are using the Operate block to assign a value to the timer preset based on if an\n input is on or off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 458 / 1290\n \n Figure 8.27: Timer/Operate Example\n In this case %I0 is true so the timer preset value is 10. If %I0 was false the timer preset would be 5.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 459 / 1290\n \n Chapter 9\n \n Advanced Topics\n 9.1 Kinematics\n@@ -23324,15 +23324,15 @@\n Cartesian coordinates. The A B C axes refer to rotational coordinates about the X Y Z axes respectively.\n The U V W axes refer to additional coordinates that are commonly made colinear to the X Y Z axes\n respectively.\n 1 The word \u201daxes\u201d is also commonly (and wrongly) used when talking about CNC machines, and referring to the moving\n directions of the machine.\n 2 Kinematics: a two way function to transform from Cartesian space to joint space.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 460 / 1290\n \n 9.1.2 Trivial Kinematics\n The simplest machines are those in which which each joint is placed along one of the Cartesian axes.\n On these machines the mapping from Cartesian space (the G-code program) to the joint space (the\n actual actuators of the machine) is trivial. It is a simple 1:1 mapping:\n@@ -23386,15 +23386,15 @@\n 3 If the machine (for example a lathe) is mounted with only the X, Z and A axes and the INI file of LinuxCNC contains only\n \n the definition of these 3 joints, then the previous assertion is false. Because we currently have (joint0=X, joint1=Z, joint2=A)\n which assumes that joint1=Y. To make this work in LinuxCNC just define all the axes (XYZA), LinuxCNC will then use a simple\n loop in HAL for unused Y axis.\n 4 Another way to make it work is to change the corresponding code and recompile the software.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 461 / 1290\n \n Use of the coordinates= parameter is recommended for configurations that omit axis letters. 5\n The trivkins kinematics module also allows the same coordinate to be specified for more than one\n joint. This feature can be useful on machines like a gantry having two independent motors for the y\n coordinate. Such a machine could use coordinates=xyyz resulting in joint assignments:\n@@ -23415,15 +23415,15 @@\n \n Figure 9.1: Bipod setup\n 5 Historically, the trivkins module did not support the coordinates= parameter so lathe configs were often configured as XYZ\n machines. The unused Y axis was configured to 1) home immediately, 2) use a simple loopback to connect its position command\n HAL pin to its position feedback HAL pin, and 3) hidden in gui displays. Numerous sim configs use these methods in order to\n share common HAL files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 462 / 1290\n \n The Bipod we are talking about is a device that consists of 2 motors placed on a wall, from which a\n device is hung using some wire. The joints in this case are the distances from the motors to the device\n (named AD and BD in the figure).\n The position of the motors is fixed by convention. Motor A is in (0,0), which means that its X coordinate\n@@ -23455,15 +23455,15 @@\n double x = (AD2 - BD2 + Bx * Bx) / (2 * Bx);\n double y2 = AD2 - x * x;\n if(y2 < 0) return -1;\n pos->tran.x = x;\n pos->tran.y = sqrt(y2);\n return 0;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 463 / 1290\n \n 9.1.3.2 Inverse transformation\n The inverse kinematics is much easier in our example, as we can write it directly:\n \n or translated to actual code:\n@@ -23498,15 +23498,15 @@\n \n int kinematicsSwitchable(void)\n int kinematicsSwitch(int switchkins_type)\n KINS_NOT_SWITCHABLE\n \n The function kinematicsSwitchable() returns 1 if multiple kinematics types are supported. The function kinematicsSwitch() selects the kinematics type. See Switchable Kinematitcs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 464 / 1290\n \n Note\n The majority of provided kinematics modules support a single kinematics type and use the directive\n \u201dKINS_NOT_SWITCHABLE\u201d to supply defaults for the required kinematicsSwitchable() and kinematicsSwitch() functions.\n \n@@ -23541,15 +23541,15 @@\n Note\n This document does not cover the creation of a vismach model which, while certainly very useful,\n requires just as much careful modeling if it is to match the genserkins model derived in this document.\n \n Note\n There may be errors and/or shortcomings \u2014 use at your own risk!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 465 / 1290\n \n 9.2.2 General\n With the proliferation of industrial robots comes an increased interest to control used robots with\n LinuxCNC. A common type of robot used in industry and manufacturing is the \u201dserial manipulator\u201d\n designed as a series of motorized joints connected by rigid links. Serial robots often have six joints\n@@ -23592,15 +23592,15 @@\n \n 9.2.4 Modified DH-Parameters as used in genserkins\n Note that genserkins does not handle offsets to theta-values \u2014 theta is the joint variable that is controlled by LinuxCNC. With the CS aligned with the joint, a rotation around its Z-Axis is identical to\n the rotation commanded to that joint by LinuxCNC. This makes it impossible to define the 0\u00b0 position\n of our robots joints arbitrarily.\n The three configurable parameters are:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 466 / 1290\n \n 1. alpha : positive or negative rotation (in radians) around the X-axis of the \u201dcurrent coordinate\n system\u201d\n 2. a : positive distance, along X, between two joint axes specified in machine units (mm or inch)\n defined in the system\u2019s INI file.\n@@ -23632,87 +23632,87 @@\n but there is no point in setting it other than 0.\n \n 9.2.8 Detailed Example (RV-6SL)\n Described below is a method to derive the required \u201dmodified DH-parameters\u201d for a Mitsubishi RV6SDL and how to set the parameters in the HAL file to be used with the genserkins kinematics in\n LinuxCNC. The necessary dimensions are best taken from a dimensional drawing provided by the\n manufacturer of the robot.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 467 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 468 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 469 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 470 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 471 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 472 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 473 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 474 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 475 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 476 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 477 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 478 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 479 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 480 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 481 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 482 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 483 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 484 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 485 / 1290\n \n 9.2.9 Credits\n Thanks to user Aciera for all text and the graphics for the RV-6SL robot!\n \n 9.3 5-Axis Kinematics\n@@ -23741,27 +23741,27 @@\n the cutter tip position and the cutter orientation relative to the workpiece coordinate system. Two\n vectors, as generated by most CAM systems and shown in Fig. 1, contain this information:\n \n The K vector is equivalent to the 3rd vector from the pose matrix E6 that was used in the 6-axis robot\n kinematics [3] and the Q vector is equivalent to the 4th vector of E6 . In MASTERCAM for example\n this information is contained in the intermediate output \u201d.nci\u201d file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 486 / 1290\n \n Figure 9.2: Cutter location data\n \n 9.3.4 Translation and Rotation Matrices\n Homogeneous transformations provide a simple way to describe the mathematics of multi-axis machine kinematics. A transformation of the space H is a 4x4 matrix and can represent translation and\n rotation transformations. Given a point x,y,x described by a vector u = {x,y,z,1}T , then its transformation v is represented by the matrix product\n \n There are four fundamental transformation matrices on which 5-axis kinematics can be based:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 487 / 1290\n \n The matrix T(a,b,c) implies a translation in the X, Y, Z coordinate directions by the amounts a, b, c\n respectively. The R matrices imply rotations of the angle theta about the X, Y and Z coordinate axes\n respectively. The C and S symbols refer to cosine and sine functions respectively.\n \n@@ -23771,15 +23771,15 @@\n \u2022 A rotary table which rotates about the vertical Z-axes (C-rotation, secondary) mounted on a tilting\n table which rotates about the X- or Y-axis (A- or B-rotation, primary). The workpiece is mounted on\n the rotary table.\n \u2022 A tilting table which rotates about the X- or Y-axis (A- or B-rotation, secondary) is mounted on a\n rotary table which rotates about the Z-axis (C-rotation, primary), with the workpiece on the tilting\n table.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 488 / 1290\n \n Figure 9.3: General configuration and coordinate systems\n 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\n describe the relative position and orientation between these coordinate frames\n We need to describe a relationship between the workpiece coordinate system and the tool coordinate system. This can be defined by a transformation matrix w At , which can be found by subsequent\n@@ -23787,43 +23787,43 @@\n defined coordinate system. In general such a transformation may look as follows:\n \n where each matrix i-1 Aj is a translation matrix T or a rotation matrix R of the form (2,3).\n Matrix multiplication is a simple process in which the elements of each row of the lefthand matrix\n A is multiplied by the elements of each column of the righthand matrix B and summed to obtain an\n element in the result matrix C, ie.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 489 / 1290\n \n In Fig. 2 a generic configuration with coordinate systems is shown [4]. It includes table rotary/tilting\n axes as well as spindle rotary/tilting axes. Only two of the rotary axes are actually used in a machine\n tool.\n First we will develop the transformations for the first type of configuration mentioned above, ie. a table\n tilting/rotary (trt) type with no rotating axis offsets. We may give it the name xyzac-trt configuration.\n We also develop the transformations for the same type (xyzac-trt), but with rotating axis offsets.\n Then we develop the transformations for a xyzbc-trt configuration with rotating axis offsets.\n 9.3.5.1 Transformations for a xyzac-trt machine tool with work offsets\n \n Figure 9.4: vismach model of xyzac-trt with coincident rotation axes\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 490 / 1290\n \n We deal here with a simplified configuration in which the tilting axis and rotary axis intersects at a\n point called the pivot point as shown in Fig. 4. therefore the two coordinate systems Ows and Owp of\n Fig. 2 are coincident.\n \n Figure 9.5: Table tilting/rotary configuration\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 491 / 1290\n \n In these equations Lx , Ly , Lz defines the offsets of the pivot point of the two rotary axes A and C\n relative to the workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances\n of the pivot point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot\n point. The pivot point is at the intersection of the two rotary axes. The signs of the SA and SC terms\n@@ -23842,56 +23842,56 @@\n Equating the last column of (8) with the tool position vector Q, we can write:\n \n The vector on the right hand side can also be written as the product of a matrix and a vector resulting\n in:\n \n This can be expanded to give\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 492 / 1290\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (13) as P = (Q AP )-1 * Q. Noting that the square matrix is a homogeneous 4x4 matrix containing a rotation matrix R and translation vector q, for which the inverse can\n be written as:\n \n where R^T is the transpose of R (rows and columns swappped). We therefore obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 493 / 1290\n \n 9.3.5.2 Transformations for a xyzac-trt machine with rotary axis offsets\n \n Figure 9.6: vismach model of xyzac-trt with rotational axis offsets (positive)\n We deal here with a extended configuration in which the tilting axis and rotary axis do not intersect\n at a point but have an offset Dy . Furthermore, there is also an z-offset between the two coordinate\n systems Ows and Owp of Fig. 2, called Dz . A vismach model is shown in Fig. 5 and the offsets are\n shown in Fig. 6 (positive offsets in this example). To simplify the configuration, the offsets Lx , Ly , Lz\n of the previous case are not included. They are probably not necessary if one uses the G54 offsets in\n LinuxCNC by means of the \u201dtouch of\u201d facility.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 494 / 1290\n \n Figure 9.7: Table tilting/rotary xyzac-trt configuration, with axis offsets\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n In these equations Dy , Dz defines the offsets of the pivot point of the rotary axes A relative to the\n workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances of the pivot\n point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot point. The\n pivot point is on the A rotary axis.\n When multiplied in accordance with (18), we obtain:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 495 / 1290\n \n We can now equate the third column of this matrix with our given tool orientation vector K, ie.:\n \n From these equations we can solve for the rotation angles thetaA , thetaC . From the third row we find:\n \n@@ -23905,42 +23905,42 @@\n in:\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (25) as P = (Q AP )-1 * Q using (15) as before. We thereby obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 496 / 1290\n \n 9.3.5.3 Transformations for a xyzbc-trt machine with rotary axis offsets\n \n Figure 9.8: vismach model of xyzbc-trt with rotational axis offsets (negative)\n We deal here again with a extended configuration in which the tilting axis (about the y-axis) and rotary\n axis do not intersect at a point but have an offset Dx . Furthermore, there is also an z-offset between\n the two coordinate systems Ows and Owp of Fig. 2, called Dz . A vismach model is shown in Fig. 7\n (negative offsets in this example) and the positive offsets are shown in Fig. 8.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 497 / 1290\n \n Figure 9.9: Table tilting/rotary xyzbc-trt configuration, with axis offsets\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n In these equations Dx , Dz defines the offsets of the pivot point of the rotary axes B relative to the\n workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances of the pivot\n point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot point. The\n pivot point is on the B rotary axis.\n When multiplied in accordance with (29), we obtain:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 498 / 1290\n \n We can now equate the third column of this matrix with our given tool orientation vector K, i.e.:\n \n From these equations we can solve for the rotation angles thetaB , thetaC . From the third row we find:\n \n@@ -23955,15 +23955,15 @@\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (37) as P = (Q AP )-1 * Q.\n With the same approach as before, we obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 499 / 1290\n \n 9.3.6 Table Rotary/Tilting Examples\n LinuxCNC includes kinematics modules for the xyzac-trt and xyzbc-trt topologies described in the\n mathematics detailed above. For interested users, the source code is available in the git tree in the\n src/emc/kinematics/ directory.\n@@ -24007,15 +24007,15 @@\n \n 9.3.7 Custom Kinematics Components\n LinuxCNC implements kinematics using a HAL component that is loaded at startup of LinuxCNC. The\n most common kinematics module, trivkins, implements identity (trivial) kinematics where there is a\n one-to-one correspondence between an axis coordinate letter and a motor joint. Additional kinematics\n modules for more complex systems (including xyzac-trt and xyzbc-trt described above) are available.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 500 / 1290\n \n See the kins manpage (\\$ man kins) for brief descriptions of the available kinematics modules.\n The kinematics modules provided by LinuxCNC are typically written in the C-language. Since a standard structure is used, creation of a custom kinematics module is facilitated by copying an existing\n source file to a user file with a new name, modifying it, and then installing.\n Installation is done using halcompile:\n@@ -24037,29 +24037,29 @@\n module. These pins can be connected to a signal for dynamic control or set once with HAL connections\n like:\n # set offset parameters\n net :tool-offset motion.tooloffset.z xyzac-trt-kins.tool-offset\n setp xyzac-trt-kins.y-offset 0\n setp xyzac-trt-kins.z-offset 20\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 9.3.8 Figures\n \n Figure 9.10: Table tilting/rotating configuration\n \n 501 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 9.11: Spindle/table tilting configuration\n \n 502 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 503 / 1290\n \n Figure 9.12: Spindle tilting/rotary configuration\n \n 9.3.9 REFERENCES\n 1. AXIS MACHINE TOOLS: Kinematics and Vismach Implementation in LinuxCNC, RJ du Preez,\n@@ -24074,15 +24074,15 @@\n \n 9.4 Switchable Kinematics (switchkins)\n 9.4.1 Introduction\n A number of kinematics modules support the switching of kinematics calculations. These modules\n support a default kinematics method (type0), a second built-in method (type1), and (optionally) a userprovided kinematics method (type2). Identity kinematics are typically used for the type1 method.\n The switchkins functionality can be used for machines where post-homing joint control is needed during setup or to avoid movement near singularities from G-code. Such machines use specific kinematics\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 504 / 1290\n \n calculations for most operations but can be switched to identity kinematics for control of individual\n joints after homing.\n The kinematics type is selected by a motion module HAL pin that can be updated from a G-code\n program or by interactive MDI commands. The halui provisions for activating MDI commands can be\n@@ -24118,15 +24118,15 @@\n # custom identity ordering: joint0==c, joint1==b, ...\n # KINEMATICS = genhexkins coordinates=cbazyx\n \n Note\n If the coordinates= parameter is omitted, the default joint-letter identity assignments are\n joint0==x,joint1=y,\u2026\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 505 / 1290\n \n The joint assignments provided for identity kinematics when using the coordinates parameter are\n identical to those provided for the trivkins module. However, duplication of axis letters to assign\n multiple joints for a coordinate letter is not generally applicable for serial or parallel kinematics (like\n genserkins, pumakins, genhexkins, etc.) where there is no simple relationship between joints and\n@@ -24158,15 +24158,15 @@\n 9.4.4 Usage\n 9.4.4.1 HAL Connections\n Switchkins functionality is enabled by the pin motion.switchkins-type. Typically, this pin is sourced\n by an analog output pin like motion.analog-out-03 so that it can be set by M68 commands. Example:\n net :kinstype-select <= motion.analog-out-03\n net :kinstype-select => motion.switchkins-type\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 506 / 1290\n \n 9.4.4.2 G-/M-code commands\n Kinstype selection is managed using G-code sequences like:\n ...\n M68 E3 Q1 ;update analog-out-03 to select kinstype 1\n@@ -24205,15 +24205,15 @@\n XYZABCUVW):\n [AXIS_L]\n MIN_LIMIT =\n MAX_LIMIT =\n MAX_VELOCITY =\n MIN_ACCELERATION =\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 507 / 1290\n \n The INI file limits specified apply to the type 0 default kinematics type that is activated at startup.\n These limits may not be applicable when switching to alternative kinematics. However, since an\n interpreter-motion synchronization is required when switching kinematics, INI-HAL pins can be used\n to setup limits for a pending kinematics type.\n@@ -24257,15 +24257,15 @@\n the set XYZABCUVW. The INI file settings ([AXIS_L]) are not applicable when operating with identity\n (type1) kinematics. To address this use case, the user M-code scripts can be designed as follows:\n M129 (Switch to identity type1)\n 1. read and parse INI file\n 2. HAL: setp the INI-HAL limit pins for each axis letter ([AXIS_L]) according to the identity-referenced\n joint number INI file setting ([JOINT_N])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 508 / 1290\n \n 3. HAL: setp motion.switchkins-type 1\n 4. MDI: execute a syncing G-code (M66E0L0)\n M128 (restore robot default kinematics type 0)\n 1. read and parse INI file\n@@ -24310,15 +24310,15 @@\n directory and edited to supply custom kinematics with kinstype==2.\n The user custom kinematics file can be compiled from out-of-tree source locations for rt-preempt\n implementations or by replacing the in-tree template file (src/emc/kinematics/userkfuncs.c) for rtai\n systems.\n Preempt-rt make example:\n $ userkfuncs=/home/myname/kins/mykins.c make && sudo make setuid\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 509 / 1290\n \n 9.4.7 Warnings\n Unexpected behavior can result if a G-code program is inadvertently started with an incompatible\n kinematics type. Unwanted behavior can be circumvented in G-code programs by:\n 1. Connecting appropriate kinstype.is.N HAL pins to digital input pins (like motion.digital-in-0m).\n@@ -24351,15 +24351,15 @@\n manipulable input to the process that brings the process measured value back to its desired set point.\n Unlike simpler control algorithms, the PID controller can adjust process outputs based on the history\n and rate of change of the error signal, which gives more accurate and stable control. (It can be\n shown mathematically that a PID loop will produce accurate, stable control in cases where a simple\n proportional control would either have a steady-state error or would cause the process to oscillate).\n 6 This Subsection is taken from an much more extensive article found at https://en.wikipedia.org/wiki/PID_controller\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 510 / 1290\n \n 9.5.1.1 Control loop basics\n Intuitively, the PID loop tries to automate what an intelligent operator with a gauge and a control\n knob would do. The operator would read a gauge showing the output measurement of a process, and\n use the knob to adjust the input of the process (the action) until the process\u2019s output measurement\n@@ -24398,15 +24398,15 @@\n set point. A simple proportional system either oscillates, moving back and forth around the set point\n because there\u2019s nothing to remove the error when it overshoots, or oscillates and/or stabilizes at a\n too low or too high value. By adding a negative proportion of (i.e. subtracting part of) the average\n error from the process input, the average difference between the process output and the set point is\n always being reduced. Therefore, eventually, a well-tuned PID loop\u2019s process output will settle down\n at the set point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 511 / 1290\n \n Derivative To handle the future, the first derivative (the slope of the error) over time is calculated,\n and multiplied by another (negative) constant D, and also added to (subtracting error from) the controlled quantity. The derivative term controls the response to a change in the system. The larger the\n derivative term, the more rapidly the controller responds to changes in the process\u2019s output.\n More technically, a PID loop can be characterized as a filter applied to a complex frequency-domain\n@@ -24484,15 +24484,15 @@\n D\n \n Pc /1.2\n \n 7 Introduced in the 1942 paper Optimum Settings for Automatic Controllers, DOI 10.1115/1.2899060 also available from\n The Internet Archive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Control type\n PID\n \n 512 / 1290\n \n P\n@@ -24536,15 +24536,15 @@\n deficient code by a an O-word procedure call.\n In its simplest form, a remapped code isn\u2019t much more than a spontaneous call to an O-word procedure. This happens behind the scenes - the procedure is visible at the configuration level, but not at\n the NGC program level.\n Generally, the behavior of a remapped code may be defined in the following ways:\n \u2022 You define a O-word subroutine which implements the desired behavior\n \u2022 Alternatively, you may employ a Python function which extends the interpreter\u2019s behavior.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 513 / 1290\n \n How to glue things together M- and G-codes, and O-words subroutine calls have some fairly different syntax.\n O-word procedures, for example, take positional parameters with a specific syntax like so:\n o call [1.234] [4.65]\n \n@@ -24580,15 +24580,15 @@\n 9.6.2 Getting started\n Defining a code involves the following steps:\n \u2022 Pick a code - either use an unallocated code, or redefine an existing code.\n \u2022 Decide how parameters are handled.\n \u2022 Decide if and how results are handled.\n \u2022 Decide about the execution sequence.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 514 / 1290\n \n 9.6.2.1 Builtin Remaps\n Please note that currently only some existing codes can be redefined, while there are many free codes\n that may be available for remapping. When developing redefined existing code, it is a good idea to\n start with an unassigned G- or M- code, so that you can use both an existing behavior as well as a new\n@@ -24626,15 +24626,15 @@\n which might be made available by remapping. When developing a redefined existing code, it might\n be a good idea to start with an unallocated G- or M-code, so both the existing and new behavior can\n be exercised. When done, redefine the existing code to use your remapping setup.\n \u2022 The current set of unused M-codes open to user definition can be found here.\n \u2022 Unallocated G-codes are listed here.\n \u2022 Existing codes which may be remapped are listed here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 515 / 1290\n \n 9.6.2.3 Parameter handling\n Let\u2019s assume the new code will be defined by an NGC procedure, and needs some parameters, some\n of which might be required, others might be optional. We have the following options to feed values to\n the procedure:\n@@ -24671,15 +24671,15 @@\n [RS274NGC]\n REMAP=M400\n \n modalgroup=10 argspec=Pq ngc=myprocedure\n \n In a nutshell, this means:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 516 / 1290\n \n \u2022 The M400 code takes a required parameter P and an optional parameter Q. Other words in the current\n block are ignored with respect to the M400 code. If the P word is not present, fail execution with an\n error.\n \u2022 When an M400 code is encountered, execute myprocedure.ngc along the other modal group 10 Mcodes as per order of execution.\n@@ -24717,15 +24717,15 @@\n for in the directories specified in the directory specified in [DISPLAY]PROGRAM_PREFIX, then in\n [RS274NGC]SUBROUTINE_PATH. Mutually exclusive with python=. It is an error to omit both ngc=\n and python=.\n python=\n Instead of calling an ngc O-word procedure call a Python function. The function is expected to\n be defined in the module_basename.oword module. Mutually exclusive with ngc=.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 517 / 1290\n \n prolog=\n Before executing an ngc procedure, call this Python function. The function is expected to be\n defined in the module_basename.remap module. Optional.\n epilog=\n@@ -24764,15 +24764,15 @@\n An empty argspec, or no argspec argument at all implies the remapped code does not receive any\n parameters from the block. It will ignore any extra parameters present.\n Note that RS274NGC rules still apply - for instance you may use axis words (e.g., X, Y, Z) only in the\n context of a G-code.\n Axis words may also only be used if the axis is enabled. If only XYZ are enabled, ABCUVW will not be\n available to be used in argspec.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 518 / 1290\n \n Words F, S and T (short FST) will have the normal functions but will be available as variables in the\n remapped function. F will set feedrate, S will set spindle RPM, T will trigger the tool prepare function.\n Words FST should not be used if this behavior is not desired.\n Words DEIJKPQR have no predefined function and are recommended for use as argspec parameters.\n@@ -24814,15 +24814,15 @@\n (the q argspec is optional since its lowercase in the argspec. Use as follows:)\n o100 if [EXISTS[#]]\n (debug, Q word set: #)\n o100 endif\n o endsub\n M2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 519 / 1290\n \n \u2022 Executing M400 will fail with the message user-defined M400: missing: P.\n \u2022 Executing M400 P123 will display P word=123.000000.\n \u2022 Executing M400 P123 Q456 will display P word=123.000000 and Q word set: 456.000000.\n Example for positional parameter passing to NGC procedures Assume the code is defined as\n@@ -24863,15 +24863,15 @@\n Advanced example: Remapped codes in pure Python The interpreter and emccanon modules\n expose most of the Interpreter and some Canon internals, so many things which so far required coding\n in C/C+\\+ can be now be done in Python.\n The following example is based on the nc_files/involute.py script - but canned as a G-code with\n some parameter extraction and checking. It also demonstrates calling the interpreter recursively (see\n self.execute()).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 520 / 1290\n \n Assuming a definition like so (NB: this does not use argspec):\n REMAP=G88.1 modalgroup=1 py=involute\n The involute function in python/remap.py listed below does all word extraction from the current\n block directly. Note that interpreter errors can be translated to Python exceptions. Remember this is\n@@ -24915,15 +24915,15 @@\n y = y0 + a * (sin(t) - t * cos(t))\n self.execute(\u201dG1 X%f Y%f\u201d % (x,y),lineno())\n if c.z_flag: # retract to starting height\n self.execute(\u201dG0 Z%f\u201d % (old_z),lineno())\n except InterpreterException,e:\n msg = \u201d%d: \u2019%s\u2019 - %s\u201d % (e.line_number,e.line_text, e.error_message)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 521 / 1290\n \n return msg\n return INTERP_OK\n \n The examples described so far can be found in configs/sim/axis/remap/getting-started with complete\n@@ -24967,15 +24967,15 @@\n (dire but necessary).\n Note than when remapping an existing code, we completely disable this codes\u2019 built-in functionality\n of the interpreter.\n So our remapped code will need to do a bit more than just generating some commands to move the\n machine as we like - it will also need to replicate those steps from this sequence which are needed to\n keep the interpreter and task happy.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 522 / 1290\n \n However, this does not affect the processing of tool change-related commands in task and iocontrol.\n This means when we execute step 6b this will still cause iocontrol to do its thing.\n Decisions, decisions:\n \u2022 Do we want to use an O-word procedure or do it all in Python code?\n@@ -25010,15 +25010,15 @@\n the \u201draise tool-change and wait for tool-changed to become high\u201d HAL sequence in iocontrol,\n besides setting the XXXX pins\n What you need to decide is whether the existing iocontrol HAL sequences are sufficient to drive your\n changer. Maybe you need a different interaction sequence - for instance more HAL pins, or maybe a\n more complex interaction. Depending on the answer, we might continue to use the existing iocontrol\n HAL sequences, or define our own ones.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 523 / 1290\n \n For the sake of documentation, we\u2019ll disable these iocontrol sequences, and roll our own - the result\n will look and feel like the existing interaction, but now we have complete control over them because\n they are executed in our own O-word procedure.\n So what we\u2019ll do is use some motion.digital-* and motion.analog-* pins, and the associated M62\n@@ -25069,15 +25069,15 @@\n follows:\n REMAP=M6\n \n modalgroup=6\n \n prolog=change_prolog ngc=change epilog=change_epilog\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 524 / 1290\n \n So the prolog covering steps 1 and 2 would look like so - we decide to pass a few variables to the\n remap procedure which can be inspected and changed there, or used in a message. Those are:\n tool_in_spindle, selected_tool (tool numbers) and their respective tooldata indices current_pocket\n and selected_pocket:\n@@ -25123,15 +25123,15 @@\n if self.return_value > 0.0:\n # commit change\n self.selected_pocket = int(self.params[\u201dselected_pocket\u201d])\n emccanon.CHANGE_TOOL(self.selected_pocket)\n # cause a sync()\n self.tool_change_flag = True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 525 / 1290\n \n self.set_tool_parameters()\n return INTERP_OK\n else:\n return \u201dM6 aborted (return code %.1f)\u201d % (self.return_value)\n@@ -25168,15 +25168,15 @@\n \u2022 M6 (change_prolog): #, #, #, #\n \u2022 M61 (settool_prolog): # , #\n \u2022 S (setspeed_prolog): #\n \u2022 F (setfeed_prolog): #\n If you have specific needs for extra parameters to be made visible, that can simply be added to the\n prolog - practically all of the interpreter internals are visible to Python.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 526 / 1290\n \n 9.6.5.6 Making minimal changes to the built in codes, including M6\n Remember that normally remapping a code completely disables all internal processing for that code.\n However, in some situations it might be sufficient to add a few codes around the existing M6 built in\n implementation, like a tool length probe, but other than that retain the behavior of the built in M6.\n@@ -25226,15 +25226,15 @@\n cblock = self.blocks[self.remap_level]\n if not cblock.t_flag:\n return \u201dT requires a tool number\u201d\n tool\n \n = cblock.t_number\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 527 / 1290\n \n if tool:\n (status, pocket) = self.find_tool_pocket(tool)\n if status != INTERP_OK:\n return \u201dT%d: pocket not found\u201d % (tool)\n@@ -25282,15 +25282,15 @@\n remap is aborted.\n The way to do this is by using the [RS274NGC]ON_ABORT_COMMAND feature. This INI option specifies a\n O-word procedure call which is executed if task for some reason aborts program execution. on_abort\n receives a single parameter indicating the cause for calling the abort procedure, which might be used\n for conditional cleanup.\n The reasons are defined in nml_intf/emc.hh\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 528 / 1290\n \n EMC_ABORT_TASK_EXEC_ERROR = 1,\n EMC_ABORT_AUX_ESTOP = 2,\n EMC_ABORT_MOTION_OR_IO_RCS_ERROR = 3,\n EMC_ABORT_TASK_STATE_OFF = 4,\n@@ -25339,15 +25339,15 @@\n Make sure on_abort.ngc is along the interpreter search path (recommended location: SUBROUTINE_PATH\n so as not to clutter your NC_FILES directory with internal procedures).\n Statements in that procedure typically would assure that post-abort any state has been cleaned up,\n like HAL pins properly reset. For an example, see configs/sim/axis/remap/rack-toolchange.\n Note that terminating a remapped code by returning INTERP_ERROR from the epilog (see previous\n section) will also cause the on_abort procedure to be called.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 529 / 1290\n \n 9.6.5.9 Error handling: failing a remapped code NGC procedure\n If you determine in your handler procedure that some error condition occurred, do not use M2 to end\n your handler - see above:\n If displaying an operator error message and stopping the current program is good enough, use the\n@@ -25381,15 +25381,15 @@\n change gears appropriately if not.\n 9.6.6.2 Adjusting the behavior of M0, M1, M60\n A use case for remapping M0/M1 would be to customize the behavior of the existing code. For instance, it could be desirable to turn off the spindle, mist and flood during an M0 or M1 program\n pause, and turn these settings back on when the program is resumed.\n For a complete example doing just that, see configs/sim/axis/remap/extend-builtins/, which\n adapts M1 as laid out above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 530 / 1290\n \n 9.6.7 Creating new G-code cycles\n A G-code cycle as used here is meant to behave as follows:\n \u2022 On first invocation, the associated words are collected and the G-code cycle is executed.\n \u2022 If subsequent lines just continue parameter words applicable to this code, but no new G-code, the\n@@ -25433,15 +25433,15 @@\n [PYTHON]\n TOPLEVEL = \n Filename of the initial Python script to execute on startup. This script is responsible for\n setting up the package name structure, see below.\n PATH_PREPEND = \n Prepend this directory to PYTHON_PATH. A repeating group.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 531 / 1290\n \n PATH_APPEND = \n Append this directory to PYTHON_PATH. A repeating group.\n LOG_LEVEL = \n Log level of plugin-related actions. Increase this if you suspect problems. Can be very\n@@ -25481,15 +25481,15 @@\n 9.6.9.2 The Interpreter as seen from Python\n \n The interpreter is an existing C++ class (Interp) defined in src/emc/rs274ngc. Conceptually all oword. Python calls are methods of this Interp class, although there is no explicit\n Python definition of this class (it is a Boost.Python wrapper instance) and hence receive the as the\n first parameter self which can be used to access internals.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 532 / 1290\n \n 9.6.9.3 The Interpreter __init__ and __delete__ functions\n If the TOPLEVEL module defines a function __init__, it will be called once the interpreter is fully\n configured (INI file read, and state synchronized with the world model).\n If the TOPLEVEL module defines a function __delete__, it will be called once before the interpreter is\n@@ -25529,15 +25529,15 @@\n \u2013 when a comment like ;py, is executed - during execution of a remapped\n code: any prolog=, python= and epilog= handlers.\n Calling O-word Python subroutines\n Arguments:\n self\n The interpreter instance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 533 / 1290\n \n *args\n The list of actual positional parameters. Since the number of actual parameters may vary, it is\n best to use this style of declaration:\n # this would be defined in the oword module\n@@ -25575,15 +25575,15 @@\n print(\u201d%s: %s\u201d % (w, words[w]))\n if words[\u2019p\u2019] < 78: # NB: could raise an exception if p were optional\n return \u201dfailing miserably\u201d\n return INTERP_OK\n \n Return values:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 534 / 1290\n \n INTERP_OK\n Return this on success. You need to import this from interpreter.\n a message text\n Returning a string from a handler means this is an error message, abort the program. Works like\n@@ -25620,15 +25620,15 @@\n emccanon.WAIT(0,1,2,5.0)\n # cede control after executing the queue buster:\n yield INTERP_EXECUTE_FINISH\n # post-sync() execution resumes here:\n pin_status = emccanon.GET_EXTERNAL_DIGITAL_INPUT(0,0);\n print(\u201dpin status=\u201d,pin_status)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Warning\n The yield feature is fragile.\n TERP_EXECUTE_FINISH:\n \n 535 / 1290\n \n@@ -25672,15 +25672,15 @@\n print(\u201d#2=\u201d, self.params[2])\n try:\n print(\u201dresult=\u201d, self.params[\u201dresult\u201d])\n except Exception,e:\n return \u201dtestparam forgot to assign #\u201d\n return INTERP_OK\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 536 / 1290\n \n o sub\n (debug, call_level=#<_call_level> myname=#)\n ; try commenting out the next line and run again\n # = [# * 3]\n@@ -25724,15 +25724,15 @@\n \n raise InterpreterException\n \n except InterpreterException,e:\n msg = \u201d%d: \u2019%s\u2019 - %s\u201d % (e.line_number,e.line_text, e.error_message)\n return msg # replace builtin error message\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 537 / 1290\n \n Canon The canon layer is practically all free functions. Example:\n import emccanon\n def example(self,*args):\n ....\n@@ -25771,15 +25771,15 @@\n \u2022 Import that module from the TOPLEVEL script.\n # namedparams.py\n # trivial example\n def _pi(self):\n return 3.1415926535\n # = [2 * # * #<_pi>]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 538 / 1290\n \n Functions in namedparams.py are expected to return a float or int value. If a string is returned, this\n sets the interpreter error message and aborts execution.\n \u00d2nly functions with a leading underscore are added as parameters, since this is the RS274NGC convention for globals.\n It is possible to redefine an existing predefined parameter by adding a Python function of the same\n@@ -25810,15 +25810,15 @@\n no further action is taken. This can be used for instance to minimally adjust the built in behavior\n be preceding or following it with some other statements.\n \u2022 Otherwise, the # and # parameters are extracted from the subroutine\u2019s parameter\n space. This means that the NGC procedure could change these values, and the epilog takes the\n changed values in account.\n \u2022 Then, the Canon command SELECT_TOOL(#) is executed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 539 / 1290\n \n 9.6.11.2 M6: change_prolog and change_epilog\n These wrap a NGC procedure for M6 Tool Change.\n Actions of change_prolog\n \u2022 The following three steps are applicable only if the iocontrol-v2 component is used:\n@@ -25848,15 +25848,15 @@\n behavior be preceding or following it with some other statements.\n \u2022 Otherwise, the # parameter is extracted from the subroutine\u2019s parameter space,\n and used to set the interpreter\u2019s current_pocket variable. Again, the procedure could change this\n value, and the epilog takes the changed value in account.\n \u2022 Then, the Canon command CHANGE_TOOL(#) is executed.\n \u2022 The new tool parameters (offsets, diameter etc) are set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 540 / 1290\n \n 9.6.11.3 G-code Cycles: cycle_prolog and cycle_epilog\n These wrap a NGC procedure so it can act as a cycle, meaning the motion code is retained after\n finishing execution. If the next line just contains parameter words (e.g. new X,Y values), the code is\n executed again with the new parameter words merged into the set of the parameters given in the first\n@@ -25889,15 +25889,15 @@\n \u2013 retain the current motion mode so a continuation line without a motion code will execute the same\n motion code.\n 9.6.11.4 S (Set Speed) : setspeed_prolog and setspeed_epilog\n TBD\n 9.6.11.5 F (Set Feed) : setfeed_prolog and setfeed_epilog\n TBD\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 541 / 1290\n \n 9.6.11.6 M61 Set tool number : settool_prolog and settool_epilog\n TBD\n \n 9.6.12 Remapped code execution\n@@ -25952,15 +25952,15 @@\n user-defined - not interpreted\n by LinuxCNC\n user-defined - not interpreted\n by LinuxCNC\n \n or these flags into the [EMC]DEBUG variable as needed. For a current list of debug flags see src/emc/nml_intf/debugflags.h.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 542 / 1290\n \n 9.6.12.5 Debugging Embedded Python code\n Debugging of embedded Python code is harder than debugging normal Python scripts, and only a\n limited supply of debuggers exists. A working open-source based solution is to use the Eclipse IDE,\n and the PydDev Eclipse plug in and its remote debugging feature.\n@@ -25980,15 +25980,15 @@\n pydevd.settrace() will block execution if Eclipse and the Pydev debug server have not been\n started.\n \n To cover the last two steps: the o procedure helps to get into the debugger from MDI mode.\n See also the call_pydevd function in util.py and its usage in remap.involute to set a breakpoint.\n Here\u2019s a screen-shot of Eclipse/PyDevd debugging the involute procedure from above:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 543 / 1290\n \n See the Python code in configs/sim/axis/remap/getting-started/python for details.\n \n 9.6.13 Axis Preview and Remapped code execution\n For complete preview of a remapped code\u2019s tool path some precautions need to be taken. To understand what is going on, let\u2019s review the preview and execution process (this covers the AXIS case, but\n@@ -26004,15 +26004,15 @@\n Now, what about preview of this procedure? At preview time, of course it is not known whether the\n probe succeeds or fails - but you would likely want to see what the maximum depth of the probe is, and\n assume it succeeds and continues execution to preview further movements. Also, there is no point in\n displaying a probe failed message and aborting during preview.\n The way to address this issue is to test in your procedure whether it executes in preview or execution\n mode. This can be checked for by testing the #<_task> predefined named parameter - it will be 1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 544 / 1290\n \n during actual execution and 0 during preview. See configs/sim/axis/remap/manual-toolchange-withtool-length-switch/nc_subroutines/manual_change.ngc for a complete usage example.\n Within Embedded Python, the task instance can be checked for by testing self.task - this will be 1 in\n the milltask instance, and 0 in the preview instance(s).\n \n@@ -26056,15 +26056,15 @@\n G07\n G08\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n \n G05.1 G05.2 G05.3\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 545 / 1290\n \n Table 9.2: Table of Allocated G-codes 10-19\n #\n 10\n 11\n@@ -26147,15 +26147,15 @@\n G41\n G42\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n G41.1\n G42.1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 546 / 1290\n \n Table 9.5: (continued)\n #\n 43\n 44\n@@ -26236,15 +26236,15 @@\n G71\n G72\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n G71.1 G71.2\n G72.1 G72.2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 547 / 1290\n \n Table 9.8: (continued)\n #\n 76\n 77\n@@ -26337,15 +26337,15 @@\n \n Mx7\n \n Mx8\n \n Mx9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 548 / 1290\n \n Table 9.11: (continued)\n #\n 10-19\n 20-29\n@@ -26475,15 +26475,15 @@\n FIXME Write missing information\n \n 9.6.16 Models of Task execution\n FIXME Write missing information\n 9.6.16.1 Traditional iocontrol/iocontrolv2 execution\n FIXME Write missing information\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 549 / 1290\n \n 9.6.16.2 Redefining IO procedures\n FIXME Write missing information\n 9.6.16.3 Execution-time Python procedures\n FIXME Write missing information\n@@ -26517,15 +26517,15 @@\n 9.6.17.3 Predicting the machine position\n To compute canonical machine operations in advance during read ahead, the interpreter must be able\n to predict the machine position after each line of G-code, and that is not always possible.\n Let\u2019s look at a simple example program which does relative moves (G91), and assume the machine\n starts at x=0,y=0,z=0. Relative moves imply that the outcome of the next move relies on the position\n of the previous one:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 550 / 1290\n \n N10 G91\n N20 G0 X10 Y-5 Z20\n N30 G1 Y20 Z-5\n N40 G0 Z30\n@@ -26566,15 +26566,15 @@\n \u2022 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\n the interpreter state with the world model. Technically, this means updating internal variables to\n reflect HAL pin values, reload tool geometries after an M6, and convey results of a probe.\n \u2022 The interpreter\u2019s synch() method is called by task and does just that - read all the world model\n actual values which are relevant for further execution.\n \u2022 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.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 551 / 1290\n \n 9.6.17.6 Word order and execution order\n One or several words may be present on an NGC block if they are compatible (some are mutually\n exclusive and must be on different lines). The execution model however prescribes a strict ordering\n of execution of codes, regardless of their appearance on the source line (G-code Order of Execution).\n@@ -26610,15 +26610,15 @@\n Tool information is held in the emcStatus structure, which is shared by all parties. One of its fields\n is the toolTable array, which holds the description as loaded from the tool table file (tool number,\n diameter, frontangle, backangle and orientation for lathe, tool offset information).\n The authoritative source and only process actually setting tool information in this structure is the\n iocontrol process. All others processes just consult this structure. The interpreter holds actually a\n local copy of the tool table.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 552 / 1290\n \n For the curious, the current emcStatus structure can be accessed by Python statements. The interpreter\u2019s perception of the tool currently loaded for instance is accessed by:\n ;py,from interpreter import *\n ;py,print(this.tool_table[0])\n \n@@ -26655,15 +26655,15 @@\n When the interpreter sees an M6, it:\n 1. checks whether a T command has already been executed (test settings->selected_pocket to be\n >= 0) and fail with Need tool prepared -Txx- for toolchange message if not.\n 2. check for cutter compensation being active, and fail with Cannot change tools with cutter radius\n compensation on if so.\n 3. stop the spindle except if the \u201dTOOL_CHANGE_WITH_SPINDLE_ON\u201d INI option is set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 553 / 1290\n \n 4. generate a rapid Z up move if if the \u201dTOOL_CHANGE_QUILL_UP\u201d INI option is set.\n 5. if TOOL_CHANGE_AT_G30 was set:\n a. move the A, B and C indexers if applicable\n b. generate rapid move to the G30 position\n@@ -26698,15 +26698,15 @@\n in configs/sim/axis/remap/toolchange/python/toolchange.py.\n 9.6.17.13 How M61 (Change tool number) works\n M61 requires a non-negative \u0300Q \u0300parameter (tool number). If zero, this means unload tool, else set\n current tool number to Q.\n Building the replacement for M61 An example Python redefinition for M61 can be found in the\n set_tool_number function in configs/sim/axis/remap/toolchange/python/toolchange.py.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 554 / 1290\n \n 9.6.18 Status\n 1. The RELOAD_ON_CHANGE feature is fairly broken. Restart after changing a Python file.\n 2. M61 (remapped or not) is broken in iocontrol and requires iocontrol-v2 to actually work.\n \n@@ -26749,15 +26749,15 @@\n internally. A warning pin is set and a message issued if the apply-offsets pin is deasserted while\n offsets are applied. The warning pin remains TRUE until the offsets are removed or the apply-offsets\n pin is set.\n Typically, the move-enable pin is connected to external controls and the apply-offsets pin is connected\n to halui.program.is-paused (for offsets only while paused) or set to TRUE (for continuously applied\n offsets).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 555 / 1290\n \n Applied offsets are automatically returned to zero (respecting limits) when either of the enabling\n inputs is deactivated. The zero value tolerance is specified by the epsilon input pin value.\n Waypoints are recorded when the moveoff component is enabled. Waypoints are managed with the\n waypoint-sample-secs and waypoint-threshold pins. When the backtrack-enable pin is TRUE, the autoreturn path follows the recorded waypoints. When the memory available for waypoints is exhausted,\n@@ -26800,15 +26800,15 @@\n \u2022 configs/sim/touchy/ngcgui (touchy-ui)\n \n 9.7.1 Modifying an existing configuration\n A system-provided HAL file (LIB:hookup_moveoff.tcl) can be used to adapt an existing configuration to\n use the moveoff component. Additional INI file settings support the use of a simple GUI (moveoff_gui)\n for controlling offsets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 556 / 1290\n \n When the system HAL file (LIB:hookup_moveoff.tcl) is properly specified in a configuration INI file, it\n will:\n 1. Disconnect the original joint.N.motor-pos-cmd and joint.N.motor-pos-fb pin connections\n 2. Load (loadrt) the moveoff component (using the name mv) with a personality set to accommodate\n@@ -26849,15 +26849,15 @@\n EPSILON =\n WAYPOINT_SAMPLE_SECS =\n WAYPOINT_THRESHOLD =\n \n The moveoff_gui is used to make additional required connections and provide a popup GUI to:\n 1. Provide a control togglebutton to Enable/Disable offsets\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 557 / 1290\n \n 2. Provide a control togglebutton to Enable/Disable backtracking\n 3. Provide control pushbuttons to Increment/Decrement/Zero each axis offset\n 4. Display each axis offset current value\n 5. Display current offset status (disabled, active, removing, etc)\n@@ -26900,15 +26900,15 @@\n net external_offset_1 mv.offset-in-1\n net external_offset_2 mv.offset-in-2\n net external_backtrack_en mv.backtrack-enable\n \n These signals (external_enable, external_offset_M, external_backtrack_en) may be managed by subsequent HALFILES (including POSTGUI_HALFILEs) to provide customized control of the component\n while using the moveoff_gui display for current offset values and offset status.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 558 / 1290\n \n The moveoff_gui is configured with command line options. For details on the operation of moveoff_gui,\n see the man page:\n $ man moveoff_gui\n \n@@ -26973,15 +26973,15 @@\n Note: If the moveoff move-enable pin (mv.move-enable) is connected when\n moveoff_gui is started, external controls are required and only\n displays are provided.\n \n 9.8 Stand Alone Interpreter\n The rs274 stand alone interpreter is available for use via the command line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 559 / 1290\n \n 9.8.1 Usage\n Usage: rs274 [-p interp.so] [-t tool.tbl] [-v var-file.var] [-n 0|1|2]\n [-b] [-s] [-g] [input file [output file]]\n -p: Specify the pluggable interpreter to use\n@@ -27019,15 +27019,15 @@\n \n 9.9 External Axis Offsets\n External axis offsets are supported during teleop (world) jogs and coordinated (G-code) motion. External axis offsets are enabled on a per-axis basis by INI file settings and controlled dynamically by\n INI input pins. The INI interface is similar to that used for wheel jogging. This type of interface is\n typically implemented with a manual-pulse-generator (mpg) connected to an encoder INI component\n that counts pulses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 560 / 1290\n \n 9.9.1 INI File Settings\n For each axis letter (L in xyzabcuvw):\n [AXIS_L]OFFSET_AV_RATIO = value (controls accel/vel for external offsets)\n \n@@ -27058,15 +27058,15 @@\n 9.9.2.2 Other Motion HAL Pins\n 1. motion.eoffset-active Output(bit): non-zero external offsets applied\n 2. motion.eoffset-limited Output(bit): motion inhibited due to soft limit\n \n 9.9.3 Usage\n The axis input HAL pins (enable,scale,counts) are similar to the pins used for wheel jogging.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 561 / 1290\n \n 9.9.3.1 Offset Computation\n At each servo period, the axis.L.eoffset-counts pin is compared to its value in the prior period. The\n increase or decrease (positive or negative delta) of the axis.L.eoffset-counts pin is multiplied by the\n current axis.L.eoffset-scale pin value. This product is accumulated in an internal register and exported\n@@ -27104,15 +27104,15 @@\n limit will stop motion in the offending axis without a deacceleration interval. Similarly, during\n coordinated motion with external offsets enabled, reaching a soft limit will stop motion with no deacceleration phase. For this case, it does not matter if the offsets are zero.\n When motion is stopped with no deacceleration phase, system acceleration limits may be violated\n and lead to: 1) a following error (and/or a thump) for a servo motor system, 2) a loss of steps for a\n stepper motor system. In general, it is recommended that external offsets are applied in a manner to\n avoid approaching soft limits.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 562 / 1290\n \n 9.9.3.4 Notes\n External offsets apply to axis coordinate letters (xyzabcuvw). All joints must be homed before external\n axis offsets are honored.\n If an axis.L.eoffset-enable HAL pin is reset when its offset is non-zero, the offset is maintained. The\n@@ -27147,15 +27147,15 @@\n a terminal:\n $ sim_pin axis.z.eoffset-enable axis.z.eoffset-scale axis.z.eoffset-counts\n \n The use of external offsets is aided by displaying information related to the current offsets: the current eoffset value and the requested eoffset value, the axis pos-cmd, and (for an identity kinematics\n machine) the corresponding joint motor pos-cmd and motor-offset. The provided sim configuration\n (see below) demonstrates an example PyVCP panel for the AXIS GUI.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 563 / 1290\n \n In the absence of a custom display, halshow can be started as an auxiliary application with a custom\n watch list.\n Example INI file settings to simulate the HAL pin eoffset connections and display eoffset information\n for the z axis (for identity kinematics with z==joint2):\n@@ -27193,15 +27193,15 @@\n 9.9.6.2 jwp_z.ini\n The sim config sim/configs/axis/external_offsets/jwp_z.ini demonstrates a jog-while-pause capability\n for a single (Z) coordinate:\n Panel LEDs are provided to show important status items.\n Controls are provided to set the eoffset scale factor and to increment/decrement/clear the eoffset\n counts.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 564 / 1290\n \n 9.9.6.3 dynamic_offsets.ini\n This sim config sim/configs/axis/external_offsets/dynamic_offsets.ini demonstrates dynamically applied\n offsets by connecting a sinusoidal waveform to the z coordinate external offset inputs.\n Panel LEDs are provided to show important status items.\n@@ -27236,15 +27236,15 @@\n INI file settings enable the (optional) operation of a user-provided tool database program:\n [EMCIO]\n DB_PROGRAM = db_program [args]\n \n When included, db_program specifies the path to a user-provided executable program that provides\n tooldata. Up to 10 space-separated args may be included and passed to the db_program at startup.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 565 / 1290\n \n Note\n INI file settings for [EMCIO]TOOL_TABLE are ignored when a db_program is specified.\n \n Note\n@@ -27278,15 +27278,15 @@\n \u2022 \u201dl\u201d spindle_load (TnM6). The tool data line includes only the T and P items identifying the relevant\n tool number and pocket number.\n \u2022 \u201du\u201d spindle_unload (T0M6). The tool data line includes only the T and P items identifying the relevant tool number and pocket number.\n Note\n When a NON_RANDOM tool changer is specified using [EMCIO]RANDOM_TOOL_CHANGER=0 (the default), the spindle_load command issued for TnM6 (or M61Qn) is: l Tn P0 (pocket 0 is the spindle).\n The spindle_unload command issued for T0M6 is u T0 P0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 566 / 1290\n \n Note\n When a RANDOM tool changer is specified using [EMCIO]RANDOM_TOOL_CHANGER=1, a pair of spindle_unload/spindle_load commands are issued at each tool exchange. The pair of commands issued\n for TnM6 (or M61Qn) are u Tu Pm followed by l Tn P0, where u is the current tool to be sent to pocket\n m and n is the new tool to load in the spindle (pocket 0). By convention, a tool number of 0 is used\n@@ -27329,15 +27329,15 @@\n Removal of a tool number should only be done if the tool number is not currently loaded in spindle.\n \n Exporting the environmental variable DB_SHOW enables LinuxCNC prints (to stdout) that show tool\n data retrieved from the db_program at startup and at subsequent reloading of tool data.\n Exporting the environmental variable DB_DEBUG enables LinuxCNC prints (to stdout) for additional\n debugging information about interface activity.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 567 / 1290\n \n 9.10.1.4 Example program\n An example db_program (implemented as a Python script) is provided with the simulation examples.\n The program demonsrates the required operations to:\n 1. acknowledge startup version\n@@ -27382,15 +27382,15 @@\n )\n tooldb_loop()\n \n Note\n Use of tooldb is not required \u2014 it is provided as a demonstration of the required interface and as a\n convenience for implementing Python-based applications that interface with an external database.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 568 / 1290\n \n 9.10.2 Simulation configs\n Simulation configs using the AXIS gui:\n 1. configs/sim/axis/db_demo/db_ran.ini (random_toolchanger)\n 2. configs/sim/axis/db_demo/db_nonran.ini (nonrandom_toolchanger)\n@@ -27410,50 +27410,50 @@\n LinuxCNC tooldata updates and the database application updates.\n 9.10.2.1 Notes\n \n When a db_program is used in conjunction with a random tool changer ([EMCIO]RANDOM_TOOLCHANGER\n LinuxCNC maintains a file (db_spindle.tbl in the configuration directory) that consists of a single tool\n table line identifying the current tool in the spindle.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 569 / 1290\n \n Part II\n \n Usage\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 570 / 1290\n \n Chapter 10\n \n User Interfaces\n 10.1 AXIS GUI\n 10.1.1 Introduction\n AXIS is a graphical front-end for LinuxCNC which features a live preview and backplot. It is written\n in Python and uses Tk and OpenGL to display its user interface.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 571 / 1290\n \n Figure 10.1: The AXIS Window\n \n 10.1.2 Getting Started\n If your configuration is not currently set up to use AXIS, you can change it by editing the .ini file (INI\n file). In the section [DISPLAY] change the [DISPLAY] line to read DISPLAY = axis.\n The sample configuration sim/axis.ini is already configured to use AXIS as its front-end.\n When AXIS starts, a window like the one in the figure Figure 10.1 above opens.\n 10.1.2.1 INI settings\n For more information on INI file settings that can change how AXIS works see the Display Section of\n the INI Configuration Chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 572 / 1290\n \n \u2022 CYCLE_TIME - Adjust the response rate of the GUI in milliseconds. Typical 100, useable range 50\n - 200\n (will accept time in seconds (.05 -.2) for legacy reasons - milliseconds preferred to match other\n screens).\n@@ -27487,15 +27487,15 @@\n The AXIS window contains the following elements:\n \u2022 A display area that shows one of the following:\n \u2013 A preview of the loaded file (in this case, axis.ngc), as well as the current location of the CNC\n machine\u2019s controlled point. Later, this area will display the path the CNC machine has moved\n through, called the backplot.\n \u2013 A large readout showing the current position and all offsets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 573 / 1290\n \n \u2022 A menu bar and toolbar that allow you to perform various actions\n \u2022 Manual Control Tab - which allows you to make the machine move, turn the spindle on or off, and\n turn the coolant on or off if included in the INI file.\n \u2022 MDI Tab - where G-code programs can be entered manually, one line at a time. This also shows the\n@@ -27531,15 +27531,15 @@\n \u2022 Reload tool table - After editing the tool table you must reload it.\n \u2022 Ladder editor - If you have loaded ClassicLadder you can edit it from here. See the ClassicLadder\n chapter for more information.\n \u2022 Quit - Terminates the current LinuxCNC session.\n \u2022 Toggle Emergency Stop F1 - Change the state of the Emergency Stop.\n \u2022 Toggle Machine Power F2 - Change the state of the Machine Power if the Emergency Stop is not on.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 574 / 1290\n \n \u2022 Run Program - Run the currently loaded program from the beginning.\n \u2022 Run From Selected Line - Select the line you want to start from first. Use with caution as this will\n move the tool to the expected position before the line first then it will execute the rest of the code.\n \n@@ -27575,15 +27575,15 @@\n G10 L10 in the G-code chapter.\n \u2013 Tool touch off to fixture - When performing Touch Off, the value entered is relative to the ninth\n (G59.3) coordinate system, with the axis offset (G92) ignored. This is useful when there is a tool\n touch-off fixture at a fixed location on the machine, with the ninth (G59.3) coordinate system set\n such that the tip of a zero-length tool is at the fixture\u2019s origin when the Relative coordinates are\n 0. See G10 L11 in the G-code chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 575 / 1290\n \n \u2022 Top View - The Top View (or Z view) displays the G-code looking along the Z axis from positive to\n negative. This view is best for looking at X & Y.\n \u2022 Rotated Top View - The Rotated Top View (or rotated Z view) also displays the G-code looking along\n the Z axis from positive to negative. But sometimes it\u2019s convenient to display the X & Y axes rotated\n@@ -27623,15 +27623,15 @@\n \u2022 Show Tool - The display of the tool cone/cylinder can be disabled if desired.\n \u2022 Show Extents - The display of the extents (maximum travel in each axis direction) of the loaded\n G-code program can be disabled if desired.\n \u2022 Show Offsets - The selected fixture offset (G54-G59.3) origin location can be shown as a set of three\n orthogonal lines, one each of red, blue, and green. This offset origin (or fixture zero) display can be\n disabled if desired.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 576 / 1290\n \n \u2022 Show Machine Limits - The machine\u2019s maximum travel limits for each axis, as set in the INI file,\n are shown as a rectangular box drawn in red dashed lines. This is useful when loading a new Gcode program, or when checking for how much fixture offset would be needed to bring the G-code\n program within the travel limits of your machine. It can be shut off if not needed.\n \u2022 Show Velocity - A display of velocity is sometimes useful to see how close your machine is running\n@@ -27681,15 +27681,15 @@\n \n Execute next line [T]\n \n \u2022\n \n Pause Execution [P] Resume Execution [S]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \u2022\n \n Stop Program Execution [ESC]\n \n \u2022\n \n@@ -27756,15 +27756,15 @@\n from commanded position due to following error, dead band, encoder resolution, or step size. For\n instance, if you command a movement to X 0.0033 on your mill, but one step of your stepper motor or\n one encoder count is 0.00125, then the Commanded position might be 0.0033, but the Actual position\n will be 0.0025 (2 steps) or 0.00375 (3 steps).\n Preview Plot When a file is loaded, a preview of it is shown in the display area. Fast moves (such as\n those produced by the G0 command) are shown as cyan lines. Moves at a feed rate (such as those\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 578 / 1290\n \n produced by the G1 command) are shown as solid white lines. Dwells (such as those produced by the\n G4 command) are shown as small pink X marks.\n G0 (Rapid) moves prior to a feed move will not show on the preview plot. Rapid moves after a T\n (Tool Change) will not show on the preview until after the first feed move. To turn either of these\n@@ -27798,15 +27798,15 @@\n By dragging with shift and the left mouse button pressed, or by dragging with the mouse wheel\n pressed, the preview plot will be rotated. When a line is highlighted, the center of rotation is the\n center of the line. Otherwise, the center of rotation is the center of the entire program.\n By rotating the mouse wheel, or by dragging with the right mouse button pressed, or by dragging\n with control and the left mouse button pressed, the preview plot will be zoomed in or out.\n By clicking one of the Preset View icons, or by pressing V, several preset views may be selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 579 / 1290\n \n 10.1.3.4 Text Display Area\n By left-clicking a line of the program, the line will be highlighted in both the graphical and text displays.\n When the program is running, the line currently being executed is highlighted in red. If no line has\n been selected by the user, the text display will automatically scroll to show the current line.\n@@ -27827,15 +27827,15 @@\n the desired direction of motion. The first four axes can also be moved by the arrow keys (X and Y),\n PAGE UP and PAGE DOWN keys (Z), and the [ and ] keys (A).\n If Continuous is selected, the motion will continue as long as the button or key is pressed. If another\n value is selected, the machine will move exactly the displayed distance each time the button is clicked\n or the key is pressed. By default, the available values are 0.1000, 0.0100, 0.0010, 0.0001.\n See the DISPLAY Section for more information on setting the increments.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 580 / 1290\n \n Homing (Identity Kinematics) The INI file setting [KINS]JOINTS defines the total number of joints\n for the system. A joint may be configured with a home switch or for immediate homing. Joints may\n specify a home sequence that organizes the order for homing groups of joints.\n If all joints are configured for homing and have valid home sequences, the homing button will show\n@@ -27861,15 +27861,15 @@\n programs, except that variables may not be referred to. The resulting value is shown as a number.\n \n Figure 10.4: Touch Off Window\n See also the Machine menu options: Touch part and Touch part holder.\n Tool Touch Off By pressing the Tool Touch Off button the tool length and offsets of the currently\n loaded tool will be changed so that the current tool tip position matches the entered coordinate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 581 / 1290\n \n Figure 10.5: Tool Touch Off Window\n See also the Tool touch off to workpiece and Tool touch off to fixture options in the Machine menu.\n Override Limits By pressing Override Limits, the machine will temporarily be allowed to jog off of\n a physical limit switch. This check box is only available when a limit switch is tripped. The override\n@@ -27883,15 +27883,15 @@\n Pressing the spindle start button sets the S speed to 1.\n The Coolant group The two buttons allow the Mist and Flood coolants to be turned on and off.\n Depending on your machine configuration, not all the items in this group may appear.\n 10.1.3.6 MDI\n MDI allows G-code commands to be entered manually. When the machine is not turned on, or when\n a program is running, the MDI controls are unavailable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 582 / 1290\n \n Figure 10.6: The MDI tab\n \u2022 History - This shows MDI commands that have been typed earlier in this session.\n \u2022 MDI Command - This allows you to enter a G-code command to be executed. Execute the command\n by pressing Enter or by clicking Go.\n@@ -27905,15 +27905,15 @@\n By moving this slider, the programmed spindle speed can be modified. For instance, if a program\n requests S8000 and the slider is set to 80%, then the resulting spindle speed will be 6400. This item\n only appears when the HAL pin spindle.0.speed-out is connected.\n 10.1.3.9 Jog Speed\n By moving this slider, the speed of jogs can be modified. For instance, if the slider is set to 1 in/min,\n then a .01 inch jog will complete in about .6 seconds, or 1/100 of a minute. Near the left side (slow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 583 / 1290\n \n jogs) the values are spaced closely together, while near the right side (fast jogs) they are spaced much\n further apart, allowing a wide range of jog speeds with fine control when it is most important.\n On machines with a rotary axis, a second jog speed slider is shown. This slider sets the jog rate for\n the rotary axes (A, B and C).\n@@ -27990,15 +27990,15 @@\n Manual\n Manual\n Manual\n Manual\n Manual\n Manual\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 584 / 1290\n \n Table 10.1: (continued)\n Keystroke\n R\n P\n@@ -28041,15 +28041,15 @@\n Any\n Any\n \n 10.1.5 Show LinuxCNC Status (linuxcnctop)\n AXIS includes a program called linuxcnctop which shows some of the details of LinuxCNC\u2019s state. You\n can run this program by invoking Machine > Show LinuxCNC Status\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 585 / 1290\n \n Figure 10.7: LinuxCNC Status Window\n The name of each item is shown in the left column. The current value is shown in the right column. If\n the value has recently changed, it is shown on a red background.\n \n@@ -28066,15 +28066,15 @@\n (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n MDI> G1 F5 X1\n MDI>\n (0.5928500000000374, 0.0, 0.0, 0.0, 0.0, 0.0)\n MDI>\n (1.0000000000000639, 0.0, 0.0, 0.0, 0.0, 0.0)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 586 / 1290\n \n 10.1.7 axis-remote\n AXIS includes a program called axis-remote which can send certain commands to a running AXIS.\n The available commands are shown by running axis-remote --help and include checking whether AXIS\n is running (--ping), loading a file by name, reloading the currently loaded file (--reload), and making\n@@ -28105,50 +28105,50 @@\n \u2022 hal allows the creation of non-realtime HAL components written in Python\n \u2022 _togl provides an OpenGL widget that can be used in Tkinter applications\n \u2022 minigl provides access to the subset of OpenGL used by AXIS\n To use these modules in your own scripts, you must ensure that the directory where they reside\n is on Python\u2019s module path. When running an installed version of LinuxCNC, this should happen\n automatically. When running in-place, this can be done by using scripts/rip-environment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 587 / 1290\n \n 10.1.10 Using AXIS in Lathe Mode\n By including the line LATHE = 1 in the [DISPLAY] section of the INI file, AXIS selects lathe mode. The\n Y axis is not shown in coordinate readouts, the view is changed to show the Z axis extending to the\n right and the X axis extending towards the bottom of the screen, and several controls (such as those\n for preset views) are removed. The coordinate readouts for X are replaced with diameter and radius.\n \n Figure 10.9: AXIS Lathe Mode\n Pressing V zooms out to show the entire file, if one is loaded.\n When in lathe mode, the shape of the loaded tool (if any) is shown.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 588 / 1290\n \n Figure 10.10: Lathe Tool Shape\n To change the display to a back tool lathe you need to have both LATHE = 1 and BACK_TOOL_LATHE\n = 1 in the [DISPLAY] section. This will invert the view and put the tool on the back side of the Z axis.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 589 / 1290\n \n Figure 10.11: Lathe Back Tool Shape\n \n 10.1.11 Using AXIS in Foam Cutting mode\n By including the line FOAM = 1 in the [DISPLAY] section of the INI file, AXIS selects foam-cutting\n mode. In the program preview, XY motions are displayed in one plane, and UV motions in another. In\n the live plot, lines are drawn between corresponding points on the XY plane and the UV plane. The\n special comments (XY_Z_POS) and (UV_Z_POS) set the Z coordinates of these planes, which default\n to 0 and 1.5 machine units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 590 / 1290\n \n Figure 10.12: Foam Cutting Mode\n \n 10.1.12 Advanced Configuration\n When AXIS is started it creates the HAL pins for the GUI then it executes the HAL file named in the INI\n@@ -28156,15 +28156,15 @@\n + _postgui + .hal eg. lathe_postgui.hal, but can be any legal filename. These commands are executed\n after the screen is built, guaranteeing the widget\u2019s HAL pins are available. You can have multiple line\n of POSTGUI_HALFILE= in the INI. Each will be run one after the other in the order they\n appear.\n For more information on the INI file settings that can change the way AXIS works, see the Display\n Section of the INI configuration chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 591 / 1290\n \n 10.1.12.1 Program Filters\n AXIS has the ability to send loaded files through a filter program. This filter can do any desired task:\n Something as simple as making sure the file ends with M2, or something as complicated as generating\n G-code from an image.\n@@ -28186,15 +28186,15 @@\n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle.\n \n Figure 10.13: Circular Holes\n If the environment variable AXIS_PROGRESS_BAR is set, then lines written to stderr of the form\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 592 / 1290\n \n FILTER_PROGRESS=%d\n \n will set the AXIS progress bar to the given percentage. This feature should be used by any filter that\n runs for a long time.\n@@ -28230,15 +28230,15 @@\n Example of .axisrc file\n root_window.bind(\u201d\u201d, \u201ddestroy .\u201d)\n help2.append((\u201dControl-Q\u201d, \u201dQuit\u201d))\n \n The following stops the \u201dDo you really want to quit\u201d dialog.\n root_window.tk.call(\u201dwm\u201d,\u201dprotocol\u201d,\u201d.\u201d,\u201dWM_DELETE_WINDOW\u201d,\u201ddestroy .\u201d)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 593 / 1290\n \n 10.1.12.5 USER_COMMAND_FILE\n \n A configuration-specific Python file may be specified with an INI file setting [DISPLAY]USER_COMMAND_FIL\n Like a ~/.axisrc file, this file is sourced just before the AXIS GUI is displayed. This file is specific to\n@@ -28275,15 +28275,15 @@\n G-code file, one can disable the preview on certain parts that are already working OK).\n \u2022 (AXIS,hide) Stops the preview (must be first)\n \u2022 (AXIS,show) Resumes the preview (must follow a hide)\n \u2022 (AXIS,stop) Stops the preview from here to the end of the file.\n \u2022 (AXIS,notify,the_text) Displays the_text as an info display\n This display can be useful in the AXIS preview when (debug,message) comments are not displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 594 / 1290\n \n 10.1.13 Axisui\n To improve the interaction of AXIS with physical jog wheels, the axis currently selected in the GUI is\n also reported on a pin with a name like axisui.jog.x. One of these pins is TRUE at one time, and the\n rest are FALSE. These are meant to control motion\u2019s jog-enable pins.\n@@ -28366,15 +28366,15 @@\n 10.1.14 AXIS Customization Hints\n AXIS is a fairly large and difficult-to-penetrate code base, this is helpful To keep the code stable but\n makes it difficult to customize.\n Here we will show code snippets to modify behaviours or visuals of the screen. Keep in mind the\n internal code of AXIS can change from time to time.\n these snippets are not guaranteed to continue to work - they may need adjustment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 595 / 1290\n \n 10.1.14.1 The update function\n There is a function in AXIS named user_live_update that is called every time AXIS updates itself. You\n can use this to update your own functions.\n # continuous update function\n@@ -28413,15 +28413,15 @@\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(50))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(60))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(70))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(80))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(90))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(100))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n root_window.bind(\u2019\u2019,lambda event: set_feedrate(0))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(10))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(20))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(30))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(40))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(50))\n@@ -28460,15 +28460,15 @@\n # connect pins\n hal.new_sig(\u2019idle-led\u2019,hal.HAL_BIT)\n hal.connect(\u2019halui.program.is-idle\u2019,\u2019idle-led\u2019)\n hal.connect(\u2019my_component.idle-led\u2019,\u2019idle-led\u2019)\n \n 596 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 597 / 1290\n \n # set a pin\n hal.set_p(\u2019my_component.pause-led\u2019,\u20191\u2019)\n # get a pin 2,8+ branch\n value = hal.get_value(\u2019halui.program.is-idle\u2019)\n@@ -28509,15 +28509,15 @@\n root_window.tk.call(\u2019button\u2019,\u2019.pane.top.tabs.fmanual.homey\u2019,\u2019-text\u2019,\u2019Home Y\u2019,\u2019-command\u2019,\u2019 \u2190goto_home Y\u2019,\u2019-height\u2019,\u20192\u2019)\n # place the button\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.homey\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20197\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n # any function called from Tcl needs to be added to TclCommands\n TclCommands.goto_home = goto_home\n commands = TclCommands(root_window)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 598 / 1290\n \n 10.1.14.12 Add Button to manual frame\n # make a new button and put it in the manual frame\n root_window.tk.call(\u2019button\u2019,\u2019.pane.top.tabs.fmanual.mybutton\u2019,\u2019-text\u2019,\u2019My Button\u2019,\u2019- \u2190command\u2019,\u2019mybutton_clicked\u2019,\u2019-height\u2019,\u20192\u2019)\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.mybutton\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20196\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n@@ -28573,15 +28573,15 @@\n = BooleanVar\n = DoubleVar\n = IntVar\n = IntVar\n = IntVar\n = IntVar\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 599 / 1290\n \n interp_state\n = IntVar\n ja_rbutton\n = StringVar\n@@ -28678,15 +28678,15 @@\n # use \u2019grid\u2019 or \u2019pack\u2019 depending on how it was originally placed\n root_window.tk.call(\u2019grid\u2019,\u2019forget\u2019,\u2019.pane.top.tabs.fmanual.jogf.zerohome.tooltouch\u2019)\n \n 10.1.14.15 Change a label\n # change label of a widget\n root_window.tk.call(\u2019setup_widget_accel\u2019,\u2019.pane.top.tabs.fmanual.mist\u2019,\u2019Downdraft\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 600 / 1290\n \n # make sure it appears (only needed in this case if the mist button was hidden)\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.mist\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20195\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n \n 10.1.14.16 Redirect an existing command\n@@ -28716,15 +28716,15 @@\n root_window.tk.call(\u2019.toolbar.program_run\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019RUN\u2019,\u2019-width\u2019, \u2190buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_step\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019STEP\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_pause\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019PAUSE\u2019,\u2019- \u2190width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_stop\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019STOP\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_blockdelete\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Skip /\u2019 \u2190,\u2019-width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_optpause\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019M1\u2019,\u2019- \u2190width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 601 / 1290\n \n root_window.tk.call(\u2019.toolbar.view_zoomin\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Zoom+\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_zoomout\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Zoom-\u2019,\u2019-width \u2190\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_z\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Top X\u2019,\u2019-width\u2019,buW, \u2190\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_z2\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Top Y\u2019,\u2019-width\u2019,buW \u2190,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n@@ -28759,15 +28759,15 @@\n support the joint / axis changes in LinuxCNC it does not work on 2.7 or 2.6 branch!\n It has support for integrated virtual keyboard (onboard or matchbox-keyboard), so there is no need\n for a hardware keyboard or mouse, but it can also be used with that hardware. GMOCCAPY offers a\n separate settings page to configure most settings of the GUI without editing files.\n GMOCCAPY can be localized very easy, because the corresponding files are separated from the linuxcnc.po files, so there is no need to translate unneeded stuff. The files are placed in /src/po/gmoccapy.\n You could just copy the gmoccapy.pot file to something like it.po and translate that file with gtranslator or poedit. After rebuilding, you\u2019d get the GUI in your preference language. To facilitate the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 602 / 1290\n \n sharing of the translation, GMOCCAPY is available on the Weblate web interface. GMOCCAPY is currently available in English, German, Spanish, Polish, Serbian and Hungarian. Feel free to help me to\n introduce more languages, be it locally or via the web. If you need help, don\u2019t hesitate to contact me\n on nieson@web.de.\n \n@@ -28781,15 +28781,15 @@\n it should fit to every standard screen. It is recommended to use screens with minimum resolution of\n 1024x748.\n \n 10.2.3 How to Get GMOCCAPY\n GMOCCAPY 3 is included in the standard distribution of LinuxCNC since release 2.7. So the easiest\n way to get GMOCCAPY on your controlling PC is just to download the ISO and install it from the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 603 / 1290\n \n CD/DVD/USB-stick. This allows you to receive updates with the regular Debian packages.\n In the release notes aka changelist you can track the latest bugfixes and features.\n You will get a similar screen to the following (the design may vary depending on your config):\n \n@@ -28800,15 +28800,15 @@\n \u2022 -logo : If given, the logo will hide the jog button tab in manual mode, this is only\n useful for machines with hardware buttons for jogging and increment selection.\n There is really not to much to configure just to run GMOCCAPY, but there are some points you should\n take care off if you want to use all the features of the GUI.\n You will find a lot of simulation configurations (INI files) included, just to show the basics:\n \u2022 gmoccapy.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 604 / 1290\n \n \u2022 gmoccapy_4_axis.ini\n \u2022 lathe_configs/gmoccapy_lathe.ini\n \u2022 lathe_configs/gmoccapy_lathe_imperial.ini\n \u2022 gmoccapy_left_panel.ini\n@@ -28841,15 +28841,15 @@\n PROGRAM_PREFIX = ../../nc_files/\n \n \u2022 DISPLAY = gmoccapy - This tells LinuxCNC to use GMOCCAPY.\n \u2022 PREFERENCE_FILE_PATH - Gives the location and name of the preferences file to be used. In most\n cases this line will not be needed, it is used by GMOCCAPY to store your settings of the GUI, like\n themes, DRO units, colors, and keyboard settings, etc., see settings page for more details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 605 / 1290\n \n Note\n If no path or file is given, GMOCCAPY will use as default .pref, if no machine\n name is given in your INI File it will use gmoccapy.pref. The file will be stored in your config directory,\n so the settings will not be mixed if you use several configs. If you only want to use one file for\n@@ -28884,15 +28884,15 @@\n If not set, half of MAX_LINEAR_VELOCITY will be used. If that value is also not given, it will default\n to 180.\n \n \u2022 MAX_LINEAR_VELOCITY = 230.0 - Sets the maximal velocity of the machine.\n Note\n Defaults to 600 if not set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 606 / 1290\n \n 10.2.4.3 Macro Buttons\n You can add macros to GMOCCAPY, similar to Touchy\u2019s way. A macro is nothing else than a NGC file.\n You are able to execute complete CNC programs in MDI mode by just pushing one button. To do so,\n you first have to specify the search path for macros:\n@@ -28933,15 +28933,15 @@\n GMOCCAPY will also accept macros asking for parameters like:\n [MACRO]\n MACRO = go_to_position X-pos Y-pos Z-pos\n \n The parameters must be separated by spaces. This example calls a file go_to_position.ngc with the\n following content:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 607 / 1290\n \n ; Test file \u201dgo to position\u201d\n ; will jog the machine to a given position\n O sub\n G17\n@@ -28961,15 +28961,15 @@\n M2\n \n After pushing the execute macro button, you will be asked to enter the values for X-pos Y-pos Z-pos\n and the macro will only run if all values have been given.\n Note\n If you would like to use a macro without any movement, see also the notes in known problems.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 608 / 1290\n \n Macro example using the \u201dgo to position\u201d-macro\n 10.2.4.4 Embedded Tabs and Panels\n You can add embedded programs to GMOCCAPY like you can do in AXIS, Touchy and Gscreen. All is\n done by GMOCCAPY automatically if you include a few lines in your INI file in the DISPLAY section.\n@@ -28983,15 +28983,15 @@\n EMBED_TAB_LOCATION = ntb_preview\n EMBED_TAB_COMMAND = gladevcp -x {XID} vcp_box.glade\n \n All you have to take care of, is that you include for every tab or side panel the mentioned three lines:\n \u2022 EMBED_TAB_NAME = Represents the name of the tab or side panel, it is up to you what name you\n use, but it must be present!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 609 / 1290\n \n \u2022 EMBED_TAB_LOCATION = The place where your program will be placed in the GUI, see figure\n Embedded tab locations. Valid values are:\n \u2013 ntb_user_tabs (as main tab, covering the complete screen)\n \u2013 ntb_preview (as tab on the preview side (1))\n@@ -29028,29 +29028,29 @@\n \n will add a the panel manual-example.ui, include a custom Python handler, hitcounter.py and make\n all connections after realizing the panel according to manual-example.hal.\n hide\n \n will hide the chosen box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 610 / 1290\n \n Figure 10.14: Embedded tab locations\n Note\n If you make any HAL connections to your custom glade panel, you need to do that in the HAL file\n specified in the EMBED_TAB_COMMAND line, otherwise you may get an error that the HAL pin does\n not exist \u2014 this is because of race conditions loading the HAL files. Connections to GMOCCAPY HAL\n pins need to be made in the postgui HAL file specified in your INI file, because these pins do not exist\n prior of realizing the GUI.\n \n Here are some examples:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ntb_preview\n \n 611 / 1290\n \n box_right - and GMOCCAPY in MDI mode\n \n@@ -29073,15 +29073,15 @@\n provide a -response HAL pin.\n For more detailed information of the pins see User Created Message HAL Pins.\n Example of User Message Configuration\n MESSAGE_TEXT = This is a info-message test\n MESSAGE_TYPE = status\n MESSAGE_PINNAME = statustest\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 612 / 1290\n \n MESSAGE_TEXT = This is a yes no dialog test\n MESSAGE_TYPE = yesnodialog\n MESSAGE_PINNAME = yesnodialog\n MESSAGE_TEXT = Text can be small, big, bolditalic,\n@@ -29122,15 +29122,15 @@\n self.widgets.rbt_auto.set_size_request(*BB_SIZE)\n self.widgets.tbtn_setup.set_size_request(*BB_SIZE)\n self.widgets.tbtn_user_tabs.set_size_request(*BB_SIZE)\n self.widgets.btn_exit.set_size_request(*BB_SIZE)\n \n The widget names can the looked up in the /usr/share/gmoccapy.glade file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 613 / 1290\n \n 10.2.4.8 User CSS File\n Similar to the User command file it\u2019s possible to influence the appearance by cascading style sheets\n (CSS). If a file ~/.gmoccapy_css exists, its contents are loaded into the stylesheet provider and are\n so being applied to the GUI.\n@@ -29174,15 +29174,15 @@\n \n You can specify where to save the log file:\n [DISPLAY]\n LOG_FILE = gmoccapy.log\n \n If LOG_FILE is not set, logging happens to $HOME/.log.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 614 / 1290\n \n 10.2.5 HAL Pins\n GMOCCAPY exports several HAL pins to be able to react to hardware devices. The goal is to get a\n GUI that may be operated in a tool shop, completely/mostly without mouse or keyboard.\n Note\n@@ -29217,15 +29217,15 @@\n For the bottom (horizontal) buttons they are:\n \u2022 gmoccapy.h-button.button-0 (bit IN)\n \u2022 gmoccapy.h-button.button-1 (bit IN)\n \u2022 gmoccapy.h-button.button-2 (bit IN)\n \u2022 gmoccapy.h-button.button-3 (bit IN)\n \u2022 gmoccapy.h-button.button-4 (bit IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 615 / 1290\n \n \u2022 gmoccapy.h-button.button-5 (bit IN)\n \u2022 gmoccapy.h-button.button-6 (bit IN)\n \u2022 gmoccapy.h-button.button-7 (bit IN)\n \u2022 gmoccapy.h-button.button-8 (bit IN)\n@@ -29326,15 +29326,15 @@\n zero G92\n unhome all\n back\n \n set selected\n back\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 616 / 1290\n \n Table 10.4: Functional assignment of horizontal buttons\n (3)\n Pin\n Tool Mode\n@@ -29384,15 +29384,15 @@\n \n So we have 67 reactions with only 10 HAL pins!\n These pins are made available to be able to use the screen without an touch panel, or protect it\n from excessive use by placing hardware buttons around the panel. They are available in a sample\n configuration like shown in the image below.\n Sample configuration \u201dgmoccapy_sim_hardware_button\u201d showing the side buttons\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 617 / 1290\n \n 10.2.5.2 Velocities and Overrides\n All sliders from GMOCCAPY can be connected to hardware encoders or hardware potentiometers.\n Note\n For GMOCCAPY 3 some HAL pin names have changed when new controls have been implemented.\n@@ -29404,15 +29404,15 @@\n \u2022 gmoccapy.jog.jog-velocity.count-enable (bit IN) - Must be True, to enable counts\n \u2022 gmoccapy.feed.feed-override.counts (s32 IN) - feed override\n \u2022 gmoccapy.feed.feed-override.count-enable (bit IN) - Must be True, to enable counts\n \u2022 gmoccapy.feed.reset-feed-override (bit IN) - reset the feed override to *0%\n \u2022 gmoccapy.spindle.spindle-override.counts (s32 IN) - spindle override\n \u2022 gmoccapy.spindle.spindle-override.count-enable (bit IN) - Must be True, to enable counts\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 618 / 1290\n \n \u2022 gmoccapy.spindle.reset-spindle-override (bit IN) - reset the spindle override to *0%\n \u2022 gmoccapy.rapid.rapid-override.counts (s32 IN) - Maximal Velocity of the *chine\n \u2022 gmoccapy.rapid.rapid-override.count-enable (bit IN) - Must be True, to enable counts\n To connect potentiometers, use the following pins:\n@@ -29442,15 +29442,15 @@\n \u2022 gmoccapy.spc_spindle.increase (bit IN) - As long as True the value of the slider will increase\n \u2022 gmoccapy.spc_spindle.decrease (bit IN) - As long as True the value of the slider will decrease\n \u2022 gmoccapy.spc_spindle.scale (float IN) - A value to scale the output value (handy to change units/min to units/sec)\n \u2022 gmoccapy.spc_spindle.value (float OUT) - Value of the widget\n \u2022 gmoccapy.spc_spindle.scaled-value (float OUT) - Scaled value of the widget .RAPIDS\n \u2022 gmoccapy.spc_rapid.increase (bit IN) - As long as True the value of the slider will increase\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 619 / 1290\n \n \u2022 gmoccapy.spc_rapid.decrease (bit IN) - As long as True the value of the slider will decrease\n \u2022 gmoccapy.spc_rapid.scale (float IN) - A value to scale the output value (handy to change units/min\n to units/sec)\n \u2022 gmoccapy.spc_rapid.value (float OUT) - Value of the widget\n@@ -29485,15 +29485,15 @@\n For the standard XYZ config following HAL pins will be available:\n \u2022 gmoccapy.jog.axis.jog-x-plus (bit IN)\n \u2022 gmoccapy.jog.axis.jog-x-minus (bit IN)\n \u2022 gmoccapy.jog.axis.jog-y-plus (bit IN)\n \u2022 gmoccapy.jog.axis.jog-y-minus (bit IN)\n \u2022 gmoccapy.jog.axis.jog-z-plus (bit IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 620 / 1290\n \n \u2022 gmoccapy.jog.axis.jog-z-minus (bit IN)\n If you use a 4 axes configuration, there will be two additional pins:\n \u2022 gmoccapy.jog.jog--plus (bit IN)\n \u2022 gmoccapy.jog.jog--minus (bit IN)\n@@ -29524,15 +29524,15 @@\n \u2022 gmoccapy.jog.jog-inc-3 (bit IN)\n \u2022 gmoccapy.jog.jog-inc-4 (bit IN)\n \u2022 gmoccapy.jog.jog-inc-5 (bit IN)\n \u2022 gmoccapy.jog.jog-inc-6 (bit IN)\n GMOCCAPY offers also a HAL pin to output the selected jog increment:\n \u2022 gmoccapy.jog.jog-increment (float OUT)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 621 / 1290\n \n 10.2.5.6 Hardware Unlock Pin\n To be able to use a key switch to unlock the settings page, the following pin is exported:\n \u2022 gmoccapy.unlock-settings (bit IN) - The settings page is unlocked if the pin is high. To use this\n pin, you need to activate it on the settings page.\n@@ -29566,15 +29566,15 @@\n MESSAGE_TEXT = LUBE FAULT\n MESSAGE_TYPE = okdialog\n MESSAGE_PINNAME = lube-fault\n MESSAGE_TEXT = X SHEAR PIN BROKEN\n MESSAGE_TYPE = status\n MESSAGE_PINNAME = pin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 622 / 1290\n \n To connect these new pins you need to do this in the postgui HAL file. Here are some example connections which connect the message signals to some place else in the HAL file.\n Example Connection of User Messages (HAL file)\n net gmoccapy-lube-fault gmoccapy.messages.lube-fault\n net gmoccapy-lube-fault-waiting gmoccapy.messages.lube-fault-waiting\n@@ -29594,15 +29594,15 @@\n Also loops will cause different values.\n 10.2.5.11 Tool Related Pins\n Tool Change Pins These pins are provided to use GMOCCAPY\u2019s internal tool change dialog, similar\n to the one known from AXIS, but with several modifications. So you will not only get the message\n to change to tool number 3, but also the description of that tool like 7.5 mm 3 flute cutter. The\n information is taken from the tool table, so it is up to you what to display.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 623 / 1290\n \n Figure 10.15: GMOCCAPY tool change dialog\n \u2022 gmoccapy.toolchange-number (s32 IN) - The number of the tool to be changed\n \u2022 gmoccapy.toolchange-change (bit IN) - Indicates that a tool has to be changed\n \u2022 gmoccapy.toolchange-changed (bit OUT) - Indicates tool has been changed\n@@ -29618,15 +29618,15 @@\n \n Tool Offset Pins These pins allow you to show the active tool offset values for X and Z in the tool\n information frame. You should know that they are only active after G43 has been sent.\n \n Figure 10.16: Tool information area\n \u2022 gmoccapy.tooloffset-x (float IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 624 / 1290\n \n \u2022 gmoccapy.tooloffset-z (float IN)\n Note\n The tooloffset-x line is not needed on a mill, and will not be displayed on a mill with trivial kinematics.\n \n@@ -29655,15 +29655,15 @@\n 1. Touch off your workpiece in X and Y.\n 2. Measure the height of your block from the base where your tool switch is located, to the upper\n face of the block (including chuck etc.).\n 3. Push the button block height and enter the measured value.\n 4. Go to auto mode and start your program.\n Here is a small sketch:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 625 / 1290\n \n Figure 10.17: Tool measurement data\n With the first given tool change the tool will be measured and the offset will be set automatically to\n fit the block height. The advantage of the GMOCCAPY way is, that you do not need a reference tool.\n Note\n@@ -29679,15 +29679,15 @@\n \u2022 gmoccapy.probeheight (float OUT) - The probe switch height\n \u2022 gmoccapy.searchvel (float OUT) - The velocity to search for the tool probe switch\n \u2022 gmoccapy.probevel (float OUT) - The velocity to probe tool length\n 10.2.6.2 INI File Modifications\n Modify your INI file to include the following sections.\n The RS274NGC Section\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 626 / 1290\n \n [RS274NGC]\n # is the sub, with is called when a error during tool change happens, not needed on every\n machine configuration\n ON_ABORT_COMMAND=O call\n@@ -29729,15 +29729,15 @@\n \u2022 toplevel.py\n \u2022 remap.py\n \u2022 stdglue.py\n From /configs/sim/gmoccapy/macros copy\n \u2022 on_abort.ngc\n \u2022 change.ngc\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 627 / 1290\n \n to the directory specified as SUBROUTINE_PATH, see RS274NGC Section.\n Open change.ngc with a editor and uncomment the following lines (49 and 50):\n F #<_hal[gmoccapy.probevel]>\n G38.2 Z-4\n@@ -29773,15 +29773,15 @@\n \n To enter the page you will have to click on\n and give an unlock code, which is 123 by\n default. If you want to change it at this time you will have to edit the hidden preference file, see the\n display section for details.\n The page is separated in three main tabs:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 628 / 1290\n \n 10.2.7.1 Appearance\n \n Figure 10.18: GMOCCAPY settings page Appearance\n On this tab you will find the following options:\n@@ -29792,15 +29792,15 @@\n \u2022 Start maximized\n \u2022 Start as window - If you select start as window the spinboxes to set the position and size will get\n 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\n on the settings.\n \u2022 Window decorated - Allows the title bar to be hidden. (default: title bar visible)\n \u2022 hide cursor - Does allow to hide the cursor, what is very useful if you use a touch screen.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 629 / 1290\n \n \u2022 hide tooltips - Hides the tool tips.\n Keyboard The checkboxes allow the user to select if he wants the on board keyboard to be shown\n immediately, when entering the MDI Mode, when entering the offset page, the tooledit widget or when\n open a program in the EDIT mode. The keyboard button on the bottom button list will not be affected\n@@ -29825,15 +29825,15 @@\n The letters \u201dde\u201d are for German, you will have to set them according to your locale settings. Just\n execute this file before starting LinuxCNC, it can be done also adding a starter to your local folder.\n ./config/autostart\n \n So that the layout is set automatically on starting.\n For matchbox-keyboard you will have to make your own layout, for a German layout ask in the forum.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 630 / 1290\n \n GMOCCAPY with Onboard keyboard in edit mode\n On Touch Off This gives the option whether to show the preview tab or the offset page tab when you\n enter the touch off mode by clicking the corresponding bottom button.\n \u2022 show preview\n@@ -29844,15 +29844,15 @@\n \u2022 Relative mode = black\n \u2022 Absolute mode = blue\n \u2022 Distance to go = yellow\n The foreground color of the DRO can be selected with:\n \u2022 homed color = green\n \u2022 unhomed color = red\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 631 / 1290\n \n Note\n You can change through the DRO modes (absolute, relative, distance to go) by clicking the number\n on the DRO! If you click on the left side letter of the DRO a popup window will allow you to set the\n value of the axes, making it easier to set the value, as you will not need to go over the touch off\n@@ -29890,15 +29890,15 @@\n \u2013 left zoom, middle move, right rotate\n \u2013 left move, middle rotate, right zoom\n \u2013 left zoom, middle rotate, right move\n \u2013 left move, middle zoom, right rotate\n \u2013 left rotate, middle zoom, right move\n Default is left move, middle zoom, right rotate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 632 / 1290\n \n The mouse wheel will still zoom the preview in every mode.\n Tip\n If you select an element in the preview, the selected element will be taken as rotation center point\n and in auto mode the corresponding code line will be highlighted.\n@@ -29915,15 +29915,15 @@\n messages sounds should be played. By default \u201dFollow System Theme\u201d is set.\n It further allows to change the icon theme. Currently there are three themes available:\n \u2022 classic\n \u2022 material\n \u2022 material light\n To create custom icon themes, see section Icon Theme for details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 633 / 1290\n \n 10.2.7.2 Hardware\n \n Hardware MPG Scale For the different HAL pins to connect MPG wheels to, you may select individual\n scales to be applied. The main reason for this was my own test to solve this through HAL connections,\n@@ -29939,15 +29939,15 @@\n are others that will never allow this. So everybody can select whether to use them or not.\n Keyboard shortcuts are disabled by default.\n \n Warning\n It is not recommended to use keyboard jogging, as it represents a serious risk for operator and\n machine.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 634 / 1290\n \n Please take care if you use a lathe, then the shortcuts will be different, see the Lathe Specific Section.\n General\n \u2022 F1 - Trigger Estop (will work even if keyboard shortcuts are disabled)\n \u2022 F2 - Toggle machine on/off\n@@ -29978,15 +29978,15 @@\n Spindle\n \u2022 Starting RPM - Sets the rpm to be used if the spindle is started and no S value has been set.\n Note\n This value will be presetted according to your settings in [DISPLAY] DEFAULT_SPINDLE_SPEED of\n your INI file. If you change the settings on the settings page, that value will be default from that\n moment, your INI file will not be modified.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 635 / 1290\n \n \u2022 Spindle bar min and Spindle bar max - Sets the limits of the spindle bar shown in the INFO frame\n on the main screen.\n Default values are:\n MIN = 0\n@@ -30001,15 +30001,15 @@\n please take care that the \u201drabbit mode\u201d is activated, otherwise you will not be able to jog faster\n than the turtle jog velocity, which is calculated using the turtle jog factor.\n \u2022 Turtle jog factor - Sets the scale to apply for turtle jog mode (button pressed, showing the turtle). If\n you set a factor of 20, the turtle max. jog velocity will be 1/20 of the max. velocity of the machine.\n Note\n This button can be controlled using the Turtle-Jog HAL Pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 636 / 1290\n \n 10.2.7.3 Advanced Settings\n \n Tool Measurement Please check Auto Tool Measurement\n Note\n@@ -30022,15 +30022,15 @@\n \u2013 X Pos. - The X position of the tool switch.\n \u2013 Y Pos. - The Y position of the tool switch.\n \u2013 Z Pos. - The Z position of the tool switch, we will go as rapid move to this coordinate.\n \u2013 Max. Probe The distance to search for contact, an error will be launched, if no contact is\n given in this range. The distance has to be given in relative coordinates, beginning the move\n from Z Pos., so you have to give a negative value to go down!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 637 / 1290\n \n \u2013 Probe Height - The height of your probe switch, you can measure it. Just touch off the base\n where the probe switch is located and set that to zero. Then make a tool change and watch\n the tool_offset_z value, that is the height you must enter here.\n Probe velocities\n@@ -30065,15 +30065,15 @@\n the 11th message will delete the first one, so you will only see the last 10.\n \u2022 Font - The font and size you want to use to display the messages.\n \u2022 Use frames - If you activate the checkbox, each message will be displayed in a frame, so it is much\n easier to distinguish the messages. But you will need a little bit more space.\n \u2022 Launch test message-button - It will show a message, so you can see the changes of your settings\n without the need to generate an error.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 638 / 1290\n \n 10.2.8 Icon Theme\n Icon themes are used to customize the look and feel of GMOCCAPY\u2019s icons.\n GMOCCAPY ships with three different icon themes:\n \u2022 classic - The classic GMOCCAPY icons.\n@@ -30110,15 +30110,15 @@\n png files). A special case is the directory called \u201dscalable/actions\u201d, this contains scalable icons\n not tied to a specific size (e.g. svg files).\n By supplying different sized versions of the icons, we can guarantee a nice looking icon if different\n sizes and we also have the ability to change the icon according to its size, for example a 64x64 px\n sized icon may contain more details than its 16x16 px version.\n \u2022 For each directory we also have to write a section in the index.theme file:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 639 / 1290\n \n [16x16/actions]\n Size=16\n Type=Fixed\n Context=Actions\n@@ -30168,25 +30168,25 @@\n yellow/orange\u2019ish).\n Error: this color indicates \u201derror\u201d (usually something\n red\u2019ish).\n \n Tip\n Examples of symbolic icons can be found at linuxcnc/share/gmoccapy/icons/material.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 640 / 1290\n \n 10.2.9 Lathe Specific Section\n If in the INI file LATHE = 1 is given, the GUI will change its appearance to the special needs for a\n lathe. Mainly the Y axis will be hidden and the jog buttons will be arranged in a different order.\n \n Figure 10.19: Normal Lathe\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 641 / 1290\n \n Figure 10.20: Back Tool Lathe\n As you see the R DRO has a black background and the D DRO is gray. This will change according\n to the active G-code G7 or G8. The active mode is visible by the black background, meaning in the\n shown images G8 is active.\n@@ -30197,15 +30197,15 @@\n Normal Lathe:\n \u2022 Arrow_Left or NumPad_Left - Jog Z minus\n \u2022 Arrow_Right or NumPad_Right - Jog Z plus\n \u2022 Arrow_up or NumPad_Up - Jog X minus\n \u2022 Arrow_Down or NumPad_Down - Jog X plus\n Back Tool Lathe:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 642 / 1290\n \n \u2022 Arrow_Left or NumPad_Left - Jog Z minus\n \u2022 Arrow_Right or NumPad_Right - Jog Z plus\n \u2022 Arrow_up or NumPad_Up - Jog X plus\n \u2022 Arrow_Down or NumPad_Down - Jog X minus\n@@ -30217,15 +30217,15 @@\n There is a very good WIKI, which is actually growing, maintained by Marius, see Plasma wiki page.\n \n 10.2.11 Videos on YouTube\n Below is a series of videos that show GMOCCAPY in action. Unfortunately, these videos don\u2019t show\n the latest version of GMOCCAPY, but the way to use it will still be the same as in the current version.\n I will update the videos as soon as possible.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 643 / 1290\n \n 10.2.11.1 Basic Usage\n https://youtu.be/O5B-s3uiI6g\n 10.2.11.2 Simulated Jog Wheels\n https://youtu.be/ag34SGxt97o\n@@ -30244,15 +30244,15 @@\n 10.2.12 Known problems\n 10.2.12.1 Strange numbers in the info area\n If you get strange numbers in the info area of GMOCCAPY like:\n \n 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\n MAX_VELOCITY = xxx.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 644 / 1290\n \n 10.2.12.2 Not ending macro\n If you use a macro without movement, like this one:\n o sub\n G92.1\n@@ -30278,15 +30278,15 @@\n Touchy is a user interface for LinuxCNC meant for use on machine control panels, and therefore does\n not require keyboard or mouse.\n It is meant to be used with a touch screen, and works in combination with a wheel/MPG and a few\n buttons and switches.\n The Handwheel tab has radio buttons to select between Feed Override, Spindle Override, Maximum\n Velocity and Jogging functions for the wheel/MPG input. Radio buttons for axis selection and increment for jogging are also provided.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 645 / 1290\n \n 10.3.1 Panel Configuration\n 10.3.1.1 HAL connections\n Touchy looks in the INI file, under the heading [HAL] for entries of POSTGUI_HALFILE=.\n Typically would be touchy_postgui.hal, but can be any legal filename. These commands\n@@ -30299,15 +30299,15 @@\n are preferred.\n \n For more information on HAL files and the net command see the HAL Basics.\n Touchy has several output pins that are meant to be connected to the motion controller to control\n wheel jogging:\n \u2022 touchy.jog.wheel.increment, which is to be connected to the axis.N.jog-scale pin of each axis N.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 646 / 1290\n \n \u2022 touchy.jog.wheel.N, which is to be connected to axis.N.jog-enable for each axis N.\n Note\n N represents the axis number 0-8.\n \n@@ -30339,15 +30339,15 @@\n When you start Touchy the first time, check the Preferences tab. If using a touchscreen, choose the\n option to hide the pointer for best results.\n The Status Window is a fixed height, set by the size of a fixed font. This can be affected by the Gnome\n DPI, configured in System / Preferences / Appearance / Fonts / Details. If the bottom of the screen is\n cut off, reduce the DPI setting.\n All other font sizes can be changed on the Preferences tab.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 647 / 1290\n \n 10.3.2.3 Macros\n Touchy can invoke O-word macros using the MDI interface. To configure this, in the [TOUCHY] section\n of the INI file, add one or more MACRO lines. Each should be of the following format:\n MACRO=increment xinc yinc\n@@ -30378,39 +30378,39 @@\n from GladeVCP. GladeVCP uses the GTK widget editor GLADE to build virtual control panels (VCP) by\n point and click. Gscreen combines this with Python programming to create a GUI screen for running\n a CNC machine.\n Gscreen is customizable if you want different buttons and status LEDs. Gscreen supports GladeVCP\n which is used to add controls and indicators. To customize Gscreen you use the Glade editor. Gscreen\n is not restricted to adding a custom panel on the right or a custom tab it is fully editable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.21: Gscreen Default Screen\n \n 648 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.22: Gscreen Silverdragon Screen\n \n 649 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.23: Gscreen Spartan Screen\n \n 650 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 651 / 1290\n \n Figure 10.24: Gscreen Gaxis Screen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 652 / 1290\n \n Figure 10.25: Gscreen Industrial Screen\n Gscreen is based on Glade (the editor), PyGTK (the widget toolkit), and GladeVCP (LinuxCNC\u2019s connection to Glade and PyGTK). GladeVCP has some special widgets and actions added just for LinuxCNC\n A widget is just the generic name used for the buttons, sliders, labels etc of the PyGTK toolkit.\n 10.4.1.1 Glade File\n@@ -30418,15 +30418,15 @@\n of the screen. PyGTK uses this file to actually display and react to those widgets. The Glade editor\n makes it relatively easy to build and edit this file You must use the Glade 3.38.2 editor that uses the\n GTK3 widgets.\n 10.4.1.2 PyGTK\n PyGTK is the Python binding to GTK. GTK is the toolkit of visual widgets, it is programmed in C. PyGTK\n uses Python to bind with GTK.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 653 / 1290\n \n 10.4.2 GladeVCP\n GladeVCP binds LinuxCNC, HAL, PyGTK and Glade all together. LinuxCNC requires some special widgets so GladeVCP supplies them. Many are just HAL extensions to existing PyGTK widgets. GladeVCP\n creates the HAL pins for the special widgets described in the Glade file. GladeVCP also allows one\n to add Python commands to interact with the widgets, to make them do things not available in their\n@@ -30471,15 +30471,15 @@\n named widgets. This ties the theme file to the Glade file more tightly. Some of the sample screen skins\n allow the user to select any of the themes on the system. The sample gscreen is an example. Some\n will load the theme that is the same name in the config file. The sample gscreen-gaxis is an example.\n This is done by putting the theme folder in the config folder that has the INI and HAL files and naming\n it: SCREENNAME_theme (SCREENNAME being the base name of the files eg. gaxis_theme). Inside\n this folder is another folder call gtk-2.0, inside that is the theme files. If you add this file, Gscreen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 654 / 1290\n \n will default to this theme on start up. gscreen-gaxis has a sample custom theme that looks for certain\n named widgets and changes the visual behavior of those specific widgets. The Estop and machine-on\n buttons use different colors then the rest of the buttons so that they stand out. This is done in the\n handler file by giving them specific names an by adding specific commands in the theme\u2019s gtkrc file.\n@@ -30510,15 +30510,15 @@\n about GladeVCP widgets is a prerequisite. If the existing widgets give you the function you want or\n need then no Python code needs be added, just save the Glade file in your configuration folder. If you\n need something more custom then you must do some Python programming. The name of the parent\n window needs to be window1. Gscreen assumes this name.\n Remember, if you use a custom screen option YOU are responsible for fixing it (if required) when\n updating LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 655 / 1290\n \n 10.4.3 Building a simple clean-sheet custom screen\n \n Lets build a simple usable screen. Build this in the Glade editor (if using a RIP package run it from a\n terminal after using . scripts/rip-environment ).\n@@ -30531,15 +30531,15 @@\n \u2022 The sourceview widget will try to use the whole window so adding it to a scrolled window will cover\n this. (This is already done in the example.)\n \u2022 The buttons will expand as the window is made larger which is ugly so we will set the box they are\n in, to not expand (see below).\n \u2022 The button types to use depend on the VCP_action used -eg vcp_toggle_action usually require toggle\n buttons (Follow the example for now).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 656 / 1290\n \n \u2022 The buttons in this example are regular buttons not HAL buttons. We don\u2019t need the HAL pins.\n \n In this screen we are using VCP_actions to communicate to LinuxCNC the actions we want. This\n allows us standard functions without adding Python code in the handler file. Let\u2019s link the estop\n@@ -30547,15 +30547,15 @@\n Related Action and click the button beside it. Now select the toggle estop action. Now the button will\n toggle estop on and off when clicked. Under the general tab you can change the text of the button\u2019s\n label to describe its function. Do this for all the buttons.\n Select the gremlin widget click the common tab and set the requested height to 100 and click the\n checkbox beside it.\n Click the horizontal box that holds the buttons. Click the packing tab and click expand to No.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 657 / 1290\n \n Save it as tester.glade and save it in sim/gscreen/gscreen_custom/ folder. Now launch LinuxCNC and\n click to sim/gscreen/gscreen_custom/tester and start it. If all goes well our screen will pop up and the\n buttons will do their job. This works because the tester.ini tells gscreen to look for and load tester.glade\n and tester_handler.py. The tester_handler.py file is included in that folder and is coded just show the\n@@ -30595,15 +30595,15 @@\n manual tool change dialog. Called when the dialog is closed.\n \u2022 periodic(self): This is called every (default 100) milliseconds. Use it to update your widgets/HAL\n pins. You can call Gscreen regular periodic afterwards too, self.gscreen.update_position() or just\n add pass to not update anything. Gscreen\u2019s update_position() actually calls many separate functions. If you wish to incorporate some of those widgets then just call those functions directly.\n You can also add you own functions to be called in this file. Usually you would add a signal to a widget\n to call your function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 658 / 1290\n \n 10.4.4.1 Adding Keybindings Functions\n Our tester example would be more useful if it responded to keyboard commands. There is a function\n called keybindings() that tries to set this up. While you can override it completely, we didn\u2019t - but it\n assumes some things:\n@@ -30650,15 +30650,15 @@\n pressed. Then we add the function to the handle file to call a Gscreen builtin function to start halmeter.\n 10.4.4.2 Linuxcnc State Status\n The module Gstat polls LinuxCNC\u2019s state every 100ms and sends callback messages to user functions\n when state changes. You can register messages to act on specific state changes. As an example we\n will register to get file-loaded messages when LinuxCNC loads a new file. First we must import the\n module and instantiate it: In the import section of the handler file add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 659 / 1290\n \n from hal_glib import GStat\n GSTAT = GStat()\n \n In the handler file under def __init__(self): add:\n@@ -30701,15 +30701,15 @@\n 2. Gscreen sets the debug mode and set the optional skin name.\n 3. Gscreen checks to see if there are local XML, handler and/or locale files in the configuration\n folder. It will use them instead of the default ones (in share/gscreen/skins/) (There can be two\n separate screens displayed).\n 4. The main screen is loaded and translations set up. If present the second screen will be loaded\n and translations set up.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 660 / 1290\n \n 5. Optional Audio is initialized if available.\n 6. It reads some of the INI file to initialize the units, and the number/type of axes.\n 7. Initializes Python\u2019s binding to HAL to build a non-realtime component with the Gscreen name.\n 8. GladeVCP\u2019s makepins is called to parse the XML file to build HAL pins for the HAL widgets and\n@@ -30746,15 +30746,15 @@\n 29. Gscreen set up messages specified in the INI file.\n 30. Gscreen tells HAL the Gscreen HAL component is finished making pins and is ready. If there is\n a terminal widget in the screen it will print all the Gscreen pins to it.\n 31. Gscreen sets the display cycle time based on the INI file.\n 32. Gscreen checks the handler file for timer_interupt(self) function call otherwise use Gscreen\u2019s\n default function call.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 661 / 1290\n \n 10.4.6 INI Settings\n Under the [DISPLAY] heading:\n DISPLAY = gscreen -c tester\n options:\n@@ -30795,15 +30795,15 @@\n # This just shows in the status bar and desktop notify popup.\n MESSAGE_BOLDTEXT = NONE\n MESSAGE_TEXT = This is a statusbar test\n MESSAGE_DETAILS = STATUS DETAILS\n MESSAGE_TYPE = status\n MESSAGE_PINNAME = statustest\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 662 / 1290\n \n # This will pop up a dialog that asks a yes no question\n MESSAGE_BOLDTEXT = NONE\n MESSAGE_TEXT = This is a yes no dialog test\n MESSAGE_DETAILS = Y/N DETAILS\n@@ -30847,15 +30847,15 @@\n \n The line:\n **** GSCREEN INFO: handler file path: [\u2019/home/chris/emc-dev/share/gscreen/skins/industrial/ \u2190industrial_handler.py\u2019]\n \n shows where the stock file lives. Copy this file to your config folder. This works the same for the Glade\n file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 663 / 1290\n \n 10.5 QtDragon GUI\n 10.5.1 Introduction\n QtDragon and QtDragon_hd are built with the QtVCP framework. It is the creative vision of forum\n personality Persei8. Much of it is based on the excellent work of others in the LinuxCNC community.\n@@ -30870,15 +30870,15 @@\n \n 10.5.1.1 QtDragon\n \n Figure 10.26: QtDragon - 3 or 4 axis sample (1440x860) in silver theme\n QtDragon is resizable from a resolution of 1280x768 to 1680x1200. It will work in window mode on\n any monitor with higher resolution but not on monitors with lower resolution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 664 / 1290\n \n 10.5.1.2 QtDragon_hd\n \n Figure 10.27: QtDragon_hd - 3 or 4 axis sample for larger monitors (1920x1056) in dark theme\n QtDragon_hd is a similar design as QtDragon but modified to utilize the extra space of modern larger\n@@ -30893,15 +30893,15 @@\n You can only have one of each section (e.g., [HAL]) in the INI file. If you see in these docs multiple\n section options, place them all under the one appropriate section name.\n \n 10.5.2.1 Display\n In the section [DISPLAY] change the DISPLAY = assignment to read:\n \u2022 qtdragon for a small version\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 665 / 1290\n \n \u2022 qtdradon_hd for the large version.\n You can add -v, -d, -i, or -q for (respectably) verbose, debug, info or quiet output to the terminal.\n [DISPLAY]\n DISPLAY = qtvcp qtdragon\n@@ -30938,15 +30938,15 @@\n [DISPLAY]\n DEFAULT_SPINDLE_0_SPEED = 500\n SPINDLE_INCREMENT = 200\n MIN_SPINDLE_0_SPEED = 100\n MAX_SPINDLE_0_SPEED = 2500\n MAX_SPINDLE_POWER = 1500\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 666 / 1290\n \n 10.5.2.6 Jogging increments\n Set selectable jogging increments.\n These increments can be user changed.\n [DISPLAY]\n@@ -30993,15 +30993,15 @@\n panel.\n If using stackedWidget_mainTab, a button labelled User will appear.\n Pressing this button will cycle through displaying all available panels (specified for this location) on\n the main tab area.\n Sample adding a builtin panel to the utilities tab, i.e., a graphical animated machine using\n the vismach library.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 667 / 1290\n \n [DISPLAY]\n EMBED_TAB_NAME = Vismach demo\n EMBED_TAB_COMMAND = qtvcp vismach_mill_xyz\n EMBED_TAB_LOCATION = tabWidget_utilities\n@@ -31025,15 +31025,15 @@\n ~/linuxcnc/nc_files/examples/probe/basic_probe/macros:~/linuxcnc/nc_files/examples/remap- \u2190subroutines: \\\n ~/linuxcnc/nc_files/examples/ngcgui_lib/remap_lib\n \n QtVCP\u2019s NGCGUI program also need to know where to open for subroutine selection and pre-selection.\n NGCGUI_SUBFILE_PATH must point to an actual path on your system and also a path described in\n SUBROUTINE_PATHS.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 668 / 1290\n \n [DISPLAY]\n # NGCGUI subroutine path.\n # Thr path must also be in [RS274NGC] SUBROUTINE_PATH\n NGCGUI_SUBFILE_PATH = ~/linuxcnc/nc_files/examples/ngcgui_lib\n@@ -31075,15 +31075,15 @@\n jpg = image-to-gcode\n py = python\n \n 10.5.2.13 Probe/Touchplate/Laser Settings\n QtDragon has INI entries for two optional probing tab screens available. Comment/uncomment which\n ever you prefer.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 669 / 1290\n \n \u2022 Versa probe is a QtVCP ported version of a popular GladeVCP probing panel.\n \u2022 Basic Probe is a QtVCP ported version based on the third party basic probe screen.\n Both perform similar probing routines, though Versa probe optionally handles auto tool measurement.\n [PROBE]\n@@ -31124,15 +31124,15 @@\n RS274NGC_STARTUP_CODE = G17 G20 G40 G43H0 G54 G64P0.0005 G80 G90 G94 G97 M5 M9\n \n 10.5.2.16 Macro Buttons\n QtDragon has up to ten convenience buttons for calling macro actions.\n These could also call OWord routines if desired.\n In the sample configurations they are labelled for moving between current user system origin (zero\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 670 / 1290\n \n point) and Machine system origin.\n User origin is the first MDI command in the INI list, machine origin is the second.\n This example shows how to move Z axis up first. The commands are separated by the ;.\n The label is set after the comma. The symbols \\n adds a line break.\n@@ -31172,15 +31172,15 @@\n F1 - Estop on/off\n F2 - Machine on/off\n F12 - Style Editor\n Home - Home All Joint of the Machine\n Escape - Abort Movement\n Pause - Pause Machine Movement\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 671 / 1290\n \n 10.5.4 Buttons\n Buttons that are checkable will change their text colour when checked. This is controlled by the\n stylesheet/theme\n \n@@ -31231,15 +31231,15 @@\n \n This bit pin is an output to the spindle control to pause it.\n You would connect it to spindle.0.inhibit.\n qtdragon.spindle-inhibit\n \n This bit output pin can be connected to turn on a laser:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 672 / 1290\n \n qtdragon.btn-laser-on\n \n This float output pin indicates the camera rotation in degrees:\n qtdragon.cam-rotation\n@@ -31294,15 +31294,15 @@\n \n 10.5.9 Spindle\n The screen is intended to interface to a VFD, but will still work without it.\n There are a number of VFD drivers included in the LinuxCNC distribution.\n It is up to the end user to supply the appropriate driver and HAL file connections according to his own\n machine setup.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 673 / 1290\n \n 10.5.10 Auto Raise Z Axis on Spindle Pause\n QtDragon can be set up to automatically raise and lower the Z axis when the spindle is paused.\n When a program is paused, then you press the Spindle Pause button to stop the spindle and raise it\n in Z.\n@@ -31352,15 +31352,15 @@\n be called probe_points.txt. The file can be modified or updated at any time while compensation is\n disabled. When next enabled, the file will be reread and the compensation map is recalculated. This\n file is expected to be in the configuration directory.\n The probe data file is generated by a probing program, which itself is generated by an external python\n program called gcode_ripper, which can be launched from the file manager tab using the G-code\n Ripper button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 674 / 1290\n \n 10.5.11.1 Using G-code Ripper for Z level Compensation\n \n Figure 10.28: QtDragon_hd showing G-code Ripper\n Note\n@@ -31374,15 +31374,15 @@\n \u2022 If necessary, make adjustments and press Recalculate.\n \u2022 Press Save G-Code File - Probe Only.\n \u2022 Save the generated file to the nc_files folder.\n \u2022 Exit gcode_ripper.\n \u2022\n \u2022 Without changing the offsets, run this program. Make sure the probe tool is installed. When complete, there will be a file in the config directory called probe_points.txt.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 675 / 1290\n \n \u2022 In qtdragon_hd, press the Enable Z Comp button to enable compensation. Look at the status line\n for indication of success or failure. Active compensation will be displayed beside the label: Z Level\n Comp While jogging that display should change based on the compensation component.\n Note\n@@ -31448,15 +31448,15 @@\n scaled-s32-sums.0.in0\n net eoffset-zlevel-count\n scaled-s32-sums.0.in1\n setp scaled-s32-sums.0.scale0 1000\n net eoffset-counts\n scaled-s32-sums.0.out-s\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 676 / 1290\n \n 10.5.12 Probing\n The probe screen has been through basic testing but there could still be some minor bugs. When\n running probing routines, use extreme caution until you are familiar with how everything works.\n Probe routines run without blocking the main GUI. This gives the operator the opportunity to watch\n@@ -31471,15 +31471,15 @@\n 1. how far above the table the probe trigger point is (tool setter height) and\n 2. how far above the table the top of the workpiece is.\n This operation has to be done every time the tool is changed as the tool length is not saved.\n For touching off with a touch probe, whether you use the touchplate operation with thickness set to 0\n or use a probing routine, the height from table to top of workpiece parameter is not taken into account\n and can be ignored. It is only for the tool setter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 677 / 1290\n \n 10.5.12.1 Versa Probe\n \n Figure 10.29: QtDragon - Versa Probe Option\n Versa probe is used to semi-automatically probe work pieces to find edges, centers and angles.\n@@ -31497,15 +31497,15 @@\n \u2022 SEARCH:: This is the feed rate at which the probe searches for the target workpiece in machine\n units per minute. The search speed should be slow enough to give an acceptable initial accuracy,\n but fast enough to not waste time waiting for movement. Recommendation: 200-500 mm/min.\n \u2022 PROBE:: Once initial contact has been made and the probe is retracted, it will wait for 0.5 seconds\n before performing the search again at a lower speed, the probe velocity. This lower speed ensures\n the machine can stop movement as quickly as possible on contact with the workpiece.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 678 / 1290\n \n \u2022 RAPID:: Axis movements not associated with searching are done at the speed defined by RAPID in\n machine units per minute.\n \u2022 SIDE/EDGE LENGTH:: This is the distance the probe will move at the rapid rate to the position\n where it will begin a search. If measuring a corner, it will move EDGE LENGTH units away from\n@@ -31525,15 +31525,15 @@\n CLEARANCE to 0.\n There are three toggle buttons:\n \u2022 Auto Zero This selects if after probing the relevant axis is set to zero in the current user system.\n \u2022 Auto Skew This selects if after probing, the system will be rotated or just display the calculated\n rotation.\n \u2022 Tool Measure This (if integrated) turns auto tool probing on and off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 679 / 1290\n \n 10.5.12.2 Basic probe\n \n Figure 10.30: QtDragon - Basic Probe Option\n Basic probe is used to semi-automatically probe work pieces to find edges, centers and angles. The\n@@ -31546,15 +31546,15 @@\n \u2022 Calibration\n You must carefully set the Probing Parameters:\n \u2022 Probe Tool: will only allow probing if this tool number is in the spindle\n \u2022 Probe Diameter: the size of the probe tip\n \u2022 Probe Rapid: the speed of rapid moves in machine units\n \u2022 Probe Search: the speed of the first rough search in machine units\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 680 / 1290\n \n \u2022 Probe Feed: the speed of the second fine search in machine units\n \u2022 Step Off : back off and re-probe distance\n \u2022 Max XY Distance: the maximum distance the probe will search for in X and Y before failing with\n error\n@@ -31585,15 +31585,15 @@\n \u2022 EDGE WIDTH - distance along edge wall (away from corner) to start probing.\n Note\n These distance are always to be set in machine units (mm for metric machine, inch for imperial\n machine).\n \n Preset:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 681 / 1290\n \n \u2022 manual set probe at the intersection of the edges (ie corner) of material as described by the green\n bullseye on the button. Set it Z CLEARANCE above the top of material. These can be done by eye.\n \u2022 set EXTRA CLEARANCE to a value that you want the probe to go below the top of material. (So the\n probe will move from its start position down Z Clearance + Extra Clearance distance.)\n@@ -31609,15 +31609,15 @@\n 3. probe wall twice (rough and fine),\n 4. move diagonally to the other wall as set by EDGE WIDTH and XY CLEARANCE,\n 5. probe wall twice,\n 6. raise probe up by Z CLEARANCE + EXTRA DEPTH 9returns to starting height),\n 7. rapid back to starting corner (now calculated using the probed walls),\n 8. if auto zero button is enabled, set X and Y of the current user system to zero.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 682 / 1290\n \n 10.5.13 Touch plate\n \n Figure 10.31: QtDragon - Touch Plate\n You can use a conductive touch plate or equivalent to auto touch off (zero the user coordinate) for the\n@@ -31636,15 +31636,15 @@\n calculation from the touchplate height setting.\n \n 10.5.14 Auto Tool Measurement\n QtDragon can be setup to do integrated auto tool measurement using the Versa Probe widget and\n remap code. To use this feature, you will need to do some additional settings and you may want to\n use the offered HAL pin to get values in your own ngc remap procedure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 683 / 1290\n \n Important\n Before starting the first test, do not forget to enter the probe height and probe velocities on\n the versa probe settings page.\n \n@@ -31659,15 +31659,15 @@\n When fist setting up auto tool measurement, please use caution until you confirm tool change and\n probe locations - it is easy to break a tool/probe. Abort will be honoured while the probe is in motion.\n \n Figure 10.32: Auto tool measurement\n With the first given tool change the tool will be measured and the offset will be set automatically to\n fit the block height. The advantage of this way is, that you do not need a reference tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 684 / 1290\n \n Note\n Your program must contain a tool change at the beginning. The tool will be measured, even it has\n been used before, so there is no danger if the block height has changed. There are several videos\n on you tube that demonstrate the technique using GMOCCAPY. The GMOCCAPY screen pioneered the\n@@ -31682,15 +31682,15 @@\n \u2022 Probe down in Z to maximum defined in the INI\u2019s [VERSA_TOOLSETTER] MAXPROBE\n \u2022 Return Z to position defined in the INI\u2019s [TOOL_CHANGE] Z\n Note\n The [TOOL_CHANGE] Z position should be high enough so the tool will not hit the tool probe when\n moving to the [VERSA_TOOLSETTER] X and Y position. MAXPROBE distance needs to be high enough\n for the tool to touch the probe.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 685 / 1290\n \n 10.5.14.1 Work Piece Height Probing\n \n Figure 10.33: QtDragon_hd - Work piece Height probing\n This program probes 2 user specified locations in the Z axis and calculates the difference in heights.\n@@ -31703,15 +31703,15 @@\n displayed on the DROs.\n Autofill Workpiece Height on Main Screen\n \u2022 When checked, the calculated height is automatically transferred to the Workpiece Height field in\n the main screen.\n \u2022 Otherwise, the main screen is not affected.\n Workpiece Probe At\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 686 / 1290\n \n \u2022 the X, Y and Z coordinates specify where the first probing routine should start, in current WCS\n Machine Probe At\n \u2022 the X, Y and Z coordinates specify where the second probing routine should start, in current WCS\n Z Safe Travel Height\n@@ -31745,15 +31745,15 @@\n Reflects screen entry.\n \u2022 qtversaprobe.probeheight (HAL_FLOAT) the toolsetter probe switch height. Reflects screen entry.\n \u2022 qtversaprobe.searchvel (HAL_FLOAT) the velocity to search for the tool probe switch\n \u2022 qtversaprobe.probevel (HAL_FLOAT) the velocity to probe tool length. Reflects screen entry.\n \u2022 qtversaprobe.backoffdist (HAL_FLOAT) the distance the probe backs off after triggering. Reflects\n screen entry.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 687 / 1290\n \n 10.5.14.3 Tool Measurement INI File Modifications\n Modify your INI file to include the following:\n QtDragon allows you to select one of two styles of touch probe routines. Versa probe works with a M6\n remap to add auto tool probing.\n@@ -31793,15 +31793,15 @@\n \u2022 wait for manual tool change acknowledgement\n \u2022 go to VERSA_TOOLSETTER XY position\n \u2022 go to VERSA_TOOLSETTER Z position\n \u2022 fast probe\n \u2022 slow probe\n \u2022 go to TOOLCHANGE Z position\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 688 / 1290\n \n Z_MAX_CLEAR is the Z position to go to before moving to the tool setter when using the Travel to\n Toolsetter button.\n Travel to Toolsetter Action sequence:\n \n@@ -31845,15 +31845,15 @@\n mode. A dialog will be shown allowing the spindle direction and speed to be preset. The start line is\n indicated in the box labelled LINE, next to the CYCLE START button. The run from line feature can\n be disabled in the settings page.\n Note\n LinuxCNC\u2019s run-from-line is not very user friendly. E.g., it does not start the spindle or confirm the\n proper tool. Also, it does not handle subroutines well. If used it is best to start on a rapid move.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 689 / 1290\n \n 10.5.16 Laser buttons\n The LASER ON/OFF button in intended to turn an output on or off which is connected to a small laser\n crosshair projector. When the crosshair is positioned over a desired reference point on the workpiece,\n the REF LASER button can be pushed, which then sets the X and Y offsets to the values indicated by\n@@ -31885,15 +31885,15 @@\n You can monitor/modify tool offsets from this tab. Adding and deleting tools from the tool file can also\n be done from this tab. When this tab is selected the individual home buttons in the DRO area will\n change to tool offset setting buttons. They will return to home buttons when you select another tab.\n Pressing this tool button will drop down a when menu of options:\n \u2022 Set Current Tool Position\n \u2022 Adjust Current Tool Position\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 690 / 1290\n \n \u2022 Zero Current Tool Position\n \u2022 Set Tool Offset Directly\n \u2022 Reset To Last\n 10.5.17.5 Status Tab\n@@ -31920,15 +31920,15 @@\n \u2022 PDF - any loaded PDF setup pages are displayed here\n \u2022 PROPERTIES - when a program is loaded its gcode properties are displayed here.\n There are navigation buttons for HTML page:\n \u2022 The up arrow returns you to the default HTML page\n \u2022 The left arrow moves backward one HTML page\n \u2022 The right arrow moves forward one HTML page\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 691 / 1290\n \n If you wish to include a custom default HTML page, name it default_setup.html and place it in your\n configuration folder.\n Custom QtVCP panels can be displayed in this tab by setting the EMBED_TAB_LOCATION option to\n tabWidget_setup.\n@@ -31942,15 +31942,15 @@\n \u2022 Facing: allows quick face milling of a definable area at angles of 0,45 and 90 degrees\n \u2022 Hole Circle: allows quick setting of a program to drill a bolt circle of definable diameter and number\n of holes.\n \u2022 NGCGUI: is a QtVCP version of the popular G-code subroutine builder/selector, see Widgets-NGCGUI.\n \n Custom QtVCP panels can be displayed here by setting the EMBED_TAB_LOCATION option to tabWidget_uti\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 692 / 1290\n \n 10.5.17.12 User Tab\n \n This tab will only be displayed if an embedded panel has been designated for the location stackedWidget_mai\n If more then one embedded tab has been designated, then pressing the user tab will cycle through\n@@ -31980,15 +31980,15 @@\n }\n \n To change the DRO display font and display format:\n DROLabel {\n font: 25pt \u201dLato Heavy\u201d;\n qproperty-imperial_template: \u2019%9.5f\u2019;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n qproperty-metric_template: \u2019%10.4f\u2019;\n qproperty-angular_template: \u2019%11.2f\u2019;\n }\n \n To change the text of the mist button to air (add these lines)\n #action_mist{\n@@ -32040,15 +32040,15 @@\n \n To have the manual spindle buttons also incrementally increase/decrease speed:\n #action_spindle_fwd{\n qproperty-spindle_up_action: true;\n \n 693 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 694 / 1290\n \n }\n #action_spindle_rev{\n qproperty-spindle_down_action: true;\n }\n@@ -32064,15 +32064,15 @@\n [DISPLAY]\n USER_COMMAND_FILE = CONFIGFOLDER/qtdragonrc.py\n \n See Modifying Screens for more information about customization.\n \n Figure 10.36: QtDragon - Customized QtDragon\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 695 / 1290\n \n 10.6 NGCGUI\n \n Figure 10.37: NGCGUI embedded into AXIS\n \n@@ -32082,15 +32082,15 @@\n \u2022 NGCGUI can run as a standalone application or can be embedded in multiple tab pages in the AXIS\n GUI.\n \u2022 PyNGCGUI is an alternate, Python implementation of NGCGUI.\n \u2022 PyNGCGUI can run as a standalone application or can be embedded as a tab page (with its own set\n of multiple subroutine tabs) in any GUI that supports embedding of GladeVCP applications AXIS,\n Touchy, Gscreen and GMOCCAPY.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 696 / 1290\n \n Using NGCGUI or PyNGCGUI:\n \u2022 Tab pages are provided for each subroutine specified in the INI file.\n \u2022 New subroutines tab pages can be added on the fly using the custom tab.\n \u2022 Each subroutine tab page provides entry boxes for all subroutine parameters.\n@@ -32122,15 +32122,15 @@\n (.ngc) files and G-code-meta-compiler (.gcmc) files:\n \u2022 nc_files/ngcgui_lib\n \u2013 ngcgui.ngc - An easy to understand example using subroutines\n \u2013 arc1.ngc - basic arc using cutter radius compensation\n \u2013 arc2.ngc - arc speced by center, offset, width, angle (calls arc1)\n \u2013 backlash.ngc - routine to measure an axis backlash with dial indicator\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 697 / 1290\n \n \u2013 db25.ngc - creates a DB25 plug cutout\n \u2013 gosper.ngc - a recursion demo (flowsnake)\n \u2013 helix.ngc - helix or D-hole cutting\n \u2013 helix_rtheta.ngc - helix or D-hole positioned by radius and angle\n@@ -32170,15 +32170,15 @@\n the Run\n different tab pages.\n To create several subroutines concatenated into a single file, go to each tab fill in the blanks, press\n Create Feature then using the arrow keys move any tabs needed to put them in order. Now press\n Finalize and answer the prompt to create\n Other GUIs will have similar functionality but the buttons and names may be different.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 698 / 1290\n \n Note\n The demonstration configs create tab pages for just a few of the provided examples. Any GUI with a\n custom tab can open any of the library example subroutines or any user file if it is in the LinuxCNC\n subroutine path.\n@@ -32215,15 +32215,15 @@\n And then create or copy system-provided files to these user-writable directories. For instance, a user\n might create a NGCGUI-compatible subfile named:\n /home/myusername/mysubs/example.ngc\n \n To use files in new directories, the INI file must be edited to include the new subfiles and to augment\n the search path(s). For this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 699 / 1290\n \n [RS274NGC]\n ...\n SUBROUTINE_PATH = /home/myusername/mysubs:../../nc_files/ngcgui_lib:../../nc_files/gcmc_lib \u2190:../../nc_files/ngcgui_lib/utilitysubs\n USER_M_PATH\n@@ -32276,15 +32276,15 @@\n \n 10.6.4.2 Standalone PyNGCGUI\n For usage, type in a terminal:\n pyngcgui --help\n Usage:\n pyngcgui [Options] []\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 700 / 1290\n \n Options requiring values:\n [-d | --demo] [0|1|2] (0: DEMO standalone toplevel)\n (1: DEMO embed new notebook)\n (2: DEMO embed within existing notebook)\n@@ -32336,15 +32336,15 @@\n \u2022 NGCGUI_SUBFILE = simp.ngc - Creates a tab from the named subroutine.\n \u2022 NGCGUI_SUBFILE = \u201d\u201d - Creates a custom tab\n \u2022 #NGCGUI_OPTIONS = opt1 opt2 \u2026 - NGCGUI options:\n \u2013 nonew \u2014 Prohibits creation of new custom tab\n \u2013 noremove \u2014 Prohibits deleting a tab page\n \u2013 noauto \u2014 Do not run automatically (makeFile, then manual run)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 701 / 1290\n \n \u2013 noiframe \u2014 No internal image, image on separate top level\n \u2022 TTT = truetype-tracer - name of the truetype tracer program (it must be in user PATH)\n \u2022 TTT_PREAMBLE = in_std.ngc - Optional, specifies filename for preamble used for ttt created subfiles. (alternate: mm_std.ngc)\n Note\n@@ -32375,15 +32375,15 @@\n concatenating several common subroutine invocations, this preamble is only added once. For mmbased machines, use mm_std.ngc\n \u2022 NGCGUI_SUBFILE = filename1.ngc - creates a tab from the filename1 subroutine\n \u2022 NGCGUI_SUBFILE = filename2.ngc - creates a tab from the filename2 subroutine\n \u2022 \u2026 etc.\n \u2022 NGCGUI_SUBFILE = gcmcname1.gcmc - creates a tab from the gcmcname1 file\n \u2022 NGCGUI_SUBFILE = gcmcname2.gcmc - creates a tab from the gcmcname2 file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 702 / 1290\n \n \u2022 \u2026 etc.\n \u2022 NGCGUI_SUBFILE = \u201d\u201d - creates a custom tab that can open any subroutine in the search path\n \u2022 NGCGUI_OPTIONS = opt1 opt2 \u2026 - NGCGUI options\n \u2013 nonew - disallow making a new custom tab\n@@ -32457,15 +32457,15 @@\n #\n noauto\n -- no auto send (makeFile, then manually send)\n #\n noiframe\n -- no internal image, image on separate top level\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 703 / 1290\n \n GCMC_INCLUDE_PATH = /home/myname/gcmc_includes\n TTT\n TTT_PREAMBLE\n \n@@ -32512,15 +32512,15 @@\n [RS274NGC]SUBROUTINE_PATH = directory1_name:directory1_name:directory3_name ...\n \n Directories Directories may be specified as absolute paths or relative paths.\n \u2022 Example: [DISPLAY]PROGRAM_PREFIX = /home/myname/linuxcnc/nc_files\n \u2022 Example: [DISPLAY]PROGRAM_PREFIX = ~/linuxcnc/nc_files\n \u2022 Example: [DISPLAY]PROGRAM_PREFIX = ../../nc_files\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 704 / 1290\n \n Absolute Paths An absolute path beginning with a \u201d/\u201d specifies a complete filesystem location. A\n path beginning with a \u201d~/\u201d specifies a path starting from the user\u2019s home directory. A path beginning\n with \u201d~username/\u201d specifies a path starting in username\u2019s home directory.\n Relative Paths Relative paths are based on the startup directory which is the directory containing\n@@ -32559,15 +32559,15 @@\n message.\n 10.6.5.6 Summary of INI File item details for NGCGUI usage\n \n [RS274NGC]SUBROUTINE_PATH = dirname1:dirname2:dirname3 \u2026\n Example: [RS274NGC]SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/ngcgui_li\n Note: Optional, but very useful to organize subfiles and utility files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 705 / 1290\n \n [RS274NGC]USER_M_PATH = dirname1:dirname2:dirname3 \u2026\n Example: [RS274NGC]USER_M_PATH = ../../nc_files/ngcgui_lib/mfiles\n Note: Optional, needed to locate custom user M-files.\n [DISPLAY]EMBED_TAB_NAME = name to display on embedded tab page\n@@ -32613,15 +32613,15 @@\n Note: Optional, when specified, the file is appended to a subfiles.\n Files created with \u201dCustom\u201d tab pages use the postamble specified with the page.\n [DISPLAY]NGCGUI_OPTIONS = opt1 opt2 \u2026\n Example: [DISPLAY]NGCGUI_OPTIONS = nonew noremove\n Note: Multiple options are separated by blanks.\n By default, NGCGUI configures tab pages so that:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 706 / 1290\n \n 1) a user can make new tabs;\n 2) a user can remove tabs (except for the last remaining one);\n 3) finalized files are automatically sent to LinuxCNC;\n 4) an image frame (iframe) is made available to display an image for the subfile (if an image is\n@@ -32665,15 +32665,15 @@\n \n The body of the subroutine should begin with a set of statements that define local named parameters\n for each positional parameter expected for the subroutine call. These definitions must be consecutive\n beginning with #1 and ending with the last used parameter number. Definitions must be provided for\n each of these parameters (no omissions).\n Parameter Numbering\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 707 / 1290\n \n # = #1\n # = #2\n # = #3\n \n@@ -32722,15 +32722,15 @@\n o call [#] [#] (call a subroutine)\n # = #<_helper:answer> (immediately localize the helper global result)\n #<_helper:answer> = 0.0\n (nullify global named parameter used by subroutine)\n ...\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 708 / 1290\n \n In the above example, the utility subroutine will be found in a separate file named helper.ngc. The\n helper routine returns a result in a global named parameter named #<_helper:answer.\n For good practice, the calling subfile immediately localizes the result for use elsewhere in the subfile\n and the global named parameter used for returning the result is nullified in an attempt to mitigate its\n@@ -32772,15 +32772,15 @@\n //ngcgui: varname3 = value3, label3;\n \n Variable Tags Examples\n //ngcgui: zsafe =\n //ngcgui: feedrate = 10\n //ngcgui: xl = 0, x limit\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 709 / 1290\n \n For these examples, the entry box for varname1 will have no default, the entry box for varname2 will\n have a default of value2, and the entry box for varname 3 will have a default of value 3 and a label\n label3 (instead of varname3). The default values must be numbers.\n To make it easier to modify valid lines in a gcmc file, alternate tag line formats accepted. The alternate\n@@ -32822,28 +32822,28 @@\n [DISPLAY]\n GCMC_INCLUDE_PATH = ../../nc_files/gcmc_lib\n \n 10.6.7 DB25 Example\n The following shows the DB25 subroutine. In the first photo you see where you fill in the blanks for\n each variable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n This photo shows the backplot of the DB25 subroutine.\n \n 710 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 711 / 1290\n \n This photo shows the use of the new button and the custom tab to create three DB25 cutouts in one\n program.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 712 / 1290\n \n 10.6.8 Creating a subroutine\n \u2022 For creating a subroutine for use with NGCGUI, the filename and the subroutine name must be the\n same.\n \u2022 The file must be placed in the subdirectory pointed to in the INI file.\n@@ -32861,15 +32861,15 @@\n # = #3 (Feedrate)\n ;Example de param\u00e8tre sans preset\n g0x0y0z1\n g3 i# f#\n g3 i[0-#]\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 713 / 1290\n \n 10.7 TkLinuxCNC GUI\n 10.7.1 Introduction\n TkLinuxCNC is one of the first graphical front-ends for LinuxCNC. It is written in Tcl and uses the Tk\n toolkit for the display. Being written in Tcl makes it very portable (it runs on a multitude of platforms).\n@@ -32885,15 +32885,15 @@\n Then, start LinuxCNC and select that INI file. The sample configuration sim/tklinuxcnc/tklinuxcnc.ini\n is already configured to use TkLinuxCNC as its front-end.\n When LinuxCNC is launched the TKLinuxCNC window is opened.\n 10.7.2.1 A typical session with TkLinuxCNC\n 1. Start LinuxCNC and select a configuration file.\n 2. Clear the E-STOP condition and turn the machine on (by pressing F1 then F2).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 714 / 1290\n \n 3. Home each axis.\n 4. Load the file to be milled.\n 5. Put the stock to be milled on the table.\n 6. Set the proper offsets for each axis by jogging and either homing again or right-clicking an axis\n@@ -32925,15 +32925,15 @@\n \u2022 Abort\n then on the second line:\n \u2022 Operation mode: MANUAL > MDI > AUTO\n \u2022 Toggle flood coolant\n \u2022 Toggle spindle brake control\n 1 For some of these actions it might be necessary to change the mode LinuxCNC is currently running in.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 715 / 1290\n \n 10.7.3.2 Offset display status bar\n The Offset display status bar displays the currently selected tool (selected with Txx M6), the tool\n length offset (if active), and the work offsets (set by right-clicking the coordinates).\n 10.7.3.3 Coordinate Display Area\n@@ -32965,15 +32965,15 @@\n execution will be stopped on any M1 encountered).\n Text Program Display Area When the program is running, the line currently being executed is\n highlighted in white. The text display will automatically scroll to show the current line.\n 10.7.3.5 Manual Control\n Implicit keys TkLinuxCNC allows you to manually move the machine. This action is known as jogging.\n First, select the axis to be moved by clicking it. Then, click and hold the + or - button depending on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 716 / 1290\n \n the desired direction of motion. The first four axes can also be moved by the keyboard arrow keys (X\n and Y), the PAGE UP and PAGE DOWN keys (Z) and the [ and ] keys (A/4th).\n + If Continuous is selected, the motion will continue as long as the button or key is pressed. If another\n value is selected, the machine will move exactly the displayed distance each time the button is clicked\n@@ -32996,15 +32996,15 @@\n The Coolant groupCoolant The two buttons allow the Mist and Flood coolants to be turned on and\n off. Depending on your machine configuration, not all the items in this group may appear.\n 10.7.3.6 Code Entry\n Manual Data Input (also called MDI), allows G-code programs to be entered manually, one line at\n a time. When the machine is not turned on, and not set to MDI mode, the code entry controls are\n unavailable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 717 / 1290\n \n This allows you to enter a G-code command to be executed. Execute the command by pressing Enter.\n Active G-Codes This shows the modal codes that are active in the interpreter. For instance, G54\n indicates that the G54 offset is applied to all coordinates that are entered.\n 10.7.3.7 Jog Speed\n@@ -33053,15 +33053,15 @@\n Send active axis Home\n Jog first axis\n Jog second axis\n Jog third axis\n Jog fourth axis\n Stop execution\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 718 / 1290\n \n 10.8 QtPlasmaC\n 10.8.1 Preamble\n Except where noted, this guide assumes the user is using the latest version of QtPlasmaC. Version\n history can be seen by visiting this link which will show the latest available version. The installed\n@@ -33081,25 +33081,25 @@\n there are enough hardware I/O pins to fulfill the requirements of a plasma configuration.\n There are three available formats:\n \u2022 16:9 with a minimum resolution of 1366 x 768\n \u2022 9:16 with a minimum resolution of 768 x 1366\n \u2022 4:3 with a minimum resolution of 1024 x 768\n Screenshot examples of QtPlasmaC are below:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 719 / 1290\n \n Figure 10.40: 16:9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 720 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 721 / 1290\n \n Figure 10.42: 4:3\n \n 10.8.4 Installing LinuxCNC\n The preferred method for installing LinuxCNC is via an ISO image as described below.\n@@ -33107,15 +33107,15 @@\n It is possible to install and run LinuxCNC on a variety of Linux distributions however that is beyond\n the scope of this User Guide. If the user wishes to install a Linux distribution other than those recommended, they will first need to install their preferred Linux distribution and then install LinuxCNC\n v2.9 or later along with any required dependencies.\n \n 10.8.4.1 If The User Does Not Have Linux Installed\n Installation instructions are available from here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 722 / 1290\n \n Following these instructions will yield a machine with the current stable branch (v2.8) of LinuxCNC\n on Debian Buster.\n 10.8.4.2 Package Installation (Buildbot) If The User Has Linux with LinuxCNC v2.8\n A package installation (Buildbot) uses prebuilt packages from the LinuxCNC Buildbot, instructions\n@@ -33156,15 +33156,15 @@\n to use a reed relay as an alternative method to establish an Arc OK signal when the power\n source does not provide one.\n \n Note\n For fine tuning of Mode 0 Ark OK see Tuning Mode 0 Arc OK in the Advanced Topics section of the\n manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 723 / 1290\n \n 10.8.5.2 Available I/Os\n Note\n This section only touches on the hardware I/O\u2019s required for QtPlasmaC. Base machine requirements\n such as limit switches, home switches, etc. are in addition to these.\n@@ -33245,15 +33245,15 @@\n This signal senses if the torch has broken away from its cradle.\n Digital output; required.\n HAL pin name plasmac.torch-on\n Connected from a breakout board output to the torch-on input\n of the plasma power supply. This signal is used to control the\n plasma power supply and start the arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Name\n Move Up\n \n Modes\n 2\n \n@@ -33319,15 +33319,15 @@\n then set the Z minimum to 5 mm (0.2\u201d) plus an allowance for overrun (either calculated using the\n equation below or allow 5 mm (0.2\u201d) below the lowest slat).\n \u2022 [AXIS_Z] MAX_LIMIT should be the highest the user wants the Z axis to travel (it must not be\n lower than Z HOME_OFFSET).\n \u2022 [AXIS_Z] HOME should be set to be approximately 5 mm-10 mm (0.2\u201d-0.4\u201d) below the maximum\n limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 725 / 1290\n \n \u2022 Floating Head - it is recommended that a floating head be used and that it has enough movement\n to allow for overrun during probing. Overrun can be calculated using the following formula:\n o = 0.5 * a * (v / a)^2\n \n@@ -33359,48 +33359,48 @@\n Fill in the required entries to suit the machine wiring/breakout board configuration.\n QtPlasmaC adds two pages to the LinuxCNC configuration wizards for QtPlasmaC specific parameters,\n the two pages are QtPlasmaC options and User Buttons. Complete each of the wizards QtPlasmaC\n page to suit the machine that is being configured and the user button requirements.\n Note that PnCconf options allow user selection of Feed Override, Linear Velocity, and Jog Increments,\n whereas in StepConf these are automatically calculated and set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.43: PnCConf QtPlasmaC Options\n \n 726 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.44: StepConf QtPlasmaC Options\n \n 727 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.45: QtPlasmaC User Buttons\n \n 728 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 729 / 1290\n \n Figure 10.46: QtPlasmaC THCAD\n The THCAD screen will only appear if a Plasma Encoder is selected in the card screen. The the\n dedicated section on Mesa THCAD for more information.\n When the configuration is complete, the wizard will save a copy of the configuration that may be\n loaded and edited at a later time, a working QtPlasmaC configuration will be created in the following\n directory: ~/linuxcnc/configs/.\n The way the newly created QtPlasmaC configuration can be run from the terminal command line\n slightly differs depending the way LinuxCNC was installed:\n For a package installation (Buildbot):\n linuxcnc ~/linuxcnc/configs/__/__.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 730 / 1290\n \n For a run in place installation:\n ~/linuxcnc-dev/scripts/linuxcnc ~/linuxcnc/configs/__/__.ini\n \n After running the above command LinuxCNC should be running with the QtPlasmaC GUI visible.\n@@ -33422,25 +33422,25 @@\n For a run in place installation enter the following command in a terminal window:\n ~/linuxcnc-dev/lib/python/qtvcp/designer/install_script\n \n 10.8.5.6 Initial Setup\n The following heights diagram will help the user visualize the different heights involved in plasma\n cutting and how they are measured:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 731 / 1290\n \n Click on the Parameters Tab to view the CONFIGURATION section which shows the user settable\n parameters. It is necessary to ensure every one of these settings is tailored to the machine.\n To set the Z axis DRO relative to the Z axis MINIMUM_LIMIT, the user should perform the following\n steps. It is important to understand that in QtPlasmaC, touching off the Z axis DRO has no effect on\n the Z axis position while running a G-code program. These steps simply allow the user to more easily\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 732 / 1290\n \n set the probe height as after performing the steps, the displayed Z axis DRO value will be relative to\n Z axis MINIMUM_LIMIT.\n Note\n The user should be familiar with the recommended Z Axis Settings.\n@@ -33476,15 +33476,15 @@\n 9. If the table has a laser or camera for sheet alignment, a scribe, or uses offset probing then the\n required offsets need to be applied by following the procedure described in Peripheral Offsets.\n 10. CONGRATULATIONS! The user should now have a working QtPlasmaC Configuration.\n Note\n If the amount of time between the torch contacting the material and when the torch moves up and\n comes to rest at the Pierce Height seems excessive, see the probing section for a possible solution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 733 / 1290\n \n Important\n IF USING A Mesa Electronics THCAD THEN THE Voltage Scale VALUE WAS OBTAINED MATHEMATICALLY. IF THE USER INTENDS TO USE CUT VOLTAGES FROM A MANUFACTURE\u2019S CUT\n CHART THEN IT WOULD BE ADVISABLE TO DO MEASUREMENTS OF ACTUAL VOLTAGES AND\n FINE TUNE THE Voltage Scale AND Voltage Offset.\n@@ -33511,15 +33511,15 @@\n \n For a run in place installation enter the following lines in terminal window:\n source ~/linuxcnc-dev/scripts/rip-environment\n qtplasmac-plasmac2qt\n \n The following screen will be displayed:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 734 / 1290\n \n Table 10.6: Mandatory Settings\n Field\n INI FILE IN\n EXISTING\n@@ -33547,15 +33547,15 @@\n 2 - Estop is a button.\n \n ESTOP:1\n \n Optional Setting - This setting is not required unless the machine has a laser for sheet\n alignment. Leave this blank if it is not used/required. Leave this blank if it is not used/required.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Field\n Laser On HAL Pin\n \n Description\n Power on a laser crosshair for sheet\n alignment.\n@@ -33598,15 +33598,15 @@\n For a package installation (Buildbot) enter the following line in a terminal window:\n qtplasmac-cfg2prefs\n \n For a run in place installation enter the following lines in terminal window:\n source ~/linuxcnc-dev/scripts/rip-environment\n qtplasmac-cfg2prefs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 736 / 1290\n \n Figure 10.47: qtplasmac-cfg2prefs\n Select the INI file of the old PlasmaC configuration, select the INI file of the new QtPlasmaC configuration, then press CONVERT.\n \n 10.8.7 Other QtPlasmaC Setup Considerations\n@@ -33620,15 +33620,15 @@\n file in the machine\u2019s configuration directory to add the appropriate cutoff frequency as measured in\n Hertz (Hz).\n For example:\n setp plasmac.lowpass-frequency 100\n \n The above example would give a cutoff frequency of 100Hz.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 737 / 1290\n \n 10.8.7.2 Contact Bounce\n Contact bounce from mechanical relays, switches, or external interference may cause some inconsistent behavior of the following switches:\n \u2022 Float Switch\n \u2022 Ohmic Probe\n@@ -33665,15 +33665,15 @@\n Depending on the specified minimum contact current and the current drawn by the input device there\n may be a need to provide a method to increase the current through the contacts.\n Most relays using gold contacts will not require any additional current for reliable operation.\n There are two different methods available to provide this minimum current if it is required:\n 1. A 0.1 \u03bcF film capacitor placed across the contacts.\n 2. A 1200 \u03a9 1 W resistor across the load (see calculations below).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 738 / 1290\n \n Schematics are shown at contact load schematics.\n More information on contact switching load can be seen on page VI of the finder General Technical\n Information document.\n Calculations:\n@@ -33710,15 +33710,15 @@\n Terminal=false\n Name=LinuxCNC\n Exec=sh -c \u201dlinuxcnc $HOME/linuxcnc/configs//.ini\u201d\n Type=Application\n Icon=/usr/share/pixmaps/linuxcncicon.png\n 2 In the US, the letter V is commonly used as a symbol (Voltage) and as a unit (Volt).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 739 / 1290\n \n If the user would like a terminal window to open behind the GUI window then change the Terminal\n line to:\n Terminal=true\n \n@@ -33771,15 +33771,15 @@\n Note\n The configuration files (.ini and .hal) that are created by configuration wizard are notated to explain the requirements to aid in manual manipulation of these\n configurations. They may be edited with any text editor.\n \n Note\n The .prefs file is plain text and may be edited with any text editor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 740 / 1290\n \n 10.8.7.6 INI File\n QtPlasmaC has some specific .ini file variables as follows:\n [FILTER] Section These variables are mandatory.\n PROGRAM_EXTENSION = .ngc,.nc,.tap G-code File (*.ngc, *.nc, *.tap)\n@@ -33828,15 +33828,15 @@\n [DISPLAY] Section\n This variable is mandatory.\n DISPLAY = qtvcp qtplasmac\n (use 16:9 resolution)\n = qtvcp qtplasmac_9x16 (use 9:16 resolution)\n = qtvcp qtplasmac_4x3 (use 4:3 resolution)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 741 / 1290\n \n There are multiple QtVCP options that are described here: QtVCP INI Settings\n For example the following would start a 16:9 resolution QtPlasmaC screen in full screen mode:\n DISPLAY = qtvcp -f qtplasmac\n \n@@ -33877,15 +33877,15 @@\n 10.8.8.1 Exiting QtPlasmaC\n Exiting or shutting down QtPlasmaC is done by either:\n 1. Click the window shutdown button on the window title bar\n 2. Long press the POWER button on the MAIN Tab.\n A shutdown warning can be displayed on every shutdown by checking the Exit Warning checkbox on\n the SETTINGS Tab.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 742 / 1290\n \n 10.8.8.2 MAIN Tab\n Screenshot example of the QtPlasmaC MAIN Tab in 16:9 aspect ratio:\n \n Some functions/features are only used for particular modes and are not displayed if they are not\n@@ -33902,15 +33902,15 @@\n used to manually select the current material cut parameters. If there are\n no materials in the material file then only the default material will be\n displayed.\n This displays the actual cut feed rate the table is moving at.\n If \u201dView Material\u201d is selected on the SETTINGS Tab, this displays the\n currently selected material\u2019s Feed Rate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 743 / 1290\n \n Table 10.7: (continued)\n Name\n PH:\n PD:\n@@ -33983,15 +33983,15 @@\n - G-code Programs\n - Torch pulse if the pulse was started during CYCLE PAUSE (this will\n cancel the paused G-code program execution as well)\n - Probe Test\n - Framing\n - Manual Cut\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 744 / 1290\n \n Table 10.8: (continued)\n Name\n FEED\n \n@@ -34068,15 +34068,15 @@\n the THC Threshold voltage (The distance changed will be\n Height Per Volt * THC Threshold voltage).\n Each press of this button will lower the target voltage by\n the THC Threshold voltage (The distance changed will be\n Height Per Volt * THC Threshold voltage).\n Clicking this label will return any voltage override to 0.00.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 745 / 1290\n \n Table 10.10: CONTROL\n Name\n TORCH ON\n TORCH ON ENABLE\n@@ -34168,15 +34168,15 @@\n LED will still show the status of the probe input, but the\n Ohmic Probe results will be ignored.\n This box will enable or disable the communications to a\n PowerMax. This button is only visible if a PM_PORT\n option is configured in the [POWERMAX] section of the\n .prefs file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 746 / 1290\n \n Table 10.10: (continued)\n Name\n Status\n \n@@ -34244,15 +34244,15 @@\n This button moves the Z axis in the negative direction.\n \n Note\n During Paused Motion, this section will be shown on top of the JOGGING panel. The following section\n will cover each button encountered in this panel. Please see CUT RECOVERY for a detailed description\n of the cut recovery functionality.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Name\n PAUSED MOTION\n FEED SLIDER\n \n FEED\n REV\n@@ -34332,15 +34332,15 @@\n This drop down button will display the following options:\n Zero - zeros the axis.\n Set - launches a dialog box to manually input the axis\u2019 coordinate.\n Divide By 2 - divides the currently displayed coordinate in the DRO by\n two.\n Set To Last - sets the axis to the previously set coordinate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 748 / 1290\n \n 10.8.8.3 Preview Views\n The QtPlasmaC preview screen has the ability to be switched between different views and displays,\n as well as zooming in and out, and panning horizontally and vertically.\n When QtPlasmaC is first started, the Z (top down) view will be selected as the default view for a loaded\n@@ -34353,30 +34353,30 @@\n orientation, then pressing either Z or P will change the display to the newly selected view. If the user\n then wishes to display the full table while maintaining the currently selected view as the default view\n for a loaded G-code file, then pressing CLEAR will achieve this and allow the selected view orientation\n to prevail the next time a G-code file is loaded.\n 10.8.8.4 CONVERSATIONAL Tab\n Screenshot example of the QtPlasmaC CONVERSATIONAL Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 749 / 1290\n \n The CONVERSATIONAL Tab enables the user to quickly program various simple shapes for quick\n cutting without the need for CAM software.\n See Conversational Shape Library for detailed information on the Conversational feature.\n It is possible to hide this tab so the conversational feature cannot be used by an operator. This may\n be achieved either by wiring the pin to a physical key-switch or similar or it may also be set in a HAL\n file using the following command:\n setp qtplasmac.conv_disable 1\n \n 10.8.8.5 PARAMETERS Tab\n Screenshot example of the QtPlasmaC PARAMETERS Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 750 / 1290\n \n Some functions/features are only used for particular modes and are not displayed if they are not\n required by the chosen QtPlasmaC mode.\n This tab is used to display configuration parameters that are modified infrequently.\n It is possible to hide this tab so machine settings cannot be modified by unauthorized personnel. This\n@@ -34398,15 +34398,15 @@\n Description\n This sets the amount of time (in seconds) QtPlasmaC will wait\n between commanding a \u201dTorch On\u201d and receiving an Arc OK\n signal before timing out and displaying an error message.\n This sets the number of times QtPlasmaC will attempt to start\n the arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 751 / 1290\n \n Table 10.15: (continued)\n Name\n Retry Delay\n \n@@ -34483,15 +34483,15 @@\n This sets the distance threshold used to determine if an Initial Height\n Sense (probe) can be skipped for the current cut, see IHS Skip.\n \n Note\n If the amount of time between the torch contacting the material and when the torch moves up and\n comes to rest at the Pierce Height seems excessive, see the probing section for a possible solution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 752 / 1290\n \n Table 10.17: CONFIGURATION - SAFETY\n Name\n Safe Height\n \n@@ -34542,15 +34542,15 @@\n \n CONFIGURATION - THC Two methods of THC activation are available and are selected with the\n Auto Activation checkbutton. Both methods begin their calculations when the current velocity of\n the torch matches the cut feed rate specified for the selected material:\n 1. Delay Activation (the default) is selected when Auto Activation is unchecked. This method uses\n a time delay set with the Delay parameter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 753 / 1290\n \n 2. Auto Activation is selected when Auto Activation is checked. This method determines that the\n arc voltage is stable by using the Sample Counts and Sample Threshold parameters.\n Name\n Delay\n@@ -34637,15 +34637,15 @@\n Description\n The top drop down menu is used to manually select the current material\n cut parameters. If there are no materials in the material file then only the\n default material will be displayed.\n This sets the kerf width for the currently selected material. Refer to the\n Heights Diagram diagram for a visual representation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 754 / 1290\n \n Table 10.21: (continued)\n Name\n Pierce Height\n Pierce Delay\n@@ -34707,15 +34707,15 @@\n The Cut Parameters for the new material will then need to be adjusted and saved.\n The DELETE this button is used to delete a material. After pressing it, the user will be prompted for\n a material number to be deleted, and prompted again to ensure the user is sure. After deletion, the\n material file will be reloaded and the drop down list will display the default material.\n 10.8.8.6 SETTINGS Tab\n Screenshot example of the QtPlasmaC SETTINGS Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 755 / 1290\n \n This tab is used to display GUI configuration parameters, button text, and shutdown text that are\n modified infrequently as well as some utility buttons.\n It is possible to hide this tab so machine settings cannot be modified by unauthorized personnel. This\n may be achieved either by wiring the pin to a physical key-switch or similar or it may also be set in a\n@@ -34731,15 +34731,15 @@\n Foreground\n Highlight\n \n Description\n This button allows the user to change the color of the GUI Foreground.\n This button allows the user to change the color of the GUI Highlight.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 756 / 1290\n \n Table 10.22: (continued)\n Name\n LED\n Background\n@@ -34817,15 +34817,15 @@\n current tool) in the Preview Window on the MAIN Tab.\n This allows a user to change the default zoom level for the top down full\n table view in the Preview Window on the MAIN Tab.\n \n USER BUTTON ENTRIES USERBUTTON\n This section shows the text that appears on the Custom User Buttons as well as the code associated\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 757 / 1290\n \n with the user button. User buttons may be changed and the new settings used without restarting\n LinuxCNC.\n The text and/or code may be edited at any time and will be loaded ready for use if the SAVE button is\n clicked.\n@@ -34863,15 +34863,15 @@\n is the machine name entered in the configuration wizard, is the current\n QtPlasmaC version the user is on, is the current date (YY-MM-DD), and

refer to\n the same parameter. Named parameters must be enclosed with < > marks.\n@@ -39342,15 +39342,15 @@\n \u2022 #<_motion_mode> - Return the interpreter\u2019s current motion mode:\n Motion return\n mode\n value\n G1\n 10\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 861 / 1290\n \n Motion return\n mode\n value\n G2\n@@ -39432,15 +39432,15 @@\n \u2022 #<_metric> - Return 1 if G21 is on, else 0.\n \u2022 #<_imperial> - Return 1 if G20 is on, else 0.\n \u2022 #<_absolute> - Return 1 if G90 is on, else 0.\n \u2022 #<_incremental> - Return 1 if G91 is on, else 0.\n \u2022 #<_inverse_time> - Return 1 if inverse feed mode (G93) is on, else 0.\n \u2022 #<_units_per_minute> - Return 1 if Units/minute feed mode (G94) is on, else 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 862 / 1290\n \n \u2022 #<_units_per_rev> - Return 1 if Units/revolution mode (G95) is on, else 0.\n \u2022 #<_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\n value is 591.000000.\n Mode\n@@ -39486,15 +39486,15 @@\n \u2022 #<_adaptive_feed> - Return 1 if adaptive feed (M52 or M52 P1) is on, else 0.\n \u2022 #<_feed_hold> - Return 1 if feed hold switch is enabled (M53 P1), else 0.\n \u2022 #<_feed> - Return the current value of F, not the actual feed rate.\n \u2022 #<_rpm> - Return the current value of S, not the actual spindle speed.\n \u2022 #<_x> - Return current relative X coordinate including all offsets. Same as #5420. In a lathe\n configuration, it always returns radius.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 863 / 1290\n \n \u2022 #<_y> - Return current relative Y coordinate including all offsets. Same as #5421.\n \u2022 #<_z> - Return current relative Z coordinate including all offsets. Same as #5422.\n \u2022 #<_a> - Return current relative A coordinate including all offsets. Same as #5423.\n \u2022 #<_b> - Return current relative B coordinate including all offsets. Same as #5424.\n@@ -39529,15 +39529,15 @@\n If enabled in the INI file G-code has access to the values of INI file entries and HAL pins.\n \u2022 #<_ini[section]name> Returns the value of the corresponding item in the INI file.\n For example, if the INI file looks like so:\n [SETUP]\n XPOS = 3.145\n YPOS = 2.718\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 864 / 1290\n \n you may refer to the named parameters #<_ini[setup]xpos> and #<_ini[setup]ypos> within Gcode.\n EXISTS can be used to test for presence of a given INI file variable:\n o100 if [EXISTS[#<_ini[setup]xpos>]]\n (debug, [setup]xpos exists: #<_ini[setup]xpos>)\n@@ -39580,15 +39580,15 @@\n Binary operators only appear inside expressions. There are four basic mathematical operations: addition (+), subtraction (-), multiplication (*), and division (/). There are three logical operations:\n non-exclusive or (OR), exclusive or (XOR), and logical and (AND). The eighth operation is the modulus\n operation (MOD). The ninth operation is the power operation (**) of raising the number on the left of\n the operation to the power on the right. The relational operators are equality (EQ), inequality (NE),\n strictly greater than (GT), greater than or equal to (GE), strictly less than (LT), and less than or equal\n to (LE).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 865 / 1290\n \n The binary operations are divided into several groups according to their precedence. If operations\n in different precedence groups are strung together (for example in the expression [2.0 / 3 * 1.5 - 5.5\n / 11.0]), operations in a higher group are to be performed before operations in a lower group. If an\n expression contains more than one operation from the same group (such as the first / and * in the\n@@ -39645,15 +39645,15 @@\n Round to nearest integer\n Base-e logarithm\n Sine\n Square Root\n Tangent\n Check named Parameter\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 866 / 1290\n \n The FIX function rounds towards the left (less positive or more negative) on a number line, so that\n FIX[2.8] =2 and FIX[-2.8] = -3.\n The FUP operation rounds towards the right (more positive or less negative) on a number line;\n FUP[2.8] = 3 and FUP[-2.8] = -2.\n@@ -39698,15 +39698,15 @@\n If the third group (the comments) contains more than one comment and is reordered, only the last\n comment will be used.\n If each group is kept in order or reordered without changing the meaning of the line, then the three\n groups may be interleaved in any way without changing the meaning of the line. For example, the\n line g40 g1 #3=15 (foo) #4=-7.0 has five items and means exactly the same thing in any of the 120\n possible orders (such as #4=-7.0 g1 #3=15 g40 (foo)) for the five items.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 867 / 1290\n \n 11.4.11 Commands and Machine Modes\n Many commands cause the controller to change from one mode to another, and the mode stays active\n until some other command changes it implicitly or explicitly. Such commands are called modal. For\n example, if coolant is turned on, it stays on until it is explicitly turned off. The G-codes for motion are\n@@ -39733,15 +39733,15 @@\n @.5 ^90\n @.5 ^90\n G90 G0 X0 Y0 M2\n \n You can see from the following figure that the output is not what you might expect. Because we added\n 0.5 to the distance each time the distance from the XY zero position increased with each line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 868 / 1290\n \n Figure 11.10: Polar Spiral\n The following code will produce our square pattern:\n F100 G1 @.5 ^90\n G91 ^90\n@@ -39749,15 +39749,15 @@\n ^90\n ^90\n G90 G0 X0 Y0 M2\n \n As you can see by only adding to the angle by 90 degrees each time the end point distance is the same\n for each line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 869 / 1290\n \n Figure 11.11: Polar Square\n It is an error if:\n \u2022 An incremental move is started at the origin\n \u2022 A mix of Polar and X or Y words are used\n@@ -39781,15 +39781,15 @@\n G92.2, G92.3,\n G0, G1, G2, G3, G33, G38.n, G73, G76, G80,\n G81\n G82, G83, G84, G85, G86, G87, G88, G89\n G17, G18, G19, G17.1, G18.1, G19.1\n G90, G91\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 870 / 1290\n \n Table 11.7: (continued)\n Modal Group Meaning\n Arc IJK Distance Mode\n (Group 4)\n@@ -39854,15 +39854,15 @@\n \n 11.4.14 Comments\n Comments are purely informative and have no influence on machine behaviour.\n Comments can be added to lines of G-code to help clear up the intention of the programmer. Comments\n can be embedded in a line using parentheses () or for the remainder of a line using a semi-colon. The\n semi-colon is not treated as the start of a comment when enclosed in parentheses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 871 / 1290\n \n Comments may appear between words, but not between words and their corresponding parameter.\n So, S100(set speed)F200(feed) is OK while S(speed)100F(feed) is not.\n Here is an example of a commented program:\n G0 (Rapid to start) X1 Y1\n@@ -39897,15 +39897,15 @@\n \u2022 (LOGAPPEND,filename) - opens the named log file. If the file already exists, the data is appended.\n \u2022 (LOGCLOSE) - closes an open log file.\n \u2022 (LOG,) - everything past the , is written to the log file if it is open. Supports expansion of parameters\n as described below.\n Examples of logging are in nc_files/examples/smartprobe.ngc and in nc_files/ngcgui_lib/rectange_probe.ngc\n sample G-code files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 872 / 1290\n \n 11.4.18 Debug Messages\n \u2022 (DEBUG,) - displays a message like (MSG,) with the addition of special handling for comment parameters as described below.\n \n 11.4.19 Print Messages\n@@ -39939,15 +39939,15 @@\n 11.4.21 File Requirements\n A G-code file must contain one or more lines of G-code and be terminated with a Program End. Any\n G-code past the program end is not evaluated.\n If a program end code is not used a pair of percent signs % with the first percent sign on the first\n line of the file followed by one or more lines of G-code and a second percent sign. Any code past the\n second percent sign is not evaluated.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 873 / 1290\n \n Warning\n Using % to wrap a G-code file will not do the same thing as using a program end. The machine\n will be in what ever state the program left it in using %, the spindle and coolant may still be on\n and things like G90/91 are left as the last program set them. If you don\u2019t use a proper preamble\n@@ -39982,15 +39982,15 @@\n \u2022 Enable or disable overrides (M48, M49,M50,M51,M52,M53).\n \u2022 User-defined Commands (M100-M199).\n \u2022 Dwell (G4).\n \u2022 Set active plane (G17, G18, G19).\n \u2022 Set length units (G20, G21).\n \u2022 Cutter radius compensation on or off (G40, G41, G42)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 874 / 1290\n \n \u2022 Cutter length compensation on or off (G43, G49)\n \u2022 Coordinate system selection (G54, G55, G56, G57, G58, G59, G59.1, G59.2, G59.3).\n \u2022 Set path control mode (G61, G61.1, G64)\n \u2022 Set distance mode (G90, G91).\n@@ -40026,15 +40026,15 @@\n Don\u2019t use line numbers Line numbers offer no benefits. When line numbers are reported in error\n messages, the numbers refer to the line number in the file, not the N-word value.\n When several coordinate systems are moved Consider using the inverse time speed mode.\n Because the meaning of an F word in meters per minute varies depending on the type of axis to be\n moved and because the amount of removed material does not depend only on the feed rate, it can be\n simpler to use G93, inverse speed of time, to achieve the removal of desired material.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 875 / 1290\n \n 11.4.25 Linear and Rotary Axis\n Because the meaning of an F-word in feed-per-minute mode varies depending on which axes are commanded to move, and because the amount of material removed does not depend only on the feed rate,\n it may be easier to use G93 inverse time feed mode to achieve the desired material removal rate.\n \n@@ -40068,15 +40068,15 @@\n Any items in the G-code prototypes not explicitly described as optional are required.\n The values following letters are often given as explicit numbers. Unless stated otherwise, the explicit\n numbers can be real values. For example, G10 L2 could equally well be written G[2*5] L[1+1]. If the\n value of parameter 100 were 2, G10 L#100 would also mean the same.\n If L- is written in a prototype the - will often be referred to as the L number, and so on for any other\n letter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 876 / 1290\n \n 11.5.2 G-Code Quick Reference Table\n Code\n G0\n G1\n@@ -40182,15 +40182,15 @@\n Back-boring Cycle (not yet implemented)\n Boring Cycle, Stop, Manual Out (not yet\n implemented)\n Boring Cycle, Dwell, Feed Out\n Distance Mode\n Arc Distance Mode\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Code\n G92\n G92.1 G92.2\n G92.3\n G93 G94 G95\n G96 G97\n@@ -40238,15 +40238,15 @@\n G1 axes\n \n For linear (straight line) motion at programmed feed rate (for cutting or not), program G1 \u2019axes\u2019,\n where all the axis words are optional. The G1 is optional if the current motion mode is G1. This will\n produce coordinated motion to the destination point at the current feed rate (or slower).\n G1 Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 878 / 1290\n \n G90 (set absolute distance mode)\n G1 X1.2 Y-3 F10 (linear move at a feed rate of 10 from current position to X1.2 Y-3)\n Z-2.3 (linear move at same feed rate from current position to Z-2.3)\n Z1 F25 (linear move at a feed rate of 25 from current position to Z1)\n@@ -40287,15 +40287,15 @@\n If the pitch of the helix is very small (less than the naive CAM tolerance) then the helix might\n be converted into a straight line. Bug #222\n \n If a line of code makes an arc and includes rotary axis motion, the rotary axes turn at a constant rate\n so that the rotary motion starts and finishes when the XYZ motion starts and finishes. Lines of this\n sort are hardly ever programmed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 879 / 1290\n \n If cutter compensation is active, the motion will differ from the above; see the Cutter Compensation\n section.\n The arc center is absolute or relative as set by G90.1 or G91.1 respectively.\n Two formats are allowed for specifying an arc: Center Format and Radius Format.\n@@ -40330,15 +40330,15 @@\n \u2022 Z - helix\n \u2022 I - X offset\n \u2022 J - Y offset\n \u2022 P - number of turns\n XZ-plane (G18)\n G2 or G3 \n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 880 / 1290\n \n \u2022 Y - helix\n \u2022 I - X offset\n \u2022 K - Z offset\n \u2022 P - number of turns\n@@ -40370,28 +40370,28 @@\n In the following figure you can see the start position is X0 Y0, the end position is X1 Y1. The arc center\n position is at X1 Y0. This gives us an offset from the start position of 1 in the X axis and 0 in the Y\n axis. In this case only an I offset is needed.\n G2 Example Line\n G0 X0 Y0\n G2 X1 Y1 I1 F10 (clockwise arc in the XY plane)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 881 / 1290\n \n Figure 11.12: G2 Example\n In the next example we see the difference between the offsets for Y if we are doing a G2 or a G3 move.\n For the G2 move the start position is X0 Y0, for the G3 move it is X0 Y1. The arc center is at X1 Y0.5\n for both moves. The G2 move the J offset is 0.5 and the G3 move the J offset is -0.5.\n G2-G3 Example Line\n G0 X0 Y0\n G2 X0 Y1 I1 J0.5 F25 (clockwise arc in the XY plane)\n G3 X0 Y0 I1 J-0.5 F25 (counterclockwise arc in the XY plane)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 882 / 1290\n \n Figure 11.13: G2-G3 Example\n In the next example we show how the arc can make a helix in the Z axis by adding the Z word.\n G2 Example Helix\n G0 X0 Y0 Z0\n@@ -40410,15 +40410,15 @@\n \u2022 R - radius from current position\n It is not good practice to program radius format arcs that are nearly full circles or nearly semicircles\n because a small change in the location of the end point will produce a much larger change in the\n location of the center of the circle (and, hence, the middle of the arc). The magnification effect is\n large enough that rounding error in a number can produce out-of-tolerance cuts. For instance, a 1%\n displacement of the endpoint of a 180 degree arc produced a 7% displacement of the point 90 degrees\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 883 / 1290\n \n along the arc. Nearly full circles are even worse. Other size arcs (in the range tiny to 165 degrees or\n 195 to 345 degrees) are OK.\n In the radius format, the coordinates of the end point of the arc in the selected plane are specified\n along with the radius of the arc. Program G2 axes R- (or use G3 instead of G2 ). R is the radius. The\n@@ -40453,15 +40453,15 @@\n G5 X- Y- P- Q-\n \n \u2022 I - X incremental offset from start point to first control point\n \u2022 J - Y incremental offset from start point to first control point\n \u2022 P - X incremental offset from end point to second control point\n \u2022 Q - Y incremental offset from end point to second control point\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 884 / 1290\n \n G5 creates a cubic B-spline in the XY plane with the X and Y axes only. P and Q must both be specified\n for every G5 command.\n For the first G5 command in a series of G5 commands, I and J must both be specified. For subsequent\n G5 commands, either both I and J must be specified, or neither. If I and J are unspecified, the starting\n@@ -40498,15 +40498,15 @@\n G5.1 X2 I2 J-8\n \n It is an error if:\n \u2022 both I and J offset are unspecified or zero\n \u2022 An axis other than X or Y is specified\n \u2022 The active plane is not G17\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 885 / 1290\n \n 11.5.9 G5.2 G5.3 NURBS Block\n G5.2 \n X- Y- \n ...\n@@ -40533,15 +40533,15 @@\n ; The rapid moves show the same path without the NURBS Block\n G0 X0 Y1\n X2 Y2\n X2 Y0\n X0 Y0\n M2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 886 / 1290\n \n Sample NURBS Output\n More information on NURBS can be found here:\n https://wiki.linuxcnc.org/cgi-bin/wiki.pl?NURBS\n \n@@ -40551,15 +40551,15 @@\n Program G7 to enter the diameter mode for axis X on a lathe. When in the diameter mode the X axis\n moves on a lathe will be 1/2 the distance to the center of the lathe. For example X1 would move the\n cutter to 0.500\u201d from the center of the lathe thus giving a 1\u201d diameter part.\n \n 11.5.11 G8 Lathe Radius Mode\n G8\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 887 / 1290\n \n Program G8 to enter the radius mode for axis X on a lathe. When in Radius mode the X axis moves\n on a lathe will be the distance from the center. Thus a cut at X1 would result in a part that is 2\u201d in\n diameter. G8 is default at power up.\n \n@@ -40589,15 +40589,15 @@\n It is an error if:\n \u2022 Cutter Compensation is on\n \u2022 The P number is unspecified\n \u2022 The P number is not a valid tool number from the tool table\n \u2022 The P number is 0\n For more information on cutter orientation used by the Q word, see the Lathe Tool Orientation diagram.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 888 / 1290\n \n 11.5.14 G10 L2 Set Coordinate System\n G10 L2 P- \n \n \u2022 P - coordinate system (0-9)\n@@ -40657,15 +40657,15 @@\n afterwards.\n \u2022 When programming a coordinate system with R, any G52 or G92 will be applied after the rotation.\n \u2022 The coordinate system whose origin is set by a G10 command may be active or inactive at the time\n the G10 is executed. If it is currently active, the new coordinates take effect immediately.\n It is an error if:\n \u2022 The P number does not evaluate to an integer in the range 0 to 9.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 889 / 1290\n \n \u2022 An axis is programmed that is not defined in the configuration.\n G10 L2 Example Line\n G10 L2 P1 X3.5 Y17.2\n \n@@ -40699,15 +40699,15 @@\n \u2022 See T & M6, and G43/G43.1 sections for more information.\n It is an error if:\n \u2022 Cutter Compensation is on\n \u2022 The P number is unspecified\n \u2022 The P number is not a valid tool number from the tool table\n \u2022 The P number is 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 890 / 1290\n \n 11.5.16 G10 L11 Set Tool Table\n G10 L11 P- axes \n \n \u2022 P - tool number\n@@ -40735,15 +40735,15 @@\n G10 L20 Example Line\n G10 L20 P1 X1.5 (set the X axis current location in coordinate system 1 to 1.5)\n \n It is an error if:\n \u2022 The P number does not evaluate to an integer in the range 0 to 9.\n \u2022 An axis is programmed that is not defined in the configuration.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 891 / 1290\n \n 11.5.18 G17 - G19.1 Plane Select\n These codes set the current plane as follows:\n \u2022 G17 - XY (default)\n \u2022 G18 - ZX\n@@ -40777,15 +40777,15 @@\n \u2022 G28.1 - stores the current absolute position into parameters 5161-5166.\n G28 Example Line\n G28 Z2.5 (rapid to Z2.5 then to Z location specified in #5163)\n \n It is an error if :\n \u2022 Cutter Compensation is turned on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 892 / 1290\n \n 11.5.21 G30, G30.1 Go/Set Predefined Position\n \n Warning\n Only use G30 when your machine is homed to a repeatable position and the desired G30\n@@ -40822,15 +40822,15 @@\n The (optional) $ argument sets which spindle the motion is synchronised to (default is zero). For\n example G33 Z10 K1 $1 will move the spindle in synchrony with the spindle.N.revs HAL pin value.\n Spindle-synchronized motion waits for the spindle index and spindle at speed pins, so multiple passes\n line up. G33 moves end at the programmed endpoint. G33 could be used to cut tapered threads or a\n fusee.\n All the axis words are optional, except that at least one must be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 893 / 1290\n \n Note\n K follows the drive line described by X- Y- Z-. K is not parallel to the Z axis if X or Y endpoints are\n used for example when cutting tapered threads.\n \n@@ -40867,15 +40867,15 @@\n \u2022 $ - optional spindle selector\n Warning\n For Z only tapping preposition the XY location prior to calling G33.1 and only use a Z word in\n the G33.1. If the coordinates specified are not the current coordinates when calling G33.1 for\n tapping the move will not be along the Z axis but will be a coordinated, spindle-synchronized\n move from the current location to the location specified and back.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 894 / 1290\n \n For rigid tapping (spindle synchronized motion with return), code G33.1 X- Y- Z- K- where K- gives the\n distance moved for each revolution of the spindle.\n A rigid tapping move consists of the following sequence:\n \u2022 A move from the current coordinate to the specified coordinate, synchronized with the selected\n@@ -40910,15 +40910,15 @@\n G38.n axes\n \n \u2022 G38.2 - probe toward workpiece, stop on contact, signal error if failure\n \u2022 G38.3 - probe toward workpiece, stop on contact\n \u2022 G38.4 - probe away from workpiece, stop on loss of contact, signal error if failure\n \u2022 G38.5 - probe away from workpiece, stop on loss of contact\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 895 / 1290\n \n Important\n You will not be able to use a probe move until your machine has been set up to provide a probe\n input signal. The probe input signal must be connected to motion.probe-input in a .hal file.\n G38.n uses motion.probe-input to determine when the probe has made (or lost) contact. TRUE\n@@ -40974,15 +40974,15 @@\n It is an error if:\n \u2022 the current point is the same as the programmed point.\n \u2022 no axis word is used\n \u2022 cutter compensation is enabled\n \u2022 the feed rate is zero\n \u2022 the probe is already in the target state\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 896 / 1290\n \n 11.5.25 G40 Compensation Off\n \u2022 G40 - turn cutter compensation off. If tool compensation was on the next move must be a linear\n move and longer than the tool diameter. It is OK to turn compensation off when it is already off.\n G40 Example\n@@ -41021,15 +41021,15 @@\n The lead in move must be at least as long as the tool radius. The lead in move can be a rapid move.\n Cutter compensation may be performed if the XY-plane or XZ-plane is active.\n User M100-M199 commands are allowed when Cutter Compensation is on.\n The behavior of the machining center when cutter compensation is on is described in the Cutter\n Compensation section along with code examples.\n It is an error if:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 897 / 1290\n \n \u2022 The D number is not a valid tool number or 0.\n \u2022 The YZ plane is active.\n \u2022 Cutter compensation is commanded to turn on when it is already on.\n \n@@ -41067,15 +41067,15 @@\n \n It is an error if:\n \u2022 the H number is not an integer, or\n \u2022 the H number is negative, or\n \u2022 the H number is not a valid tool number (though note that 0 is a valid tool number on nonrandom\n tool changer machines, it means \u201dthe tool currently in the spindle\u201d)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 898 / 1290\n \n 11.5.29 G43.1 Dynamic Tool Length Offset\n G43.1 axes\n \n \u2022 G43.1 axes - change subsequent motions by replacing the current offset(s) of axes. G43.1 does\n@@ -41112,15 +41112,15 @@\n It is an error if:\n \u2022 H is unspecified and no axis offsets are specified.\n \u2022 H is specified and the given tool number does not exist in the tool table.\n \u2022 H is specified and axes are also specified.\n Note\n G43.2 does not write to the tool table.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 899 / 1290\n \n 11.5.31 G49 Cancel Tool Length Compensation\n \u2022 G49 - cancels tool length compensation\n It is OK to program using the same offset already in use. It is also OK to program using no tool length\n offset if none is currently being used.\n@@ -41155,15 +41155,15 @@\n \u2022 G57 - select coordinate system 4\n \u2022 G58 - select coordinate system 5\n \u2022 G59 - select coordinate system 6\n \u2022 G59.1 - select coordinate system 7\n \u2022 G59.2 - select coordinate system 8\n \u2022 G59.3 - select coordinate system 9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 900 / 1290\n \n The coordinate systems store the axis values and the XY rotation angle around the Z axis in the parameters shown in the following table.\n Table 11.11: Coordinate System Parameters\n Select CS\n G54\n@@ -41313,15 +41313,15 @@\n away from the programmed point you end up.\n \u2022 G64 P- - Blend between best speed and deviation tolerance\n \u2022 G64 P- blending with tolerance. It is a way to fine tune your system for best compromise\n between speed and accuracy. The P- tolerance means that the actual path will be no more than Paway from the programmed endpoint. The velocity will be reduced if needed to maintain the path.\n If you set Q to a non-zero value it turns on the Naive CAM Detector: when there are a series of\n linear XYZ feed moves at the same feed rate that are less than Q- away from being collinear, they\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 901 / 1290\n \n are collapsed into a single linear move. On G2/G3 moves in the G17 (XY) plane when the maximum\n deviation of an arc from a straight line is less than the G64 P- tolerance the arc is broken into two\n lines (from start of arc to midpoint, and from midpoint to end). those lines are then subject to the\n naive cam algorithm for lines. Thus, line-arc, arc-arc, and arc-line cases as well as line-line benefit\n@@ -41359,15 +41359,15 @@\n this point.\n \u2022 Fillet and chamfers in the profile. It is possible to add fillets or chamfers in the profile, see Section 11.5.39 for more details.\n It is an error if:\n \u2022 There is no subroutine defined with the number given in Q.\n \u2022 The path given in the profile is not monotonic in Z or X.\n \u2022 Section 11.5.18 has not been used to select the ZX plane.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 902 / 1290\n \n 11.5.39 G71 G72 Lathe roughing cycles\n Note\n The G71 and G72 cycles are currently somewhat fragile. See issues #707 and #1146\n \n@@ -41408,15 +41408,15 @@\n \u2022 If Z or X are used a rapid move to that position is done.\n \u2022 After the profile has been cut, the tool stops at the end of the profile, including the distance\n specified in D.\n 2. The D number is used to keep a distance from the final profile, to allow material to remain for\n finishing.\n It is an error if:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 903 / 1290\n \n \u2022 There is no subroutine defined with the number given in Q.\n \u2022 The path given in the profile is not monotonic in Z or X.\n \u2022 Section 11.5.18 has not been used to select the ZX plane.\n \u2022 Section 11.5.26 is active.\n@@ -41446,15 +41446,15 @@\n \n \u2022 R- - Retract position along the Z axis.\n \u2022 L- - Used in incremental mode; number of times to repeat the cycle. See G81 for examples.\n \u2022 P- - Dwell time (seconds).\n \u2022 $- - Selected spindle.\n \u2022 F- - Feed rate (spindle speed multiplied by distance traveled per revolution (thread pitch)).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 904 / 1290\n \n Warning\n G74 does not use synchronized motion.\n \n The G74 cycle is intended for tapping with floating chuck and dwell at the bottom of the hole.\n@@ -41471,15 +41471,15 @@\n thread pitch gives a feed of F125.\n \n 11.5.42 G76 Threading Cycle\n G76 P- Z- I- J- R- K- Q- H- E- L- $-\n \n Figure 11.14: G76 Threading\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 905 / 1290\n \n \u2022 Drive Line - A line through the initial X position parallel to the Z.\n \u2022 P- - The thread pitch in distance per revolution.\n \u2022 Z- - The final position of threads. At the end of the cycle the tool will be at this Z position.\n Note\n@@ -41517,15 +41517,15 @@\n the last pass tapers to the thread crest over the distance specified with E. E0.2 will give a taper for\n the first/last 0.2 length units along the thread. For a 45 degree taper program E the same as K.\n \u2022 L- - Specifies which ends of the thread get the taper. Program L0 for no taper (the default), L1 for\n entry taper, L2 for exit taper, or L3 for both entry and exit tapers. Entry tapers will pause at the\n drive line to synchronize with the index pulse then move at the feed rate in to the beginning of the\n taper. No entry taper and the tool will rapid to the cut depth then synchronize and begin the cut.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 906 / 1290\n \n The tool is moved to the initial X and Z positions prior to issuing the G76. The X position is the drive\n line and the Z position is the start of the threads.\n The tool will pause briefly for synchronization before each threading pass, so a relief groove will be\n required at the entry unless the beginning of the thread is past the end of the material or an entry\n@@ -41555,15 +41555,15 @@\n G0 Z-0.5 X0.2\n G76 P0.05 Z-1 I-.075 J0.008 K0.045 Q29.5 L2 E0.045\n \n In the figure the tool is in the final position after the G76 cycle is completed. You can see the entry\n path on the right from the Q29.5 and the exit path on the left from the L2 E0.045. The white lines are\n the cutting moves.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 907 / 1290\n \n Figure 11.15: G76 Example\n \n 11.5.43 G80-G89 Canned Cycles\n The canned cycles G81 through G89 and the canned cycle stop G80 are described in this section.\n@@ -41584,15 +41584,15 @@\n code in a row, the number must be used the first time, but is optional on the rest of the lines. Sticky\n numbers keep their value on the rest of the lines if they are not explicitly programmed to be different.\n The R number is always sticky.\n In incremental distance mode X, Y, and R numbers are treated as increments from the current position\n and Z as an increment from the Z-axis position before the move involving Z takes place. In absolute\n distance mode, the X, Y, R, and Z numbers are absolute positions in the current coordinate system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 908 / 1290\n \n 11.5.43.3 Repeat Cycle\n The L number is optional and represents the number of repeats. L=0 is not allowed. If the repeat\n feature is used, it is normally used in incremental distance mode, so that the same sequence of motions is repeated in several equally spaced places along a straight line. When L- is greater than 1\n in incremental mode with the XY-plane selected, the X and Y positions are determined by adding the\n@@ -41626,15 +41626,15 @@\n once, regardless of the value of L.\n In addition, at the beginning of the first cycle and each repeat, the following one or two moves are\n made:\n \u2022 A rapid move parallel to the XY-plane to the given XY-position.\n \u2022 The Z-axis make a rapid move to the R position, if it is not already at the R position.\n If another plane is active, the preliminary and in-between motions are analogous.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 909 / 1290\n \n 11.5.43.7 Why use a canned cycle?\n There are at least two reasons for using canned cycles. The first is the economy of code. A single bore\n would take several lines of code to execute.\n The G81 Example 1 demonstrates how a canned cycle could be used to produce 8 holes with ten lines\n@@ -41658,15 +41658,15 @@\n The G98 on the second line above means that the return move will be to the Z value on the first line\n since it is higher than the specified R value.\n \n Twelve Holes in a Square This example demonstrates the use of the L word to repeat a set of\n incremental drill cycles for successive blocks of code within the same G81 motion mode. Here we\n produce 12 holes using five lines of code in the canned motion mode.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 910 / 1290\n \n N1000 G90 G0 X0 Y0 Z0 (move coordinate home)\n N1010 G1 F50 X0 G4 P0.1\n N1020 G91 G81 X1 Y0 Z-0.5 R1 L4 (canned drill cycle)\n N1030 X0 Y1 R0 L3 (repeat)\n@@ -41687,15 +41687,15 @@\n It is an error if:\n \u2022 Axis words are programmed when G80 is active.\n G80 Example\n G90 G81 X1 Y1 Z1.5 R2.8 (absolute distance canned cycle)\n G80 (turn off canned cycle motion)\n G0 X0 Y0 Z0 (rapid move to coordinate home)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 911 / 1290\n \n The following code produces the same final position and machine state as the previous code.\n G0 Example\n G90 G81 X1 Y1 Z1.5 R2.8 (absolute distance canned cycle)\n G0 X0 Y0 Z0 (rapid move to coordinate home)\n@@ -41736,15 +41736,15 @@\n \n The G81 cycle is intended for drilling.\n The cycle functions as follows:\n \u2022 Preliminary motion, as described in the Preliminary and In-Between Motion section.\n \u2022 Move the Z-axis at the current feed rate to the Z position.\n \u2022 The Z-axis does a rapid move to clear Z.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 912 / 1290\n \n Figure 11.16: G81 Cycle\n Example 1 - Absolute Position G81\n G90 G98 G81 X4 Y5 Z1.5 R2.8\n \n@@ -41757,15 +41757,15 @@\n \u2022 The R value and clear Z are 2.8. OLD_Z is 3.\n The following moves take place:\n \u2022 A rapid move parallel to the XY plane to (X4, Y5)\n \u2022 A rapid move move parallel to the Z-axis to (Z2.8).\n \u2022 Move parallel to the Z-axis at the feed rate to (Z1.5)\n \u2022 A rapid move parallel to the Z-axis to (Z3)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 913 / 1290\n \n Example 2 - Relative Position G81\n G91 G98 G81 X4 Y5 Z-0.6 R1.8 L3\n \n Suppose the current position is (X1, Y2, Z3) and the preceding line of NC code is interpreted.\n@@ -41786,27 +41786,27 @@\n \u2022 A rapid move parallel to the Z-axis to (X9, Y12, Z4.8)\n The third repeat consists of 3 moves. The X position is reset to 13 (=9+4) and the Y position to 17\n (=12+5).\n \u2022 A rapid move parallel to the XY-plane to (X13, Y17, Z4.8)\n \u2022 Move parallel to the Z-axis at the feed rate to (X13, Y17, Z4.2)\n \u2022 A rapid move parallel to the Z-axis to (X13, Y17, Z4.8)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 914 / 1290\n \n Example 3 - Relative Position G81\n G90 G98 G81 X4 Y5 Z1.5 R2.8\n \n Now suppose that you execute the first G81 block of code but from (X0, Y0, Z0) rather than from (X1,\n Y2, Z3).\n Since OLD_Z is below the R value, it adds nothing for the motion but since the initial value of Z is less\n than the value specified in R, there will be an initial Z move during the preliminary moves.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 915 / 1290\n \n Example 4 - Absolute G81 R > Z This is a plot of the path of motion for the second g81 block of\n code.\n G91 G98 G81 X4 Y5 Z-0.6 R1.8 L3\n \n@@ -41816,15 +41816,15 @@\n \n Example 5 - Relative position R > Z\n G90 G98 G81 X4 Y5 Z-0.6 R1.8\n \n Since this plot starts with (X0, Y0, Z0), the interpreter adds the initial Z0 and R1.8 and rapid moves\n to that location as in Example 4. After that initial Z move, the rapid move to X4 Y5 is done. Then the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 916 / 1290\n \n final Z depth being 0.6 below the R value. The repeat function would make the Z move in the same\n location again.\n \n 11.5.46 G82 Drilling Cycle, Dwell\n@@ -41857,15 +41857,15 @@\n \u2022 Rapid move back out to the retract plane specified by the R word.\n \u2022 Rapid move back down to the current hole bottom, less .010 of an inch or 0.254 mm.\n \u2022 Repeat steps 2, 3, and 4 until the Z position is reached at step 2.\n \u2022 The Z-axis does a rapid move to clear Z.\n It is an error if:\n \u2022 the Q number is negative or zero.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 917 / 1290\n \n 11.5.48 G84 Right-hand Tapping Cycle, Dwell\n G84 (X- Y- Z-) or (U- V- W-) R- L- P- $- F-\n \n \u2022 R- - Retract position along the Z axis.\n@@ -41895,15 +41895,15 @@\n \n The G85 cycle is intended for boring or reaming, but could be used for drilling or milling.\n \u2022 Preliminary motion, as described in the Preliminary and In-Between Motion section.\n \u2022 Move the Z-axis only at the current feed rate to the Z position.\n \u2022 Retract the Z-axis at the current feed rate to the R plane if it is lower than the initial Z.\n \u2022 Retract at the traverse rate to clear Z.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 918 / 1290\n \n 11.5.50 G86 Boring Cycle, Spindle Stop, Rapid Move Out\n G86 (X- Y- Z-) or (U- V- W-) R- L- P- $-\n \n The G86 cycle is intended for boring. This cycle uses a P number for the number of seconds to dwell.\n@@ -41935,15 +41935,15 @@\n 11.5.54 G90, G91 Distance Mode\n \u2022 G90 - absolute distance mode In absolute distance mode, axis numbers (X, Y, Z, A, B, C, U, V, W)\n usually represent positions in terms of the currently active coordinate system. Any exceptions to\n that rule are described explicitly in the G80 G89 section.\n \u2022 G91 - incremental distance mode In incremental distance mode, axis numbers usually represent\n increments from the current coordinate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 919 / 1290\n \n G90 Example\n G90 (set absolute distance mode)\n G0 X2.5 (rapid move to coordinate X2.5 including any offsets in effect)\n \n@@ -41981,15 +41981,15 @@\n Being in incremental distance mode (G91 instead of G90) has no effect on the action of G92.\n G92 offsets may be already be in effect when the G92 is called. If this is the case, the offset is replaced\n with a new offset that makes the current point become the specified value.\n It is an error if all axis words are omitted.\n LinuxCNC stores the G92 offsets and reuses them on the next run of a program. To prevent this, one\n can program a G92.1 (to erase them), or program a G92.2 (to remove them - they are still stored).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 920 / 1290\n \n Note\n The G52 command can also be used to change this offset; see the Offsets section for more details\n about G92 and G52 and how they interact.\n See the Coordinate System section for an overview of coordinate systems.\n@@ -42027,15 +42027,15 @@\n threading, for threading use G33 or G76. G95 requires that spindle.N.speed-in to be connected.\n The actual spindle to which the feed is synchronised is chosen by the $ parameter.\n It is an error if:\n \u2022 Inverse time feed mode is active and a line with G1, G2, or G3 (explicitly or implicitly) does not have\n an F-word.\n \u2022 A new feed rate is not specified after switching to G94 or G95\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 921 / 1290\n \n 11.5.60 G96, G97 Spindle Control Mode\n G96 S- <$-> (Constant Surface Speed Mode)\n G97 S- <$-> (RPM Mode)\n \n@@ -42073,15 +42073,15 @@\n \n The G98 to the second line above means that the return move will be to the value of Z in the first line\n since it is higher that the R value specified.\n The initial (G98) plane is reset any time cycle motion mode is abandoned, whether explicitly (G80) or\n implicitly (any motion code that is not a cycle). Switching among cycle modes (say G81 to G83) does\n NOT reset the initial plane. It is possible to switch between G98 and G99 during a series of cycles.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 922 / 1290\n \n 11.6 M-Codes\n 11.6.1 M-Code Quick Reference Table\n Code\n M0 M1\n@@ -42147,15 +42147,15 @@\n \n 11.6.3 M2, M30 Program End\n \u2022 M2 - end the program. Pressing Cycle Start (\u201dR\u201d in the Axis GUI) will restart the program at the\n beginning of the file.\n \u2022 M30 - exchange pallet shuttles and end the program. Pressing Cycle Start will start the program\n at the beginning of the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 923 / 1290\n \n Both of these commands have the following effects:\n \u2022 Change from Auto mode to MDI mode.\n \u2022 Origin offsets are set to the default (like G54).\n \u2022 Selected plane is set to XY plane (like G17).\n@@ -42189,15 +42189,15 @@\n S100 $0\n S200 $1\n S300 $2\n M3 $-1\n \n This example will then reverse spindle 1 but leave the other spindles rotating forwards:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 924 / 1290\n \n M4 $1\n \n And this will stop spindle 2 and leave the other spindles rotating:\n M5 $2\n@@ -42234,15 +42234,15 @@\n \n The tool change may include axis motion. It is OK (but not useful) to program a change to the tool\n already in the spindle. It is OK if there is no tool in the selected slot; in that case, the spindle will\n be empty after the tool change. If slot zero was last selected, there will definitely be no tool in the\n spindle after a tool change. The tool changer will have to be setup to perform the tool change in HAL\n and possibly ClassicLadder.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 925 / 1290\n \n 11.6.7 M7, M8, M9 Coolant Control\n \u2022 M7 - turn mist coolant on. M7 controls iocontrol.0.coolant-mist pin.\n \u2022 M8 - turn flood coolant on. M8 controls iocontrol.0.coolant-flood pin.\n \u2022 M9 - turn both M7 and M8 off.\n@@ -42277,15 +42277,15 @@\n \u2013 spindle.N.is-oriented (in bit) Acknowledge pin for spindle-orient. Completes orient cycle. If\n spindle-orient was true when spindle-is-oriented was asserted, the spindle-orient pin is cleared\n and the spindle-locked pin is asserted. Also, the spindle-brake pin is asserted.\n \u2013 spindle.N.orient-fault (in s32) Fault code input for orient cycle. Any value other than zero will\n cause the orient cycle to abort.\n \u2013 spindle.N.locked (out bit) Spindle orient complete pin. Cleared by any of M3,M4,M5.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 926 / 1290\n \n 11.6.9 M48, M49 Speed and Feed Override Control\n \u2022 M48 - enable the spindle speed and feed rate override controls.\n \u2022 M49 - disable both controls.\n These commands also take an optional $ parameter to determine which spindle they operate on.\n@@ -42318,15 +42318,15 @@\n \n 11.6.13 M53 Feed Stop Control\n \u2022 M53 - enable the feed stop switch. The P1 is optional. Enabling the feed stop switch will allow\n motion to be interrupted by means of the feed stop control. In LinuxCNC, the HAL pin motion.feedhold is used for this purpose. A true value will cause the motion to stop when M53 is active.\n \u2022 M53 P0 - disable the feed stop switch. The state of motion.feed-hold will have no effect on feed\n when M53 is not active.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 927 / 1290\n \n 11.6.14 M61 Set Current Tool\n \u2022 M61 Q- - change the current tool number while in MDI or Manual mode without a tool change.\n One use is when you power up LinuxCNC with a tool currently in the spindle you can set that tool\n number without doing a tool change.\n@@ -42360,15 +42360,15 @@\n 11.6.16 M66 Wait on Input\n M66 P- | E- \n \n \u2022 P- - specifies the digital input number from 0 to 3. (Adjustable from motmod argument num_dio)\n \u2022 E- - specifies the analog input number from 0 to 3. (Adjustable from motmod argument num_aio)\n \u2022 L- - specifies the wait mode type.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 928 / 1290\n \n \u2013 Mode 0: IMMEDIATE - no waiting, returns immediately. The current value of the input is stored\n in parameter #5399\n \u2013 Mode 1: RISE - waits for the selected input to perform a rise event.\n \u2013 Mode 2: FALL - waits for the selected input to perform a fall event.\n@@ -42404,15 +42404,15 @@\n always program a motion G-code (G0, G1, etc) right after the M67. M67 functions the same as M6263.\n The number of I/O can be increased by using the num_dio or num_aio parameter when loading the\n motion controller. See the Motion section for more information.\n Note\n M67 will not function unless the appropriate motion.analog-out-nn pins are connected in your HAL\n file to outputs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 929 / 1290\n \n 11.6.18 M68 Analog Output, Immediate\n M68 E- Q-\n \n \u2022 M68 - set an analog output immediately.\n@@ -42443,15 +42443,15 @@\n \u2022 spindle mode (G96-css or G97-RPM)\n \u2022 arc distance mode (G90.1, G91.1)\n \u2022 lathe radius/diameter mode (G7,G8)\n \u2022 path control mode (G61, G61.1, G64)\n \u2022 current feed and speed (F and S values)\n \u2022 spindle status (M3,M4,M5) - on/off and direction\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 930 / 1290\n \n \u2022 mist (M7) and flood (M8) status\n \u2022 speed override (M51) and feed override (M50) settings\n \u2022 adaptive feed setting (M52)\n \u2022 feed hold setting (M53)\n@@ -42489,15 +42489,15 @@\n g20 (imperial)\n g91 (relative mode)\n F5 (low feed)\n S300 (low rpm)\n (debug, in subroutine, state now:)\n o call\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 931 / 1290\n \n O endsub\n ; main program\n g21 (metric)\n g90 (absolute)\n@@ -42543,15 +42543,15 @@\n (debug, in main, state now:)\n o call\n o call\n (debug, back in main, state now:)\n o call\n m2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 932 / 1290\n \n 11.6.23 M98 and M99\n The interpreter supports Fanuc-style main- and sub-programs with the M98 and M99 M-codes. See\n Fanuc-Style Programs.\n 11.6.23.1 Selectively Restoring Modal State\n@@ -42593,15 +42593,15 @@\n and Q values as its two arguments.\n Execution of the G-code file pauses until the external program exits. Any valid executable file can\n be used. The file must be located in the search path specified in the INI file configuration. See the\n Display section for more information on search paths.\n After creating a new M1nn program, the GUI should be restarted so that the new program is taken\n into account, otherwise a Unknown M-code error will occur.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 933 / 1290\n \n Warning\n Do not use a word processor to create or edit the files. A word processor will leave unseen\n codes that will cause problems and may prevent a bash or python file from working. Use a\n text editor like Geany in Debian or Notepad++ in other operating systems to create or edit the\n@@ -42643,15 +42643,15 @@\n To display a graphic message and stop until the message window is closed use a graphic display\n program like Eye of Gnome to display the graphic file. When you close it the program will resume.\n M110 Example file\n #!/bin/bash\n eog /home/john/linuxcnc/nc_files/message.png\n exit 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 934 / 1290\n \n To display a graphic message and continue processing the G-code file suffix an ampersand to the\n command.\n M110 Example display and keep going\n #!/bin/bash\n@@ -42685,15 +42685,15 @@\n \u2022 The same number is used for more than one block.\n \u2022 Other words are used on a line with an O- word.\n \u2022 Comments are used on a line with an O-word.\n Note\n Using the lower case o makes it easier to distinguish from a 0 that might have been mistyped. For\n example o100 is easier to see than O100 that it is not a 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 935 / 1290\n \n 11.7.4 Subroutines\n Subroutines starts at Onnn sub and ends at Onnn endsub. The lines between Onnn sub and Onnn\n endsub are not executed until the subroutine is called with Onnn call. Each subroutine must use a\n unique number.\n@@ -42742,15 +42742,15 @@\n Subroutine bodies may not be nested. They may only be called after they are defined. They may\n be called from other functions, and may call themselves recursively if it makes sense to do so. The\n maximum subroutine nesting level is 10.\n Subroutines can change the value of parameters above #30 and those changes will be visible to the\n calling code. Subroutines may also change the value of global named parameters (i.e. parameters\n whose names begin with the underscore character \u201d_\u201d).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 936 / 1290\n \n 11.7.4.1 Fanuc-Style Numbered Programs\n Numbered programs (both main and subprograms), the M98 call and M99 return M-codes, and their\n respective semantic differences are an alternative to the rs274ngc subroutines described above, provided for compatibility with Fanuc and other machine controllers.\n Numbered programs are enabled by default, and may be disabled by placing DISABLE_FANUC_STYLE_SUB\n@@ -42796,15 +42796,15 @@\n \u2022 M98 subprogram call blocks may contain an optional L-word specifying a loop repeat count. Without\n the L-word, the subprogram will execute once only (equivalent to M98 L1). An M98 L0 block will not\n execute the subprogram.\n In rare cases, the M99 M-code may be used to terminate the main program, where it indicates an\n endless program. When the interpreter reaches an M99 in the main program, it will skip back to the\n beginning of the file and resume execution at the first line. An example use of an endless program is\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 937 / 1290\n \n in a machine warm-up cycle; a block delete program end /M30 block might be used to stop the cycle\n at a tidy point when the operator is ready.\n Numbered Subprogram Full Example\n O1\n@@ -42870,15 +42870,15 @@\n #1 = 3 (assign the value of 3 to parameter #1)\n (msg, #1 has been assigned the value of 3)\n o100 continue (skip to start of loop)\n o110 endif\n (some code here)\n #1 = [#1 + 1] (increment the test counter)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 938 / 1290\n \n o100 while [#1 LT 3]\n (msg, Loop Done!)\n M2\n \n@@ -42924,15 +42924,15 @@\n O102 elseif [#2 LT 2]\n F20\n (parameter #2 is between 2 and 5)\n O102 else\n F200\n O102 endif\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 939 / 1290\n \n 11.7.7 Repeat\n The repeat will execute the statements inside of the repeat/endrepeat the specified number of times.\n The example shows how you might mill a diagonal series of shapes starting at the present position.\n Example with repeat\n@@ -42973,15 +42973,15 @@\n M2\n \n Note\n The file names are lowercase letters only so o is converted to o by the interpreter.\n More information about the search path and options for the search path are in the INI configuration\n section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 940 / 1290\n \n 11.7.10 Subroutine return values\n Subroutines may optionally return a value by an optional expression at an endsub or return statement.\n Return value example\n o123 return [#2 *5]\n@@ -43017,15 +43017,15 @@\n spindle speed for a specific spindle. Without the $ the command will default to spindle.0.\n The spindle(s) or selected spindle will turn at that speed when a M3 or M4 is in effect. It is OK to\n program an S word whether the spindle is turning or not. If the speed override switch is enabled and\n not set at 100%, the speed will be different from what is programmed.\n It is OK to program S0, the spindle will not turn if that is done.\n It is an error if:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 941 / 1290\n \n \u2022 the S number is negative.\n As described in the section Right-hand Tapping Cycle with Dwell, if a G84 (tapping) drilling cycle is\n active and the speed and feed potentiometers are enabled, the one with the lowest setting will be\n used. The rotational speed and feed rate will remain synchronized. In this case, the speed may differ\n@@ -43062,37 +43062,37 @@\n file is appropriate for your machine before running.\n \n 11.9.1 Mill Examples\n 11.9.1.1 Helical Hole Milling\n \u2022 File Name: useful-subroutines.ngc\n \u2022 Description: Subroutine for milling a hole using parameters.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 942 / 1290\n \n 11.9.1.2 Slotting\n \u2022 File Name: useful-subroutines.ngc\n \u2022 Description: Subroutine for milling a slot using parameters.\n \n 11.9.1.3 Grid Probe\n \u2022 File Name: gridprobe.ngc\n \u2022 Description: Rectangular Probing\n This program repeatedly probes in a regular XY grid and writes the probed location to the file proberesults.txt in the same directory as the .ini file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 943 / 1290\n \n 11.9.1.4 Smart Probe\n \u2022 File Name: smartprobe.ngc\n \u2022 Description: Rectangular Probing\n This program repeatedly probes in a regular XY grid and writes the probed location to the file proberesults.txt in the same directory as the .ini file. This is improved from the grid probe file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 944 / 1290\n \n 11.9.1.5 Tool Length Probe\n \u2022 File Name: tool-length-probe.ngc\n \u2022 Description: Tool Length Probing\n This program shows an example of how to measure tool lengths automatically using a switch hooked\n@@ -43102,15 +43102,15 @@\n \u2022 File Name: probe-hole.ngc\n \u2022 Description: Finding the Center and Diameter of a hole.\n The program demonstrates how to find the center of a hole, measure the hole diameter and record\n the results.\n 11.9.1.7 Cutter Compensation\n \u2022 File Name: comp-g1.ngc\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 945 / 1290\n \n \u2022 Description: Entry and exit movements with compensation of tool radius.\n This program demonstrates the peculiarity of the toolpath without and with tool radius compensation.\n The tool radius is taken from the tool table.\n \n@@ -43122,15 +43122,15 @@\n \n 11.10 Image to G-Code\n \n 11.10.1 What is a depth map?\n A depth map is a greyscale image where the brightness of each pixel corresponds to the depth (or\n height) of the object at each point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 946 / 1290\n \n 11.10.2 Integrating image-to-gcode with the AXIS user interface\n Add the following lines to the [FILTER] section of your INI file to make AXIS automatically invoke\n image-to-gcode when you open a PNG, GIF, or JPEG image:\n PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image\n@@ -43164,15 +43164,15 @@\n cut off. If White or Black, then a border of pixels equal to the tool diameter is added on all sides, and\n details which are at the very edges of the images will not be cut off.\n 11.10.4.5 Tolerance (units)\n When a series of points are within tolerance of being a straight line, they are output as a straight line.\n Increasing tolerance can lead to better contouring performance in LinuxCNC, but can also remove or\n blur small details in the image.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 947 / 1290\n \n 11.10.4.6 Pixel Size (units)\n One pixel in the input image will be this many units\u2014usually this number is much smaller than 1.0. For\n instance, to mill a 2.5x2.5-inch object from a 400x400 image file, use a pixel size of .00625, because\n 2.5 / 400 = .00625.\n@@ -43195,15 +43195,15 @@\n \u2022 Alternating: Start on the same end of the X or Y axis travel that the last move ended on. This reduces\n the amount of traverse movements.\n \u2022 Up Milling: Start milling at low points, moving towards high points.\n \u2022 Down Milling: Start milling at high points, moving towards low points.\n 11.10.4.12 Depth (units)\n The top of material is always at Z = 0. The deepest cut into the material is at Z = -depth.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 948 / 1290\n \n 11.10.4.13 Step Over (pixels)\n The distance between adjacent rows or columns. To find the number of pixels for a given units distance, compute distance/pixel size and round to the nearest whole number. For example, if pixel\n size=.006 and the desired step over distance=.015, then use a Step Over of 2 or 3 pixels, because\n .015/.006=2.5.\n@@ -43227,15 +43227,15 @@\n \u2022 Full: When milling in the first direction, areas that strongly slope in the second direction are\n skipped. When milling in the second direction, areas that do not strongly slope in that direction\n are skipped.\n 11.10.4.18 Contact angle\n When Lace bounding is not None, slopes greater than Contact angle are considered to be strong\n slopes, and slopes less than that angle are considered to be weak slopes.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 949 / 1290\n \n 11.10.4.19 Roughing offset and depth per pass\n Image-to-gcode can optionally perform roughing passes. The depth of successive roughing passes is\n given by Roughing depth per pass. For instance, entering 0.2 will perform the first roughing pass\n with a depth of 0.2, the second roughing pass with a depth of 0.4, and so on until the full Depth of\n@@ -43257,15 +43257,15 @@\n coordinate systems, and the G92 offset are in \u201dINI file units\u201d. This change was made because\n otherwise the meaning of a location changed depending on whether G20 or G21 was active when\n G28, G30, G10 L2, or G92.3 is programmed.\n Tool table lengths/diameters are in INI file units\n In LinuxCNC, the tool lengths (offsets) and diameters in the tool table are specified in INI file\n units only. This change was made because otherwise the length of a tool and its diameter would\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 950 / 1290\n \n change based on whether G20 or G21 was active when initiating G43, G41, G42 modes. This made\n it impossible to run G-code in the machine\u2019s non-native units, even when the G-code was simple\n and well-formed (starting with G20 or G21, and didn\u2019t change units throughout the program),\n without changing the tool table.\n@@ -43302,28 +43302,28 @@\n primarily useful on lathes.\n Dynamic tool lengths\n LinuxCNC allows specification of a computed tool length through G43.1 I K.\n G41.1, G42.1\n LinuxCNC allows specification of a tool diameter and, if in lathe mode, orientation in the Gcode. The format is G41.1/G42.1 D L, where D is diameter and L (if specified) is the lathe tool\n orientation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 951 / 1290\n \n G43 without H word\n In NGC this is not allowed. In LinuxCNC, it sets length offsets for the currently loaded tool. If no\n tool is currently loaded, it is an error. This change was made so the user doesn\u2019t have to specify\n the tool number in two places for each tool change, and because it\u2019s consistent with the way\n G41/G42 work when the D word is not specified.\n U, V, and W axes\n LinuxCNC allows machines with up to 9 axes by defining an additional set of 3 linear axes known\n as U, V and W\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 952 / 1290\n \n Chapter 12\n \n Virtual Control Panels\n 12.1 PyVCP\n@@ -43333,15 +43333,15 @@\n Hardware machine control panels can use up a lot of I/O pins and can be expensive. That is where\n Virtual Control Panels have the advantage as well as it cost nothing to build a PyVCP.\n Virtual Control Panels can be used for testing or monitoring things to temporarily replace real I/O\n devices while debugging ladder logic, or to simulate a physical panel before you build it and wire it\n to an I/O board.\n The following graphic displays many of the PyVCP widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 953 / 1290\n \n Figure 12.1: PyVCP Widgets Showcase\n \n 12.1.2 Panel Construction\n The layout of a PyVCP panel is specified with an XML file that contains widget tags between \n@@ -43349,15 +43349,15 @@\n \n \n \n Figure 12.2: Simple PyVCP LED Panel Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 954 / 1290\n \n If you place this text in a file called tiny.xml, and run\n halcmd loadusr pyvcp -c mypanel tiny.xml\n \n PyVCP will create the panel for you, which includes two widgets, a Label with the text This is a LED\n@@ -43402,15 +43402,15 @@\n \n \n Here we\u2019ve made a panel with a Label and a Bar widget, specified that the HAL pin connected to\n the Bar should be named spindle-speed, and set the maximum value of the bar to 5000 (see widget\n reference below for all options). To make AXIS aware of this file, and call it at start up, we need to\n specify the following in the [DISPLAY] section of the INI file:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 955 / 1290\n \n PYVCP = spindle.xml\n \n If the panel should appear at the bottom of the AXIS user interface then we need to specify the\n following in the [DISPLAY] section of the INI file:\n@@ -43428,15 +43428,15 @@\n assuming that a signal called spindle-rpm-filtered already exists. Note that when running together\n with AXIS, all PyVCP panel widget HAL pins have names that start with pyvcp., all PyVCP embedded\n tab widget HAL pins start with the name specified as EMBED_TAB_NAME converted to lower case.\n \n This is what the newly created PyVCP panel should look like in AXIS. The sim/lathe configuration is\n already configured this way.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 956 / 1290\n \n 12.1.5 Stand Alone\n This section describes how PyVCP panels can be displayed on their own with or without LinuxCNC\u2019s\n machine controller.\n To load a stand alone PyVCP panel with LinuxCNC use these commands:\n@@ -43475,15 +43475,15 @@\n An optional command to use if you want the panel to stop HAL from continuing commands / shutting\n down. After loading any other components you want the last HAL command to be:\n waitusr panelname\n \n This tells HAL to wait for component panelname to close before continuing HAL commands. This is\n usually set as the last command so that HAL shuts down when the panel is closed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 957 / 1290\n \n 12.1.6 Widgets\n HAL signals come in two variants, bits and numbers. Bits are off/on signals. Numbers can be float,\n s32 or u32. For more information on HAL data types see the HAL Data section. The PyVCP widget\n can either display the value of the signal with an indicator widget, or modify the signal value with a\n@@ -43520,15 +43520,15 @@\n Editing the XML file Edit the XML file with a text editor. In most cases you can right click on the\n file and select open with text editor or similar.\n Colors\n Colors can be specified using the X11 rgb colors by name gray75 or hex #0000ff. A complete list is\n located here https://sedition.com/perl/rgb.html.\n Common Colors (colors with numbers indicate shades of that color)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 958 / 1290\n \n \u2022 white\n \u2022 black\n \u2022 blue and blue1 - 4\n \u2022 cyan and cyan1 - 4\n@@ -43557,15 +43557,15 @@\n (\u201dHelvetica\u201d,20)\n \n \n The above code produced this example:\n \n Figure 12.3: Simple Label Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 959 / 1290\n \n 12.1.6.4 Multi_Label\n An extension of the text label.\n Selectable text label, can display up to 6 label legends when associated bit pin is activated.\n Attach each legend pin to a signal and get a descriptive label when the signal is TRUE.\n@@ -43602,15 +43602,15 @@\n red.\n \u2022 n - sets the height of the LED in pixels.\n \u2022 n - sets the width of the LED in pixels.\n \u2022 false - when true adds a disable pin to the led.\n \u2022 color - sets the color of the LED to color when the pin is disabled.\n Round LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 960 / 1290\n \n \n \u201dmy-led\u201d\n 50\n \u201dgreen\u201d\n@@ -43639,15 +43639,15 @@\n \n 12.1.6.6 Buttons\n A button is used to control a BIT pin. The pin will be set True when the button is pressed and held\n down, and will be set False when the button is released. Buttons can use the following optional options.\n \u2022 n - where n is the amount of extra horizontal extra space.\n \u2022 n - where n is the amount of extra vertical extra space.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 961 / 1290\n \n \u2022 \u201dcolor\u201d - the cursor over color set to color.\n \u2022 \u201dcolor\u201d - the foreground color set to color.\n \u2022 \u201dcolor\u201d - the background color set to color.\n \u2022 True - disable pin.\n@@ -43676,15 +43676,15 @@\n \n Figure 12.8: Checked button\n Checkbutton Code Example\n \n \u201dcoolant-chkbtn\u201d\n \u201dCoolant\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 962 / 1290\n \n 1\n \n \n \u201dchip-chkbtn\u201d\n@@ -43712,15 +43712,15 @@\n Figure 12.10: Simple Radiobutton Example\n Note that the HAL pins in the example above will be named my-radio.one, my-radio.two, and myradio.three. In the image above, one is the selected value. Use the tag HORIZONTAL\n to display horizontally.\n 12.1.6.7 Number Displays\n Number displays can use the following formatting options\n \u2022 (\u201dFont Name\u201d,n), where n is the font size.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 963 / 1290\n \n \u2022 _n_, where n is the overall width of the space used.\n \u2022 _pos_, where pos is LEFT, CENTER, or RIGHT (doesn\u2019t work).\n \u2022 _n_, where n is the amount of extra horizontal extra space.\n \u2022 _n_, where n is the amount of extra vertical extra space.\n@@ -43749,15 +43749,15 @@\n 6\n \n \n The above code produced this example:\n \n Figure 12.12: Simple s32 Number Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 964 / 1290\n \n u32 Number The u32 number widget displays the value of a u32 number. The syntax is the same as\n number except the name which is .\n Bar A bar widget displays the value of a FLOAT signal both graphically using a bar display and numerically. The color of the bar can be set as one color throughout its range (default using fillcolor) or\n set to change color, dependent upon the value of the halpin (range1, range2 range3 must all be set,\n@@ -43792,15 +43792,15 @@\n \n \n The above code produced this example:\n \n Figure 12.13: Simple Bar Example\n Meter Meter displays the value of a FLOAT signal using a traditional dial indicator.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 965 / 1290\n \n \n \u201dmymeter\u201d\n \u201dBattery\u201d\n \u201dVolts\u201d\n@@ -43826,15 +43826,15 @@\n \n \u201dmy-spinbox\u201d\n -12\n 33\n 0\n 0.1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 966 / 1290\n \n \u201d2.3f\u201d\n (\u201dArial\u201d,30)\n 1\n \n@@ -43868,15 +43868,15 @@\n 100\n 0\n 1\n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 967 / 1290\n \n Figure 12.16: Simple Scale Example\n Note\n Note that by default it is \u201dmin\u201d which is displayed even if it is greater than \u201dmax\u201d, unless \u201dmin\u201d is\n negative.\n@@ -43899,15 +43899,15 @@\n \u201dgreen\u201d\n \u201dblack\u201d\n 1\n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 968 / 1290\n \n Figure 12.17: Simple Dial Example\n Jogwheel Jogwheel mimics a real jogwheel by outputting a FLOAT pin which counts up or down as\n the wheel is turned, either by dragging in a circular motion, or by rolling the mouse-wheel.\n \n@@ -43919,15 +43919,15 @@\n \u201dmy-wheel\u201d\n 45\n 250\n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 969 / 1290\n \n Figure 12.18: Simple Jogwheel Example\n \n 12.1.6.9 Images\n Image displays use only .gif image format. All of the images must be the same size. The images must\n@@ -43941,15 +43941,15 @@\n \n \n This example was produced from the above code. Using the two image files fwd.gif and rev.gif. FWD\n is displayed when selectimage is false and REV is displayed when selectimage is true.\n \n Figure 12.19: Selectimage False Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 970 / 1290\n \n Figure 12.20: Selectimage True Example\n Image u32 The image_u32 is the same as image_bit, except you have essentially an unlimited number\n of images and you select the image by setting the halpin to a integer value with 0 for the first image\n in the images list and 1 for the second image, etc.\n@@ -43962,15 +43962,15 @@\n \n The above code produced the following example by adding the stb.gif image.\n \n Figure 12.21: Simple image_u32 Example with halpin=0\n \n Figure 12.22: Simple image_u32 Example withhalpin=1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 971 / 1290\n \n Figure 12.23: Simple image_u32 Example withhalpin=2\n Notice that the default is the min even though it is set higher than max unless there is a negative min.\n 12.1.6.10 Containers\n Containers are widgets that contain other widgets. Containers are used to group other widgets.\n@@ -44006,15 +44006,15 @@\n \u201dRIDGE\u201d\n 3\n \n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 972 / 1290\n \n Figure 12.24: Containers Borders Showcase\n Fill Container fill are specified with the tag. Valid entries are none, x, y and both.\n The x fill is a horizontal fill and the y fill is a vertical fill\n \n@@ -44041,15 +44041,15 @@\n The above code produced this example:\n \n Figure 12.25: Simple hbox Example\n Inside an Hbox, you can use the , , and tags to choose how items in the box behave when the window is re-sized. The default is\n fill=\u201dy\u201d, anchor=\u201dcenter\u201d, expand=\u201dyes\u201d for an Hbox.\n Vbox Use a Vbox when you want to stack widgets vertically on top of each other.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 973 / 1290\n \n \n RIDGE\n 6\n \n@@ -44075,15 +44075,15 @@\n \n The above code produced this example:\n \n Figure 12.27: Simple labelframe Example\n Table A table is a container that allows layout in a grid of rows and columns. Each row is started by\n 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 \u201dstick\u201d may be set through\n the use of the tag. A table expands on its flexible rows and columns.\n Table Code Example\n

\n@@ -44127,15 +44127,15 @@\n \n \u201dspindle-speed\u201d\n 5000\n \n \n \n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \n \n \n \n \n \n The above code produced this example showing each tab selected.\n \n 975 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 976 / 1290\n \n Figure 12.29: Simple Tabs Example\n \n 12.2 PyVCP Examples\n 12.2.1 AXIS\n@@ -44173,15 +44173,15 @@\n \u2022 Add the links to HAL pins for your panel in the postgui.hal file to connect your PyVCP panel to\n LinuxCNC.\n The following is an example of a loadusr command to load two PyVCP panels and name each one so\n the connection names in HAL will be known.\n loadusr -Wn btnpanel pyvcp -c btnpanel panel1.xml\n loadusr -Wn sppanel pyvcp -c sppanel panel2.xml\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 977 / 1290\n \n The -Wn makes HAL Wait for name to be loaded before proceeding.\n The pyvcp -c makes PyVCP name the panel.\n The HAL pins from panel1.xml will be named btnpanel.<_pin name_>.\n The HAL pins from panel2.xml will be named sppanel.<_pin name_>.\n@@ -44190,27 +44190,27 @@\n 12.2.3 Jog Buttons Example\n In this example we will create a PyVCP panel with jog buttons for X, Y, and Z. This configuration will be\n built upon a Stepconf Wizard generated configuration. First we run the Stepconf Wizard and configure\n our machine, then on the Advanced Configuration Options page we make a couple of selections to add\n a blank PyVCP panel as shown in the following figure. For this example we named the configuration\n pyvcp_xyz on the Basic Machine Information page of the Stepconf Wizard.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 978 / 1290\n \n Figure 12.30: XYZ Wizard Configuration\n The Stepconf Wizard will create several files and place them in the linuxcnc/configs/pyvcp_xyz directory. If you left the create link checked you will have a link to those files on your desktop.\n 12.2.3.1 Create the Widgets\n Open up the custompanel.xml file by right clicking on it and selecting open with text editor. Between\n the tags we will add the widgets for our panel.\n Look in the PyVCP Widgets Reference section of the manual for more detailed information on each\n widget documentation des widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n In your custompanel.xml file we will add the description of the widgets.\n \n \n (\u201dHelvetica\u201d,16)\n \n \n@@ -44264,15 +44264,15 @@\n \n \n \n \n \n 979 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 980 / 1290\n \n RAISED\n 3\n \n \n The above gives us a PyVCP panel that looks like the following.\n \n 985 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 986 / 1290\n \n 12.2.5.2 The Connections\n To make it work we add the following code to the custom_postgui.hal file.\n # display the rpm based on freq * rpm per hz\n loadrt mult2\n@@ -44624,15 +44624,15 @@\n custom.hal file whereas the rev led needs to use the spindle-rev bit. You can\u2019t link the spindle-fwd bit\n twice so you use the signal that it was linked to.\n \n 12.2.6 Rapid to Home Button\n This example creates a button on the PyVCP side panel when pressed will send all the axis back to\n the home position. This example assumes you don\u2019t have a PyVCP panel.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 987 / 1290\n \n In your configuration directory create the XML file. In this example it\u2019s named rth.xml. In the rth.xml\n file add the following code to create the button.\n \n \n@@ -44648,15 +44648,15 @@\n \n If you don\u2019t have a [HALUI] section in the INI file create it and add the following MDI command.\n MDI_COMMAND = G53 G0 X0 Y0 Z0\n \n Note\n Information about G53 and G0 G-codes.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 988 / 1290\n \n In the [HAL] section if you don\u2019t have a post gui file add the following and create a file called postgui.hal.\n POSTGUI_HALFILE = postgui.hal\n \n In the postgui.hal file add the following code to link the PyVCP button to the MDI command.\n@@ -44687,15 +44687,15 @@\n \u2022 Widget set: uses TkInter widgets.\n \u2022 User interface creation: \u201dedit XML file / run result / evaluate looks\u201d cycle.\n \u2022 No support for embedding user-defined event handling.\n \u2022 No LinuxCNC interaction beyond HAL pin I/O supported.\n GladeVCP:\n \u2022 Widget set: relies on the GTK3 widget set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 989 / 1290\n \n \u2022 User interface creation: uses the Glade WYSIWYG user interface editor.\n \u2022 Any HAL pin change may be directed to call back into a user-defined Python event handler.\n \u2022 Any GTK signal (key/button press, window, I/O, timer, network events) may be associated with userdefined handlers in Python.\n \u2022 Direct LinuxCNC interaction: arbitrary command execution, like initiating MDI commands to call a\n@@ -44719,31 +44719,31 @@\n make setuid then run . ./scripts/rip-environment. More information about a git checkout is on the\n LinuxCNC wiki page.\n \n Run the sample GladeVCP panel integrated into AXIS like PyVCP as follows:\n $ cd configs/sim/axis/gladevcp\n $ linuxcnc gladevcp_panel.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Run the same panel, but as a tab inside AXIS:\n $ cd configs/sim/axis/gladevcp\n $ linuxcnc gladevcp_tab.ini\n \n 990 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n To run this panel inside Touchy:\n $ cd configs/sim/touchy/gladevcp\n $ linuxcnc gladevcp_touchy.ini\n \n 991 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 992 / 1290\n \n 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\n names), mixed setups are possible as well - for instance a panel on the right hand side, and one or\n more tabs for less-frequently used parts of the interface.\n 12.3.2.1 Exploring the example panel\n@@ -44758,15 +44758,15 @@\n The buttons in the Commands frame are MDI Action widgets - pressing them will execute an MDI\n command in the interpreter. The third button Execute Oword subroutine is an advanced example - it\n takes several HAL pin values from the Settings frame, and passes them as parameters to the Oword\n subroutine. The actual parameters received by the routine are displayed by (DEBUG, ) commands see ../../nc_files/oword.ngc for the subroutine body.\n 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\n and configs/sim/axis/gladevcp/gladevcp_panel.ini.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 993 / 1290\n \n 12.3.2.2 Exploring the User Interface description\n The user interface is created with the Glade UI editor - to explore it, you need to have Glade installed.\n To edit the user interface, run the command\n $ glade configs/axis/gladevcp/manual-example.ui\n@@ -44801,15 +44801,15 @@\n Glade contains an internal Python interpreter, and only Python 3 is supported. This is true for Debian\n Bullseye, Ubuntu 21 and Mint 21 or later. Older versions will not work, you will get a Python error.\n 12.3.3.2 Running Glade to create a new user interface\n This section just outlines the initial LinuxCNC-specific steps. For more information and a tutorial on\n Glade, see http://glade.gnome.org. Some Glade tips & tricks may also be found on youtube.\n Either modify an existing UI component by running glade .ui or start a new one by just running the glade command from the shell.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 994 / 1290\n \n \u2022 If LinuxCNC was not installed from a package, the LinuxCNC shell environment needs to be set up\n with source /scripts/rip-environment, otherwise Glade won\u2019t find the LinuxCNCspecific widgets.\n \u2022 When asked for unsaved preferences, just accept the defaults and hit Close.\n \u2022 From Toplevels (toolbar), pick GtkWindow (first entry) as top level window. Set window1 as ID in\n@@ -44827,15 +44827,15 @@\n You\u2019re now ready to give it a try (while LinuxCNC, e.g. AXIS is running) it with:\n gladevcp myui.ui\n \n GladeVCP creates a HAL component named like the basename of the UI file - myui in this case - unless\n overridden by the -c option. If running AXIS, just try Show HAL configuration and\n inspect its pins.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 995 / 1290\n \n You might wonder why widgets contained a HAL_Hbox or HAL_Table appear greyed out (inactive).\n 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\n halui.machine.is-on or one of the halui.mode signals, to assure some widgets appear active only\n in a certain state.\n@@ -44871,15 +44871,15 @@\n [DISPLAY]\n # add GladeVCP panel where PyVCP used to live:\n GLADEVCP= -c example -u ./hitcounter.py ./manual-example.ui\n \n The command line actually run by AXIS for the above is:\n halcmd loadusr -Wn example gladevcp -c example -x {XID} -u ./hitcounter.py ./manual-example \u2190.ui\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 996 / 1290\n \n Note\n The file specifiers like ./hitcounter.py, ./manual-example.ui, etc. indicate that the files are located\n in the same directory as the INI file. You might have to copy them to you directory (alternatively,\n specify a correct absolute or relative path to the file(s)).\n@@ -44917,15 +44917,15 @@\n 12.3.3.7 Integrating into Touchy\n To do add a GladeVCP tab to Touchy, edit your INI file as follows:\n [DISPLAY]\n # add GladeVCP panel as a tab\n EMBED_TAB_NAME=GladeVCP demo\n EMBED_TAB_COMMAND=gladevcp -c gladevcp -x {XID} -u ./hitcounter.py -H ./gladevcp-touchy.hal \u2190./manual-example.ui\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 997 / 1290\n \n [RS274NGC]\n # gladevcp Demo specific Oword subs live here\n SUBROUTINE_PATH = ../../nc_files/gladevcp_lib\n \n@@ -44971,15 +44971,15 @@\n Re-parent GladeVCP into an existing window XID instead of creating a new top level\n window\n \n \u2190-\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 998 / 1290\n \n -u FILE::\n Use File\u2019s as additional user defined modules with handlers\n -U USEROPT::\n pass USEROPTs to Python modules\n@@ -45012,15 +45012,15 @@\n So, in case you run GladeVCP from a separate shell window (i.e., not started by the GUI in an embedded\n fashion):\n \u2022 You cannot rely on the POSTGUI_HALFILE INI option causing the HAL commands being run at the\n right point in time, so comment that out in the INI file.\n \u2022 Explicitly pass the HAL command file which refers to GladeVCP pins to GladeVCP with the -H\n option (see previous section).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 999 / 1290\n \n 12.3.6 HAL Widget reference\n GladeVCP includes a collection of Gtk widgets with attached HAL pins called HAL Widgets, intended\n to control, display or otherwise interact with the LinuxCNC HAL layer. They are intended to be used\n with the Glade user interface editor. With proper installation, the HAL Widgets should show up in\n@@ -45051,15 +45051,15 @@\n Exceptions to this rule currently are:\n \n \u2022 HAL_Spinbutton and HAL_ComboBox, which have two pins: a -f (float) and a \n (s32) pin\n \u2022 HAL_ProgressBar, which has a -value input pin, and a -scale input\n pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1000 / 1290\n \n 12.3.6.2 Python attributes and methods of HAL Widgets\n HAL widgets are instances of GtKWidgets and hence inherit the methods, properties and signals of the\n applicable GtkWidget class. For instance, to figure out which GtkWidget-related methods, properties\n and signals a HAL_Button has, lookup the description of GtkButton in the PyGObject API Reference.\n@@ -45097,15 +45097,15 @@\n doesn\u2019t make sense. You might use setp _pinname_ _value_ in the associated HAL file for testing\n though.\n \n It is perfectly OK to set an output HAL pin\u2019s value with halcomp[pinname] = value provided this HAL\n pin is not associated with a widget, that is, has been created by the hal_glib.GPin(halcomp.newpin(\n method (see GladeVCP Programming for an example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1001 / 1290\n \n 12.3.6.4 The hal-pin-changed signal\n Event-driven programming means that the UI tells your code when \u201dsomething happens\u201d - through\n a callback, like when a button was pressed. The output HAL widgets (those which display a HAL\n pin\u2019s value) like LED, Bar, VBar, Meter, etc., support the hal-pin-changed signal, which may cause a\n@@ -45123,15 +45123,15 @@\n \u2022 HAL_ToggleButton, HAL_CheckButton: retains on/off state. Important signal: toggled\n \u2022 HAL_RadioButton: a one-of-many group. Important signal: toggled (per button).\n \u2022 Important common methods: set_active(), get_active()\n \u2022 Important properties: label, image\n \n Figure 12.31: Check button\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1002 / 1290\n \n Figure 12.32: Radio buttons\n \n Figure 12.33: Toggle button\n Tip\n@@ -45149,15 +45149,15 @@\n -s\n out s32 pin\n To make a scale useful in Glade, add an Adjustment (General \u2192 Adjustment \u2192 New or existing adjustment) and edit the adjustment object. It defines the default/min/max/increment values. Also, set\n adjustment Page size and Page increment to zero to avoid warnings.\n \n Figure 12.34: Example HAL_HScale\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1003 / 1290\n \n 12.3.6.7 SpinButton\n HAL SpinButton is derived from GtkSpinButton and holds two pins:\n -f\n out FLOAT pin\n@@ -45187,15 +45187,15 @@\n -delta-scaled\n out FLOAT pin\n hal_dial has the following properties:\n cpr\n Sets the Counts per Revolution, allowed values are in the range from 25 to 360\n default = 100\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1004 / 1290\n \n show_counts\n Set this to False, if you want to hide the counts display in the middle of the widget.\n default = True\n label\n@@ -45240,15 +45240,15 @@\n \u2022 [widget name].get_scaled_value()\n Will return the counts value as a float\n \u2022 [widget name].get_delta_scaled_value()\n Will return the counts value as a float\n \u2022 [widget name].set_label(\u201dstring\u201d)\n Sets the label content with \u201dstring\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1005 / 1290\n \n There are two GObject signals emitted:\n \u2022 count_changed\n Emitted when the widget\u2019s count changes eg. from being wheel scrolled.\n \u2022 scale_changed\n@@ -45273,15 +45273,15 @@\n \u2022 Wheel up = increase counts\n \u2022 Wheel down = reduce counts\n As moving the mouse the drag and drop way may be faster than the widget can update itself, you\n may loose counts turning to fast. It is recommended to use the mouse wheel, and only for very rough\n movements the drag and drop way.\n jogwheel exports its count value as HAL pin:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1006 / 1290\n \n -s\n out s32 pin\n jogwheel has the following properties:\n size\n@@ -45304,15 +45304,15 @@\n \u2022 [widget name].get_value()\n Will return the counts value as integer\n \u2022 [widget name].set_label(\u201dstring\u201d)\n Sets the label content with \u201dstring\u201d\n \n Figure 12.37: Example JogWheel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1007 / 1290\n \n 12.3.6.10 Speed Control\n 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.\n The value is controlled with two button to increase or decrease the value. The increment will change\n as long a button is pressed. The value of each increment as well as the time between two changes\n@@ -45352,15 +45352,15 @@\n Float\n The min allowed value.\n Allowed values are 0.0 to 99999.0.\n Default is 0.0.\n If you change this value, the increment will be reset to default, so it might be necessary to set\n afterwards a new increment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1008 / 1290\n \n max\n Float\n The max allowed value.\n Allowed values are 0.001 to 99999.0.\n@@ -45407,15 +45407,15 @@\n There are also Python methods to modify the widget:\n [widget name].set_adjustment(gtk-adjustment)\n \n You can assign a existing adjustment to the control, that way it is easy to replace existing sliders\n without many code changes. Be aware, that after changing the adjustment you may need to set a new\n increment, as it will be reset to its default (100 steps from MIN to MAX):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1009 / 1290\n \n \u2022 [widget name].get_value()\n Will return the counts value as float\n \u2022 [widget name].set_value(float(value))\n Sets the widget to the commanded value\n@@ -45444,15 +45444,15 @@\n \u2022 State_Sensitive_Table\n \u2022 HAL_HBox (deprecated)\n These containers are meant to be used to insensitize (grey out) or hide their children.\n Insensitized children will not respond to input.\n HAL_HideTable\n Has one HAL BIT input pin which controls if its child widgets are hidden or not.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1010 / 1290\n \n Pin: , .\n in bit pin\n If the pin is low then child widgets are visible which is the default state.\n HAL_Table and HAL_Hbox\n@@ -45492,15 +45492,15 @@\n pick_color_on, pick_color_off\n Colors for ON and OFF states.\n These may be represented as #RRRRGGGGBBBB strings and are optional properties which have\n precedence over on_color and off_color.\n led_size\n LED radius (for square - half of LED\u2019s side)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1011 / 1290\n \n led_shape\n LED Shape.\n Valid values are 0 for round, 1 for oval and 2 for square shapes.\n led_blink_rate\n@@ -45534,15 +45534,15 @@\n scale\n Value scale.\n Sets the maximum absolute value of input. Same as setting the .scale pin.\n A float, range from -224 to +2 24.\n green_limit\n Green zone lower limit\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1012 / 1290\n \n yellow_limit\n Yellow zone lower limit\n red_limit\n Red zone lower limit\n@@ -45574,15 +45574,15 @@\n a float value from the ListStore.\n If you\u2019re confused like me about how to edit ComboBox ListStores and CellRenderer, see https://youtu.be/Z5_F-rW2cL8.\n 12.3.6.16 Bars\n HAL_Bar and HAL_VBar widgets for horizontal and vertical bars representing float values.\n HAL_Bar and HAL_VBar each have one input FLOAT HAL pin.\n HAL_Bar and HAL_VBar both bars have the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1013 / 1290\n \n invert\n Swap min and max direction.\n An inverted HBar grows from right to left, an inverted VBar from top to bottom.\n min, max\n@@ -45624,15 +45624,15 @@\n Define up bounds of color zones.\n By default only one zone is enabled. If you want more then one zone set z0_border and z1_border\n to desired values so zone 0 will fill from 0 to first border, zone 1 will fill from first to second border\n and zone 2 from last border to 1.\n Borders are set as fractions.\n Valid values range from 0 to 1.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1014 / 1290\n \n Figure 12.41: Horizontal bar\n \n Figure 12.42: Vertical bar\n \n@@ -45657,15 +45657,15 @@\n bg_color\n Background color of meter.\n z0_color, z1_color, z2_color\n Colors of different value zones.\n Defaults are green, yellow and red.\n For description of zones see z*_border properties.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1015 / 1290\n \n z0_border, z1_border\n Define up bounds of color zones.\n By default only one zone is enabled. If you want more then one zone set z0_border and z1_border\n to desired values so zone 0 will fill from min to first border, zone 1 will fill from first to second\n@@ -45691,15 +45691,15 @@\n show_velocity\n This displays the tool speed.\n Default = true.\n use_commanded\n This selects the DRO to use: commanded or actual values.\n Default = true.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1016 / 1290\n \n metric_units\n This selects the DRO to use: metric or imperial units.\n Default = true.\n show_rapids\n@@ -45745,15 +45745,15 @@\n May be any of x, y, y2 , z, z2 , p (perspective).\n Defaults to z view.\n enable_dro\n Type = boolean.\n Whether to draw a DRO on the plot or not.\n Default = true.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1017 / 1290\n \n mouse_btn_mode\n Type = integer.\n Mouse button handling: leads to different functions of the button:\n \u2022 0 = default: left rotate, middle move, right zoom\n@@ -45799,15 +45799,15 @@\n \u2022 If you set all the plotting options false but show_offsets true you get an offsets page instead of\n a graphics plot.\n \u2022 If you get the zoom distance before changing the view then reset the zoom distance, it is much\n more user friendly.\n \u2022 if you select an element in the preview, the selected element will be used as rotation center\n point\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1018 / 1290\n \n Figure 12.44: Gremlin Example\n \n 12.3.6.20 HAL_Offset\n The HAL_Offset widget is used to display the offset of a single axis.\n@@ -45842,15 +45842,15 @@\n reference_type\n 0:G5x 1:tool 2:G92 3:Rotation around Z\n \n 12.3.6.21 DRO widget\n The DRO widget is used to display the current axis position.\n It has the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1019 / 1290\n \n display_units_mm\n Used to toggle the display units between metric and imperial. Default is False.\n actual\n Select actual (feedback) position or commanded position. Default is True.\n@@ -45906,15 +45906,15 @@\n \u2022 The DRO widget is a modified gtk label widget. As such, much of what can be done to a gtk\n label can be done to the DRO widget.\n \u2022 The font properties may also be set from a css stylesheet which has the highest priority and\n will override values set by GObject properties.\n There a couple ways to directly control the widget using Python.\n Using GObject to set the above listed properties\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1020 / 1290\n \n [widget name].set_property(\u201ddisplay_units_mm\u201d, True)\n [widget name].set_property(\u201dactual\u201d, True)\n [widget name].set_property(\u201ddiameter\u201d, True)\n [widget name].set_property(\u201dmm_text_template\u201d, \u201d%10.3f\u201d)\n@@ -45958,15 +45958,15 @@\n 12.3.6.22 Combi_DRO widget\n The Combi_DRO widget is used to display the current, the relative axis position and the distance to go\n in one DRO.\n By clicking on the DRO the Order of the DRO will toggle around.\n In Relative Mode the actual coordinate system will be displayed.\n Combi_DRO has the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1021 / 1290\n \n joint_number\n Used to select which axis (technically which joint) is displayed.\n On a trivialkins machine (mill, lathe, router) axis/joint numbers are:\n 0:X\n@@ -46015,15 +46015,15 @@\n toggle_readout\n A left mouse click will toggle the DRO readout through the different modes [\u201dRel\u201d, \u201dAbs\u201d, \u201dDTG\u201d].\n By unchecking the box you can disable that behavior. The toggling can still be done with [widget\n name].toggle_readout().\n Value must be boolean.\n Default is TRUE.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1022 / 1290\n \n cycle_time\n The time the DRO waits between two polls.\n This setting should only be changed if you use more than 5 DRO at the same time, i.e. on a 6 axis\n config, to avoid that the DRO slows down the main application too much.\n@@ -46064,15 +46064,15 @@\n \u2013 [\u201dAbs\u201d, \u201dDTG\u201d, \u201dRel\u201d]\n \u2022 [widget name].get_position()\n Returns the position of the DRO as a list of floats.\n The order is independent of the order shown on the DRO and will be given as [Absolute , relative\n , DTG].\n \u2013 Absolute = the machine coordinates, depends on the actual property will give actual or commanded position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1023 / 1290\n \n \u2013 Relative = will be the coordinates of the actual coordinate system.\n \u2013 DTG = the distance to go.\n Will mostly be 0, as this function should not be used while the machine is moving, because of time\n delays.\n@@ -46107,15 +46107,15 @@\n \u2022 [widget name].system\n The actual system, as mentioned in the system_changed signal.\n \u2022 [widget name].homed\n True if the joint is homed.\n \u2022 [widget name].machine_units\n 0 if Imperial, 1 if Metric.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1024 / 1290\n \n Figure 12.45: Example: Three Combi_DRO in a window\n X = Relative Mode\n Y = Absolute Mode\n Z = DTG Mode\n@@ -46140,15 +46140,15 @@\n Sets the file filter for the objects to be shown.\n Must be a string containing a comma separated list of extensions to be shown.\n Default is \u201dngc,py\u201d.\n sortorder\n Sets the sorting order of the displayed icon.\n Must be an integer value from 0 to 3, where:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1025 / 1290\n \n \u2022 0 = ASCENDING (sorted according to file names)\n \u2022 1 = DESCENDING (sorted according to file names)\n \u2022 2 = FOLDERFIRST (show the folders first, then the files), default\n \u2022 3 = FILEFIRST (show the files first, then the folders)\n@@ -46192,15 +46192,15 @@\n [widget name].btn_sel_next.emit(\u201dclicked\u201d)\n [widget name].btn_get_selected.emit(\u201dclicked\u201d)\n [widget name].btn_dir_up.emit(\u201dclicked\u201d)\n [widget name].btn_exit.emit(\u201dclicked\u201d)\n \n The widget will emit the following signals:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1026 / 1290\n \n \u2022 selected\n This signal is emitted when the user selects an icon.\n It will return a string containing a file path if a file has been selected, or None if a directory has been\n selected.\n@@ -46215,15 +46215,15 @@\n \u2013 state is a boolean and will be True or False.\n \u2022 exit\n This signal is emitted when the exit button has been pressed to close the IconView.\n Mostly needed if the application is started as stand alone.\n \n Figure 12.46: Iconview Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1027 / 1290\n \n 12.3.6.24 Calculator widget\n This is a simple calculator widget, that can be used for numerical input.\n You can preset the display and retrieve the result or that preset value.\n calculator has the following properties:\n@@ -46258,15 +46258,15 @@\n font\n Display font to use\n hide_columns\n This will hide the given columns.\n The columns are designated (in order) as such: s,t,p,x,y,z,a,b,c,u,v,w,d,i,j,q.\n You can hide any number of columns including the select and comments.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1028 / 1290\n \n lathe_display_type\n Show lathe format\n There a couple ways to directly control the widget using Python.\n Using goobject to set the above listed properties:\n@@ -46307,15 +46307,15 @@\n Convenience method to hide buttons.\n You must call this after show_all().\n \u2022 [widget name].get_selected_tool()\n Return the user selected (highlighted) tool number.\n \u2022 [widget name].set_selected_tool(toolnumber)\n Selects (highlights) the requested tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1029 / 1290\n \n Figure 12.47: Tooleditor Example\n \n 12.3.6.26 Offsetpage\n The Offsetpage widget is used to display/edit the offsets of all the axes.\n@@ -46342,15 +46342,15 @@\n mm_text_template\n You can use Python formatting to display the position with different precision.\n imperial_text_template\n You can use Python formatting to display the position with different precision.\n There a couple ways to directly control the widget using Python.\n Using goobject to set the above listed properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1030 / 1290\n \n [widget name].set_property(\u201dhighlight_color\u201d,gdk.Color(\u2019blue\u2019))\n [widget name].set_property(\u201dforeground_color\u201d,gdk.Color(\u2019black\u2019))\n [widget name].set_property(\u201dhide_columns\u201d,\u201dxyzabcuvwt\u201d)\n [widget name].set_property(\u201dhide_rows\u201d,\u201d123456789abc\u201d)\n@@ -46376,15 +46376,15 @@\n This is a list of a list of offset-name/user-name pairs.\n The default text is the same as the offset name.\n \u2022 [widget name].get_names()\n This returns a list of a list of row-keyword/user-name pairs.\n The user name column is editable, so saving this list is user friendly.\n See set_names above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1031 / 1290\n \n Figure 12.48: Offsetpage Example\n \n 12.3.6.27 HAL_sourceview widget\n \n@@ -46405,15 +46405,15 @@\n Sets the line to highlight.\n Uses the sourceview line numbers.\n \u2022 [widget name].get_line_number()\n Returns the currently highlighted line.\n \u2022 [widget name].line_up()\n Moves the highlighted line up one line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1032 / 1290\n \n \u2022 [widget name].line_down()\n Moves the highlighted line down one line.\n \u2022 [widget name].load_file(\u2019filename\u2019)\n Loads a file.\n@@ -46435,15 +46435,15 @@\n use_double_click\n Boolean, True enables the mouse double click feature and a double click on an entry will submit\n that command.\n It is not recommended to use this feature on real machines, as a double click on a wrong entry\n may cause dangerous situations.\n Using goobject to set the above listed properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1033 / 1290\n \n [widget name].set_property(\u201dfont_size_tree\u201d,10)\n [widget name].set_property(\u201dfont_size_entry\u201d,20)\n [widget name].set_property(\u201duse_double_click\u201d,False)\n \n@@ -46456,15 +46456,15 @@\n \n Figure 12.50: HAL widgets in a bitmap Example\n \n 12.3.7 Action Widgets Reference\n GladeVCP includes a collection of \u201dcanned actions\u201d called VCP Action Widgets for the Glade user\n interface editor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1034 / 1290\n \n Note\n Other than HAL widgets, which interact with HAL pins, VCP Actions interact with LinuxCNC and the\n G-code interpreter.\n \n@@ -46488,15 +46488,15 @@\n The command string may use special keywords to access important functions.\n \u2022 ACTION for access to the ACTION command library.\n \u2022 GSTAT for access to the Gstat status message library.\n \u2022 INFO for access to collected data from the INI file.\n \u2022 HAL for access to the HAL linuxcnc Python module\n \u2022 STAT for access to LinuxCNC\u2019s raw status via the LinuxCNC Python module.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1035 / 1290\n \n \u2022 CMD for access to LinuxCNC\u2019s commands via the LinuxCNC Python module.\n \u2022 EXT for access to the handler file functions if available.\n \u2022 linuxcnc for access to the LinuxCNC Python module.\n \u2022 self for access to the widget instance.\n@@ -46530,15 +46530,15 @@\n that the requested operation is running:\n \u2022 The Run toggle sends an AUTO_RUN command and waits in the pressed state until the interpreter is\n idle again.\n \u2022 The Stop toggle is inactive until the interpreter enters the active state (is running G-code) and then\n allows user to send AUTO_ABORT command.\n \u2022 The MDI toggle sends given MDI command and waits for its completion in pressed inactive state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1036 / 1290\n \n 12.3.7.4 The Action_MDI Toggle and Action_MDI widgets\n These widgets provide a means to execute arbitrary MDI commands.\n The Action_MDI widget does not wait for command completion as the Action_MDI Toggle does, which\n remains disabled until command complete.\n@@ -46558,15 +46558,15 @@\n 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\n works:\n \u2022 assume you have a HAL SpinBox named speed, and you want to pass its current value as a parameter\n in an MDI command.\n \u2022 The HAL SpinBox will have a float-type HAL pin named speed-f (see HalWidgets description).\n \u2022 To substitute this value in the MDI command, insert the HAL pin name enclosed like so: ${pin-name}\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1037 / 1290\n \n \u2022 for the above HAL SpinBox, we could use (MSG, \u201dThe speed is: ${speed-f}\u201d) just to show what\u2019s\n happening.\n The example UI file is configs/apps/gladevcp/mdi-command-example/speed.ui. Here\u2019s what you\n get when running it:\n@@ -46582,15 +46582,15 @@\n Figure 12.54: Action_MDI Advanced Example\n \n 12.3.7.8 Preparing for an MDI Action, and cleaning up afterwards\n 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\n might get changed by the command or subroutine - for example, a probing subroutine will very likely\n set the feed value quite low. With no further precautions, your previous feed setting will be overwritten by the probing subroutine\u2019s value.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1038 / 1290\n \n 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\n any state before executing the MDI Action, and to restore it to previous values afterwards. The signal\n names are mdi-command-start and mdi-command-stop; the handler names can be set in Glade like\n any other handler.\n@@ -46627,15 +46627,15 @@\n \u2022 mode-related:\n \u2013 mode-manual: emitted when LinuxCNC enters manual mode,\n \u2013 mode-mdi: emitted when LinuxCNC enters MDI mode,\n \u2013 mode-auto: emitted when LinuxCNC enters automatic mode,\n \u2022 interpreter-related: emitted when the G-code interpreter changes into that mode\n \u2013 interp-run\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1039 / 1290\n \n \u2013 interp-idle\n \u2013 interp-paused\n \u2013 interp-reading\n \u2013 interp-waiting\n@@ -46676,15 +46676,15 @@\n print(INFO.MACHINE_IS_METRIC)\n ACTION.SET_ERROR_MESSAGE(\u2019Something went wrong\u2019)\n \n More information can be found here: GladeVCP Libraries modules. There is a sample configuration\n that demonstrates using the core library with GladeVCP\u2019s action Python widgets and with a Python\n handler file. Try loading sim/axis/gladevcp/gladevcp_panel_tester.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1040 / 1290\n \n 12.3.8.3 An example: adding custom user callbacks in Python\n This is just a minimal example to convey the idea - details are laid out in the rest of this section.\n GladeVCP can not only manipulate or display HAL pins, you can also write regular event handlers in\n Python. This could be used, among others, to execute MDI commands. Here\u2019s how you do it:\n@@ -46719,15 +46719,15 @@\n The overall approach is as follows:\n \u2022 Design your UI with Glade, and set signal handlers where you want actions associated with a widget.\n \u2022 Write a Python module which contains callable objects (see handler models below).\n \u2022 Pass your module\u2019s path name to GladeVCP with the -u option.\n \u2022 GladeVCP imports the module, inspects it for signal handlers and connects them to the widget tree.\n \u2022 The main event loop is run.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1041 / 1290\n \n For simple tasks it is sufficient to define functions named after the Glade signal handlers. These will be\n called when the corresponding event happens in the widget tree. Here\u2019s a trivial example - it assumes\n that the pressed signal of a Gtk Button or HAL Button is linked to a callback called on_button_press:\n nhits = 0\n@@ -46773,15 +46773,15 @@\n self.active = False\n # connect to client-events from the host GUI\n def on_map_event(self, widget, data=None):\n top = widget.get_toplevel()\n print(\u201dmap event\u201d)\n top.connect(\u2019client-event\u2019, self.event)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1042 / 1290\n \n If during module inspection GladeVCP finds a function get_handlers, it calls it as follows:\n get_handlers(halcomp,builder,useropts)\n \n The arguments are:\n@@ -46816,15 +46816,15 @@\n screen). And the HAL component isn\u2019t ready as well, so its unsafe to access pins values in your\n __init__() method.\n If you want to have a callback to execute at program start after it is safe to access HAL pins, then a\n connect a handler to the realize signal of the top level window1 (which might be its only real purpose).\n At this point GladeVCP is done with all setup tasks, the HAL file has been run, and GladeVCP is about\n to enter the Gtk main loop.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1043 / 1290\n \n 12.3.8.7 Multiple callbacks with the same name\n Within a class, method names must be unique. However, it is OK to have multiple class instances\n passed to GladeVCP by get_handlers() with identically named methods. When the corresponding\n signal occurs, these methods will be called in definition order - module by module, and within a module,\n@@ -46864,15 +46864,15 @@\n are saved and to be restored. In the case of signature mismatch, a new INI file with default settings\n is generated.\n 12.3.8.10 Using persistent variables\n If you want any of Gtk widget state, HAL widgets output pin\u2019s values and/or class attributes of your\n handler class to be retained across invocations, proceed as follows:\n \u2022 Import the gladevcp.persistence module.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1044 / 1290\n \n \u2022 Decide which instance attributes, and their default values you want to have retained, if any.\n \u2022 Decide which widgets should have their state retained.\n \u2022 Describe these decisions in your handler class\u2019 \\__init()__ method through a nested dictionary\n as follows:\n@@ -46913,15 +46913,15 @@\n ini.restore_state(obj)\n Restore HAL out pins and obj\u2019s attributes as saved/initialized to default as above.\n 12.3.8.11 Saving the state on GladeVCP shutdown\n To save the widget and/or variable state on exit, proceed as follows:\n \u2022 Select some interior widget (type is not important, for instance a table).\n \u2022 In the Signals tab, select GtkObject. It should show a destroy signal in the first column.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1045 / 1290\n \n \u2022 Add the handler name, e.g. on_destroy, to the second column.\n \u2022 Add a Python handler like below:\n import gtk\n ...\n@@ -46960,15 +46960,15 @@\n 12.3.8.14 Adding HAL pins\n If you need HAL pins which are not associated with a specific HAL widget, add them as follows:\n import hal_glib\n ...\n # in your handler class __init__():\n self.example_trigger = hal_glib.GPin(halcomp.newpin(\u2019example-trigger\u2019, hal.HAL_BIT, hal. \u2190HAL_IN))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1046 / 1290\n \n To get a callback when this pin\u2019s value changes, associate a value-change callback with this pin, add:\n self.example_trigger.connect(\u2019value-changed\u2019, self._on_example_trigger_change)\n \n and define a callback method (or function, in this case leave out the self parameter):\n@@ -47010,15 +47010,15 @@\n self.max_value = hal_glib.GPin(halcomp.newpin(\u2019max-value\u2019, hal.HAL_FLOAT, hal. \u2190HAL_IN))\n self.max_value.connect(\u2019value-changed\u2019, self._on_max_value_change)\n inifile = linuxcnc.ini(os.getenv(\u201dINI_FILE_NAME\u201d))\n mmin = float(inifile.find(\u201dMETER\u201d, \u201dMIN\u201d) or 0.0)\n self.meter = self.builder.get_object(\u2019meter\u2019)\n self.meter.min = mmin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1047 / 1290\n \n def get_handlers(halcomp,builder,useropts):\n return [HandlerClass(halcomp,builder,useropts)]\n \n 12.3.8.17 Value-changed callback with hal_glib\n@@ -47057,15 +47057,15 @@\n window1.visible to False, and ignore an initial unmap event.\n 2. My GladeVCP program starts, but no window appears where I expect it to be?\n The window AXIS allocates for GladeVCP will obtain the natural size of all its child widgets\n combined. It is the child widget\u2019s job to request a size (width and/or height). However, not all\n widgets do request a width greater than 0, for instance the Graph widget in its current form. If\n there\u2019s such a widget in your Glade file and it is the one which defines the layout you might want\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1048 / 1290\n \n to set its width explicitly. Note that setting the window1 width and height properties in Glade\n does not make sense because this window will be orphaned during re-parenting and hence its\n geometry will have no impact on layout (see above). The general rule is: if you manually run a UI\n file with gladevcp and its window has reasonable geometry, it should come up in AXIS\n@@ -47104,15 +47104,15 @@\n \u2022 If you\u2019re using HAL_table or HAL_HBox widgets, be aware they have an HAL pin associated with it\n which is off by default. This pin controls whether these container\u2019s children are active or not.\n \n 12.3.11 Implementation note: Key handling in AXIS\n We believe key handling works OK, but since it is new code, we\u2019re telling about it you so you can\n watch out for problems; please let us know of errors or odd behavior. This is the story:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1049 / 1290\n \n AXIS uses the TkInter widget set. GladeVCP applications use Gtk widgets and run in a separate\n process context. They are hooked into AXIS with the Xembed protocol. This allows a child application\n like GladeVCP to properly fit in a parent\u2019s window, and - in theory - have integrated event handling.\n However, this assumes that both parent and child application properly support the Xembed protocol,\n@@ -47148,15 +47148,15 @@\n identically-named files within subdirectories of the system directory specified by LINUXNC_AUX_GLADEVCP\n (e.g., /usr/share/linuxcnc/aux_gladevcp). This provision allows a developer to test an application by\n exporting GLADEVCP_EXTRAS to specify a private application directory without removing a systeminstalled application directory. Messages indicating rejected duplicates are printed to stdout.\n Note\n Support for auxiliary GladeVCP applications requires a Python module named importlib. This module\n may not be available in older installations like Ubuntu-Lucid.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1050 / 1290\n \n 12.4 GladeVCP Library modules\n Libraries are prebuilt Python modules that give added features to GladeVCP. In this way you can select\n what features you want - yet don\u2019t have to build common ones yourself.\n \n@@ -47203,15 +47203,15 @@\n MAX_LINEAR_JOG_VEL = 300 units per minute\n DEFAULT_ANGULAR_JOG_VEL =\n MIN_ANGULAR_JOG_VEL =\n MAX_ANGULAR_JOG_VEL =\n MAX_FEED_OVERRIDE =\n MAX_TRAJ_VELOCITY =\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1051 / 1290\n \n AVAILABLE_SPINDLES = int(self.INI.find(\u201dTRAJ\u201d, \u201dSPINDLES\u201d) or 1)\n DEFAULT_SPINDLE_0_SPEED = 200\n MAX_SPINDLE_0_SPEED = 2500\n MAX_SPINDLE_0_OVERRIDE = 100\n@@ -47261,15 +47261,15 @@\n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n INFO = Info()\n \n To access INFO data use this general syntax:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1052 / 1290\n \n home_state = INFO.NO_HOME_REQUIRED\n if INFO.MACHINE_IS_METRIC is True:\n print(\u2019Metric based\u2019)\n \n@@ -47308,15 +47308,15 @@\n ACTION.SET_TOOL_OFFSET(axis,value,fixture = False)\n ACTION.RUN()\n ACTION.ABORT()\n ACTION.PAUSE()\n ACTION.SET_MAX_VELOCITY_RATE(rate)\n ACTION.SET_RAPID_RATE(rate)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ACTION.SET_FEED_RATE(rate)\n ACTION.SET_SPINDLE_RATE(rate)\n ACTION.SET_JOG_RATE(rate)\n ACTION.SET_JOG_INCR(incr)\n ACTION.SET_JOG_RATE_ANGULAR(rate)\n ACTION.SET_JOG_INCR_ANGULAR(incr, text)\n@@ -47357,15 +47357,15 @@\n get_jog_info (num)\n jnum_check(num)\n ensure_mode(modes)\n open_filter_program(filename, filter)\n \n 1053 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1054 / 1290\n \n 12.5 QtVCP\n QtVCP is an infrastructure to build custom CNC screens or control panels for LinuxCNC.\n It displays a .ui file built with Qt Designer screen editor and combines this with Python programming\n to create a GUI screen for running a CNC machine.\n@@ -47373,54 +47373,54 @@\n code for even finer grain customization.\n \n 12.5.1 Showcase\n Few examples of QtVCP built screens and virtual control panels:\n \n Figure 12.55: QtDragon - 3/4-Axis Sample\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.56: QtDefault - 3-Axis Sample\n \n 1055 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.57: QtAxis - Self Adjusting Axis Sample\n \n 1056 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.58: Blender - 4-Axis Sample\n \n 1057 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1058 / 1290\n \n Figure 12.59: X1mill - 4-Axis Sample\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.60: cam_align - Camera Alignment VCP\n \n 1059 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.61: test_panel - Test Panel VCP\n \n 12.5.2 Overview\n Two files are used, individually or in combination, to add customizations:\n \n 1060 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1061 / 1290\n \n \u2022 A UI file that is a XML file made with Qt Designer graphical editor.\n \u2022 A handler file which is a Python code text file.\n Normally QtVCP uses the stock UI and handler file, but you can specify QtVCP to use local UI and\n handler files.\n@@ -47453,15 +47453,15 @@\n \n Options\n \u2022 -d Debugging on.\n \u2022 -i Enable info output.\n \u2022 -v Enable verbose debug output.\n \u2022 -q Enable only error debug output.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1062 / 1290\n \n \u2022 -a Set window always on top.\n \u2022 -c NAME HAL component name. Default is to use the UI file name.\n \u2022 -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\n -g +XOFFSET+YOFFSET for just position. Example: -g 200x400+0+100\n@@ -47495,15 +47495,15 @@\n The Qt Designer editor makes it relatively easy to build and edit this file.\n 12.5.2.4 Handler Files\n A handler file is a file containing Python code, which adds to QtVCP default routines.\n A handler file allows one to modify defaults, or add logic to a QtVCP screen without having to modify\n QtVCP\u2019s core code. In this way you can have custom behaviors.\n If present a handler file will be loaded. Only one file is allowed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1063 / 1290\n \n 12.5.2.5 Libraries Modules\n QtVCP, as built, does little more than display the screen and react to widgets. For more prebuilt\n behaviors there are available libraries (found in lib/python/qtvcp/lib in RIP LinuxCNC install).\n Libraries are prebuilt Python modules that add features to QtVCP. In this way you can select what\n@@ -47533,15 +47533,15 @@\n QtVCP will look for a folder named (in the launched configuration folder that holds\n the INI file).\n In that folder, QtVCP will load any of the available following files:\n \u2022 .ui,\n \u2022 _handler.py, and\n \u2022 .qss.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1064 / 1290\n \n 12.5.2.8 Modifying Stock Screens\n There are three ways to customize a screen/panel.\n Stylesheets can be used to set Qt properties. If a widget uses properties then they usually can be\n modified by stylesheets.\n@@ -47585,15 +47585,15 @@\n # You call this function without the usual preceding \u2019self.\u2019\n # This is because will will not be patching it into the original handler class instance\n # It will only be called from code in this file.\n def test_function(obj):\n print(dir(obj))\n # This is a new function we will added to the existing handler class instance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1065 / 1290\n \n # Notice it calls the unbounded function with \u2019self\u2019 as an parameter \u2019self\u2019 is the only\n global reference available.\n # It references the window instance.\n def on_keycall_F10(self,event,state,shift,cntrl):\n@@ -47645,15 +47645,15 @@\n # function that calls our new function (of the same name)\n # defined in this file\n self.after_override__ = types.MethodType(after_override__, self)\n \n If you wish to modify a stock screen with full control, copy its UI and handler file to your configuration folder.\n There is a QtVCP panel to help with this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1066 / 1290\n \n \u2022 Open a terminal and run the following command:\n qtvcp copy_dialog\n \n \u2022 Select the screen and destination folder in the dialog\n@@ -47669,40 +47669,40 @@\n QtVCP can be used to create control panels that interface with HAL.\n 12.5.3.1 Builtin Panels\n There are several builtin HAL panels available.\n In a terminal type qtvcp to see a list:\n test_panel\n Collection of useful widgets for testing HAL components, including speech of LED state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.62: QtVCP HAL Test Builtin Panel\n cam_align\n A camera display widget for rotational alignment.\n \n 1067 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.63: cam_align - Camera Alignment VCP\n sim_panel\n A small control panel to simulate MPG jogging controls etc.\n For simulated configurations.\n \n 1068 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.64: QtVCP Sim Builtin Panel\n vismach_mill_xyz\n 3D OpenGL view of a 3-axis milling machine.\n \n 1069 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1070 / 1290\n \n Figure 12.65: QtVismach - 3-Axis Mill Builtin Panel\n You can load these from the terminal or from a HAL file with this basic command:\n loadusr qtvcp test_panel\n \n@@ -47711,15 +47711,15 @@\n \n In this way HAL will wait till the HAL pins are made before continuing on.\n 12.5.3.2 Custom Panels\n You can of course make your own panel and load it.\n If you made a UI file named my_panel.ui and a HAL file named my_panel.hal, you would then load\n this from a terminal with:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1071 / 1290\n \n halrun -I -f my_panel.hal\n \n Example HAL file loading a QtVCP panel\n # load realtime components\n@@ -47768,15 +47768,15 @@\n 1\n \n In this case we load qtvcp using -Wn which waits for the panel to finish loading before continuing\n to run the next HAL command.\n This is to ensure that the panel created HAL pins are actually done in case they are used in the\n rest of the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1072 / 1290\n \n 12.5.4 Build A Simple Clean-sheet Custom Screen\n \n Figure 12.66: QtVCP Ugly custom screen\n 12.5.4.1 Overview\n@@ -47792,15 +47792,15 @@\n \n Add qtvcp_plugin.py link to the Qt Designer Search Path Then you must add a link to the\n qtvcp_plugin.py in one of the folders that Qt Designer will search into.\n In a RIP version of LinuxCNC qtvcp_plugin.py will be:\n \u2019~/LINUXCNC_PROJECT_NAME/lib/python/qtvcp/plugins/qtvcp_plugin.py\u2019\n For a Package installed version it should be:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1073 / 1290\n \n \u2019usr/lib/python2.7/qtvcp/plugins/qtvcp_plugin.py\u2019 or\n \u2019usr/lib/python2.7/dist-packages/qtvcp/plugins/qtvcp_plugin.py\u2019\n Make a symbolic link to the above file and move it to one of the places Qt Designer searches in.\n Qt Designer searches in these two place for links (pick one):\n@@ -47836,15 +47836,15 @@\n This widget doesn\u2019t add anything visually but sets up some common options.\n It\u2019s recommended to always add this widget before any other.\n Right click on the main window, not the ScreenOptions widget, and set the layout as vertical to make\n the ScreenOptions fullsized.\n Add Panel Content On the right hand side there is a panel with tabs for a Property editor and an\n Object inspector.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1074 / 1290\n \n On the Object inspector click on the ScreenOptions.\n Then switch to the Property Editor and, under the ScreenOptions heading, toggle filedialog_option.\n Drag and drop a GCodeGraphics widget and a GcodeEditor widget.\n Place and resize them as you see fit leaving some room for buttons.\n@@ -47871,21 +47871,21 @@\n Do the same for all the other button with the addition of:\n \u2022 With the Home button we must also change the joint_number property to -1.\n This tells the controller to home all the axes rather then a specific axis.\n \u2022 With the Pause button:\n \u2013 Under the Indicated_PushButton heading check the indicator_option.\n \u2013 Under the QAbstactButton heading check checkable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.67: Qt Designer: Selecting Pause Button\u2019s Properties\n \n 1075 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1076 / 1290\n \n Save The .ui File We then need to save this design as tester.ui in the sim/qtvcp folder.\n We are saving it as tester as that is a file name that QtVCP recognizes and will use a built in handler\n file to display it.\n 12.5.4.4 Handler file\n@@ -47918,15 +47918,15 @@\n \u2022 after the screen is built,\n \u2022 after all the POSTGUI_HALFILEs are run.\n In our example there are no HAL pins to connect.\n \n 12.5.5 Handler File In Detail\n Handler files are used to create custom controls using Python.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.5.5.1 Overview\n Here is a sample handler file.\n It\u2019s broken up in sections for ease of discussion.\n ############################\n # **** IMPORT SECTION **** #\n ############################\n@@ -47973,15 +47973,15 @@\n def initialized__(self):\n pass\n def processed_key_event__(self,receiver,event,is_pressed,key,code,shift,cntrl):\n # when typing in MDI, we don\u2019t want keybinding to call functions\n \n 1077 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1078 / 1290\n \n # so we catch and process the events directly.\n # We do want ESC, F1 and F2 to call keybinding functions though\n if code not in(QtCore.Qt.Key_Escape,QtCore.Qt.Key_F1 ,QtCore.Qt.Key_F2,\n QtCore.Qt.Key_F3,QtCore.Qt.Key_F5,QtCore.Qt.Key_F5):\n@@ -48032,15 +48032,15 @@\n #######################\n # CALLBACKS FROM FORM #\n #######################\n #####################\n # GENERAL FUNCTIONS #\n #####################\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n # keyboard jogging from key binding calls\n # double the rate if fast is true\n def kb_jog(self, state, joint, direction, fast = False, linear = True):\n if not STATUS.is_man_mode() or not STATUS.machine_is_on():\n return\n if linear:\n@@ -48089,15 +48089,15 @@\n def on_keycall_ZPOS(self,event,state,shift,cntrl):\n self.kb_jog(state, 2, 1, shift)\n def on_keycall_ZNEG(self,event,state,shift,cntrl):\n self.kb_jog(state, 2, -1, shift)\n \n 1079 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1080 / 1290\n \n def on_keycall_APOS(self,event,state,shift,cntrl):\n pass\n #self.kb_jog(state, 3, 1, shift, False)\n def on_keycall_ANEG(self,event,state,shift,cntrl):\n@@ -48132,15 +48132,15 @@\n 12.5.5.5 INITIALIZE Section\n Like all Python libraries the +__init__+ function is called when the library is first instantiated.\n This is where you would set up defaults, as well as reference variables and global variables.\n The widget references are not available at this point.\n The variables halcomp, widgets and paths give access to QtVCP\u2019s HAL component, widgets, and path\n info respectively.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1081 / 1290\n \n 12.5.5.6 SPECIAL FUNCTIONS Section\n There are several special functions that QtVCP looks for in the handler file.\n If QtVCP finds these it will call them, if not it will silently ignore them.\n class_patch__(self):\n@@ -48177,15 +48177,15 @@\n The Linux system will not shutdown if using this function, you will have to do that yourself.\n QtVCP/LinuxCNC will terminate without a prompt once this function returns.\n closing_cleanup__(self):\n This function is called just before the screen closes. It can be used to do cleanup before closing.\n 12.5.5.7 STATUS CALLBACKS Section\n By convention this is where you would put functions that are callbacks from STATUS definitions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1082 / 1290\n \n 12.5.5.8 CALLBACKS FROM FORM Section\n By convention this is where you would put functions that are callbacks from the widgets connected\n to the MainWindow in the Qt Designer editor.\n 12.5.5.9 GENERAL FUNCTIONS Section\n@@ -48216,15 +48216,15 @@\n 12.5.6.1 Overview\n In the Qt Designer editor:\n \u2022 You create user function slots\n \u2022 You connect the slots to widgets using signals.\n In the handler file:\n \u2022 You create the slot\u2019s functions defined in Qt Designer.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1083 / 1290\n \n 12.5.6.2 Using Qt Designer to add Slots\n When you have loaded your screen into Qt Designer, add a plain PushButton to the screen.\n You could change the name of the button to something interesting like test_button.\n There are two ways to edit connections - This is the graphical way.\n@@ -48240,15 +48240,15 @@\n \u2022 You can now edit a new slot name.\n \u2022 Erase the default name slot() and change it to test_button()\n \u2022 Press the OK button.\n \u2022 You\u2019ll be back to the Configure Connections dialog.\n \u2022 Now you can select your new slot in the slot list.\n \u2022 Then press OK and save the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1084 / 1290\n \n Figure 12.68: Qt Designer Signal/Slot Selection\n \n 12.5.6.3 Python Handler Changes\n Now you must add the function to the handler file.\n@@ -48265,15 +48265,15 @@\n \n In fact it doesn\u2019t matter where in the handler class you put the commands but by convention this is\n where to put it.\n Save the handler file.\n Now when you load your screen and press the button it should print the name of the button in the\n terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1085 / 1290\n \n 12.5.7 More Information\n QtVCP Builtin Virtual Control Panels\n QtVCP Widgets\n QtVCP Libraries\n@@ -48290,25 +48290,25 @@\n In a terminal type qtvcp list to see a list.\n 12.6.1.1 copy\n Used for copying QtVCP\u2019s builtin Screens/VCP Panels/QtVismach code to a folder so one can\n customize it.\n In a terminal run:\n qtvcp copy\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1086 / 1290\n \n Figure 12.69: QtVCP copy Dialog - Screen, VCP Panel or QtVismach Code Copy Panel\n \n 12.6.1.2 spindle_belts\n This panel is designed to display additional RS485 VFD data and also to configure a 4 sheave, 2 belt\n spindle drive via a series of buttons.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1087 / 1290\n \n In addition, it is also a useful template to use for your custom panel because it includes:\n \u2022 Display of additional HAL data\n \u2022 Buttons and button groups\n \u2022 Dynamic changes to button enabled/disabled state based on the state of other buttons\n@@ -48321,15 +48321,15 @@\n \u2022 A custom component that scales the VFD frequency to obtain the desired spindle speed.\n \u2022 A belt driven spindle that uses two belts and an intermediate idler pulley much like a drill press.\n \u2022 Connect the input pins qtdragon.belts. in your postgui HAL file.\n The belts are broken into two button groups, the front belts and the rear belts. These are numbered as\n per the plate on the machine. Buttons in a group are mutually exclusive, i.e., only one can be selected\n in the group.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1088 / 1290\n \n Additionally, it\u2019s not possible to have both belts on the same level with this kind of mechanism because\n you cannot fit two belts to the one idler pulley sheave. So if a belt is selected, its opposite button is\n disabled. E.g., if belt 3 is selected, belt 7 is disabled.\n Add these lines to the [DISPLAY] section in your .ini file\n@@ -48356,15 +48356,15 @@\n \u2022 The dial\u2019s range can be adjusted from a drop down menu.\n \u2022 The output can be scaled with the spinbox.\n \u2022 A combobox can be used to automatically select and connect to a signal.\n loadusr qtvcp test_dial\n \n Figure 12.70: QtVCP test_dial Panel - Test Dial VCP\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.6.1.4 test_button\n \u2022 This panel has a button that will set a HAL pin.\n \u2022 The button can be selected as a momentary or a toggle button.\n \u2022 The button\u2019s indicator color can be adjusted from a drop down menu.\n \u2022 You can add more buttons from the drop down menu.\n \u2022 You can load a Halmeter from the drop down menu.\n@@ -48386,15 +48386,15 @@\n \u2022 A combobox can be used to automatically select and connect to a pin/signal.\n \u2022 You can add more LEDs from the drop down menu.\n \u2022 The LED can be detached from the main windows.\n Here is how to load test_led from a HAL script:\n \n 1089 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1090 / 1290\n \n loadusr qtvcp test_led\n loadusr qtvcp -o 4 test_led\n \n The -o switch sets how many LEDs the panel starts with.\n@@ -48402,24 +48402,24 @@\n \n Figure 12.72: QtVCP test_dial Panel - Test LED VCP\n \n 12.6.1.6 test_panel\n Collection of useful widgets for testing HAL component, including speech of LED state.\n loadusr qtvcp test_panel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.73: QtVCP test_panel - HAL Component Testing Panel\n \n 12.6.1.7 cam_align\n A camera display widget for rotational alignment.\n \n 1091 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1092 / 1290\n \n Figure 12.74: QtVCP cam_align Panel - Camera Based Alignment Panel\n Usage Add these lines to the INI file:\n [DISPLAY]\n EMBED_TAB_NAME = cam_align\n@@ -48433,15 +48433,15 @@\n You can add window width and height size, rotation increment, and camera number from the INI with\n -o options.\n EMBED_TAB_COMMAND = halcmd loadusr -Wn qtvcp_embed qtvcp -d -c qtvcp_embed -x {XID} -o size \u2190=400,400 -o rotincr=.2 -o camnumber=0 cam_align\n \n Mouse controls:\n \u2022 left mouse single click - increase cross hair rotation one increment\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1093 / 1290\n \n \u2022 right mouse single click - decrease cross hair rotation one increment\n \u2022 middle mouse single click - cycle through rotation increments\n \u2022 left mouse hold and scroll - scroll camera zoom\n \u2022 right mouse hold and scroll - scroll cross hair rotation angle\n@@ -48466,95 +48466,95 @@\n If you want to hide both, use a comma between them with no spaces.\n The -a option will make the panel always-on-top of all windows.\n loadusr qtvcp sim_panel\n \n Here we load the panel with no MPG selection buttons and the always-on-top option.\n loadusr qtvcp -a -o hide=groupBoxSelection sim_panel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1094 / 1290\n \n Figure 12.75: QtVCP sim_panel - Simulated Controls Panel For Screen Testing.\n \n 12.6.1.9 tool_dialog\n Manual tool change dialog that gives tool description.\n loadusr -Wn tool_dialog qtvcp -o speak_on -o audio_on tool_dialog\n \n Options:\n \u2022 -o notify_on - use desktop notify dialogs instead of QtVCP native ones.\n \u2022 -o audio_on - play sound on tool change\n \u2022 -o speak_on - speak announcement of tool change\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.76: QtVCP tool_dialog - Manual Tool Change Dialog\n \n 12.6.2 vismach 3D Simulation Panels\n These panels are prebuilt simulation of common machine types.\n These are also embed-able in other screens such as AXIS or GMOCCAPY.\n 12.6.2.1 QtVCP vismach_mill_xyz\n 3D OpenGL view of a 3-Axis milling machine.\n loadusr qtvcp vismach_mill_xyz\n \n 1095 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1096 / 1290\n \n Figure 12.77: QtVCP vismach_mill_xyz - 3-Axis Mill 3D View Panel\n \n 12.6.2.2 QtVCP vismach_router_atc\n 3D OpenGL view of a 3-Axis router style, gantry bed milling machine.\n This particular panel shows how to define and connect the model parts in the handler file, rather then\n importing the pre-built model from QtVCP\u2019s vismach library.\n loadusr qtvcp vismach_router_atc\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1097 / 1290\n \n Figure 12.78: QtVCP vismach_router_atc - 3-Axis Gantry Bed Mill 3D View Panel\n \n 12.6.2.3 QtVCP vismach_scara\n 3D OpenGL view of a SCARA based milling machine.\n loadusr qtvcp vismach_scara\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.79: QtVCP vismach_scara - SCARA Mill 3D View Panel\n \n 12.6.2.4 QtVCP vismach_millturn\n 3D OpenGL view of a 3-Axis milling machine with an A axis/spindle.\n loadusr qtvcp vismach_millturn\n \n 1098 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.80: QtVCP vismach_millturn - 4 Axis MillTurn 3D View Panel\n \n 12.6.2.5 QtVCP vismach_mill_5axis_gantry\n 3D OpenGL view of a 5-Axis gantry type milling machine.\n loadusr qtvcp vismach_mill_5axis_gantry\n \n 1099 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1100 / 1290\n \n Figure 12.81: QtVCP vismach_mill_5axis_gantry - 5-AxIs Gantry Mill 3D View Panel\n \n 12.6.2.6 QtVCP vismach_fanuc_200f\n 3D openGL view of a 6 joint robotic arm.\n loadusr qtvcp vismach_fanuc_200f\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1101 / 1290\n \n Figure 12.82: QtVCP vismach_fanuc_200f - 6 Joint Robotic Arm\n \n 12.6.3 Custom Virtual Control Panels\n You can of course make your own panel and load it.\n@@ -48582,15 +48582,15 @@\n # connect pins\n net bit-input1\n \n test_panel.checkbox_1\n \n classicladder.0.in-00\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1102 / 1290\n \n net bit-hide\n \n test_panel.checkbox_4\n \n@@ -48642,15 +48642,15 @@\n There are panels available that are included with LinuxCNC. To see a list open a terminal and type\n qtvcp and press return.\n You will get a help printout and a list of builtin screen and panels.\n Pick any of the names from the panel list and add that to the COMMAND entry after qtvcp.\n The builtin panel search path is share/qtvcp/panels/PANELNAME.\n Run-In-Place and installed versions of LinuxCNC have these in different locations on the system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1103 / 1290\n \n 12.6.4.3 Location of Custom Panels\n Custom panels can be embedded too -either a modified builtin panel or a new user-built one.\n When loading panels, QtVCP looks in the configuration folders path for qtvcp/panels/PANELNAME/PANELNAME.ui.\n PANNELNAME being any valid string with no spaces. If no path is found there, then looks in the\n@@ -48686,15 +48686,15 @@\n 12.7 QtVCP Widgets\n Qtscreen uses QtVCP widgets for LinuxCNC integration.\n Widget is the general name for the UI objects such as buttons and labels in PyQt.\n You are free to use any available default widgets in the Qt Designer editor.\n There are also special widgets made for LinuxCNC that make integration easier. These are split in\n two, heading on the right side of the editor:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1104 / 1290\n \n \u2022 One is for HAL only widgets.\n \u2022 The other is for CNC control widgets.\n You are free to mix them in any way on your panel.\n Note\n@@ -48718,15 +48718,15 @@\n Figure 12.83: QtVCP LED: LED Indicator Widget\n A LED like indicator that optionally follows a HAL pin\u2019s logic.\n halpin_option\n Selects if the LED follows an input HAL pin or program state.\n diameter\n Diameter of the LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1105 / 1290\n \n color\n Color of the LED when on.\n off_color\n Color of the LED when off.\n@@ -48750,15 +48750,15 @@\n This widget allows the user to check a box to set a HAL pin true or false.\n It is based on PyQt\u2019s QCheckButton.\n 12.7.1.5 RadioButton Widget\n This widget allows a user to set HAL pins true or false. Only one RadioButton widget of a group\n can be true at a time.\n It is based on PyQt\u2019s QRadioButton.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1106 / 1290\n \n 12.7.1.6 Gauge - Round Dial Gauge Widget\n \n Figure 12.84: QtVCP Gauge: Round Dial Gauge Widget\n Round Gauge can be used in a LinuxCNC GUI to display an input parameter on the dial face.\n@@ -48780,15 +48780,15 @@\n This is the number of ticks/gauge readings on the gauge face.\n It should be set to a number that ensures the text readings around the gauge face are readable.\n The minimum allowed value is 2.\n zone1_color\n Zone1 extends from the maximum reading to the threshold point.\n It can be set to any RGB color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1107 / 1290\n \n zone2_color\n Zone2 extends from the threshold point to the minimum reading, which is 0.\n It can be set to any RGB color.\n bezel_color\n@@ -48815,15 +48815,15 @@\n This widget is used to indicate level or value, usually of a HAL s32/float pin.\n you can also disable the HAL pin and use Qt signals or python commands to change the level.\n HalBar is a subclass of the Bar widget, so it inherits these properties\n \n \u2022 stepColorList: a list of color strings, the number of colors defines the number of bars.\n \u2022 backgroundColor: a QColor definition of the background color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1108 / 1290\n \n \u2022 setMaximum: an integer that defines the maximum level of indication.\n \u2022 setMinimum: an integer that defines the lowest level of indication.\n \u2022 pinType: to select HAL pins type:\n \u2013 NONE no HAL pin will be added\n@@ -48840,15 +48840,15 @@\n qproperty-stepColorList: \u2019green,green,#00b600,#00b600,#00d600,#00d600,yellow,yellow,red \u2190,red\u2019;\n }\n \n 12.7.1.8 HALPad - HAL Buttons Joypad\n \n Figure 12.86: QtVCP HALPad: HAL Buttons Joypad\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1109 / 1290\n \n This widget looks and acts like a 5 buttons D-pad, with an LED ring.\n Each button has an selectable type (Bit, S32 or Float) output HAL pin.\n The LED center ring has selectable colors for off and on and is controlled by a bit HAL pin.\n HALPad ENUMS There are enumerated constants used:\n@@ -48885,15 +48885,15 @@\n File or resource path to an image to display in the described button location.\n If the reset button is pressed in the Qt Designer editor property, the image will not be displayed\n (allowing optional text).\n left_text , right_text , center_text , top_text , bottom_text\n A text string to be displayed in the described button location.\n If left blank an image can be designated to be displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1110 / 1290\n \n true_color , false_color\n Color selection for the center LED ring to be displayed when the .light.center HAL\n pin is True or False.\n text_color\n@@ -48911,15 +48911,15 @@\n As an option it can be a toggle button.\n For a LED Indicator Option, see Section 12.7.5.1[IndicatedPushButton] below for more info.\n It also has other options.\n It is based on PyQt\u2019s QPushButton.\n 12.7.1.10 focusOverlay - Focus Overlay Widget\n This widget places a colored overlay over the screen, usually while a dialog is showing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.87: Focus overlay example for confirm close prompt\n Used to create a focused feel and to draw attention to critical information.\n It can also show a translucent image.\n It can also display message text and buttons.\n This widget can be controlled with STATUS messages.\n 12.7.1.11 gridLayout - Grid Layout Widget\n@@ -48927,15 +48927,15 @@\n Disabled widgets typically have a different color and do not respond to actions.\n It is based on PyQt\u2019s QGridLayout.\n 12.7.1.12 hal_label - HAL Label Widget\n This widget displays values sent to it.\n \n 1111 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1112 / 1290\n \n Values can be sent from:\n \u2022 HAL pins\n The input pin can be selected as Bit, S32, Float or no pin selected\n \u2022 Programmatically\n@@ -48970,15 +48970,15 @@\n When using floats you can set a formatting string.\n You must set the digitCount property to an appropriate setting to display the largest number.\n Properties\n pin_name\n Option string to be used as the HAL pin name.\n If set to an empty string the widget name will be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1113 / 1290\n \n bit_pin_type\n Selects the input pin as type BIT.\n s32_pin_type\n Selects the input pin as type S32.\n@@ -49009,15 +49009,15 @@\n a large view of a widget and a smaller multi widget view.\n It is different from a stacked widget as it can pull a widget from anywhere in the screen and place it\n in its page with a different layout than it originally had.\n The original widget must be in a layout for switcher to put it back.\n In Qt Designer you will:\n \u2022 Add the WidgetSwitcher widget on screen.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1114 / 1290\n \n \u2022 Right click the WidgetSwitcher and add a page.\n \u2022 Populate it with the widgets/layouts you wish to see in a default form.\n \u2022 Add as many pages as there are views to switch to.\n \u2022 On each page, add a layout widget.\n@@ -49050,15 +49050,15 @@\n Estop , Machine On , Auto , mdi , manual , run , run_from_line status\n Gets line number from STATUS message gcode-line-selected.\n run_from_line slot\n Gets line number from Qt Designer int/str slot setRunFromLine.\n abort , pause , load dialog\n Requires a dialog widget present.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1115 / 1290\n \n Camview dialog\n Requires camview dialog widget present.\n origin offset dialog\n Requires origin offset dialog widget present.\n@@ -49099,15 +49099,15 @@\n spindle fwd , spindle backward , spindle stop , spindle up , spindle down , view change\n Set view_type_string.\n limits override , flood , mist , block delete , optional stop , mdi command\n Set command_string, i.e.,calls a hard coded MDI command\n INI mdi number\n Set ini_mdi_number, i.e., calls an INI based MDI command\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1116 / 1290\n \n dro absolute , dro relative , dro dtg , exit screen\n Closes down LinuxCNC\n Override limits\n Temporarily override hard limits\n@@ -49146,15 +49146,15 @@\n Then in the INI file, under the heading [MDI_COMMAND_LIST] add appropriate lines.\n The commands are separated by the ;.\n The label is set after the comma, and \\n symbol adds a line break.\n [MDI_COMMAND_LIST]\n MDI_COMMAND = G0 Z25;X0 Y0;Z0, Goto\\nUser\\nZero\n MDI_COMMAND = G53 G0 Z0;G53 G0 X0 Y0, Goto\\nMachn\\nZero\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1117 / 1290\n \n Action buttons are subclassed from Section 12.7.5.1[IndicatedPushButton]. See the following sections for more information about:\n \u2022 LED Indicator option\n \u2022 Enabled on State\n \u2022 Text Changes On State\n@@ -49184,15 +49184,15 @@\n If the button is set checkable, it will indicate which axis is selected.\n If you press and hold the button a pop up menu will show allowing one to:\n \u2022 Zero the axis\n \u2022 Divide the axis by 2\n \u2022 Set the axis arbitrarily\n \u2022 Reset the axis to the last number recorded\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1118 / 1290\n \n You must have selected an entry dialog that corresponds to the dialog_code_string, usually this is\n selected from the screenOptions widget.\n You can select the property halpin_option, it will then set a HAL pin true when the axis is selected.\n The property joint_number should be set to the appropriate joint number. The property axis_letter\n@@ -49227,15 +49227,15 @@\n DROLabel {\n font: 25pt \u201dLato Heavy\u201d;\n qproperty-imperial_template: \u2019%9.4f\u2019;\n qproperty-metric_template: \u2019%10.3f\u2019;\n qproperty-angular_template: \u2019%11.2f\u2019;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1119 / 1290\n \n DROLabel[isHomed=false] {\n color: red;\n }\n DROLabel[isHomed=true] {\n@@ -49281,15 +49281,15 @@\n qproperty-styleFont4: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont5: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont6: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont7: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFontMargin: \u201dTimes,14,-1,0,90,0,0,0,0,0\u201d;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1120 / 1290\n \n For GcodeDisplay widget\u2019s default G-code lexer:\n \u2022 styleColor0 = Default: Everything not part of the groups below\n \u2022 styleColor1 = LineNo and Comments: Nxxx and comments (characters inside of and including\n () or anything after ; (when used outside of parenthesis) with the exception of the note below)\n@@ -49310,15 +49310,15 @@\n \u201dstyle name, size, -1, 0, bold setting (0-99), italics (0-1),\n underline (0-1),0,0,0\u201d\n It is based on PyQt\u2019s QsciScintilla.\n 12.7.2.8 GcodeEditor - G-code Program Editor Widget\n This is an extension of the GcodeDisplay widget that adds editing convenience.\n It is based on PyQt\u2019s QWidget which incorporates GcodeDisplay widget.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1121 / 1290\n \n 12.7.2.9 GCodeGraphics - G-code Graphic Backplot Widget\n \n Figure 12.88: QtVCP GcodeGraphics: G-code Graphic Backplot Widget\n This displays the current G-code in a graphical form.\n@@ -49335,15 +49335,15 @@\n \n _view (string)\n Sets the default view orientation on GUI load.\n Valid choices for a lathe are p, y, y2. For other screens, valid choices are p, x, y, z, z2.\n The following shows an example of how to set this property (referenced using the widget user\n selected name):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n #gcodegraphics{\n qproperty-_view: z;\n }\n \n _dro (bool)\n Determines whether or not to show the DRO.\n@@ -49392,15 +49392,15 @@\n The following shows an example of how to set this property:\n #gcodegraphics{\n qproperty-overlay_color: blue;\n }\n \n 1122 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n background_color (primary, secondary, or RGBA formatted color)\n Sets the default background color.\n The following shows an example of how to set this property:\n #gcodegraphics{\n qproperty-background_color: blue;\n }\n@@ -49447,15 +49447,15 @@\n qproperty-MouseButtonMode: 1;\n }\n \n There are 12 valid modes:\n \n 1123 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Mode\n 0\n 1\n 2\n 3\n 4\n@@ -49537,15 +49537,15 @@\n \u2022 rotate-up\n \u2022 rotate-down\n \u2022 overlay-dro-on\n \u2022 overlay-dro-off\n \u2022 overlay-offsets-on\n \u2022 overlay-offsets-off\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \u2022 alpha-mode-on\n \u2022 alpha-mode-off\n \u2022 inhibit-selection-on\n \u2022 inhibit-selection-off\n \u2022 dimensions-on\n \u2022 dimensions-off\n@@ -49586,15 +49586,15 @@\n This will be the text set when the option is False.\n You can use Qt rich text code for different fonts/colors etc.\n Typical template for metric mode in false state, might be: Imperial Mode.\n It is based on PyQt\u2019s QLabel.\n \n 1125 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1126 / 1290\n \n 12.7.2.11 StatusLabel - Controller Variables State Label Display Widget\n This will display a label based on selectable status of the machine controller.\n You can change how the status will be displayed by substituting python formatting code in the text\n template. You can also use rich text for different fonts/colors etc.\n@@ -49633,15 +49633,15 @@\n jograte_angular_status\n Shows the current QtVCP based Angular Jog Rate.\n jogincr_status\n Shows the current QtVCP based Jog increment.\n jogincr_angular_status\n Shows the current QtVCP based Angular Jog increment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1127 / 1290\n \n machine_state_status\n Shows the current machine interpreter state using the text described from the machine_state_list.\n The interpreter states are:\n \u2022 Estopped\n@@ -49680,15 +49680,15 @@\n tool_number_status\n Returns the tool number of the current loaded tool.\n tool_offset_status\n Returns the offset of the current loaded tool, indexed by index_number to select axis (0=x,1=y,etc.).\n user_system_status\n Shows the active user coordinate system (G5x setting).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1128 / 1290\n \n Other Properties\n index_number\n Integer that specifies the tool status index to display.\n state_label_list\n@@ -49717,15 +49717,15 @@\n Toggles between 2 images: axis not homed, axis homed.\n *watch_all_homed\n Would toggle between 2 images: not all homed, all homed.\n *watch_hard_limits\n Would toggle between 2 images or one per joint.\n Here is an example of using it to display an icon of Z axis homing state:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1129 / 1290\n \n Figure 12.89: QtVCP StatusImageSwitcher: Controller Status Image Switcher\n In the properties section notice that:\n \u2022 watch_axis_homed is checked\n \u2022 axis_letter is set to Z\n@@ -49738,15 +49738,15 @@\n \n \u2022 Right click the image name and you should see Copy path.\n \u2022 Click Copy path.\n \u2022 Now double click the image list property so the dialog shows.\n \u2022 Click the New button.\n \u2022 Paste the image path in the entry box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1130 / 1290\n \n Do that again for the next image.\n Use a clear image to represent a hidden icon.\n You can test the images display from the image list by changing the image number. In this case 0 is\n unhomed and 1 would be homed.\n@@ -49780,15 +49780,15 @@\n notify_option\n Hooking into the desktop notification bubbles for error and messages.\n notify_max_messages\n Number of messages shown on screen at one time.\n catch_close_option\n Catching the close event to pop up a \u2019are you sure\u2019 prompt.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1131 / 1290\n \n close_overlay_color\n Color of transparent layer shown when quitting.\n catch_error_option\n Monitoring of the LinuxCNC error channel.\n@@ -49830,15 +49830,15 @@\n tool_overlay_color\n Color of transparent layer shown when the tool dialog is shown.\n ToolUseDesktopNotify\n Option to use desktop notify dialogs for manual tool change dialog.\n ToolFrameless\n Frameless dialogs can not be easily moved by users.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1132 / 1290\n \n fileDialog_option\n Sets up the file choosing dialog.\n file_overlay_color\n Color of transparent layer shown when the file dialog is shown.\n@@ -49876,15 +49876,15 @@\n Color of transparent layer shown when the machineLog dialog is shown.\n runFromLineDialog_option\n Sets up a dialog to display starting options when starting machine execution from a arbitrary\n line.\n runFromLine_overlay_color\n Color of transparent layer shown when the runFromLine dialog is shown.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1133 / 1290\n \n Setting Properties Programmatically The screen designer chooses the default settings of the\n screenOptions widget.\n Once chosen, most won\u2019t ever need to be changed. But if needed, some can be changed in the handler\n file or in stylesheets.\n@@ -49927,15 +49927,15 @@\n Turns all sounds on or off.\n [MCH_MSG_OPTIONS]\n mchnMsg_play_sound (bool)\n To play alert sound when dialog pops.\n mchnMsg_speak_errors (bool)\n To use Espeak to speak error messages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1134 / 1290\n \n mchnMsg_speak_text (bool)\n To use Espeak to speak all other messages.\n mchnMsg_sound_type (str)\n Sound to play when messages displayed. See notes below.\n@@ -49975,15 +49975,15 @@\n \u2013 DONE\n \u2013 ATTENTION\n \u2013 RING\n \u2013 LOGIN\n \u2013 LOGOUT\n \u2013 BELL\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1135 / 1290\n \n These Sound options require python3-gst1.0 installed.\n \u2022 Audio Files\n You can also specify a file path to an arbitrary audio file.\n You can use ~ in path to substitute for the user home file path.\n@@ -50017,15 +50017,15 @@\n jograte_angular_rate\n Selects a angular jograte slider.\n max_velocity_rate\n Selects a maximum velocity rate slider.\n alertState\n String to define style change: read-only, under, over and normal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1136 / 1290\n \n alertUnder\n Sets the float value that signals the stylesheet for under warning.\n alertOver\n Sets the float value that signals the stylesheet for over warning.\n@@ -50061,15 +50061,15 @@\n diameter\n Diameter of the LED.\n color\n Color of the LED when on.\n off_color\n Color of the LED when off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1137 / 1290\n \n alignment\n Qt Alignment hint.\n state\n Current state of LED (for testing in Qt Designer).\n@@ -50106,15 +50106,15 @@\n \u2022 Rapid override rate\n It is based on PyQt\u2019s QProgressBar.\n 12.7.2.19 SystemToolButton - User System Selection Widget\n This widget allows you to manually select a G5x user system by pressing and holding.\n If you don\u2019t set the button text it will automatically update to the current system.\n It is based on PyQt\u2019s QToolButton.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1138 / 1290\n \n 12.7.2.20 MacroTab - Special Macros Widget\n \n Figure 12.90: QtVCP MacroTab: Special Macros Widget\n This widget allows a user to select and adjust special macro programs for doing small jobs.\n@@ -50132,15 +50132,15 @@\n ; MACROOPTIONS = load:yes,save:yes,default:default.txt,path:~/macros\n \n MACROCOMMAND This is the first line in the O-word file.\n It is a comma separated list of text to display above an entry.\n There will be one for every variable required in the O-word function.\n If the macro does not require variables, leave it empty:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1139 / 1290\n \n ; MACROCOMMAND=\n \n MACRODEFAULTS This must be the second line in the O-word file.\n It is a comma separated list of the default values for each variable in the O-word function.\n@@ -50177,15 +50177,15 @@\n MACROOPTIONS This optional line must be the fourth line in the O-word file.\n It is a comma separated list of keyword and data:\n LOAD:yes\n Shows a load button.\n SAVE:yes\n Shows a save button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1140 / 1290\n \n 12.7.2.21 MDILine - MDI Commands Line Entry Widget\n One can enter MDI commands here.\n A popup keyboard is available.\n Embedded Commands There are also embedded commands available from this widget.\n@@ -50222,15 +50222,15 @@\n Disconnects a pin from a signal.\n An error will result if the pin does not exist.\n Running LinuxCNC from terminal may help determine the root cause as error messages from\n hal_lib.c will be displayed there.\n \u2022 Syntax: unlinkp \n \u2022 Example: unlinkp motion.jog-stop\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1141 / 1290\n \n Note\n The MDILine function spindle_inhibit can be used by a GUI\u2019s handler file to inhibit M3, M4, and M5\n spindle commands if necessary.\n \n@@ -50242,15 +50242,15 @@\n default):\n MDI_HISTORY_FILE = \u2019~/.axis_mdi_history\u2019\n \n 12.7.2.23 MDITouchy - Touch Screen MDI Entry Widget\n \n Figure 12.91: QtVCP MDITouchy: Touch Screen MDI Entry Widget\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1142 / 1290\n \n This widget displays buttons and entry lines to use for entering MDI commands.\n Based on LinuxCNC\u2019s Touchy screen\u2019s MDI entry process, its large buttons are most useful for touch\n screens.\n To use MDITouchy:\n@@ -50289,15 +50289,15 @@\n G90\n O endsub\n \n Notice the name of the sub matches the file name and macro name exactly, including case.\n When you invoke the macro by pressing the Macro button you can enter values for parameters (xinc\n and yinc in our example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1143 / 1290\n \n These are passed to the macro as positional parameters: #1, #2\u2026 #N respectively.\n Parameters you leave empty are passed as value 0.\n If there are several different macros, press the Macro button repeatedly to cycle through them.\n In this simple example, if you enter -1 for xinc and invoke the running of the MDI cycle, a rapid G0\n@@ -50310,15 +50310,15 @@\n Figure 12.92: QtVCP OriginOffsetsView: Origins View and Setting Widget\n This widget allows one to visualize and modify User System Origin offsets directly.\n It will update LinuxCNC\u2019s Parameter file for changes made or found.\n The settings can only be changed in LinuxCNC after homing and when the motion controller is idle.\n The display and entry will change between metric and imperial, based on LinuxCNC\u2019s current G20 /\n G21 setting.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1144 / 1290\n \n The current in-use user system will be highlighted.\n Extra actions can be integrated to manipulate settings.\n These actions depend on extra code added either to a combined widget, like originoffsetview dialog,\n or the screens handler code.\n@@ -50357,15 +50357,15 @@\n It can selectably react to:\n \u2022 Machine on\n \u2022 Interpreter idle\n \u2022 E-stop off\n \u2022 All-homed\n It is based on PyQt\u2019s QGridLayout.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.7.2.26 MachineLog - Machine Events Journal Display Widget\n FIXME MachineLog documentation\n 12.7.2.27 JointEnableWidget - FIXME\n FIXME JointEnableWidget documentation\n 12.7.2.28 StatusImageSwitcher - Controller Status Image Switching Widget\n This widget will display images based on LinuxCNC status.\n@@ -50374,15 +50374,15 @@\n \u2022 the state of all homed,\n \u2022 the state of a certain axis homed,\n \u2022 the state of hard limits.\n It is based on PyQt\u2019s FIXME\n \n 1145 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1146 / 1290\n \n 12.7.2.29 FileManager - File Loading Selector Widget\n \n Figure 12.93: QtVCP FileManager: File Loading Selector Widget\n This widget is used to select files to load.\n@@ -50397,15 +50397,15 @@\n \n Stylesheets Properties\n doubleClickSelection (bool)\n Determines whether or not to require double clicking on a folder.\n Single clicking a folder (False) is enabled by default and is intended for touch screen users.\n The following shows an example of how to set this property:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1147 / 1290\n \n #filemanager {\n qproperty-doubleClickSelection: True;\n }\n \n@@ -50428,15 +50428,15 @@\n The tool settings can only be changed in LinuxCNC after homing and when the motion controller is\n idle.\n The display and entry will change between metric and imperial based on LinuxCNC\u2019s current G20/G21\n setting.\n The current in-use tool will be highlighted, and the current selected tool will be highlighted in a\n different color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1148 / 1290\n \n The checkbox beside each tool can be used to select too for an action that depends on extra code\n added either to a combined widget, like the toolOffsetView dialog or the screens handler code.\n Typical actions are load selected tool, delete selected tools, etc.\n Clicking on the columns and rows allows one to adjust the settings.\n@@ -50476,30 +50476,30 @@\n delete_tools()\n Deletes the currently checkbox selected tools.\n get_checked_list()\n Returns a list of tools selected by checkboxs.\n set_all_unchecked()\n Uncheck all selected tools.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Example for handler file executing aforementioned functions.\n self.w.tooloffsetview.add_tool()\n self.w.tooloffsetview.delete_tools()\n toolList = self.w.tooloffsetview.get_checked_list()\n self.w.tooloffsetview.set_all_unchecked()\n \n 12.7.2.32 BasicProbe - Simple Mill Probing Widget\n \n Figure 12.95: QtVCP BasicProbe: Simple Mill Probing Widget\n Widget for probing on a mill. Used by the QtDragon screen.\n \n 1149 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1150 / 1290\n \n 12.7.2.33 VersaProbe - Mill Probing Widget\n \n Figure 12.96: QtVCP VersaProbe: Mill Probing Widget\n Widget for probing on a mill. Used by the QtDragon screen.\n@@ -50517,15 +50517,15 @@\n \n \u2022 Add a function to call a dialog:\n This function must build a message dict to send to the dialog.\n This message will be passed back in the general message with the addition of the return variable.\n It is possible to add extra user information to the message. The dialog will ignore these and pass\n them back.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1151 / 1290\n \n NAME\n Launches code name of dialog to show.\n ID\n A unique id so we process only a dialog that we requested.\n@@ -50566,15 +50566,15 @@\n TYPE (OK|YESNO|OKCANCEL) , ICON (QUESTION|INFO|CRITICAL|WARNING) , PINNAME\n Not implemented yet.\n FOCUSTEXT (overlay text|None)\n Text to display if focus overlay is used. Use None for no text.\n FOCUSCOLOR (QColor(_R, G, B, A_))\n Color to use if focus overlay is used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1152 / 1290\n \n PLAYALERT\n Sound to play if sound is available, i.e., SPEAK .\n When using STATUS \u2019s request-dialog function, the default launch name is MESSAGE.\n It is based on PyQt\u2019s QMessagebox.\n@@ -50584,15 +50584,15 @@\n This is used as a manual tool change prompt.\n It has HAL pins to connect to the machine controller. The pins are named the same as the original\n AXIS manual tool prompt and works the same.\n The tool change dialog can only be launched by HAL pins.\n If there is a Focus Overlay widget present, it will signal it to display.\n It is based on PyQt\u2019s QMessagebox.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1153 / 1290\n \n 12.7.3.3 FileDialog - Load and Save File Chooser Dialog Widget\n \n Figure 12.98: QtVCP FileDialog: Load and Save File Chooser Widget\n This is used to load G-code files.\n@@ -50608,15 +50608,15 @@\n \u2019FILENAME\u2019:\u2019~/linuxcnc/nc_files/someprogram.txt\u2019,\n \u2019EXTENSIONS\u2019:\u2019Text Files (*.txt);;ALL Files (*.*)\u2019\n }\n ACTION.CALL_DIALOG(mess)\n \n And for a save dialog\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1154 / 1290\n \n mess = {\u2019NAME\u2019:\u2019SAVE\u2019,\u2019ID\u2019:\u2019_MY_DIALOG_\u2019,\n \u2019TITLE\u2019:\u2019Save Some text File\u2019,\n \u2019FILENAME\u2019:\u2019~/linuxcnc/nc_files/someprogram.txt\u2019,\n \u2019EXTENSIONS\u2019:\u2019Text Files (*.txt);;ALL Files (*.*)\u2019\n@@ -50628,15 +50628,15 @@\n \n Figure 12.99: QtVCP OriginOffsetDialog: Origin Offset Setting Widget\n This widget allows one to modify User System origin offsets directly in a dialog form.\n If there is an Focus Overlay widget present, it will signal it to display.\n When using STATUS \u2019s request-dialog function, the default launch name is ORIGINOFFSET.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1155 / 1290\n \n 12.7.3.5 ToolOffsetDialog - Tool Offset Setting Dialog Widget\n \n Figure 12.100: QtVCP ToolOffsetDialog: Tool Offset Setting Dialog Widget\n This widget allows one to modify Tool offsets directly in a dialog form.\n@@ -50656,61 +50656,61 @@\n 12.7.3.8 EntryDialog - Edit Line Dialog Widget\n This is a dialog to display an edit line for information entry, such as origin offset.\n It returns the entry via STATUS messages using a Python DICT.\n The DICT contains at minimum, the name of the dialog requested and an ID code.\n When using \u0300 \u0300STATUS \u0300 \u0300\u2019s request-dialog function, the default launch name is ENTRY.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1156 / 1290\n \n 12.7.3.9 CalculatorDialog - Calculator Dialog Widget\n \n Figure 12.101: QtVCP CalculatorDialog: Calculator Dialog Widget\n This is a dialog to display a calculator for numeric entry, such as origin offset.\n It returns the entry via STATUS messages using a Python DICT.\n The DICT contains at minimum, the name of the dialog requested and an ID code.\n When using \u0300 \u0300STATUS \u0300 \u0300\u2019s request-dialog function, the default launch name is CALCULATOR.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.7.3.10 RunFromLine - Run-From-Line Dialog Widget\n \n Figure 12.102: QtVCP RunFromLine: Run-From-Line Dialog Widget\n Dialog to preset spindle settings before running a program from a specific line.\n It is based on PyQt\u2019s QDialog.\n \n 1157 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1158 / 1290\n \n 12.7.3.11 VersaProbeDialog - Part Touch Probing Dialog Widget\n \n Figure 12.103: QtVCP VersaProbeDialog: Part Touch Probing Dialog Widget\n This is a dialog to display a part probing screen based on Verser Probe v2.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1159 / 1290\n \n 12.7.3.12 MachineLogDialog - Machine and Debugging Logs Dialog Widget\n \n Figure 12.104: QtVCP MachineLogDialog: Machine and Debugging Logs Dialog Widget\n This is a dialog to display the machine log and QtVCP\u2019s debugging log.\n It is based on PyQt\u2019s QDialog.\n \n 12.7.4 Other Widgets\n Other available widgets:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1160 / 1290\n \n 12.7.4.1 NurbsEditor - NURBS Editing Widget\n \n Figure 12.105: QtVCP NurbsEditor: NURBS Editing Widget\n The Nurbs editor allows you to manipulate a NURBS based geometry on screen and then convert\n@@ -50719,15 +50719,15 @@\n It is based on PyQt\u2019s QDialog.\n 12.7.4.2 JoyPad - 5 button D-pad Widget\n It is the base class for the HALPad widget.\n This widget looks and acts like a 5 button D-pad, with a LED like indicators in a ring.\n You can put text or icons in each of the button positions.\n You can connect to output signals when the buttons are pressed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1161 / 1290\n \n There are also input slots to change the color of the indicator(s).\n ENUMS There are enumerated constants used to reference indicator positions.\n They are used in Qt Designer editor\u2019s property editor or in Python code.\n NONE , LEFT, L , RIGHT, R , CENTER, C , TOP, T , BOTTOM, B , LEFTRIGHT, X , TOPBOTTOM, A\n@@ -50764,15 +50764,15 @@\n The set_highlight() function must be used prior to set the indicator to use.\n Signals These signals will be sent when buttons are pressed.\n They can be connected to in Qt Designer editor or Python code.\n The first two output a string that indicates the button pressed:\n \n joy_btn_pressed (string) , joy_btn_released (string) , joy_l_pressed (bool) , joy_l_released (boo\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1162 / 1290\n \n They are based on PyQt\u2019s Signal (QtCore.pyqtSignal())\n Slots Slots can be connected to in Qt Designer editor or Python code:\n set_colorStateTrue() , set_colorStateFalse() , set_colorState(_bool_) , set_true_color(_str_)\n \n@@ -50810,15 +50810,15 @@\n \n 12.7.4.3 WebWidget\n This widget will create a html/pdf viewing page using the QtWebKit or QtWebEngine libraries. The\n newer QtWebEngine is preferred if both are on the system.\n If the QtWebEngine library is used with the QtDesigner editor, a placeholder QWidget will show in\n Qesigner. This will be replaced with thw QtWebEngine widget at run time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1163 / 1290\n \n 12.7.5 BaseClass/Mixin Widgets\n These widgets are used to combine different properties and behaviours into other widgets.\n You will see them as a collapsible header in the Qt Designer properties column.\n 12.7.5.1 IndicatedPushButtons\n@@ -50847,15 +50847,15 @@\n Indicated_PushButton #button_estop{\n qproperty-on_color: black;\n qproperty-off_color: yellow;\n }\n \n Options IndicatedPushButton have exclusive options:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1164 / 1290\n \n indicator_HAL_pin_option\n Adds a halpin, named -led that controls the button indicator state.\n indicator_status_option\n Makes the LED indicate the state of these selectable LinuxCNC status:\n@@ -50897,15 +50897,15 @@\n }\n \n Here is how you specify a particular widget by its objectName in Qt Designer:\n ActionButton #estop button [isEstopped=false] {\n color: yellow;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1165 / 1290\n \n Often, having the button disabled and enabled based on the state of LinuxCNC\u2019s motion controller is\n necessary.\n There are several properties that can be selected to aid with this:\n \n@@ -50945,15 +50945,15 @@\n \n 12.7.6 Import-Only Widgets\n These widgets are usually the base class widget for other QtVCP widgets.\n They are not available directly from the Qt Designer editor but could be imported and manually\n inserted.\n They could also be subclassed to make a similar widget with new features.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1166 / 1290\n \n 12.7.6.1 Auto Height\n Widget for measuring two heights with a probe.\n For setup.\n 12.7.6.2 G-code Utility\n@@ -50974,15 +50974,15 @@\n You can also specify subroutines to be pre-opened in tabs.\n [DISPLAY]\n # NGCGUI subroutine path.\n # This path must also be in [RS274NGC] SUBROUTINE_PATH\n NGCGUI_SUBFILE_PATH = ~/linuxcnc/nc_files/examples/ngcgui_lib\n # pre selected programs tabs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1167 / 1290\n \n # specify filenames only, files must be in the NGCGUI_SUBFILE_PATH\n NGCGUI_SUBFILE = slot.ngc\n NGCGUI_SUBFILE = qpocket.ngc\n \n@@ -51006,15 +51006,15 @@\n (info: feedrate -- simple example for setting feedrate)\n o sub\n #\n = #1 (= 6 Feed Rate) ; comments in brackets will be shown in ngcui\n f#\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1168 / 1290\n \n 12.7.6.6 Qt PDF\n Allows adding loadable PDFs to a screen.\n 12.7.6.7 Qt Vismach\n Use this to build/add OpenGl simulated machines.\n@@ -51047,15 +51047,15 @@\n For example, you can catch machine on and off messages.\n Note\n The example below shows the two common ways of connecting signals, one of them using lambda.\n lambda is used to strip off or manipulate arguments from the status message before calling the\n function. You can see the difference in the called function signature: The one that uses lambda does\n not accept the status object - lambda did not pass it to the function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1169 / 1290\n \n \u2022 Place these commands into the [INITIALIZE] section of the Python handler file:\n STATUS.connect(\u2019state-on\u2019, self.on_state_on)\n STATUS.connect(\u2019state-off\u2019, lambda: w, self.on_state_off())\n \n@@ -51100,15 +51100,15 @@\n GET_JOG_FROM_NAME = {\u2019X\u2019:0,\u2019Y\u2019:1,\u2019Z\u2019:2}\n NO_HOME_REQUIRED = False\n HOME_ALL_FLAG\n JOINT_TYPE = self.INI.find(section, \u201dTYPE\u201d) or \u201dLINEAR\u201d\n JOINT_SEQUENCE_LIST\n JOINT_SYNC_LIST\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1170 / 1290\n \n JOG_INCREMENTS = None\n ANGULAR_INCREMENTS = None\n GRID_INCREMENTS\n DEFAULT_LINEAR_JOG_VEL = 15 units per minute\n@@ -51152,15 +51152,15 @@\n \n 12.8.2.4 Helpers\n There are some helper functions - mostly used for widget support:\n \n get_error_safe_setting(_self_, _heading_, _detail_, default=_None_) , convert_metric_to_mac\n Get filter extensions in Qt format.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1171 / 1290\n \n 12.8.2.5 Usage\n \u2022 Import Info module\n Add this Python code to your import section:\n ############################\n@@ -51195,15 +51195,15 @@\n # **** IMPORT SECTION **** #\n ############################\n from qtvcp.core import Action\n \n \u2022 Instantiate Action module\n Add this Python code to your instantiate section:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n ACTION = Action()\n \n \u2022 Access ACTION commands\n@@ -51244,15 +51244,15 @@\n ACTION.ZERO_G92_OFFSET()\n ACTION.ZERO_ROTATIONAL_OFFSET()\n ACTION.ZERO_G5X_OFFSET(num)\n ACTION.RECORD_CURRENT_MODE()\n \n 1172 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ACTION.RESTORE_RECORDED_MODE()\n ACTION.SET_SELECTED_AXIS(jointnum)\n ACTION.DO_JOG(jointnum, direction)\n ACTION.JOG(jointnum, direction, rate, distance=0)\n ACTION.TOGGLE_FLOOD()\n ACTION.SET_FLOOD_ON()\n@@ -51291,15 +51291,15 @@\n This library handles tool offset file changes.\n \n Warning\n LinuxCNC doesn\u2019t handle third party manipulation of the tool file well.\n \n 1173 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1174 / 1290\n \n 12.8.4.1 Helpers\n \n GET_TOOL_INFO(_toolnumber_)\n This will return a Python list of information on the requested tool number.\n@@ -51335,15 +51335,15 @@\n LinuxCNC supports tool wear by adding tool wear information into tool entries above 10000.\n Note\n This also requires remap code to add the wear offsets t tool change time.\n \n 12.8.5 Path\n Path module gives reference to important files paths.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.8.5.1 Referenced Paths\n \n PATH.PREFS_FILENAME\n The preference file path.\n PATH.WORKINGDIR\n The directory QtVCP was launched from.\n@@ -51382,15 +51382,15 @@\n PATH.PLUGIN\n The QtVCP widget plugin folder.\n PATH.VISMACHDIR\n Directory where prebuilt Vismach files are found.\n \n 1175 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1176 / 1290\n \n Not currently used:\n PATH.LOCALEDIR\n Locale translation folder.\n PATH.DOMAIN\n@@ -51424,15 +51424,15 @@\n \u2022 Import VCPWindow module\n Add this Python code to your import section:\n ############################\n # **** IMPORT SECTION **** #\n ############################\n from qtvcp.qt_makegui import VCPWindow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1177 / 1290\n \n \u2022 Instantiate VCPWindow module+ Add this Python code to your instantiate section:\n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n@@ -51471,15 +51471,15 @@\n Load Calibration program:\n AUX_PRGM.load_calibration()\n \n keyboard_onboard()\n Load onboard/Matchbox keyboard\n AUX_PRGM.keyboard_onboard()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1178 / 1290\n \n 12.8.7.2 Usage\n \u2022 Import Aux_program_loader module\n Add this Python code to your import section:\n ############################\n@@ -51514,15 +51514,15 @@\n Note\n Keylookup requires code under the processed_key_event function to call KEYBIND.call().\n Most handler files already have this code.\n \n In the handler file, under the initialized function use this general syntax to create keybindings:\n KEYBIND.add_call(\u201dDEFINED_KEY\u201d,\u201dFUNCTION TO CALL\u201d, USER DATA)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Here we add a keybinding for F10, F11 and F12:\n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # at this point:\n # the widgets are instantiated.\n@@ -51572,15 +51572,15 @@\n Qt.Key_Shift: \u201dKey_Shift\u201d,\n Qt.Key_Control: \u201dKey_Control\u201d,\n Qt.Key_Meta: \u201dKey_Meta\u201d,\n # Qt.Key_Alt: \u201dKey_Alt\u201d,\n \n 1179 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Qt.Key_AltGr: \u201dKey_AltGr\u201d,\n Qt.Key_CapsLock: \u201dKey_CapsLock\u201d,\n Qt.Key_NumLock: \u201dKey_NumLock\u201d,\n Qt.Key_ScrollLock: \u201dKey_ScrollLock\u201d,\n Qt.Key_F1: \u201dKey_F1\u201d,\n Qt.Key_F2: \u201dKey_F2\u201d,\n@@ -51639,15 +51639,15 @@\n Qt.Key_Asterisk: \u201dKey_Asterisk\u201d,\n Qt.Key_Plus: \u201dKey_Plus\u201d,\n Qt.Key_Comma: \u201dKey_Comma\u201d,\n Qt.Key_Minus: \u201dKey_Minus\u201d,\n \n 1180 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Qt.Key_Period: \u201dKey_Period\u201d,\n Qt.Key_Slash: \u201dKey_Slash\u201d,\n Qt.Key_0: \u201dKey_0\u201d,\n Qt.Key_1: \u201dKey_1\u201d,\n Qt.Key_2: \u201dKey_2\u201d,\n Qt.Key_3: \u201dKey_3\u201d,\n@@ -51692,15 +51692,15 @@\n _PINNAME\n Basename of the HAL pin(s).\n _TYPE\n Specifies whether it is a:\n \n 1181 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1182 / 1290\n \n \u2022 Status message - shown in the status bar and the notify dialog.\n Requires no user intervention.\n \u2022 OK message - requiring the user to click OK to close the dialog.\n OK messages have two HAL pins:\n@@ -51743,15 +51743,15 @@\n 12.8.10 Notify\n Notify module is used to send messages that are integrated into the desktop.\n It uses the pynotify library.\n Ubuntu/Mint does not follow the standard so you can\u2019t set how long the message stays up for.\n I suggest fixing this with the notify-osd package available from this PPA (DISCONTINUED due to\n move of Ubuntu to Gnome).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1183 / 1290\n \n Notify keeps a list of all the alarm messages since starting in self.alarmpage.\n If you click \u2019Show all messages\u2019 in the notify popup, it will print them to the terminal.\n The ScreenOptions widget can automatically set up the notify system.\n Typically STATUS messages are used to sent notify messages.\n@@ -51784,15 +51784,15 @@\n \u2022 play sounds using the beep library (currently blocks while beeping),\n \u2022 speak words using the espeak library (non blocking while speaking).\n There are default alert sounds using Mint or FreeDesktop default sounds.\n You can play arbitrary sounds or even songs by specifying the path.\n STATUS has messages to control Player module.\n The ScreenOptions widget can automatically set up the audio system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1184 / 1290\n \n 12.8.12.1 Sounds\n Alerts There are default alerts to choose from:\n \u2022 ERROR\n \u2022 READY\n@@ -51826,15 +51826,15 @@\n 12.8.12.3 Example\n To play sounds upon STATUS messages, use these general syntaxes:\n STATUS.emit(\u2019play-alert\u2019,\u2019LOGOUT\u2019)\n STATUS.emit(\u2019play-alert\u2019,\u2019BEEP\u2019)\n STATUS.emit(\u2019play-alert\u2019,\u2019SPEAK This is a test screen for Q t V C P\u2019)\n STATUS.emit(\u2019play-sound\u2019, \u2019PATH TO SOUND\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1185 / 1290\n \n 12.8.13 Virtual Keyboard\n This library allows you to use STATUS messages to launch a virtual keyboard.\n It uses Onboard or Matchbox libraries for the keyboard.\n \n@@ -51861,15 +51861,15 @@\n # **** instantiate libraries section **** #\n ###########################################\n TOOLBAR = ToolBarActions()\n \n 12.8.14.4 Examples\n \u2022 Assigning Tool Actions To Toolbar Buttons\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1186 / 1290\n \n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # At this point:\n@@ -51910,15 +51910,15 @@\n Some require HAL pins to be connected for movement.\n From a terminal (pick one):\n qtvcp vismach_mill_xyz\n qtvcp vismach_scara\n qtvcp vismach_millturn\n qtvcp vismach_5axis_gantry\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1187 / 1290\n \n 12.8.15.2 Primitives Library\n Provides the basic building blocks of a simulated machine.\n Collection\n A collection is an object of individual machine parts.\n@@ -51958,15 +51958,15 @@\n \n Track\n Move and rotate an object to point from one capture() \u2019d coordinate system to another.\n Base object to hold coordinates for primitive shapes.\n CylinderX, CylinderY, CylinderZ\n Build a cylinder on the X, Y or Z axis by giving endpoint (X, Y, or Z) and radii coordinates.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1188 / 1290\n \n Sphere\n Build a sphere from center and radius coordinates.\n \n TriangleXY, TriangleXZ, TriangleYZ\n@@ -52005,15 +52005,15 @@\n # **** IMPORT SECTION **** #\n ############################\n import mill_xyz as MILL\n \n Instantiate and use the simulation widget Instantiate the simulation widget and add it to the\n screen\u2019s main layout:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1189 / 1290\n \n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # At this point:\n@@ -52032,30 +52032,30 @@\n Vismach is a set of Python functions that can be used to create and animate models of machines.\n This chapter is about the Qt embedded version of Vismach, also see: https://sa-cnc.com/linuxcncvismach/ .\n \n 12.9.1 Introduction\n Vismach displays the model in a 3D viewport and the model parts are animated as the values of\n associated HAL pins change.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1190 / 1290\n \n Figure 12.107: QtVismach 3D Viewport\n The Vismach 3D viewport view can be manipulated as follows:\n \u2022 zoom by scroll wheel\n \u2022 pan by middle button drag\n \u2022 rotate by right-button drag\n \u2022 tilt by left button drag\n A Vismach model takes the form of a Python script and can use standard Python syntax.\n This means that there is more than one way to lay out the script, but in the examples given in this\n document the simplest and most basic of them will be used.\n The basic sequence in creating the Vismach model is:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1191 / 1290\n \n 1. Create the parts\n 2. Define how they move\n 3. Assemble into movement groups\n \n@@ -52124,15 +52124,15 @@\n |\n |---tool\n |\n |---tooltip\n |\n |---(tool cylinder function)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1192 / 1290\n \n As you can see, the lowest parts must exist first before those can be grouped with others into an\n assembly. So you build upwards from lowest point in tree and assemble them together.\n The same is applicable for any design of machine: look at the machine arm example and you will see\n that it starts with the tip and adds to the larger part of the arm, then it finally groups with the base.\n@@ -52169,15 +52169,15 @@\n part = AsciiOBJ(data=\u201dv 0.123 0.234 0.345 1.0 ...\u201d)\n \n \u2022 STL model parts are added to the Vismach space in the same locations as they were created in the\n STL or OBJ space, i.e. ideally with a rotational point at their origin.\n Note\n It is much easier to move while building if the origin of the model is at a rotational pivot point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1193 / 1290\n \n 12.9.5.2 Build from Geometric Primitives\n Alternatively parts can be created inside the model script from a range of shape primitives.\n Many shapes are created at the origin and need to be moved to the required location after creation.\n \n@@ -52212,15 +52212,15 @@\n 12.9.6.1 Translating Model parts\n part1 = Translate([part1], x, y, z)\n Move part1 the specified distances in x, y and z.\n 12.9.6.2 Rotating Model Parts\n part1 = Rotate([part1], theta, x, y, z)\n Rotate the part by angle theta [degrees] about an axis between the origin and x, y, z.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1194 / 1290\n \n 12.9.7 Animating Parts\n To animate the model controlled by the values of HAL pins there are four functions: HalTranslate,\n HalRotate, HalToolCylinder and HalToolTriangle.\n For parts to move inside an assembly they need to have their HAL motions defined before being\n@@ -52259,15 +52259,15 @@\n Defines the axis of rotation from the origin the point of coordinates (x,y,z).\n When the part is moved back away from the origin to its correct location, the axis of rotation\n can be considered to remain \u201dembedded\u201d in the part.\n angle_scale\n Rotation angles are in degrees, so for a rotary joint with a 0-1 scaling you would need to use\n an angle scale of 360.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1195 / 1290\n \n 12.9.7.3 HalToolCylinder\n \n tool = HalToolCylinder()\n Make a cylinder to represent a cylindrical mill tool, based on the tool table and current loaded\n@@ -52298,15 +52298,15 @@\n \u2022 Move the head to the spindle or spindle to the head.\n \u2022 Create the draw bar.\n \u2022 Define the motion of the draw bar.\n \u2022 Assemble the three parts into a head assembly.\n \u2022 Define the motion of the head assembly.\n In this example the spindle rotation is indicated by rotation of a set of drive dogs:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1196 / 1290\n \n #Drive dogs\n dogs = Box(-6,-3,94,6,3,100)\n dogs = Color([1,1,1,1],[dogs])\n dogs = HalRotate([dogs],c,\u201dspindle\u201d,360,0,0,1)\n@@ -52348,15 +52348,15 @@\n For example [1,0,0,0.5] for a 50% opacity red.\n myhud = Hud()\n Creates a heads-up display in the Vismach GUI to display items such as axis positions, titles, or\n messages.\n myhud = Hud()\n myhud.show(\u201dMill_XYZ\u201d)\u2018\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1197 / 1290\n \n myhud = HalHud()\n A more advanced version of the Hud that allows HAL pins to be displayed:\n myhud = HalHud()\n myhud.set_background_color(0,.1,.2,0)\n@@ -52398,15 +52398,15 @@\n \n Add it to the Window class Collection so it is never moved from the origin.\n v.model = Collection([origin, model, world])\n \n Start from the cutting tip and work your way back. Add each collection to the model at the origin and\n run the script to confirm the location, then rotate/translate and run the script to confirm again.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.9.11 Basic structure of a QtVismach script\n # imports\n import hal\n from qtvcp.lib.qt_vismach.qt_vismach import *\n # create HAL pins here if needed\n #c = hal.component(\u201dsamplegui\u201d)\n@@ -52449,15 +52449,15 @@\n # if you call this file directly from python3, it will display a PyQt5 window\n # good for confirming the parts of the assembly.\n if __name__ == \u2019__main__\u2019:\n main(model, tooltip, work, size=600, hud=None, lat=-75, lon=215)\n \n 1198 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1199 / 1290\n \n 12.9.12 Builtin Vismach Sample Panels\n QtVCP builtin Vismach Panels\n \n 12.10 QtVCP: Building Custom Widgets\n@@ -52485,15 +52485,15 @@\n \u2022 Injecting important variables,\n \u2022 Calling an extra setup function\n \u2022 Calling a closing cleanup function at shutdown.\n These functions are not called when the Qt Designer editor displays the widgets.\n When QtVCP builds a screen from the .ui file:\n 1. It searches for all the HAL-ified widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1200 / 1290\n \n 2. It finds the ScreenOptions widget, to collect information it needs to inject into the other widgets\n 3. It instantiates each widget and if it is a HAL-ified widget, calls the hal_init() function.\n hal_init() is defined in the base class and it:\n a. Adds variables such as the preference file to every HAL-ified widget.\n@@ -52546,15 +52546,15 @@\n #\n \n 2\n \n y\n 3y\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1201 / 1290\n \n In this case we need access to:\n y\n \n PyQt\u2019s QtWidgets library,\n@@ -52626,15 +52626,15 @@\n #!/usr/bin/env python3\n ###############################\n # Imports\n ###############################\n from PyQt5.QtCore import pyqtProperty\n from qtvcp.widgets.led_widget import LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n from qtvcp.core import Status\n ###########################################\n # **** instantiate libraries section **** #\n ###########################################\n STATUS = Status()\n ##########################################\n@@ -52684,15 +52684,15 @@\n def reset_is_on(self):\n self.is_on = False\n #######################################\n # Qt Designer properties\n \n 1202 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1203 / 1290\n \n #######################################\n invert_state_status = pyqtProperty(bool, get_invert_state, set_invert_state, \u2190reset_invert_state)\n is_estopped_status = pyqtProperty(bool, get_is_estopped, set_is_estopped, \u2190reset_is_estopped)\n is_on_status = pyqtProperty(bool, get_is_on, set_is_on, reset_is_on)\n@@ -52762,15 +52762,15 @@\n self.setState(False)\n self.is_estopped = False\n self.is_on = False\n self.invert_state = False\n \n #\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n y\n \n 1\n \n Defines the name of our custom widget and what other class it inherits from.\n In this case we inherit LED - a QtVCP widget that represents a status light.\n@@ -52831,15 +52831,15 @@\n self.PREFS_\n the instance of an optional preference file\n self.SETTINGS_\n the Qsettings object\n We could use this information to create HAL pins or look up image paths etc.\n STATUS.connect(\u2019state-estop\u2019, lambda w:self._flip_state(True))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1205 / 1290\n \n Lets look at this line more closely:\n \u2022 STATUS is very common theme is widget building.\n STATUS uses GObject message system to send messages to widgets that register to it.\n This line is the registering process.\n@@ -52886,15 +52886,15 @@\n return self.is_on\n def reset_is_on(self):\n self.is_on = False\n \n This is how Qt Designer sets the attributes of the widget.\n This can also be called directly in the widget.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1206 / 1290\n \n #######################################\n # Qt Designer properties\n #######################################\n invert_state_status = pyqtProperty(bool, get_invert_state, set_invert_state, \u2190reset_invert_state)\n@@ -52934,15 +52934,15 @@\n self._last = 0\n self._block_signal = False\n self._auto_label_flag = True\n SettingMenu = QMenu()\n for system in(\u2019G54\u2019, \u2019G55\u2019, \u2019G56\u2019, \u2019G57\u2019, \u2019G58\u2019, \u2019G59\u2019, \u2019G59.1\u2019, \u2019G59.2\u2019, \u2019G59.3\u2019):\n Button = QAction(QIcon(\u2019exit24.png\u2019), system, self)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1207 / 1290\n \n Button.triggered.connect(self[system.replace(\u2019.\u2019,\u2019_\u2019)])\n SettingMenu.addAction(Button)\n self.setMenu(SettingMenu)\n self.dialog = EntryDialog()\n@@ -52985,15 +52985,15 @@\n def ChangeState(self, joint):\n if int(joint) != self._joint:\n self._block_signal = True\n self.setChecked(False)\n self._block_signal = False\n self.hal_pin.set(False)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1208 / 1290\n \n ##############################\n # required class boiler code #\n ##############################\n def __getitem__(self, item):\n@@ -53040,15 +53040,15 @@\n HomeLabel[homed=true] {\n color: green;\n }\n HomeLabel[homed=false] {\n color: red;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.10.6 Use Stylesheets To Change Custom Widget Properties\n class Label(QLabel):\n def __init__(self, parent=None):\n super(Label, self).__init__(parent)\n alternateFont0 = self.font\n # Qproperty getter and setter\n@@ -53093,15 +53093,15 @@\n return Lcnc_GridLayout(parent)\n def name(self):\n return \u201dLcnc_GridLayout\u201d\n def group(self):\n \n 1209 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n return \u201dLinuxCNC - HAL\u201d\n def icon(self):\n return QtGui.QIcon(QtGui.QPixmap(ICON.get_path(\u2019lcnc_gridlayout\u2019)))\n def toolTip(self):\n return \u201dHAL enable/disable GridLayout widget\u201d\n def whatsThis(self):\n@@ -53150,15 +53150,15 @@\n def domXml(self):\n return \u2019\\n\u2019\n def includeFile(self):\n return \u201dqtvcp.widgets.system_tool_button\u201d\n \n 1210 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1211 / 1290\n \n 12.10.7.3 Making a plugin with a MenuEntry dialog box\n It possible to add an entry to the dialog that pops up when you right click the widget in the layout.\n This can do things such as selecting options in a more convenient way.\n This is the plugin used for action buttons.\n@@ -53204,15 +53204,15 @@\n def createWidget(self, parent):\n return ActionButton(parent)\n # This method returns the name of the custom widget class\n def name(self):\n return \u201dActionButton\u201d\n # Returns the name of the group in Qt Designer\u2019s widget box\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n def group(self):\n return \u201dLinuxCNC - Controller\u201d\n # Returns the icon\n def icon(self):\n return QtGui.QIcon(QtGui.QPixmap(ICON.get_path(\u2019actionbutton\u2019)))\n # Returns a tool tip short description\n@@ -53253,15 +53253,15 @@\n self.setWindowTitle(self.tr(\u201dSet Options\u201d))\n def updateWidget(self):\n formWindow = QDesignerFormWindowInterface.findFormWindow(self.widget)\n if formWindow:\n \n 1212 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1213 / 1290\n \n formWindow.cursor().setProperty(\u201destop_action\u201d,\n QtCore.QVariant(self.c_estop.isChecked()))\n self.accept()\n class ActionButtonMenuEntry(QPyDesignerTaskMenuExtension):\n@@ -53300,15 +53300,15 @@\n if self.w.PREFS_:\n # variable name (entry name, default value, type, section name)\n self.int_value = self.w.PREFS_.getpref(\u2019Integer_value\u2019, 75, int, \u2019CUSTOM_FORM_ENTRIES\u2019)\n self.string_value = self.w.PREFS_.getpref(\u2019String_value\u2019, \u2019on\u2019, str, \u2019 \u2190CUSTOM_FORM_ENTRIES\u2019)\n \n Writing preferences at close time In the closing_cleanup__() function, add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1214 / 1290\n \n if self.w.PREFS_:\n # variable name (entry name, variable name, type, section name)\n self.w.PREFS_.putpref(\u2019Integer_value\u2019, self.integer_value, int, \u2019CUSTOM_FORM_ENTRIES\u2019)\n self.w.PREFS_.putpref(\u2019String_value\u2019, self.string_value, str, \u2019CUSTOM_FORM_ENTRIES\u2019)\n@@ -53343,15 +53343,15 @@\n Being able to edit a style on a running screen is convenient.\n Import StyleSheetEditor module in the IMPORT SECTION:\n from qtvcp.widgets.stylesheeteditor import StyleSheetEditor as SSE\n \n Instantiate StyleSheetEditor module in the INSTANTIATE SECTION:\n STYLEEDITOR = SSE()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1215 / 1290\n \n Create a keybinding in the INITIALIZE SECTION: Under the +__init__.(self, halcomp, widgets,\n paths):+ function add:\n KEYBIND.add_call(\u2019Key_F12\u2019,\u2019on_keycall_F12\u2019)\n \n@@ -53395,15 +53395,15 @@\n def return_value(self, w, message):\n num = message.get(\u2019RETURN\u2019)\n id_code = bool(message.get(\u2019ID\u2019) == \u2019FORM__NUMBER\u2019)\n name = bool(message.get(\u2019NAME\u2019) == \u2019ENTRY\u2019)\n if id_code and name and num is not None:\n print(\u2019The {} number from {} was: {}\u2019.format(name, id_code, num))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1216 / 1290\n \n This catches all general messages so it must check the dialog type and id code to confirm it\u2019s our\n dialog. In this case we had requested an ENTRY dialog and our unique id was FORM_NUMBER, so now we\n know the message is for us. ENTRY or CALCULATOR dialogs return a float number.\n \n@@ -53438,15 +53438,15 @@\n Edit the object name, text, and button type for an appropriate action.\n In this example the:\n \u2022 submenu name must be menuRecent,\n \u2022 actions names must be actionAbout, actionQuit, actionMyFunction\n Loads the toolbar_actions library in the IMPORT SECTION\n from qtvcp.lib.toolbar_actions import ToolBarActions\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1217 / 1290\n \n Instantiate ToolBarActions module in the INSTANTIATE LIBRARY SECTION\n TOOLBAR = ToolBarActions()\n \n Configure submenus and actions in the SPECIAL FUNCTIONS SECTION Under the def initialized_\n@@ -53493,15 +53493,15 @@\n if tab in( self.w.tab_auto, self.w.tab_graphics):\n ACTION.RUN(line=0)\n elif tab == self.w.tab_files:\n self.w.filemanager.load()\n elif tab == self.w.tab_mdi:\n self.w.mditouchy.run_command()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1218 / 1290\n \n This function assumes there is a Tab widget, named mainTab, that has tabs with the names tab_auto,\n tab_graphics, tab_filemanager and tab_mdi.\n In this way the cycle start button works differently depending on what tab is shown.\n This is simplified - checking state and error trapping might be helpful.\n@@ -53540,15 +53540,15 @@\n \u2022 Call it btn_toggle_continuous.\n \u2022 Set the AbstractButton property checkable to True.\n \u2022 Set the ActionButton properties incr_imperial_number and incr_mm_number to 0.\n \u2022 Use Qt Designer\u2019s slot editor to use the button signal clicked(bool) to call form\u2019s handler function\n toggle_continuous_clicked().\n See Using Qt Designer To Add Slots section for more information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1219 / 1290\n \n Then add this code snippets to the handler file under the initialized__ function:\n # at this point:\n # the widgets are instantiated.\n # the HAL pins are built but HAL is not set ready\n@@ -53593,15 +53593,15 @@\n We can \u201dclass patch\u201d the library to redirect the function call. In the IMPORT SECTION add:\n from qtvcp.widgets.file_manager import FileManager as FM\n \n Here we are going to:\n 1. Keep a reference to the original function (1) so we can still call it\n 2. Redirect the class to call our custom function (2) in the handler file instead.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1220 / 1290\n \n ##########################################\n # Special Functions called from QtVCP\n #\n ##########################################\n@@ -53647,15 +53647,15 @@\n #####################\n # GENERAL FUNCTIONS #\n #####################\n def our_load(self,fname):\n print(fname)\n self.w.filemanager.super__load(fname)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1221 / 1290\n \n 12.11.11 Adding Widgets Programmatically\n In some situation it is only possible to add widgets with Python code rather then using the Qt\n Designer editor.\n When adding QtVCP widgets programmatically, sometimes there are extra steps to be taken.\n@@ -53697,15 +53697,15 @@\n def __init__(self,halcomp,widgets,paths):\n self.hal = halcomp\n self.w = widgets\n self.PATHS = paths\n STATUS.connect(\u2019actual-spindle-speed-changed\u2019, \\\n lambda w,speed: self.update_spindle(speed))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1222 / 1290\n \n Add the widgets to the tab We need to make sure the Qt Designer widgets are already built before\n we try to add to them. For this, we add a call to self.make_corner_widgets() function to build our\n extra widgets at the right time, i.e. under the initialized__() function:\n ##########################################\n@@ -53810,15 +53810,15 @@\n 4\n \n This sets it as green when on.\n This is the extra function call required with some QtVCP widgets.\n If HAL_NAME is omitted it will use the widget\u2019s objectName if there is one.\n It gives the special widgets reference to:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1223 / 1290\n \n self.HAL_GCOMP\n the HAL component instance\n self.HAL_NAME\n This widget\u2019s name as a string\n@@ -53911,15 +53911,15 @@\n 12.11.12 Update/Read Objects Periodically\n Sometimes you need to update a widget or read a value regularly that isn\u2019t covered by normal\n libraries.\n Here we update an LED based on a watched HAL pin every 100 ms.\n We assume there is an LED named led in the Qt Designer UI file.\n Load the Qhal library for access to QtVCP\u2019s HAL component In the IMPORT SECTION add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1224 / 1290\n \n from qtvcp.core import Qhal\n \n Instantiate Qhal In the INSTANTIATE LIBRARY SECTION add:\n QHAL = Qhal()\n@@ -53961,15 +53961,15 @@\n ########################\n # widgets allows access to widgets from the QtVCP files\n # at this point the widgets and hal pins are not instantiated\n def __init__(self,halcomp,widgets,paths):\n # directly select ZMQ message receiving\n self.w.screen_options.setProperty(\u2019use_receive_zmq_option\u2019,True)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1225 / 1290\n \n This allows an external program to call functions in the handler file.\n Add a function to be called on ZMQ message reception Let\u2019s add a specific function for testing.\n You will need to run LinuxCNC from a terminal to see the printed text.\n #####################\n@@ -54028,15 +54028,15 @@\n \n 1\n \n You will need to know the signature of the function you wish to call. Also note that the message is\n converted to a JSON object. This is because ZMQ sends byte messages not Python objects. json\n converts Python objects to bytes and will be converted back when received.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1226 / 1290\n \n 12.11.13.2 ZMQ Messages Writing\n You may also want to communicate with an external program from the screen.\n In the ScreenOptions widget, you can select the property use_send_zmq_message. You can also set\n this property directly in the handler file, as in this sample.\n@@ -54080,15 +54080,15 @@\n topic, message = sock.recv_multipart()\n print(\u2019{} sent message:{}\u2019.format(topic,json.loads(message)))\n \n 12.11.14 Sending Messages To Status Bar Or Desktop Notify Dialogs\n There are several ways to report information to the user.\n A status bar is used for short information to show the user.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1227 / 1290\n \n Note\n Not all screens have a status bar.\n \n Status bar usage example\n@@ -54129,15 +54129,15 @@\n #####################\n # general functions #\n #####################\n def focusInChanged(self, widget):\n if isinstance(widget.parent(),type(self.w.gcode_editor.editor)):\n print(\u2019G-code Editor\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1228 / 1290\n \n elif isinstance(widget,type(self.w.gcodegraphics)):\n print(\u2019G-code Display\u2019)\n elif isinstance(widget.parent(),type(self.w.mdihistory) ):\n print(\u2019MDI History\u2019)\n@@ -54180,15 +54180,15 @@\n # if the -o option has \u2019camnumber=\u2019 in it, assume it\u2019s the camera number \u2190to use\n elif \u2019camnumber=\u2019 in self.w.USEROPTIONS_[num]:\n try:\n number = int(self.w.USEROPTIONS_[num].strip(\u2019camnumber=\u2019))\n except Exception as e:\n #\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1229 / 1290\n \n print(\u2019Error with cam_align camera selection - not a number - using \u21900\u2019)\n # set the camera number either as default or if -o option changed the \u2019number\u2019\n variable, to that number.\n self.w.camview._camNum = number\n@@ -54220,15 +54220,15 @@\n \u2022 the .ui file,\n \u2022 the handler file, and\n \u2022 possibly the .qss theme file.\n \n 12.12.3 QtVCP Startup To Shutdown\n QtVCP source is located in +src/emc/usr_intf/qtvcp+ folder of LinuxCNC source tree.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1230 / 1290\n \n 12.12.3.1 QtVCP Startup\n When QtVCP first starts:\n 1. It must decide if this object is a screen or a panel.\n 2. It searches for and collects information about paths of required files and useful folders.\n@@ -54262,15 +54262,15 @@\n CONFIGPATH\n Path of the launched configuration\n BASEDIR\n General path, used to derive all paths\n BASENAME\n Generic name used to derive all paths\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1231 / 1290\n \n LIBDIR\n Path of QtVCP\u2019s Python library\n HANDLER\n Path of handler file\n@@ -54307,15 +54307,15 @@\n Warning\n Keybinding is always a difficult-to-get-right-in-all-cases affair.\n \n Custom keybinding functions are to be defined in the handler file.\n Most importantly widgets that require regular key input and not jogging, should be checked for in the\n processed_key_event__ function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1232 / 1290\n \n 12.12.5.4 Preference File\n Some QtVCP widgets use the preference file to record important information.\n This requires the preference file to be set up early in the widget initialization process.\n The easiest way to do this is to use the ScreenOptions widget.\n@@ -54346,15 +54346,15 @@\n By default, if there is a preference file, the dialogs will remember their last size/placement.\n It is possible to override this so they open in the same location each time.\n 12.12.5.7 Styles (Themes)\n While it is possible to set styles in Qt Designer, it is more convenient to change them later if they are\n all set in a separate .qss file.\n The file should be put in the same location as the handler file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1233 / 1290\n \n Chapter 13\n \n User Interface Programming\n 13.1 Panelui\n@@ -54384,15 +54384,15 @@\n loadrt sampler cfg=u depth=1025\n #uncomment to validate the panelui INI file\n #loadusr pyui\n # -d = debug, -v = verbose debug\n # -d will show you keypress identification and commands called\n # -v is for develeper info\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1234 / 1290\n \n loadusr -W panelui -d\n # using simulated buttons instead of the MESA 7I73 card\n # so we load the sim_matrix_kb component to convert HAL pins to keyscan codes\n loadrt sim_matrix_kb\n@@ -54433,15 +54433,15 @@\n This allows one to change the prefix of the HAL pins from panelui to an arbitrary name.\n ZMQ Messaging Setup\n [ZMQ_SETUP]\n TOPIC = \u2019QTVCP\u2019\n SOCKET = \u2019tcp://127.0.0.1:5690\u2019\n ENABLE = True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1235 / 1290\n \n This sets up and enables ZMQ based messaging. TOPIC and SOCKET must match the listening program.\n Radio Buttons Radiobutons allow only one button in the group to be active at a time. Each group\n has its own output pin, separate from each button in the group. Radio button definitions start with\n the text RADIO_BUTTON inside single brackets.\n@@ -54495,15 +54495,15 @@\n \n Toggle Buttons Togglebuttons only change state on each press of the button. Toggle button definitions start with the text TOGGLE_BUTTON inside single brackets.\n [TOGGLE_BUTTONS]\n # Each button name inside double brackets, must be unique and is case sensitive.\n # This button, named \u2019tool_change\u2019is controller by the row 2 column 5 key.\n # It has a BIT output, will output 1 on true state and 0 on false state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1236 / 1290\n \n # It also has a status pin which will follow its current state.\n # DEFAULT sets this to true when first initialized.\n # The _COMMAND are not used since OUTPUT is not set to COMMAND but validation will\n # add the lines regardless\n@@ -54547,15 +54547,15 @@\n \u2022 required argument: axis number (int)\n spindle_forward_adjust\n \u2022 optional argument: starting RPM (int) - default 100\n \u2022 Description: If the spindle is stopped it will start in the forward direction. If it is already running it\n will increase or decrease the rpm depending on what direction the spindle is running in.\n spindle_forward\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1237 / 1290\n \n \u2022 optional argument: starting RPM (int) - default 100\n spindle_reverse\n \u2022 optional argument: starting RPM (int) - default 100\n spindle_reverse_adjust\n@@ -54581,15 +54581,15 @@\n \u2022 Description: Move Z axis to the given machine position\n feed_hold\n \u2022 required argument: state (bool 0 or 1)\n feed_override\n \u2022 required argument: rate (float)\n rapid_override\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \u2022 required argument: rate (float 0-1)\n spindle_override\n \u2022 required argument: rate (float)\n max_velocity\n \u2022 required argument: rate (float)\n optional_stop\n@@ -54621,15 +54621,15 @@\n STATUS_PIN = False\n DEFAULT = FALSE\n TRUE_STATE = 1\n FALSE_STATE = 0\n \n 1238 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1239 / 1290\n \n Here is a sample program that will receive the message and print it to the terminal.\n import zmq\n import json\n # ZeroMQ Context\n@@ -54673,15 +54673,15 @@\n # print the argument(s)\n print(wname.metadata)\n # Print the calling widgets internal metadata (from config \u2190file)\n # Call a mdi command to print a msg in LinuxCNC.\n # This requires LinuxCNC to be homed, but does not check for that.\n # parent commands expect a widget_instance - None is substituted\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1240 / 1290\n \n self.parent.mdi(None,\u2019(MSG, Hello Linuxcnc World!)\u2019)\n # Each call to this function will cycle the mode of LinuxCNC.\n def cycle_mode(self, wname, m):\n if self.current_mode == 0:\n@@ -54719,15 +54719,15 @@\n \u2022 establish connections to the command, status and error NML channels as needed\n \u2022 poll the status channel, either periodically or as needed\n \u2022 before sending a command, determine from status whether it is in fact OK to do so (for instance,\n there is no point in sending a Run command if task is in the ESTOP state, or the interpreter is not\n idle)\n \u2022 send the command by using one of the linuxcnc command channel methods\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1241 / 1290\n \n To retrieve messages from the error channel, poll the error channel periodically, and process any\n messages retrieved.\n \u2022 poll the status channel, either periodically or as needed\n \u2022 print any error message and explore the exception code\n@@ -54765,15 +54765,15 @@\n angular_units\n (returns float) - machine angular units per deg, reflects [TRAJ]ANGULAR_UNITS INI value.\n aout\n (returns tuple of floats) - current value of the analog output pins.\n axes\n (returns integer) - number of axes. Derived from [TRAJ]COORDINATES INI value.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1242 / 1290\n \n axis\n (returns tuple of dicts) - reflecting current axis values. See The axis dictionary.\n axis_mask\n (returns integer) - mask of axis available as defined by [TRAJ]COORDINATES in the INI file.\n@@ -54815,15 +54815,15 @@\n exec_state\n (returns integer) - task execution state. One of EXEC_ERROR, EXEC_DONE, EXEC_WAITING_FOR_MO\n EXEC_WAITING_FOR_MOTION_QUEUE, EXEC_WAITING_FOR_IO, EXEC_WAITING_FOR_MOTION_A\n EXEC_WAITING_FOR_DELAY, EXEC_WAITING_FOR_SYSTEM_CMD, EXEC_WAITING_FOR_SPINDLE_\n feed_hold_enabled\n (returns boolean) - enable flag for feed hold.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1243 / 1290\n \n feed_override_enabled\n (returns boolean) - enable flag for feed override.\n feedrate\n (returns float) - current feedrate override, 1.0 = 100%.\n@@ -54865,15 +54865,15 @@\n joint\n (returns tuple of dicts) - reflecting current joint values. See The joint dictionary.\n joint_actual_position\n (returns tuple of floats) - actual joint positions.\n joint_position\n (returns tuple of floats) - Desired joint positions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1244 / 1290\n \n joints\n (returns integer) - number of joints. Reflects [KINS]JOINTS INI value.\n kinematics_type\n (returns integer) - The type of kinematics. One of:\n@@ -54915,15 +54915,15 @@\n \u2022 MOTION_TYPE_TOOLCHANGE\n \u2022 MOTION_TYPE_PROBING\n \u2022 MOTION_TYPE_INDEXROTARY\n \u2022 Or 0 if no motion is currently taking place.\n optional_stop\n (returns integer) - option stop flag.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1245 / 1290\n \n paused\n (returns boolean) - motion paused flag.\n pocket_prepped\n (returns integer) - A Tx command completed, and this pocket is prepared. -1 if no prepared\n@@ -54964,15 +54964,15 @@\n state\n (returns integer) - current command execution status. One of RCS_DONE, RCS_EXEC, RCS_ERROR.\n task_mode\n (returns integer) - current task mode. one of MODE_MDI, MODE_AUTO, MODE_MANUAL.\n task_paused\n (returns integer) - task paused flag.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1246 / 1290\n \n task_state\n (returns integer) - current task state. one of STATE_ESTOP, STATE_ESTOP_RESET, STATE_ON,\n STATE_OFF.\n tool_in_spindle\n@@ -55011,15 +55011,15 @@\n 13.2.3.3 The joint dictionary\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*import linuxcnc\n s = linuxcnc.stat()\n s.poll()\n print(\u201dJoint 1 homed: \u201d, s.joint[1][\u201dhomed\u201d])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1247 / 1290\n \n For each joint, the following dictionary keys are available:\n backlash\n (returns float) - Backlash in machine units. configuration parameter, reflects [JOINT_n]BACKLASH.\n enabled\n@@ -55056,15 +55056,15 @@\n min_position_limit\n (returns float) - minimum limit (soft limit) for joint motion, in machine units. configuration parameter, reflects [JOINT_n]MIN_LIMIT.\n min_soft_limit\n (returns integer) - non-zero means min_position_limit was exceeded.\n output\n (returns float) - commanded output position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1248 / 1290\n \n override_limits\n (returns integer) - non-zero means limits are overridden.\n units\n (returns float) - joint units per mm, or per degree for angular joints.\n@@ -55102,15 +55102,15 @@\n Other commands may be sent only in appropriate state, and those tests can be a bit tricky. For\n instance, an MDI command can be sent only if:\n \u2022 ESTOP has not been triggered, and\n \u2022 the machine is turned on and\n \u2022 the axes are homed and\n \u2022 the interpreter is not running and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1249 / 1290\n \n \u2022 the mode is set to MDI mode\n so an appropriate test before sending an MDI command through linuxcnc.command.mdi() could be:\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*import linuxcnc\n@@ -55151,15 +55151,15 @@\n c.mode(linuxcnc.MODE_MDI)\n c.mode(linuxcnc.MODE_AUTO)\n \n jjogmode, joint_num_or_axis_index)\n jjogmode, joint_num_or_axis_index, velocity)\n jjogmode, joint_num_or_axis_index, velocity, increment)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1250 / 1290\n \n c.mode(linuxcnc.MODE_MANUAL)\n c.override_limits()\n c.program_open(\u201dfoo.ngc\u201d)\n c.reset_interpreter()\n@@ -55196,15 +55196,15 @@\n Constants\n FLOOD_ON\n FLOOD_OFF\n home(int)\n home a given joint.\n jog(command-constant, bool, int[, float[, float]])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1251 / 1290\n \n Syntax\n jog(command, jjogmode, joint_num_or_axis_index, velocity[, distance])\n jog(linuxcnc.JOG_STOP, jjogmode, joint_num_or_axis_index)\n jog(linuxcnc.JOG_CONTINUOUS, jjogmode, joint_num_or_axis_index, velocity)\n@@ -55247,15 +55247,15 @@\n program_open(string)\n open an NGC file.\n rapidrate()\n set rapid override factor\n reset_interpreter()\n reset the RS274NGC interpreter\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1252 / 1290\n \n set_adaptive_feed(int)\n set adaptive feed flag\n set_analog_output(int, float)\n set analog output pin to value\n@@ -55293,15 +55293,15 @@\n # Increase speed of spindle 0 by 100rpm. Spindle must be on first.\n c.spindle(linuxcnc.INCREASE)\n # Increase speed of spindle 2 by 100rpm. Spindle must be on first.\n c.spindle(linuxcnc.SPINDLE_INCREASE, 2)\n # Set speed of spindle 0 to 1024 rpm.\n c.spindle.(linuxcnc.SPINDLE_FORWARD, 1024)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1253 / 1290\n \n # Set speed of spindle 1 to -666 rpm.\n c.spindle.(linuxcnc.SPINDLE_REVERSE, 666, 1)\n # Stop spindle 0.\n c.spindle.(linuxcnc.SPINDLE_OFF)\n@@ -55342,15 +55342,15 @@\n kind, text = error\n if kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR):\n typus = \u201derror\u201d\n else:\n typus = \u201dinfo\u201d\n print(typus, text)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 13.2.7 Reading INI file values\n Here\u2019s an example for reading values from an INI file through the linuxcnc.ini object:\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*# run as:\n # python3 ini-example.py ~/emc2-dev/configs/sim/axis/axis_mm.ini\n import sys\n@@ -55384,15 +55384,15 @@\n 13.2.8.1 members\n \n npts\n number of points.\n \n 1254 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1255 / 1290\n \n 13.2.8.2 methods\n \n start(float)\n start the position logger and run every ARG seconds\n@@ -55428,15 +55428,15 @@\n newpin\n + Create new pin.\n Arguments: pin name suffix, pin type, and pin direction. For parameters, the arguments are:\n parameter name suffix, parameter type, and parameter direction.\n .Example:\n h.newpin(\u201din\u201d, hal.HAL_FLOAT, hal.HAL_IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1256 / 1290\n \n ready\n Tells the HAL system the component is initialized. Locks out adding pins.\n unready\n Allows a component to add pins after ready() has been called. One should call ready() on the\n@@ -55469,15 +55469,15 @@\n Read a pin, param, or signal directly.\n Example\n value = hal.get_value(\u201diocontrol.0.emc-enable-in\u201d)\n \n get_info_pins()\n Returns a list of dicts of all system pins.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n listOfDicts = hal.get_info_pins()\n pinName1 = listOfDicts[0].get(\u2019NAME\u2019)\n pinValue1 = listOfDicts[0].get(\u2019VALUE\u2019)\n pinType1 = listOfDicts[0].get(\u2019TYPE\u2019)\n pinDirection1 = listOfDicts[0].get(\u2019DIRECTION\u2019)\n \n@@ -55513,15 +55513,15 @@\n get_type\n Get the HAL object\u2019s type.\n Returns an integer.\n h.in.get_type()\n \n 1257 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1258 / 1290\n \n get_dir\n Get the HAL object direction type.\n Returns an integer.\n h.in.get_dir()\n@@ -55555,15 +55555,15 @@\n GStat is a Python class used to send messages from LinuxCNC to other Python programs. It uses\n GObject to deliver messages, making it easy to listen for specific information. This is referred to\n as event-driven programming, which is more efficient then every program polling LinuxCNC at the\n same time. GladeVCP, Gscreen, Gmoccapy and QtVCP use GStat extensively. GStat is in the hal_glib\n module.\n Overview\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1259 / 1290\n \n \u2022 First, a program imports the hal_glib module and instantiates GStat.\n \u2022 Then it connects to the messages it wishes to monitor.\n \u2022 GStat checks LinuxCNC\u2019s status every 100 ms and if there are differences from the last check, it\n will send a callback message to all the connected programs with the current status.\n@@ -55601,15 +55601,15 @@\n h.newpin(\u201dg21\u201d, hal.HAL_BIT, hal.HAL_OUT)\n h.ready()\n # connect a GSTAT message to a callback function\n GSTAT.connect(\u201dmetric-mode-changed\u201d,mode_changed)\n # force GSTAT to initialize states\n GSTAT.forced_update()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1260 / 1290\n \n # loop till exit\n try:\n GLib.MainLoop().run()\n except KeyboardInterrupt:\n@@ -55646,15 +55646,15 @@\n def get_handlers(halcomp,builder,useropts):\n return [HandlerClass(halcomp,builder,useropts)]\n \n 13.4.2.3 QtVCP Python extension code pattern\n QtVCP extends GStat, so must be loaded differently but all the messages are available in QtVCP.\n This handler file assumes there are three QLabels named:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1261 / 1290\n \n \u2022 state_label\n \u2022 e_state_label\n \u2022 interp_state_label\n #!/usr/bin/env python3\n@@ -55691,15 +55691,15 @@\n state-off\n (returns nothing) - Sent when LinuxCNC is in machine off state.\n homed\n (returns string) - Sent as each joint is homed.\n all-homed\n (returns nothing) - Sent when all defined joints are homed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1262 / 1290\n \n not-all-homed\n (returns string) - Sends a list of joints not currently homed.\n override_limits_changed\n (returns string) - Sent if LinuxCNC has been directed to override its limits.\n@@ -55740,15 +55740,15 @@\n It is expected to be in the machine\u2019s native units regardless of the current unit mode .\n jogincrement-changed\n (returns float, text) - Sent when jog increment has changed.\n LinuxCNC does not have an internal jog increment.\n This is GStat\u2019s internal jog increment.\n It is expected to be in the machine\u2019s native units regardless of the current unit mode .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1263 / 1290\n \n jogincrement-angular-changed\n (returns float, text) - Sent when angular jog increment has changed.\n LinuxCNC does not have an internal angular jog increment.\n This is GStat\u2019s internal angular jog increment.\n@@ -55789,15 +55789,15 @@\n current-z-rotation\n (returns float) - Sent as the current rotatated angle around the Z axis changes\n requested-spindle-speed-changed\n (returns float) - Sent when the current requested RPM changes\n actual-spindle-speed-changed\n (returns float) - Sent when the actual RPM changes based on the HAL pin spindle.0.speed-in.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n spindle-override-changed\n (returns float) - Sent when the spindle override value changes\n in percent\n feed-override-changed\n (returns float) - Sent when the feed override value changes\n in percent\n@@ -55839,15 +55839,15 @@\n g-code-changed\n (returns string) - Sent when active G-code change\n metric-mode-changed\n (returns bool) - Sent when G21 status changes\n \n 1264 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1265 / 1290\n \n user-system-changed\n (returns string) - Sent when the reference coordinate system (G5x) changes\n mdi-line-selected\n (returns string, string) - intended to be sent when an MDI line is selected by user.\n@@ -55892,15 +55892,15 @@\n This depends on the widget/libraries used.\n mdi-history-changed\n (returns None) - intended to be sent when an MDI history needs to be reloaded.\n This depends on the widget/libraries used.\n \n for a\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1266 / 1290\n \n machine-log-changed\n (returns None) - intended to be sent when machine log has changed.\n This depends on the widget/libraries used.\n update-machine-log\n@@ -55944,15 +55944,15 @@\n integer represents the kind of error. ERROR, TEXT or DISPLAY\n string is the actual error message.\n This depends on the widget/libraries used.\n general\n (returns Python dict) - intended to be sent when message must be sent that is not covered by a\n more specific message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1267 / 1290\n \n General message should be used a sparsely as reasonable because all object connected to it will\n have to parse it.\n It uses a Python dict for communication.\n The dict should include and be checked for a unique id keyname pair:\n@@ -55986,15 +55986,15 @@\n (None) set_jog_increments\n (float, string) get_jog_increments\n (None) is_all_homed\n (nothing) - This will return the current state of all_homed (BOOL).\n machine_is_on\n (nothing) - This will return the current state of machine (BOOL).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1268 / 1290\n \n estop_is_clear\n (nothing) - This will return the state of Estop (BOOL)\n set_tool_touchoff\n (tool,axis,value) - This command will\n@@ -56033,15 +56033,15 @@\n joint-selection-changed message.\n get_selected_joint\n (None) - returns integer representing the internal selected joint number.\n set_selected_axis\n (string) - records the selected axis letter internally.\n Requests the axis to be selected by emitting the axis-selection-changed message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1269 / 1290\n \n get_selected_axis\n (None) - returns string representing the internal selected axis letter.\n is_man_mode\n (None) is_mdi_mode\n@@ -56061,30 +56061,30 @@\n state-tags branch.\n \n 13.5 Vismach\n Vismach is a set of Python functions that can be used to create and animate models of machines.\n Vismach displays the model in a 3D viewport and the model parts are animated as the values of\n associated HAL pins change.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1270 / 1290\n \n The Vismach viewport view can be manipulated as follows:\n \u2022 zoom by scroll wheel or right button drag,\n \u2022 pan by left button drag,\n \u2022 rotate by middle-button drag or shift-drag.\n A Vismach model takes the form of a Python script and can use standard Python syntax. This means\n that there is more than one way to lay out the script, but in the examples given in this document I will\n use the simplest and most basic of them.\n The basic sequence in creating the Vismach model is\n \u2022 Create the HAL pins that control the motion.\n \u2022 Create the parts.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1271 / 1290\n \n \u2022 Define how they move.\n \u2022 Assemble into movement groups.\n \n 13.5.1 Start the script\n@@ -56124,15 +56124,15 @@\n \u2022 cylinder = CylinderX(x1, r1, x2, r2) + cylinder = CylinderY(y1, r1, y2, r2) + cylinder\n = CylinderZ(z1, r1, z2, r2)\n Creates a (optionally tapered) cylinder on the given axis with the given radii at the given points on\n the axis.\n \u2022 sphere = Sphere(x, y, z, r)\n Creates a sphere of radius r at (x,y,z)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1272 / 1290\n \n \u2022 triangle = TriangleXY(x1, y1, x2, y2, x3, y3, z1, z2) + triangle = TriangleXZ(x1, z1,\n x2, z2, x3, z3, y1, y2) + triangle = TriangleYZ(y1, z1, y2, z2, y3, z3, x1, x2)\n Creates a triangular plate between planes defined by the last two values parallel to the specified\n plane, with vertices given by the three coordinate pairs.\n@@ -56170,15 +56170,15 @@\n The function arguments are:\n \u2013 first a collection/part which can be pre-created earlier in the script, or could be created at this\n point if preferred eg part1 = HalTranslate([Box(....)], ...).\n \u2013 The HAL component is the next argument, ie the object returned by the comp = hal.component(...)\n command. After that is the name of the HAL in that will animate the motion, this needs to match\n an existing HAL pin that is part of the HAL component created earlier in the script.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1273 / 1290\n \n \u2013 Then follow the X, Y, Z scales.\n For a Cartesian machine created at 1:1 scale this would typically be 1,0,0 for a motion in the\n positive X direction.\n However if the STL file happened to be in cm and the machine was in inches, this could be fixed\n@@ -56219,15 +56219,15 @@\n head = AsciiSTL(filename=\u201d./head.stl\u201d)\n head = Color([0.3,0.3,0.3,1],[head])\n head = Translate([head],0,0,4)\n head = Collection([head, tool, dogs, draw])\n head = HalTranslate([head],c,\u201dZ\u201d,0,0,0.1)\n # base\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1274 / 1290\n \n base = AsciiSTL(filename=\u201d./base.stl\u201d)\n base = Color([0.5,0.5,0.5,1],[base])\n # mount head on it\n base = Collection([head, base])\n@@ -56268,15 +56268,15 @@\n import hal\n #create the HAL component and pins\n comp = hal.component(\u201dcompname\u201d)\n comp.newpin(\u201dpin_name\u201d, hal.HAL_FLOAT, hal.HAL_IN)\n ...\n #create the floor, tool and work\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n floor = Box(-50, -50, -3, 50, 50, 0)\n work = Capture()\n tooltip = Capture()\n ...\n #Build and assemble the model\n part1 = Collection([Box(-6,-3,94,6,3,100)])\n@@ -56287,23 +56287,23 @@\n #create a top-level model\n model = Collection([base, saddle, head, carousel])\n #Start the visualization\n main(model, tooltip, work, 100, lat=-75, lon=215)\n \n 1275 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1276 / 1290\n \n Part III\n \n Glossary, Copyright & History\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1277 / 1290\n \n Chapter 14\n \n Overleaf\n \n@@ -56323,15 +56323,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1278 / 1290\n \n Chapter 15\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -56365,15 +56365,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1279 / 1290\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -56418,15 +56418,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1280 / 1290\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -56469,15 +56469,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1281 / 1290\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -56521,15 +56521,15 @@\n Rapid\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum speed of the machine. It is often desirable to limit the rapid rate when testing a G-code\n program for the first time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1282 / 1290\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -56571,28 +56571,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1283 / 1290\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1284 / 1290\n \n Chapter 16\n \n Copyright\n 16.1 Legal Section\n@@ -56620,15 +56620,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1285 / 1290\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any\n such manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -56677,15 +56677,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front\n cover must present the full title with all words of the title equally prominent and visible. You may add\n other material on the covers in addition. Copying with changes limited to the covers, as long as they\n preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying\n in other respects.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1286 / 1290\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access\n@@ -56731,15 +56731,15 @@\n Version. N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any\n Invariant Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1287 / 1290\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -56780,15 +56780,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1288 / 1290\n \n this License provided that you also include the original English version of this License. In case of a\n disagreement between the translation and the original English version of this License, the original\n English version will prevail.\n 9. TERMINATION\n@@ -56816,15 +56816,15 @@\n is included in the section entitled \u201dGNU Free Documentation License\u201d.\n If you have no Invariant Sections, write \u201dwith no Invariant Sections\u201d instead of saying which ones\n are invariant. If you have no Front-Cover Texts, write \u201dno Front-Cover Texts\u201d instead of \u201dFront-Cover\n Texts being LIST\u201d; likewise for Back-Cover Texts.\n If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License,\n to permit their use in free software.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1289 / 1290\n \n Chapter 17\n \n LinuxCNC History\n 17.1 Origin\n@@ -56856,15 +56856,15 @@\n interested in improving EMC. Many people requested or coded small improvements to the code. Ray\n Henry wanted to refine the user interface. Since Ray was reluctant to try tampering with the C code\n in which the user interface was written, a simpler method was sought. Fred Proctor of NIST suggested a scripting language and wrote code to interface the Tcl/Tk scripting language to the internal\n NML communications of EMC. With this tool Ray went on to write a Tcl/Tk program that became the\n predominant user interface for EMC at the time.\n For NIST\u2019s perspective, see this paper written by William Shackleford and Frederick Proctor, describing the history of EMC and its transition to open source.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1290 / 1290\n \n By this time interest in EMC as beginning to pick up substantially. As more and more people attempted\n installation of EMC, the difficulty of patching a Linux kernel with the real time extensions and of\n compiling the EMC code became glaringly obvious. Many attempts to document the process and\n write scripts were attempted, some with moderate success. The problem of matching the correct\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Getting Started V2.9.1, 04 Nov 2023'\n+Title: 'Getting Started V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Getting Started V2.9.1, 04 Nov 2023\n+Getting Started V2.9.1, 06 Nov 2023\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n ii\n \n Contents\n 1 About LinuxCNC\n \n 1\n@@ -113,15 +113,15 @@\n \n 10\n \n 3.7 Review Latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 10\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n iii\n \n 3.8 Set fixed ip address - only for mesa card.\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -251,15 +251,15 @@\n 7.2 GNU Free Documentation License\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 31\n 31\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n iv\n \n The LinuxCNC Team\n \n This handbook is a work in progress. If you are able to help with writing, editing, or graphic preparation please contact any member of the writing team or join and send an email to emc-users@lists.sourceforge\n Copyright \u00a9 2000-2020 LinuxCNC.org\n@@ -277,15 +277,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 1 / 35\n \n Chapter 1\n \n About LinuxCNC\n 1.1 The Software\n@@ -312,15 +312,15 @@\n \u2022 It can simultaneously move up to 9 axes and supports a variety of interfaces.\n \u2022 The control can operate true servos (analog or PWM) with the feedback loop closed by the LinuxCNC\n software at the computer, or open loop with step-servos or stepper motors.\n \u2022 Motion control features include: cutter radius and length compensation, path deviation limited to\n a specified tolerance, lathe threading, synchronized axis motion, adaptive feedrate, operator feed\n override, and constant velocity control.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 2 / 35\n \n \u2022 Support for non-Cartesian motion systems is provided via custom kinematics modules. Available\n architectures include hexapods (Stewart platforms and similar concepts) and systems with rotary\n joints to provide motion such as PUMA or SCARA robots.\n \u2022 LinuxCNC runs on Linux using real time extensions.\n@@ -353,15 +353,15 @@\n 1.3.2 Mailing List\n An Internet Mailing List is a way to put questions out for everyone on that list to see and answer at\n their convenience. You get better exposure to your questions on a mailing list than on the IRC but\n answers take longer. In a nutshell you e-mail a message to the list and either get daily digests or\n individual replies back depending on how you set up your account.\n You can subscribe to the emc-users mailing list at: https://lists.sourceforge.net/lists/listinfo/emc-users\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 3 / 35\n \n 1.3.3 Web Forum\n A web forum can be found at https://forum.linuxcnc.org or by following the link at the top of the\n linuxcnc.org home page.\n This is quite active but the demographic is more user-biased than the mailing list. If you want to be\n@@ -371,15 +371,15 @@\n A Wiki site is a user maintained web site that anyone can add to or edit.\n \n The user maintained LinuxCNC Wiki site contains a wealth of information and tips at: https://wiki.linuxcnc.or\n \n 1.3.5 Bug Reports\n Report bugs to the LinuxCNC github bug tracker.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 4 / 35\n \n Chapter 2\n \n System Requirements\n 2.1 Minimum Requirements\n@@ -407,15 +407,15 @@\n LinuxCNC requires a kernel modified for realtime use to control real machine hardware. It can,\n however run on a standard kernel in simulation mode for purposes such as checking G-code, testing\n config files and learning the system. To work with these kernel versions there are two versions of\n LinuxCNC distributed. The package names are \u201dlinuxcnc\u201d and \u201dlinuxcnc-uspace\u201d.\n The realtime kernel options are preempt-rt, RTAI and Xenomai.\n You can discover the kernel version of your system with the command:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 5 / 35\n \n uname -a\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n@@ -451,15 +451,15 @@\n an extended time will give you the info you need to determine suitability.\n \n 2.3.2 Video Cards\n If your installation pops up with 800 x 600 screen resolution then most likely Debian does not recognize\n your video card or monitor. This can sometimes be worked-around by installing drivers or creating /\n editing Xorg.conf files.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 6 / 35\n \n Chapter 3\n \n Getting LinuxCNC\n This section describes how to install LinuxCNC version 2.9 on a PC already running Debian Bookworm (Debian 12). LinuxCNC requires the PREEMPT_RT real time kernel to ensure the strict timing\n@@ -488,15 +488,15 @@\n sudo apt install linuxcnc-uspace linuxcnc-uspace-dev\n \n Optionally you can install mesaflash if you are using a Mesa card:\n sudo apt install mesaflash\n \n Reboot and log in again as the same user. Open a terminal window and check PREEMPT_RT is installed:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 7 / 35\n \n uname -v\n \n PREEMPT_RT should be displayed in the results.\n That\u2019s it! You are done! You will find LinuxCNC under the CNC menu.\n@@ -527,15 +527,15 @@\n Note\n Raspberry Pis (and most other Single Board Computers, or SBUs) are ARM64 machines. These instructions will feature arm64 kernel and can\u2019t be used for AMD64 machines (which is what many PCs\n are, including all Intel based machines).\n \n 1. Download a Debian Bookworm image from https://raspi.debian.net/daily-images/ and burn to an\n SD card and install in the usual way.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 8 / 35\n \n Note\n There have been reported black screen lockout with the \u201dtested\u201d images on some Pis. It may be\n that removing dtoverlay=vc4-fkms-v3d-pi4 from /boot/config.txt resolves that problem. These\n instructions were tested using the 2023/05/15 daily build.\n@@ -576,15 +576,15 @@\n disable_overscan=1\n dtparam=audio=off\n \n Save and exit nano NOTE: These commands (a) use video graphics resources for 3D acceleration\n (increases performance considerably), (b) don\u2019t overscan (fixes some black border issues), and (c)\n don\u2019t use audio (unknown performance enhancement)\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 9 / 35\n \n Warning\n The first command is only tested on RasPi 4 models, and it specifically references pi4. We have\n commented it out as on one test it seems to cause the Pi to hang. Experiment at your own\n risk.\n@@ -620,15 +620,15 @@\n 3.5 Bookworm Tweaks\n 3.5.1 Basic Tweaks\n To make life easy, there are some standard tweaks you can make to Bookworm which should work on\n both X86 and the pi.\n From the menu settings/Power manager set the power settings to suit your needs. You can turn off\n screen saver and screen lock here Install geany and grub-customizer (x86/AMD64 only):\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 10 / 35\n \n sudo apt install geany grub-customizer\n \n Finally now geany is installed, enable auto login\n sudo geany /etc/lightdm/lightdm.conf\n@@ -661,15 +661,15 @@\n latency-histogram --nobase --sbins 1000\n \n How to evaluate latency is covered in the LinuxCNC documents Among other things, latency is affected\n by: BIOS settings; Isolcpus and other boot time settings; Kernel version used\n Note\n Optimal latency settings are still subject to review following recent changes to the Linux kernel.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 11 / 35\n \n 3.8 Set fixed ip address - only for mesa card.\n Usually we set up the mesa card to have the ip address 10.10.10.10. We need to set a fixed ip address\n of 10.10.10.1 to the network interface that connects to it. Type:\n ip a\n@@ -709,15 +709,15 @@\n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-de\n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-es\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 12 / 35\n \n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-fr\n pin: release o=http://buildbot2.highlab.com/debian/\n@@ -760,15 +760,15 @@\n The r8168-dkms and r8125-dkms drivers are in the non-free packages which are not included in\n sources.list by default.\n You can see your driver if you type the following to identify your NIC name:\n ip a\n \n Now display the NIC info eg:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 13 / 35\n \n sudo apt install ethtool\n ethtool -i enps02\n \n If it seems you could benefit from this driver, continue Type:\n@@ -805,15 +805,15 @@\n sudo apt purge r8168-dkms\n \n 3.11 Installing a later kernel\n Since the release of Debian Bullseye (Linux kernel 5.10), real time performance has been disappointing. In particular, network latency when communicating with a Mesa ethernet card has been generating Error Finishing Read Errors. This means that the network latency left insufficient time for the\n servo thread cycle to complete in time.\n This appears to have been more prevalent with Realtek Network interfaces. Fortunately, each iteration of the Linux kernel has improved results, particularly since the release of 6.x kernels. Debian\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 14 / 35\n \n Bookworm (Debian 12) is using the 6.1 kernel which is quite good. In our testing, we found that latency improved by 265% if we used the 6.3 kernel. We have compiled this version of the kernel for\n your convenience. This image was updated to the final 6.3 kernel on 1 May 2023 and may be updated\n form time to time.\n Only try installing it if you have exhausted all options by following the steps below:\n@@ -909,22 +909,22 @@\n simulation only\n machine control\n & simulation\n machine control\n & simulation\n simulation only\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n Note\n LinuxCNC v2.8 and above is not supported on Ubuntu Lucid or older.\n \n 15 / 35\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 16 / 35\n \n Chapter 4\n \n Running LinuxCNC\n 4.1 Invoking LinuxCNC\n@@ -951,15 +951,15 @@\n applications like PyVCP or GladeVCP.\n \u2013 attic - Obsolete or historical configurations.\n The sim configurations are often the most useful starting point for new users and are organized around\n supported GUIs:\n \u2022 axis - Keyboard and Mouse GUI\n \u2022 craftsman - Touch Screen GUI (no longer maintained ???)\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 17 / 35\n \n \u2022 gmoccapy - Touch Screen GUI\n \u2022 gscreen - Touch Screen GUI\n \u2022 pyvcp_demo - Python Virtual Control Panel\n \u2022 qtaxis - Touch Screen GUI, axis lookalike\n@@ -990,15 +990,15 @@\n \u2022 tormach\n A complete system may be required to use these configurations.\n The apps items are typically either:\n 1. utilities that don\u2019t require starting linuxcnc\n 2. demonstrations of applications that can be used with linuxcnc\n \u2022 info - creates a file with system information that may be useful for problem diagnosis.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 18 / 35\n \n \u2022 gladevcp - Example GladeVCP applications.\n \u2022 halrun - Starts halrun in an terminal.\n \u2022 latency - Applications to investigate latency\n \u2013 latency-histogram-1 - histogram for single servo thread\n@@ -1015,15 +1015,15 @@\n Figure 4.1: LinuxCNC Configuration Selector\n Click any of the listed configurations to display specific information about it. Double-click a configuration or click OK to start the configuration.\n Select Create Desktop Shortcut and then click OK to add an icon on the Ubuntu desktop to directly\n launch this configuration without showing the Configuration Selector screen.\n When you select a configuration from the Sample Configurations section, it will automatically place a\n copy of that config in the ~/linuxcnc/configs directory.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 19 / 35\n \n 4.3 Next steps in configuration\n After finding the sample configuration that uses the same interface hardware as your machine (or a\n simulator configuration), and saving a copy to your home directory, you can customize it according to\n the details of your machine. Refer to the Integrator Manual for topics on configuration.\n@@ -1050,15 +1050,15 @@\n HAL files, local modifications will then prevail.\n The Configuration selector makes a symbolic link in the user configuration directory (named hallib)\n that points to the system HAL file library. This link simplifies copying a library file. For example, to\n copy the library core_sim.hal file in order to make local modifications:\n cd ~/linuxcnc/configs/name_of_configuration\n cp hallib/core_sim.hal core_sim.hal\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 20 / 35\n \n Chapter 5\n \n Updating LinuxCNC\n Updating LinuxCNC to a new minor release (ie to a new version in the same stable series, for example\n@@ -1090,15 +1090,15 @@\n \n You should be running on Debian Buster, Bullseye or Bookworm or Ubuntu 20.04 \u201dFocal Fossa\u201d or\n newer. LinuxCNC will not run on older distributions than these.\n You will also need to check which realtime kernel is being used:\n uname -r\n 6.1.0-10-rt-amd64\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 21 / 35\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n If you see -rtai- in the kernel name then you are running RTAI realtime. See below for the LinuxCNC\n version to install. At this moment there are (tmporariliy) no RTAI packages for LinuxCNC 2.9.0 but it\n@@ -1130,15 +1130,15 @@\n deb https://linuxcnc.org buster base\n 2.9-rtpreempt\n deb https://linuxcnc.org bullseye base\n 2.9-uspace\n deb https://linuxcnc.org bookworm base\n 2.9-uspace\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 22 / 35\n \n \u2022 Click Add Source, then Close in the Software Sources window. If it pops up a window informing\n you that the information about available software is out-of-date, click the Reload button.\n \n 5.1.2 Upgrading to the new version\n@@ -1158,15 +1158,15 @@\n \n 5.1.3 Ubuntu\n \u2022 Click on the Dash Home icon in the top left.\n \u2022 In the Search field, type \u201dupdate\u201d, then click on the Update Manager icon.\n \u2022 Click the Check button to fetch the list of packages available.\n \u2022 Click the Install Updates button to install the new versions of all packages.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 23 / 35\n \n 5.2 Updating without Network\n To update without a network connection you need to download the .deb then install it with dpkg. The\n .debs can be found in https://linuxcnc.org/dists/ .\n You have to drill down from the above link to find the correct deb for your installation. Open a terminal\n@@ -1202,15 +1202,15 @@\n In the extremely unlikely event that you are using canterp, know that the module has moved from\n /usr/lib/libcanterp.so to /usr/lib/linuxcnc/canterp.so, and the [TASK]INTERPRETER setting\n correspondingly needs to change from libcanterp.so to canterp.so.\n \n 5.4 Updating Configuration Files (for 2.9.x)\n No changes should be necessary to configuration files when moving from 2.8 to 2.9\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 24 / 35\n \n 5.4.1 Spindle limits in the INI\n It is now possible to add settings to the [SPINDLE] section of the INI file\n MAX_FORWARD_VELOCITY = 20000 The maximum spindle speed (in rpm)\n MIN_FORWARD_VELOCITY = 3000 The minimum spindle speed (in rpm)\n@@ -1236,15 +1236,15 @@\n \n 5.6 New Drivers\n A framework for controlling ModBus devices using the serial ports on many Mesa cards has been\n introduced. http://linuxcnc.org/docs/2.9/html/drivers/mesa_modbus.html\n \n A new GPIO driver for any GPIO which is supported by the gpiod library is now included: http://linuxcnc.org/docs/2.9/html/drivers/hal_gpio.html\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 25 / 35\n \n Chapter 6\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -1278,15 +1278,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 26 / 35\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -1331,15 +1331,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 27 / 35\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -1382,15 +1382,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 28 / 35\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -1434,15 +1434,15 @@\n Rapid\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum speed of the machine. It is often desirable to limit the rapid rate when testing a G-code\n program for the first time.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 29 / 35\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -1484,28 +1484,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 30 / 35\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 31 / 35\n \n Chapter 7\n \n Legal Section\n Translations of this file provided in the source tree are not legally binding.\n@@ -1532,15 +1532,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 32 / 35\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any\n such manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -1589,15 +1589,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front\n cover must present the full title with all words of the title equally prominent and visible. You may add\n other material on the covers in addition. Copying with changes limited to the covers, as long as they\n preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying\n in other respects.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 33 / 35\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access\n@@ -1643,15 +1643,15 @@\n Version. N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any\n Invariant Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 34 / 35\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -1692,15 +1692,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 35 / 35\n \n this License provided that you also include the original English version of this License. In case of a\n disagreement between the translation and the original English version of this License, the original\n English version will prevail.\n 9. TERMINATION\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Integrator Information V2.9.1, 04 Nov 2023'\n+Title: 'Integrator Information V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Integrator Information V2.9.1, 04 Nov 2023\n+Integrator Information V2.9.1, 06 Nov 2023\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n ii\n \n Contents\n 1 Stepper Information\n \n 1\n@@ -125,15 +125,15 @@\n \n 18\n \n 3.12.3Wiring Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 18\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 1 / 18\n \n Chapter 1\n \n Stepper Information\n 1.1 Stepper Motor Operation\n@@ -152,15 +152,15 @@\n the time that each coil can exert its full magnetic attraction on the rotor reduces, thereby reducing\n the overall torque. This relationship between speed and torque is largely inversely proportional.\n In the below example, the charging time for three coils is shown when the applied voltage is stepped\n from 0 V to 40 V. While all three coils can easily reach the full current limit of 5 amps (A), the time\n taken varies for each coil. The 4 milli-Henry (mH) coil (blue trace) takes twice as long to reach full\n current than the 2 mH coil (green trace), and the 8 mH (red trace) coil takes twice as long again:\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 2 / 18\n \n If the rate at which step changes are applied to the coils is significantly shorter than the rise time,\n it\u2019s easy to see that the winding has less time to attain full magnetic attraction on the rotor, and thus\n maximum torque is curtailed. In the below example the 2 mH coil can achieve the full 5 A limit before\n the step voltage is removed, but the 4 mH and 8 mH coils cannot:\n@@ -179,15 +179,15 @@\n In most stepper-based CNC systems the voltage of the supply feeding the stepper driver is several\n orders of magnitude greater than the voltage of the motor itself. A typical NEMA23 stepper motor\n may have a rating of only a handful of volts, yet the power supply and driver could be operating at\n 48 VDC or more.\n Nearly all modern stepper motor drivers on the market today are constant-current types. That is,\n the current being applied to each winding is fixed irrespective of how much voltage is being applied.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 3 / 18\n \n Most drivers accomplish this by monitoring the current being drawn through the motor windings and\n rapidly switching the outputs on and off at a very high frequency to maintain this current. Depending\n on the drivers being used, it may even be possible to hear this high frequency whistling in the motors\n themselves when stationary. Because the voltage is rapidly switched on and off to maintain the winding\n@@ -232,15 +232,15 @@\n introduced.\n Several methods exist to help control the effects of resonance, all with varying degrees of complexity,\n effectiveness and side effects:\n \u2022 Microstepping can help reduce resonance by using smaller step changes in current between each\n step. These smaller step changes cause less ringing in the motor and windings and thus cause less\n excitation at the point of resonance.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 4 / 18\n \n \u2022 Ensuring the motor is never operated at a particular frequency for a sustained period is a very basic\n method of reducing resonance, always accelerating or decelerating through the resonant peak.\n \u2022 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\n employed.\n@@ -279,15 +279,15 @@\n in leadscrews, flex in gantries, runout in the spindle and cutting tool, static friction in the stepper\n motor itself, stepper detent error , etc.) that will render such small amounts of resolution completely\n meaningless. In practice, microstepping at rates in excess of 4x or 8x on a CNC machine fitted with\n leadscrews serves little purpose. In some cases it may even be more beneficial to run at lower degrees\n of microstepping or even full steps, and operate the stepper motor through a gear reduction to obtain\n the necessary resolution and torque gains.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 5 / 18\n \n 1.5 Open and Closed Loop\n In the simplest CNC systems employing stepper motors, the host computer and/or stepper driver\n receives no feedback from the motor that it has achieved the desired outcome when commanded to\n begin stepping. The assumption by the software, driver and end user is that the motor operated\n@@ -307,15 +307,15 @@\n to the downstream driver as it would normally when running in open loop. In these situations the\n drivers usually include an alarm output which signals the software to halt when the load placed on\n the stepper becomes too great for the driver to compensate without losing steps.\n More advanced implementations of closed loop operation bring the encoder signal all the way back\n to the host computer, but require that a much higher hardware and software overhead be installed to\n manage the encoder feedback and calculation and delivery of drive compensation.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 6 / 18\n \n Chapter 2\n \n Stepper Timing\n This page is for step and direction timing of stepper drives.\n@@ -378,15 +378,15 @@\n support/motorcontrolmanuals/stepperdrives/g201rev16.html\n \n 1000\n \n Falling\n Edge\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 7 / 18\n \n Gecko\n@@ -479,15 +479,15 @@\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g201rev16.html\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g212rev15.html\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g213vrev7.html\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 8 / 18\n \n Gecko\n@@ -625,15 +625,15 @@\n http://granitedevices.fi/assets/files/vsde_160_manual.pdf\n http://granitedevices.fi/assets/files/vsde_160_dualdc_manual.pdf\n http://www.jvl.dk/files/pdf/lb043gb.pdf\n http://www.jvl.dk/files/pdf/lb043gb.pdf\n http://www.piclist.com/techref/io/stepper/linistep/index.htm\n http://www.piclist.com/techref/io/stepper/THB6064/index.htm\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 9 / 18\n \n *Motion\n@@ -858,15 +858,15 @@\n http://www.kelinginc.net/kL6852.pdf\n https://www.sherline.com/-\n \n http://www.lewetz.de/download/ibstep3se.pdf\n http://www.compumotor.com\n manuals/ZETA/ZETA_Rev_A_Entire.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n www.cncdrive.com\n Dugong\n \n Step\n@@ -1105,15 +1105,15 @@\n http://leadshine.com/UploadFile/Down/EM503d_P.pdf\n http://leadshine.com/UploadFile/Down/EM705d_P.pdf\n http://leadshine.com/UploadFile/Down/EM806d_P.pdf\n http://leadshineusa.com/UploadFile/Down/M415Bm.pdf\n http://leadshineusa.com/UploadFile/Down/M542V2m.pdf\n http://leadshineusa.com/UploadFile/Down/M752m.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n Step\n Time\n 1500\n@@ -1292,15 +1292,15 @@\n 5000\n \n Rising\n Edge\n \n http://cnc4you.co.uk/resources/CW5045.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 12 / 18\n \n Chapter 3\n \n Best Wiring Practices\n 3.1 Electrical Noise\n@@ -1329,15 +1329,15 @@\n this discussion the terms earth and common must be made distinct from each other to avoid confusion.\n \n 3.3 Wire Selection and Use\n Wire comes in many types, sizes and configurations. Wading through all the wire available is a monumental task of its own, but for the purposes of this article it is only necessary to consider the types of\n wires typically used when wiring a CNC controller. Additionally, how the wire is to be used can have\n some effect on the overall system. What follows are some tips that may prove helpful.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 13 / 18\n \n 3.3.1 Single Conductor Wire\n Wire comes in two forms: solid conductor and stranded. Solid core wire is generally cheaper than\n stranded, but more likely to break if used in applications where repeated bending is expected. Fortunately, the prevalence of stranded wire on the market means that its use should be encouraged\n wherever possible.\n@@ -1378,15 +1378,15 @@\n is more bulky than foil and does not provide 100% coverage, but is more flexible than foil shielded\n types. Coverage is typically 70% to 95% depending on how tight the braid has been constructed.\n Despite the lower coverage of braided shield, the effectiveness is greater than foil shielding due to\n the increased bulk of the braid, and copper being a better conductor than aluminum.\n 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 multiconductor cable may also be shielded along with an overall shield being applied to the entire cable\n jacket.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 14 / 18\n \n 3.4 AC Line Voltage\n The incoming mains AC that powers the CNC system can pick up and carry noise into the power\n supplies and other equipment. For example, if the incoming supply is also used to feed large motors,\n electrical noise may be generated on the line feeding the CNC components. Although most modern\n@@ -1424,15 +1424,15 @@\n supply may have optically-isolated signal input lines which provide complete electrical separation of\n the driver\u2019s input and output circuitry for safety and noise immunity purposes. Tying the stepper\n motor and logic control supply commons together in this case may have a detrimental impact on the\n operation of the system.\n In general it makes most sense to keep the commons of the various DC PSUs used in the CNC system\n separate from each other, and separate from the AC mains earth unless there is a specific requirement\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 15 / 18\n \n to tie them together. In most cases the common points of the heavy-duty power sections of the CNC\n system (eg, stepper motor or servo motor drivers, spindle motors etc) will be segregated from common\n points of the electrically-sensitive sections of the CNC (control interface boards, limit switches, tool\n probe circuitry etc) to prevent cross-contamination of the two systems.\n@@ -1472,15 +1472,15 @@\n electrically hostile environments. When grounding the shield in the cable, terminate to the mains\n earth.\n If the controller and interfacing devices can withstand higher control signals, consider altering the\n wiring and power supply requirements to use a bigger voltage for signaling (eg, 12V or 24V). The\n same 2V EMI noise spike that could corrupt a 3.3V limit switch signal will be far less likely to cause\n issues with a limit switch operating with a 24V signal.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 16 / 18\n \n 3.8 Stepper or Servo Motor Drivers\n The metal housing of the driver should be connected to the local mains earth in the CNC system.\n Some driver enclosures will indicate a specific terminal as being the earthing point, in which case this\n point must be connected to earth via a dedicated wire.\n@@ -1515,15 +1515,15 @@\n each other has the tendency to exacerbate EMI interference. Separate conductors by as much distance as possible. If two conductors must cross over each other make the crossing as close to a 90\n degree angle as possible.\n Avoid long loops of excess wire at any peripheral devices - they are great antennas for receiving or\n transmitting noise. Where possible, run wires in close proximity to large earthed structures. If the\n controller enclosure features a large metallic back plate that is earthed, secure all control wiring\n against this surface as much as possible while wiring between two points.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 17 / 18\n \n 3.11 Mechanical Noise\n Very few mechanical switches (eg, an axis limit switch or tool probe input) will close or open perfectly\n when operated. More often than not the switch contacts will physically bounce against each other\n several times within a very short space of time when operated. This may be interpreted by the machine\n@@ -1557,15 +1557,15 @@\n \n 3.12.1 Hardware Documentation\n At a minimum, make sure to save any documentation associated with the installed hardware in a safe\n place. Stepper controllers, break out boards, power supplies, VFDs, interfaces and controllers, servo\n and stepper drivers and any associated device settings are all critical components of the system and\n their documentation should be kept at hand for easy reference.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 18 / 18\n \n 3.12.2 Wiring Schematics\n As the CNC machine is wired, make sure to draw up a schematic that can be referenced to later. The\n schematic does not have to be all that neat, but it should be understandable in such a way that it\n could be easily interpreted at a later date, ideally by anyone who may need to service the equipment.\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Manual_Pages.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Manual_Pages.pdf", "unified_diff": null, "details": [{"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -5687,15 +5687,15 @@\n Modbus slave address\n \n LICENSE\n GPLv2 or greater\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 119\n \n \fpmx485-test(1)\n \n LinuxCNC Documentation\n \n@@ -7311,15 +7311,15 @@\n Computed resistance of the thermistor.\n \n LICENSE\n GPL\n \n 158\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fTOOLEDIT (1)\n \n The Enhanced Machine Controller\n \n@@ -7856,15 +7856,15 @@\n Modbus slave address\n \n LICENSE\n GPLv2 or greater\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 169\n \n \fXHC-HB04-ACCELS(1)\n \n The Enhanced Machine Controller\n \n@@ -12167,15 +12167,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n 262\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fABS_S32(9)\n \n HAL Component\n \n@@ -12206,15 +12206,15 @@\n Sebastian Kuzminsky\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 263\n \n \fHAL Component\n \n AND2(9)\n \n@@ -12246,15 +12246,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 264\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fANGLEJOG(9)\n \n HAL Component\n \n@@ -12298,15 +12298,15 @@\n anglejog.N.max-vel float in\n vector max velocity magnitude\n anglejog.N.max-accel float in\n vector max acceleration magnitude\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 265\n \n \fANGLEJOG(9)\n \n HAL Component\n \n@@ -12341,15 +12341,15 @@\n Dewey Garrett\n \n LICENSE\n GPL\n \n 266\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fAT_PID(9)\n \n HAL Component\n \n@@ -12417,15 +12417,15 @@\n Chris S. Morley\n \n LICENSE\n GPL\n \n 268\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fBIN2GRAY (9)\n \n HAL Component\n \n@@ -12453,15 +12453,15 @@\n Andy Pugh\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 269\n \n \fBIQUAD(9)\n \n HAL Component\n \n@@ -12515,15 +12515,15 @@\n biquad.N.n1 float rw (default: 0.0)\n 1st-delayed numerator coef\n biquad.N.n2 float rw (default: 0.0)\n 2nd-delayed numerator coef\n \n 270\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fBIQUAD(9)\n \n HAL Component\n \n@@ -12533,15 +12533,15 @@\n Peter G. Vavaroutsos\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 271\n \n \fBITSLICE(9)\n \n HAL Component\n \n@@ -12570,15 +12570,15 @@\n Andy Pugh\n \n LICENSE\n GPL2+\n \n 272\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fBITWISE(9)\n \n HAL Component\n \n@@ -12615,15 +12615,15 @@\n Andy Pugh\n \n LICENSE\n GPL 2+\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 273\n \n \fBLDC(9)\n \n HAL Component\n \n@@ -12665,15 +12665,15 @@\n H Emulated Hall sensor output. This mode can be used to control a drive which expects 3x Hall signals, or\n to convert between a motor with one hall pattern and a drive which expects a different one.\n F Emulated Fanuc Red Cap Gray-code encoder output. This mode might be used to drive a non-Fanuc motor using a Fanuc drive intended for the \"Red-Cap\" motors.\n T Force Trapezoidal mode.\n \n 274\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fBLDC(9)\n \n HAL Component\n \n@@ -12721,15 +12721,15 @@\n bldc.N.C8 bit in [if ( personality & 0x10 )]\n Fanuc Gray-code bit 3 input\n bldc.N.value float in\n PWM master amplitude input\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 275\n \n \fBLDC(9)\n \n HAL Component\n \n@@ -12776,15 +12776,15 @@\n bldc.N.A-high float out [if ( personality & 0xF00 ) == 0x200]\n High-side driver for phase A\n bldc.N.B-high float out [if ( personality & 0xF00 ) == 0x200]\n High-side driver for phase B\n \n 276\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fBLDC(9)\n \n HAL Component\n \n@@ -12833,15 +12833,15 @@\n offset such as the 8I20. This value has a range of 0 to 1 and measures electrical revolutions. It will\n have two zeros for a 4 pole motor, three for a 6-pole, etc.\n bldc.N.out float out\n Current output, including the effect of the dir pin and the alignment sequence.\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 277\n \n \fHAL Component\n \n BLDC(9)\n \n@@ -12878,15 +12878,15 @@\n Bodine). 22 (240 degree). 25 (60 degree commutation).\n Note that a number of incorrect commutations will have non-zero net torque which might look as\n if they work, but don\u2019t really.\n If your motor lacks documentation it might be worth trying every pattern.\n \n 278\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n BLDC(9)\n \n@@ -13186,15 +13186,15 @@\n 001\n 101\n 011\n 001\n 000\n 100\n \n-2024-04-27\n+2025-05-31\n \n BLDC(9)\n \n B-C\n 100\n 101\n 100\n@@ -13256,15 +13256,15 @@\n Andy Pugh\n \n LICENSE\n GPL\n \n 280\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fBLEND(9)\n \n HAL Component\n \n@@ -13298,15 +13298,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 281\n \n \fCAROUSEL(9)\n \n HAL Component\n \n@@ -13350,15 +13350,15 @@\n and \u2019edge\u2019 mode this is when both the index and pulse inputs are true. In \u2019counts\u2019 mode only the index input needs to be set to set home. Additionally in \u2019counts\u2019 mode the usual index-enable logic of the encoder\n counters is supported.\n With some carousel designs the carousel will not stop immediately. To allow for this set the lign-dc pin to a\n low velocity to be used for a final latching move, and set thedecel-time to a suitable value. Once the decel-\n \n 282\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCAROUSEL(9)\n \n HAL Component\n \n@@ -13405,15 +13405,15 @@\n and sense-1 is the pocket sensor.\n carousel.N.rev-pulse float in\n The duration in seconds for which a ratchet changer (Boxford, Emco) should pulse the reverse pin\n to lock the holder\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 283\n \n \fCAROUSEL(9)\n \n HAL Component\n \n@@ -13463,15 +13463,15 @@\n \n PARAMETERS\n carousel.N.state s32 r (default: 0)\n Current component state\n \n 284\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCAROUSEL(9)\n \n HAL Component\n \n@@ -13495,15 +13495,15 @@\n Andy Pugh\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 285\n \n \fCHARGE_PUMP(9)\n \n HAL Component\n \n@@ -13539,15 +13539,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 286\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCLARKE2(9)\n \n HAL Component\n \n@@ -13585,15 +13585,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 287\n \n \fCLARKE3(9)\n \n HAL Component\n \n@@ -13632,15 +13632,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n 288\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCLARKEINV (9)\n \n HAL Component\n \n@@ -13678,15 +13678,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 289\n \n \fCLASSICLADDER(9)\n \n HAL Component\n \n@@ -13802,15 +13802,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 292\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCONSTANT (9)\n \n HAL Component\n \n@@ -13835,15 +13835,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 293\n \n \fCONV_BIT_FLOAT (9)\n \n HAL Component\n \n@@ -13867,15 +13867,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 294\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCONV_BIT_S32(9)\n \n HAL Component\n \n@@ -13899,15 +13899,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 295\n \n \fCONV_BIT_U32(9)\n \n HAL Component\n \n@@ -13931,15 +13931,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 296\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCONV_FLOAT_S32(9)\n \n HAL Component\n \n@@ -13969,15 +13969,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 297\n \n \fCONV_FLOAT_U32(9)\n \n HAL Component\n \n@@ -14007,15 +14007,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 298\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCONV_S32_BIT (9)\n \n HAL Component\n \n@@ -14045,15 +14045,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 299\n \n \fCONV_S32_FLOAT (9)\n \n HAL Component\n \n@@ -14077,15 +14077,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 300\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCONV_S32_U32(9)\n \n HAL Component\n \n@@ -14115,15 +14115,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 301\n \n \fCONV_U32_BIT (9)\n \n HAL Component\n \n@@ -14153,15 +14153,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 302\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCONV_U32_FLOAT (9)\n \n HAL Component\n \n@@ -14185,15 +14185,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 303\n \n \fCONV_U32_S32(9)\n \n HAL Component\n \n@@ -14223,15 +14223,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 304\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCOREXY_BY_HAL(9)\n \n HAL Component\n \n@@ -14275,15 +14275,15 @@\n corexy-by-hal.N.alpha-cmd float out\n typ: command to alpha motor\n corexy-by-hal.N.beta-cmd float out\n typ: command to beta ts motor\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 305\n \n \fCOREXY_BY_HAL(9)\n \n HAL Component\n \n@@ -14293,15 +14293,15 @@\n Dewey Garrett based on forum post from nbremond\n \n LICENSE\n GPL\n \n 306\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fCOUNTER(9)\n \n HAL Component\n \n@@ -14382,15 +14382,15 @@\n Dewey Garrett\n \n LICENSE\n GPL\n \n 308\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fDDT (9)\n \n HAL Component\n \n@@ -14422,15 +14422,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 309\n \n \fDEADZONE(9)\n \n HAL Component\n \n@@ -14460,15 +14460,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 310\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fDEBOUNCE(9)\n \n HAL Component\n \n@@ -14550,15 +14550,15 @@\n Andy Pugh\n \n LICENSE\n GPL 2+\n \n 312\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fDIFFERENTIAL(9)\n \n HAL Component\n \n@@ -14595,15 +14595,15 @@\n Sebastian Kuzminsky\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 313\n \n \fHAL Component\n \n DIV2(9)\n \n@@ -14642,15 +14642,15 @@\n Noel Rodes\n \n LICENSE\n GPL\n \n 314\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fEDGE(9)\n \n HAL Component\n \n@@ -14688,15 +14688,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 315\n \n \fENCODER(9)\n \n HAL Component\n \n@@ -15035,15 +15035,15 @@\n eoffset-per-angle.N.rfraction float in (default: 0.1)\n Offset amplitude (+/- fraction of radius_ref)\n eoffset-per-angle.N.fmult float in (default: 6)\n Offset frequency multiplier\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 323\n \n \fEOFFSET_PER_ANGLE(9)\n \n HAL Component\n \n@@ -15080,15 +15080,15 @@\n Dewey Garrett\n \n LICENSE\n GPL\n \n 324\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n ESTOP_LATCH(9)\n \n@@ -15150,15 +15150,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 325\n \n \fFEEDCOMP(9)\n \n HAL Component\n \n@@ -15194,15 +15194,15 @@\n Eric H. Johnson\n \n LICENSE\n GPL\n \n 326\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fFILTER_KALMAN (9)\n \n HAL Component\n \n@@ -15252,30 +15252,30 @@\n Estimation of the noise covariances (observation).\n \n AUTHOR\n Dmian Wrobel \n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 327\n \n \fFILTER_KALMAN (9)\n \n HAL Component\n \n FILTER_KALMAN (9)\n \n LICENSE\n GPL-2.0-or-later\n \n 328\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fFLIPFLOP(9)\n \n HAL Component\n \n@@ -15308,15 +15308,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 329\n \n \fGANTRY (9)\n \n HAL Component\n \n@@ -15372,15 +15372,15 @@\n Charles Steinkuehler\n \n LICENSE\n GPL\n \n 330\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fGANTRYKINS(9)\n \n Kinematics Module\n \n@@ -15447,15 +15447,15 @@\n Stephen Wille Padnos\n \n LICENSE\n GPL\n \n 332\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fGENTRIVKINS(9)\n \n Kernel Developer\u2019s Manual\n \n@@ -15533,15 +15533,15 @@\n Andy Pugh\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 335\n \n \fhal_bb_gpio(9)\n \n HAL Component\n \n@@ -15859,15 +15859,15 @@\n histobins.N.nbins u32 in (default: 20)\n histobins.N.binsize float in (default: 1)\n histobins.N.minvalue float in (default: 0)\n histobins.N.index s32 in\n \n 342\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHISTOBINS(9)\n \n HAL Component\n \n@@ -15891,15 +15891,15 @@\n Dewey Garrett\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 343\n \n \fHAL Component\n \n HM2_7I43(9)\n \n@@ -16487,15 +16487,15 @@\n Dewey Garrett\n \n LICENSE\n GPL\n \n 356\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHOSTMOT2(9)\n \n HAL Component\n \n@@ -17843,15 +17843,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 384\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fILOWPASS(9)\n \n HAL Component\n \n@@ -17893,15 +17893,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 385\n \n \fINTEG(9)\n \n HAL Component\n \n@@ -17930,15 +17930,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 386\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fINVERT (9)\n \n HAL Component\n \n@@ -17972,15 +17972,15 @@\n Stephen Wille Padnos\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 387\n \n \fJOYHANDLE(9)\n \n HAL Component\n \n@@ -18024,15 +18024,15 @@\n Paul Willutzki\n \n LICENSE\n GPL\n \n 388\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fKinematics Modules\n \n KINS(9)\n \n@@ -18355,15 +18355,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 395\n \n \fLATENCYBINS(9)\n \n HAL Component\n \n@@ -18418,30 +18418,30 @@\n latencybins.N.availablebins s32 out (default: 1000)\n \n AUTHOR\n Dewey Garrett\n \n 396\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fLATENCYBINS(9)\n \n HAL Component\n \n LATENCYBINS(9)\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 397\n \n \fHAL Component\n \n LCD(9)\n \n@@ -18605,15 +18605,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 401\n \n \fLIMIT2(9)\n \n HAL Component\n \n@@ -18642,15 +18642,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 402\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fLIMIT3(9)\n \n HAL Component\n \n@@ -18688,15 +18688,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 403\n \n \fLIMIT_AXIS(9)\n \n HAL Component\n \n@@ -18749,15 +18749,15 @@\n limit-axis.N.max-limit-MM float in (MM=00..personality)\n The array of macimum limits\n limit-axis.N.min-range-MM float in (MM=00..personality)\n Defines the range of values with which the fb is compared to set the range\n \n 404\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fLIMIT_AXIS(9)\n \n HAL Component\n \n@@ -18778,15 +18778,15 @@\n Chad Woitas\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 405\n \n \fLINCURVE(9)\n \n HAL Component\n \n@@ -18831,15 +18831,15 @@\n Andy Pugh\n \n LICENSE\n GPL\n \n 406\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fLINEARDELTAKINS(9)\n \n Kinematics Component\n \n@@ -18956,15 +18956,15 @@\n This is a named AND circuit with two inputs and one output.\n loadrt logic names=both personality=0x102\n addf both servo-thread\n net sig-in-0 => both.in-00\n \n 408\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n LOGIC(9)\n \n@@ -18980,15 +18980,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 409\n \n \fLOWPASS(9)\n \n HAL Component\n \n@@ -19037,15 +19037,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 410\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n LUT5(9)\n \n@@ -19073,15 +19073,15 @@\n 0xfffffffe. Because every weight except 0x1 is true the function is the sum of every line except the first one.\n A 2-input xor function is TRUE whenever exactly one of the inputs is true, so the correct value for function\n is 0x6. Only in-0 and in-1 should be connected to signals, because if any other bit is TRUE then the output\n will be FALSE.\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 411\n \n \fHAL Component\n \n LUT5(9)\n \n@@ -19303,15 +19303,15 @@\n lut5.N.function u32 rw\n \n SEE ALSO\n and(9), logic(9), not(9), or2(9), xor2(9).\n \n 412\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n LUT5(9)\n \n@@ -19321,15 +19321,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 413\n \n \fMAJ3(9)\n \n HAL Component\n \n@@ -19357,15 +19357,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 414\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fMATCH8(9)\n \n HAL Component\n \n@@ -19406,15 +19406,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 415\n \n \fMATRIX_KB(9)\n \n HAL Component\n \n@@ -19539,15 +19539,15 @@\n max31855.N.fault.M bit out (M=0..( personality & 0xf ))\n Fault condition detected.\n max31855.N.fault-flags.M u32 out (M=0..( personality & 0xf ))\n Fault flags: 0x1 = open sensor, 0x2 short to gnd, 0x3 short to vcc.\n \n 418\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fMAX31855(9)\n \n HAL Component\n \n@@ -19557,15 +19557,15 @@\n Joseph Calderon\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 419\n \n \fMESA_7I65(9)\n \n HAL Component\n \n@@ -19608,15 +19608,15 @@\n Andy Pugh / Cliff Blackburn\n \n LICENSE\n GPL\n \n 420\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fMESA_PKTGYRO_TEST (9)\n \n HAL Component\n \n@@ -19660,15 +19660,15 @@\n Boris Skegin\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 421\n \n \fMESA_UART (9)\n \n HAL Component\n \n@@ -19714,25 +19714,25 @@\n Andy Pugh andy@bodgesoc.org\n \n LICENSE\n GPL\n \n 422\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fMESA_UART (9)\n \n LinuxCNC Documentation\n \n HAL Component\n \n-2024-04-27\n+2025-05-31\n \n MESA_UART (9)\n \n 423\n \n \fMESSAGE(9)\n \n@@ -19782,15 +19782,15 @@\n Les Newell\n \n LICENSE\n GPL v2\n \n 424\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fMILLTURN (9)\n \n HAL Component\n \n@@ -19824,15 +19824,15 @@\n David Mueller\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 425\n \n \fMINMAX(9)\n \n HAL Component\n \n@@ -19858,15 +19858,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 426\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fMOTION (9)\n \n HAL Component\n \n@@ -20431,15 +20431,15 @@\n soft limits are not honored, an offset move may encounter hard limits (or CRASH if there are no limit\n switches). Use of the offset-min-M and offset-max-M inputs to limit travel is recommended. Triggering a\n hard limit will turn off the machine -- see Caution above.\n The offset-in-M values may be set with inifile settings, controlled by a GUI, or managed by other HAL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 439\n \n \fMOVEOFF(9)\n \n HAL Component\n \n@@ -20484,15 +20484,15 @@\n moveoff.N.offset-applied bit out\n TRUE if one or more offsets are applied.\n moveoff.N.waypoint-limit bit out (default: 0)\n Indicates waypoint limit reached (motion ceases), an enabling pin must be deasserted to initiate return to original position.\n \n 440\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fMOVEOFF(9)\n \n HAL Component\n \n@@ -20539,15 +20539,15 @@\n Dewey Garrett and Andy Pugh\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 441\n \n \fMULT2(9)\n \n HAL Component\n \n@@ -20575,15 +20575,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n 442\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fMULTICLICK (9)\n \n HAL Component\n \n@@ -20632,15 +20632,15 @@\n \n PARAMETERS\n multiclick.N.invert-input bit rw (default: FALSE)\n If FALSE (the default), clicks start with rising edges. If TRUE, clicks start with falling edges.\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 443\n \n \fMULTICLICK (9)\n \n HAL Component\n \n@@ -20659,15 +20659,15 @@\n Sebastian Kuzminsky\n \n LICENSE\n GPL\n \n 444\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n MULTISWITCH(9)\n \n@@ -20704,15 +20704,15 @@\n ArcEye schooner30@tiscali.co.uk / Andy Pugh andy@bodgesoc.org\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 445\n \n \fHAL Component\n \n MUX16(9)\n \n@@ -20761,30 +20761,30 @@\n mux2(9), mux4(9), mux8(9), mux_generic(9).\n \n AUTHOR\n Chris S Morley\n \n 446\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fMUX16(9)\n \n HAL Component\n \n MUX16(9)\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 447\n \n \fMUX2(9)\n \n HAL Component\n \n@@ -20813,15 +20813,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 448\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n MUX4(9)\n \n@@ -20862,15 +20862,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 449\n \n \fHAL Component\n \n MUX8(9)\n \n@@ -20924,15 +20924,15 @@\n Stuart Stevenson\n \n LICENSE\n GPL\n \n 450\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fMUX_GENERIC(9)\n \n HAL Component\n \n@@ -21046,15 +21046,15 @@\n Chris Radek\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 453\n \n \fNOT (9)\n \n HAL Component\n \n@@ -21080,15 +21080,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 454\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fOFFSET (9)\n \n HAL Component\n \n@@ -21122,15 +21122,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 455\n \n \fOHMIC(9)\n \n HAL Component\n \n@@ -21181,15 +21181,15 @@\n ohmic.N.ohmic-on bit out\n True if ohmic circuit is closed (material is sensed)\n ohmic.N.ohmic-volts float out\n Calculated ohmic voltage\n \n 456\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fOHMIC(9)\n \n HAL Component\n \n@@ -21222,15 +21222,15 @@\n Rod Webster\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 457\n \n \fONESHOT (9)\n \n HAL Component\n \n@@ -21277,15 +21277,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n 458\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fOPTO_AC5(9)\n \n HAL Component\n \n@@ -21388,15 +21388,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 461\n \n \fORIENT (9)\n \n HAL Component\n \n@@ -21445,15 +21445,15 @@\n orient.N.angle float in\n orient target position in degrees, 0 <= angle < 360\n orient.N.command float out\n target spindle position, input to PID command\n \n 462\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fORIENT (9)\n \n HAL Component\n \n@@ -21470,15 +21470,15 @@\n Michael Haberler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 463\n \n \fHAL Component\n \n PID(9)\n \n@@ -21844,15 +21844,15 @@\n plasmac.arc-voltage-offset float in\n offset to set arc voltage to 0 at 0 volts\n plasmac.arc-voltage-scale float in\n scale to convert arc_voltage input to actual volts\n \n 470\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fPLASMAC(9)\n \n HAL Component\n \n@@ -21901,15 +21901,15 @@\n plasmac.debug-print bit in\n if true will print state changes as a debug aid\n plasmac.external-estop bit in\n external E-stop input\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 471\n \n \fPLASMAC(9)\n \n HAL Component\n \n@@ -21958,15 +21958,15 @@\n plasmac.mesh-arc-ok bit in (default: FALSE)\n don\u2019t require arc ok for mesh mode\n plasmac.mesh-enable bit in\n enable mesh cutting mode\n \n 472\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fPLASMAC(9)\n \n HAL Component\n \n@@ -22015,15 +22015,15 @@\n plasmac.paused-motion-speed float in\n multiplier for speed of motion when paused, from -1 to 1\n plasmac.pid-d-gain float in\n derivative gain input [mode 0 & mode 1]\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 473\n \n \fPLASMAC(9)\n \n HAL Component\n \n@@ -22072,15 +22072,15 @@\n plasmac.scribe-start bit in\n start a new scribe, connect to spindle.1.on\n plasmac.setup-feed-rate float in\n feed rate for moves to pierce and cut heights (machine units per minute)\n \n 474\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fPLASMAC(9)\n \n HAL Component\n \n@@ -22129,15 +22129,15 @@\n plasmac.voidlock-slope s32 in (default: 500)\n voidlock slope in volts per second\n plasmac.x-offset s32 in\n offset to apply to axis x for consumable change and cut recovery (scaled units)\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 475\n \n \fPLASMAC(9)\n \n HAL Component\n \n@@ -22186,15 +22186,15 @@\n plasmac.offset-scale float out\n offset scale, connect to axis..eoffset-scale\n plasmac.ohmic-enable bit out\n on only while probing\n \n 476\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fPLASMAC(9)\n \n HAL Component\n \n@@ -22243,15 +22243,15 @@\n plasmac.torch-on bit out\n turn torch on, connect to your torch on input\n plasmac.torch-time float out\n torch on time of current job\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 477\n \n \fPLASMAC(9)\n \n HAL Component\n \n@@ -22288,15 +22288,15 @@\n Phillip A Carter & Gregory D Carl\n \n LICENSE\n GPLv2 or greater\n \n 478\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fPWMGEN (9)\n \n HAL Component\n \n@@ -22455,15 +22455,15 @@\n Stephen Wille Padnos\n \n LICENSE\n GPL\n \n 482\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL User\u2019s Manual\n \n SAMPLER(9)\n \n@@ -22577,15 +22577,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 485\n \n \fSCALED_S32_SUMS(9)\n \n HAL Component\n \n@@ -22620,15 +22620,15 @@\n Chris S Morley\n \n LICENSE\n GPL\n \n 486\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSELECT8(9)\n \n HAL Component\n \n@@ -22656,15 +22656,15 @@\n Stephen Wille Padnos\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 487\n \n \fSERPORT (9)\n \n HAL Component\n \n@@ -22714,15 +22714,15 @@\n PARAMETERS\n serport.N.pin-3-out-invert bit rw\n serport.N.pin-4-out-invert bit rw\n serport.N.pin-7-out-invert bit rw\n \n 488\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSERPORT (9)\n \n HAL Component\n \n@@ -22731,15 +22731,15 @@\n serport.N.ioaddr u32 r\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 489\n \n \fSETSERIAL(9)\n \n HAL Component\n \n@@ -22970,15 +22970,15 @@\n sim-axis-hardware.N.Zmaxsw-lower float in\n sim-axis-hardware.N.Amaxsw-lower float in\n sim-axis-hardware.N.Umaxsw-lower float in\n sim-axis-hardware.N.Vmaxsw-lower float in\n \n 494\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSIM_AXIS_HARDWARE(9)\n \n HAL Component\n \n@@ -23033,15 +23033,15 @@\n sim-axis-hardware.N.Xmaxsw-out bit out\n Max limit switch\n sim-axis-hardware.N.Xminsw-out bit out\n min limit switch\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 495\n \n \fSIM_AXIS_HARDWARE(9)\n \n HAL Component\n \n@@ -23098,15 +23098,15 @@\n sim-axis-hardware.N.Vminsw-homesw-out bit out\n sim-axis-hardware.N.Vbothsw-homesw-out bit out\n sim-axis-hardware.N.limit-offset float in (default: .01)\n how much the limit switches are offset from inputted position. added to max, subtracted from min\n \n 496\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSIM_AXIS_HARDWARE(9)\n \n HAL Component\n \n@@ -23116,15 +23116,15 @@\n Chris S Morley\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 497\n \n \fSIM_ENCODER(9)\n \n HAL Component\n \n@@ -23237,15 +23237,15 @@\n Dewey Garrett\n \n LICENSE\n GPL\n \n 500\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSIM_MATRIX_KB(9)\n \n HAL Component\n \n@@ -23284,15 +23284,15 @@\n Chris S Morley\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 501\n \n \fSIM_PARPORT (9)\n \n HAL Component\n \n@@ -23343,15 +23343,15 @@\n sim-parport.N.pin-04-out-fake bit out\n sim-parport.N.pin-05-out-fake bit out\n sim-parport.N.pin-06-out-fake bit out\n sim-parport.N.pin-07-out-fake bit out\n \n 502\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSIM_PARPORT (9)\n \n HAL Component\n \n@@ -23409,15 +23409,15 @@\n sim-parport.N.pin-03-out-invert bit rw\n sim-parport.N.pin-04-out-invert bit rw\n sim-parport.N.pin-05-out-invert bit rw\n sim-parport.N.pin-06-out-invert bit rw\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 503\n \n \fSIM_PARPORT (9)\n \n HAL Component\n \n@@ -23446,15 +23446,15 @@\n Chris S Morley\n \n LICENSE\n GPL\n \n 504\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSIM_SPINDLE(9)\n \n HAL Component\n \n@@ -23487,15 +23487,15 @@\n Michael Haberler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 505\n \n \fSIMPLE_TP(9)\n \n HAL Component\n \n@@ -23530,15 +23530,15 @@\n Chris S Morley\n \n LICENSE\n GPL\n \n 506\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSPHEREPROBE(9)\n \n HAL Component\n \n@@ -23571,15 +23571,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 507\n \n \fSPINDLE(9)\n \n HAL Component\n \n@@ -23630,15 +23630,15 @@\n spindle.N.current-gear u32 out\n Currently selected gear.\n spindle.N.at-speed bit out\n TRUE when the spindle is at speed\n \n 508\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSPINDLE(9)\n \n HAL Component\n \n@@ -23683,15 +23683,15 @@\n spindle.N.speed-tolerance.x float in\n Tolerance for \u2019at-speed\u2019 signal (in RPM). Actual spindle speeds within this amount of the commanded speed will cause the at-speed signal to go TRUE.\n spindle.N.zero-tolerance.x float in\n Tolerance for \u2019zero-speed\u2019 signal (in RPM).\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 509\n \n \fSPINDLE(9)\n \n HAL Component\n \n@@ -23706,15 +23706,15 @@\n Les Newell\n \n LICENSE\n GPL\n \n 510\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSPINDLE_MONITOR(9)\n \n HAL Component\n \n@@ -23745,15 +23745,15 @@\n Sebastian Kuzminsky\n \n LICENSE\n gpl v2 or higher\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 511\n \n \fSSERIAL(9)\n \n HAL Component\n \n@@ -24450,15 +24450,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 525\n \n \fLinuxCNC Documentation\n \n STREAMER(9)\n \n@@ -24587,15 +24587,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 528\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fSUPPLY (9)\n \n HAL Component\n \n@@ -24689,15 +24689,15 @@\n thc.requested-vel float in\n Connect to motion.requested-vel\n thc.volts-requested float in\n Tip Volts current_vel >= min_velocity requested\n \n 530\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n THC(9)\n \n@@ -24740,15 +24740,15 @@\n John Thornton\n \n LICENSE\n GPLv2 or greater\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 531\n \n \fTHCUD(9)\n \n HAL Component\n \n@@ -24792,15 +24792,15 @@\n net thc-enable thcud.enable <= pyvcp.thc-enable\n \n FUNCTIONS\n thcud (requires a floating-point thread)\n \n 532\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fTHCUD(9)\n \n HAL Component\n \n@@ -24844,15 +24844,15 @@\n John Thornton\n \n LICENSE\n GPLv2 or greater\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 533\n \n \fTHREADS(9)\n \n HAL Component\n \n@@ -24921,15 +24921,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 535\n \n \fHAL Component\n \n TIME(9)\n \n@@ -24983,15 +24983,15 @@\n loadrt time\n addf time.0 servo-thread\n net cycle-timer\n time.0.start <= halui.program.is-running\n \n 536\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n TIME(9)\n \n@@ -25037,15 +25037,15 @@\n John Thornton, itaib, Moses McKnight\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 537\n \n \fTIMEDELAY (9)\n \n HAL Component\n \n@@ -25075,15 +25075,15 @@\n Jeff Epler, based on works by Stephen Wille Padnos and John Kasunich\n \n LICENSE\n GPL\n \n 538\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fTIMEDELTA(9)\n \n HAL Component\n \n@@ -25127,15 +25127,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 539\n \n \fHAL Component\n \n TOF(9)\n \n@@ -25167,15 +25167,15 @@\n Chad Woitas\n \n LICENSE\n GPL\n \n 540\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fTOGGLE(9)\n \n HAL Component\n \n@@ -25212,15 +25212,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 541\n \n \fTOGGLE2NIST (9)\n \n HAL Component\n \n@@ -25264,15 +25264,15 @@\n Anders Wallin\n \n LICENSE\n GPL\n \n 542\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fTON (9)\n \n HAL Component\n \n@@ -25304,15 +25304,15 @@\n Chad Woitas\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 543\n \n \fHAL Component\n \n TP(9)\n \n@@ -25344,15 +25344,15 @@\n Chad Woitas\n \n LICENSE\n GPL\n \n 544\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fTPCOMP(9)\n \n HAL Component\n \n@@ -25387,15 +25387,15 @@\n Dewey Garrett\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 545\n \n \fTRISTATE_BIT (9)\n \n HAL Component\n \n@@ -25423,15 +25423,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 546\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fTRISTATE_FLOAT (9)\n \n HAL Component\n \n@@ -25459,15 +25459,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 547\n \n \fUPDOWN (9)\n \n HAL Component\n \n@@ -25508,15 +25508,15 @@\n Stephen Wille Padnos\n \n LICENSE\n GPL\n \n 548\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fUSERKINS(9)\n \n HAL Component\n \n@@ -25571,15 +25571,15 @@\n the halcompile utility but it is not accessible to kinematics\n functions.\n 2 Hal pins and parameters needed in kinematics functions\n (kinematicsForward(), kinematicsInverse()) must\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 549\n \n \fUSERKINS(9)\n \n HAL Component\n \n@@ -25599,15 +25599,15 @@\n Dewey Garrett\n \n LICENSE\n GPL\n \n 550\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n WATCHDOG(9)\n \n@@ -25690,15 +25690,15 @@\n Jeff Epler\n \n LICENSE\n GPL\n \n 552\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fWEIGHTED_SUM(9)\n \n HAL Component\n \n@@ -25798,15 +25798,15 @@\n Dewey Garrett\n \n LICENSE\n GPL\n \n 554\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \fHAL Component\n \n XOR2(9)\n \n@@ -25839,15 +25839,15 @@\n John Kasunich\n \n LICENSE\n GPL\n \n LinuxCNC Documentation\n \n-2024-04-27\n+2025-05-31\n \n 555\n \n \fXYZAB_TDR_KINS(9)\n \n HAL Component\n \n@@ -25879,12 +25879,12 @@\n David Mueller\n \n LICENSE\n GPL\n \n 556\n \n-2024-04-27\n+2025-05-31\n \n LinuxCNC Documentation\n \n \f\n"}]}]}]}]}, {"source1": "linuxcnc-doc-es_2.9.1-2_all.deb", "source2": "linuxcnc-doc-es_2.9.1-2_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2023-11-05 11:59:16.000000 debian-binary\n -rw-r--r-- 0 0 0 1216 2023-11-05 11:59:16.000000 control.tar.xz\n--rw-r--r-- 0 0 0 26264552 2023-11-05 11:59:16.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 26264732 2023-11-05 11:59:16.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./control", "source2": "./control", "unified_diff": "@@ -1,13 +1,13 @@\n Package: linuxcnc-doc-es\n Source: linuxcnc\n Version: 2.9.1-2\n Architecture: all\n Maintainer: LinuxCNC Developers \n-Installed-Size: 26995\n+Installed-Size: 26994\n Recommends: xdg-utils\n Suggests: pdf-viewer\n Breaks: linuxcnc-uspace (<= 2.9.0~pre0+git20220402.2500863908-4)\n Replaces: linuxcnc-uspace (<= 2.9.0~pre0+git20220402.2500863908-4)\n Provides: linuxcnc-doc\n Section: misc\n Priority: optional\n"}, {"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -4,18 +4,18 @@\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/applications/\n -rw-r--r-- 0 root (0) root (0) 331 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-documentation_es.desktop\n -rw-r--r-- 0 root (0) root (0) 357 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-gcoderef_es.desktop\n -rw-r--r-- 0 root (0) root (0) 372 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-gettingstarted_es.desktop\n -rw-r--r-- 0 root (0) root (0) 361 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-integratorinfo_es.desktop\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/\n--rw-r--r-- 0 root (0) root (0) 824869 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Developer_es.pdf\n--rw-r--r-- 0 root (0) root (0) 26167821 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Documentation_es.pdf\n--rw-r--r-- 0 root (0) root (0) 406185 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_es.pdf\n--rw-r--r-- 0 root (0) root (0) 150239 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Integrator_es.pdf\n+-rw-r--r-- 0 root (0) root (0) 824822 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Developer_es.pdf\n+-rw-r--r-- 0 root (0) root (0) 26167099 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Documentation_es.pdf\n+-rw-r--r-- 0 root (0) root (0) 406179 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_es.pdf\n+-rw-r--r-- 0 root (0) root (0) 150218 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Integrator_es.pdf\n -rw-r--r-- 0 root (0) root (0) 2093 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/asciidoc-markup_es.adoc.gz\n -rw-r--r-- 0 root (0) root (0) 14667 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/gcode_es.html\n -rw-r--r-- 0 root (0) root (0) 2001 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/rtfaults_es.adoc\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc-doc-es/\n -rw-r--r-- 0 root (0) root (0) 10751 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc-doc-es/changelog.Debian.gz\n -rw-r--r-- 0 root (0) root (0) 42238 2023-10-08 12:02:22.000000 ./usr/share/doc/linuxcnc-doc-es/copyright\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc-base/\n"}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_es.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_es.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_es.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_es.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Developer Manual V2.9.1, 04 Nov 2023'\n+Title: 'Developer Manual V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Developer Manual V2.9.1, 04 Nov 2023\n+Developer Manual V2.9.1, 06 Nov 2023\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n ii\n \n \u00cdndice general\n 1. Introduction\n \n 1\n@@ -117,15 +117,15 @@\n \n 15\n \n 3.8.3.1. Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 16\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n iii\n \n 3.8.3.2. Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 16\n \n@@ -281,15 +281,15 @@\n \n 19\n \n 3.8.16.1.Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 20\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n iv\n \n 3.8.16.2.Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 20\n \n@@ -449,15 +449,15 @@\n \n 3.21.3.Process line\n \n 27\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n v\n \n 3.21.4.Configuration Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 28\n \n@@ -625,15 +625,15 @@\n \n 40\n \n 4.14.Others . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 40\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n vi\n \n 5. Coding Style\n \n 41\n \n@@ -781,15 +781,15 @@\n \n 8.4.1. LinuxCNC official Git repo\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 53\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n vii\n \n 8.4.2. Use of Git in the LinuxCNC project . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 54\n \n@@ -876,15 +876,15 @@\n 10.2.GNU Free Documentation License\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 64\n 64\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 1 / 68\n \n Cap\u00edtulo 1\n \n Introduction\n \n@@ -904,15 +904,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 2 / 68\n \n Cap\u00edtulo 2\n \n HAL General Reference\n 2.1. HAL Entity Names\n@@ -941,15 +941,15 @@\n functional blocks, each block might have several channels, and each channel has one or more pins.\n This results in a structure that resembles a directory tree. Even though halcmd doesn\u2019t recognize the\n tree structure, proper choice of naming conventions will let it group related items together (since it\n sorts the names). In addition, higher level tools can be designed to recognize such structure, if the\n names provide the necessary information. To do that, all HAL components should follow these rules:\n Dots (\u201c.\u201d) separate levels of the hierarchy. This is analogous to the slash (\u201c/\u201d) in a filename.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 3 / 68\n \n Hyphens (\u201c-\u201d) separate words or fields in the same level of the hierarchy.\n HAL components should not use underscores or \u201cMixedCase\u201d. 1\n Use only lowercase letters and numbers in names.\n \n@@ -989,15 +989,15 @@\n channels (due to hardware limitations). The frequency parameter should use \u201d0-3\u201d as the channel\n number.\n 1 Underlined characters have been removed, but there are still a few cases of broken mixture, for example pid.0.Pgain in\n place of pid.0.p-gain.\n 2 One exception to the \u201dchannel numbers start at zero\u201d 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\n debate over whether this is a bug or a feature.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 4 / 68\n \n \n An individual I/O channel might have just a single HAL pin associated with it, but most have more\n than one. For example, a digital input has two pins, one is the state of the physical pin, the other\n is the same thing inverted. That allows the configurator to choose between active high and active\n@@ -1039,15 +1039,15 @@\n ppmc.0.write\n Writes all outputs (step generators, pwm, DACs, and digital) on the first Pico Systems ppmc\n board.\n 3 Note to driver programmers: Do NOT implement separate functions for different I/O types unless they are interruptible\n and can work in independent threads. If interrupting an encoder read, reading digital inputs, and then resuming the encoder\n read will cause problems, then implement a single function that does everything.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 5 / 68\n \n Cap\u00edtulo 3\n \n Code Notes\n 3.1. Intended audience\n@@ -1077,15 +1077,15 @@\n follow this distinction, but the internals of the motion controller do.\n JOINT - A joint is one of the movable parts of the machine. Joints are distinct from axes, although\n the two terms are sometimes (mis)used to mean the same thing. In LinuxCNC, a joint is a physical\n 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\n are the linear actuators of a hexapod. Every joint has a motor or actuator of some type associated\n with it. Joints do not necessarily correspond to the X, Y, and Z axes, although for machines with\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 6 / 68\n \n trivial kinematics that may be the case. Even on those machines, joint position and axis position\n are fundamentally different things. In this document, the terms joint and axis are used carefully\n to respect their distinct meanings. Unfortunately that isn\u2019t necessarily true everywhere else. In\n 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\n@@ -1115,19 +1115,19 @@\n 3.4. Architecture overview\n There are four components contained in the LinuxCNC Architecture: a motion controller (EMCMOT),\n a discrete IO controller (EMCIO), a task executor which coordinates them (EMCTASK) and several\n text-mode and graphical User Interfaces. Each of them will be described in the current document,\n both from the design point of view and from the developers point of view (where to find needed data,\n how to easily extend/modify things, etc.).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 7 / 68\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 8 / 68\n \n 3.4.1. LinuxCNC software architecture\n At the coarsest level, LinuxCNC is a hierarchy of three controllers: the task level command handler\n and program interpreter, the motion controller, and the discrete I/O controller. The discrete I/O controller is implemented as a hierarchy of controllers, in this case for spindle, coolant, and auxiliary\n (e.g., estop, lube) subsystems. The task controller coordinates the actions of the motion and discrete\n@@ -1158,19 +1158,19 @@\n processes. For realtime motion control, the script first loads the default tpmod and homemod modules\n and then loads the kinematics and motion modules according to settings in halfiles specified by the\n INI file.\n Custom (user-built) homing or trajectory-planning modules can be used in place of the default modules\n via INI file settings or command line options. Custom modules must implement all functions used by\n the default modules. The halcompile utility can be used to create a custom module.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 9 / 68\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 10 / 68\n \n 3.6. Block diagrams and Data Flow\n The following figure is a block diagram of a joint controller. There is one joint controller per joint.\n The joint controllers work at a lower level than the kinematics, a level where all joints are completely\n independent. All the data for a joint is in a single joint structure. Some members of that structure are\n@@ -1184,15 +1184,15 @@\n mode, it is determined by the traj planner? In free mode, it is either copied from actualPos, or\n generated by applying forward kins to (2) or (3).\n emcmotStatus->joints[n].coarse_pos - This is the desired position, in joint coordinates, but before\n interpolation. It is updated at the traj rate, not the servo rate. In coord mode, it is generated by\n applying inverse kins to (1) In teleop mode, it is generated by applying inverse kins to (1) In free\n mode, it is copied from (3), I think.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 11 / 68\n \n \u2019emcmotStatus->joints[n].pos_cmd - This is the desired position, in joint coords, after interpolation.\n A new set of these coords is generated every servo period. In coord mode, it is generated from (2)\n by the interpolator. In teleop mode, it is generated from (2) by the interpolator. In free mode, it is\n generated by the free mode traj planner.\n@@ -1211,26 +1211,26 @@\n because one or more axes aren\u2019t homed. In that case, the options are: A) fake it by copying (1), or\n B) admit that we don\u2019t really know the Cartesian coordinates, and simply don\u2019t update actualPos.\n Whatever approach is used, I can see no reason not to do it the same way regardless of the operating\n mode. I would propose the following: If there are forward kins, use them, unless they don\u2019t work\n because of unhomed axes or other problems, in which case do (B). If no forward kins, do (A), since\n otherwise actualPos would never get updated.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 12 / 68\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 3.7. Homing\n 3.7.1. Homing state diagram\n \n 13 / 68\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 14 / 68\n \n 3.7.2. Another homing diagram\n \n 3.8. Commands\n The commands are implemented by a large switch statement in the function emcmotCommandHandler(), which is called at the servo rate. More on that function later.\n@@ -1246,15 +1246,15 @@\n It does not disable the motion controller or change any state information, it simply cancels any motion\n that is currently in progress.1\n 1 It seems that the higher level code (TASK and above) also use ABORT to clear faults. Whenever there is a persistent fault\n (such as being outside the hardware limit switches), the higher level code sends a constant stream of ABORTs to the motion\n controller trying to make the fault go away. Thousands of them\u2026. That means that the motion controller should avoid persistent\n faults. This needs to be looked into.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 15 / 68\n \n 3.8.1.1. Requirements\n None. The command is always accepted and acted on immediately.\n 3.8.1.2. Results\n In free mode, the free mode trajectory planners are disabled. That results in each joint stopping as fast\n@@ -1286,15 +1286,15 @@\n free mode. However the trajectory planner per se is not used, instead movement is controlled by a\n velocity vector. Movement in teleop mode is much like jogging, except that it is done in Cartesian space\n instead of joint space. On a machine with trivial kinematics, there is little difference between teleop\n mode and free mode, and GUIs for those machines might never even issue this command. However\n for non-trivial machines like robots and hexapods, teleop mode is used for most user commanded jog\n type movements.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 16 / 68\n \n 3.8.3.1. Requirements\n The command handler will reject the TELEOP command with an error message if the kinematics\n cannot be activated because the one or more joints have not been homed. In addition, if any joint is in\n motion (GET_MOTION_INPOS_FLAG() == FALSE), then the command will be ignored (with no error\n@@ -1329,15 +1329,15 @@\n None. The command can be issued at any time, and will always be accepted.\n 3.8.5.2. Results\n If the controller is already enabled, nothing. If not, the controller is enabled. Queues and interpolators\n are flushed. Any movement or homing operations are terminated. The amp-enable outputs associated\n with active joints are turned on. If forward kinematics are not available, the machine is switched to\n free mode.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 17 / 68\n \n 3.8.6. DISABLE\n The DISABLE command disables the motion controller.\n 3.8.6.1. Requirements\n None. The command can be issued at any time, and will always be accepted.\n@@ -1365,15 +1365,15 @@\n Currently, nothing. (A call to the old extAmpEnable function is currently commented out.) Eventually\n it will set the amp enable HAL pin false.\n \n 3.8.9. ACTIVATE_JOINT\n The ACTIVATE_JOINT command turns on all the calculations associated with a single joint, but does\n not change the joint\u2019s amp enable output pin.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 18 / 68\n \n 3.8.9.1. Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.9.2. Results\n Calculations for the specified joint are enabled. The amp enable pin is not changed, however, any\n@@ -1400,15 +1400,15 @@\n The DISABLE_WATCHDOG command disables a hardware based watchdog (if present).\n 3.8.12.1. Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.12.2. Results\n Actualmente nada. El antiguo watchdog era una cosa extra\u00f1a que utilizaba una tarjeta de sonido\n espec\u00edfica. Es posible que en el futuro se dise\u00f1e una nueva interfaz de watchdog.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 19 / 68\n \n 3.8.13. PAUSE\n The PAUSE command stops the trajectory planner. It has no effect in free or teleop mode. At this point\n I don\u2019t know if it pauses all motion immediately, or if it completes the current move and then pauses\n before pulling another move from the queue.\n@@ -1436,15 +1436,15 @@\n \n 3.8.16. SCALE\n The SCALE command scales all velocity limits and commands by a specified amount. It is used to\n implement feed rate override and other similar functions. The scaling works in free, teleop, and coord\n modes, and affects everything, including homing velocities, etc. However, individual joint velocity\n limits are unaffected.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 20 / 68\n \n 3.8.16.1. Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.16.2. Results\n All velocity commands are scaled by the specified constant.\n@@ -1474,15 +1474,15 @@\n 3.8.19. JOG_CONT\n The JOG_CONT command initiates a continuous jog on a single joint. A continuous jog is generated\n by setting the free mode trajectory planner\u2019s target position to a point beyond the end of the joint\u2019s\n range of travel. This ensures that the planner will move constantly until it is stopped by either the joint\n limits or an ABORT command. Normally, a GUI sends a JOG_CONT command when the user presses\n a jog button, and ABORT when the button is released.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 21 / 68\n \n 3.8.19.1. Requirements\n The command handler will reject the JOG_CONT command with an error message if machine is not in\n free mode, or if any joint is in motion (GET_MOTION_INPOS_FLAG() == FALSE), or if motion is not\n enabled. It will also silently ignore the command if the joint is already at or beyond its limit and the\n@@ -1519,15 +1519,15 @@\n location, however they also stop when they hit a limit, or on an ABORT command.\n 3.8.21.1. Requirements\n The command handler will silently reject the JOG_ABS command if machine is not in free mode, or if\n any joint is in motion (GET_MOTION_INPOS_FLAG() == FALSE), or if motion is not enabled. It will\n also silently ignore the command if the joint is already at or beyond its limit and the commanded jog\n would make it worse.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 22 / 68\n \n 3.8.21.2. Results\n The free mode trajectory planner for the joint identified by emcmotCommand->axis is activated, the\n target position is set to emcmotCommand->offset, and the velocity limit is set to emcmotCommand>vel. The free mode trajectory planner will generate a smooth trapezoidal move from the present\n position to the target position. The planner can correctly handle changes in the target position that\n@@ -1560,15 +1560,15 @@\n (More later)\n \n 3.8.27. SET_xix\n There are approximately 15 SET_xxx commands, where xxx is the name of some configuration parameter. It is anticipated that there will be several more SET commands as more parameters are\n added. I would like to find a cleaner way of setting and reading configuration parameters. The existing methods require many lines of code to be added to multiple files each time a parameter is added.\n Much of that code is identical or nearly identical for every parameter.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 23 / 68\n \n 3.9. Backlash and Screw Error Compensation\n + FIXME Compensaci\u00f3n de holguras y errores de tornillos\n \n 3.10. Task controller (EMCTASK)\n@@ -1586,15 +1586,15 @@\n iocontrol main loop process:\n registers for SIGTERM and SIGINT signals from the OS.\n checks to see it HAL inputs have changed\n checks if read_tool_inputs() indicates the tool change is finished and set emcioStatus.status\n checks for I/O related NML messages\n nml message numbers: from emc.hh:\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 24 / 68\n \n #define EMC_IO_INIT_TYPE\n ((NMLTYPE) 1601)\n #define EMC_TOOL_STAT_TYPE\n ((NMLTYPE) 1199)\n@@ -1642,15 +1642,15 @@\n to the data, and the size of the data.\n No memory for data storage is allocated.\n \n 3.16. SharedMemory\n Provides a block of shared memory along with a semaphore (inherited from the Semaphore class).\n Creation and destruction of the semaphore is handled by the SharedMemory constructor and destructor.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 25 / 68\n \n 3.17. ShmBuffer\n Class for passing NML messages between local processes using a shared memory buffer. Much of\n internal workings are inherited from the CMS class.\n \n@@ -1684,15 +1684,15 @@\n message buffer or just buffer). This buffer may exist as a shared memory block accessed by other\n CMS/NML processes, or a local and private buffer for data being transferred by network or serial\n interfaces.\n The buffer is dynamically allocated at run time to allow for greater flexibility of the CMS/NML subsystem. The buffer size must be large enough to accommodate the largest message, a small amount\n for internal use and allow for the message to be encoded if this option is chosen (encoded data will\n be covered later). The following figure is an internal view of the buffer space.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 26 / 68\n \n CMS buffer The CMS base class is primarily responsible for creating the communications pathways\n and interfacing to the operating system.\n \n 3.21. Configuration file format\n@@ -1710,15 +1710,15 @@\n neut - a boolean to indicate if the data in the buffer is encoded in a machine independent format, or\n raw.\n RPC# - Obsolete - Place holder retained for backward compatibility only.\n buffer# - A unique ID number used if a server controls multiple buffers.\n max_procs - is the maximum processes allowed to connect to this buffer.\n key - is a numerical identifier for a shared memory buffer\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 27 / 68\n \n 3.21.2. Type specific configs\n The buffer type implies additional configuration options whilst the host operating system precludes\n certain combinations. In an attempt to distill published documentation in to a coherent format, only\n the SHMEM buffer type will be covered.\n@@ -1752,15 +1752,15 @@\n host - specifies where on the network this process is running.\n ops - gives the process read only, write only, or read/write access to the buffer.\n server - specifies if this process will running a server for this buffer.\n timeout - sets the timeout characteristics for accesses to the buffer.\n master - indicates if this process is responsible for creating and destroying the buffer.\n c_num - an integer between zero and (max_procs -1)\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 28 / 68\n \n 3.21.4. Configuration Comments\n Some of the configuration combinations are invalid, whilst others imply certain constraints. On a\n Linux system, GLOBMEM is obsolete, whilst PHANTOM is only really useful in the testing stage of an\n application, likewise for FILEMEM. LOCMEM is of little use for a multi-process application, and only\n@@ -1798,15 +1798,15 @@\n Not to be confused with NMLmsg, RCS_STAT_MSG, or RCS_CMD_MSG.\n NML is responsible for parsing the config file, configuring the cms buffers and is the mechanism for\n routing messages to the correct buffer(s). To do this, NML creates several lists for:\n cms buffers created or connected to.\n processes and the buffers they connect to\n a long list of format functions for each message type\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 29 / 68\n \n This last item is probably the nub of much of the malignment of libnml/rcslib and NML in general. Each\n message that is passed via NML requires a certain amount of information to be attached in addition to\n the actual data. To do this, several formatting functions are called in sequence to assemble fragments\n of the overall message. The format functions will include NML_TYPE, MSG_TYPE, in addition to the\n@@ -1845,15 +1845,15 @@\n is to be used.\n \n 3.23. Adding custom NML commands\n LinuxCNC is pretty awesome, but some parts need some tweaking. As you know communication is\n done through NML channels, the data sent through such a channel is one of the classes defined\n in emc.hh (implemented in emc.cc). If somebody needs a message type that doesn\u2019t exist, he should\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 30 / 68\n \n follow these steps to add a new one. (The Message I added in the example is called EMC_IO_GENERIC\n (inherits EMC_IO_CMD_MSG (inherits RCS_CMD_MSG)))\n 1. add the definition of the EMC_IO_GENERIC class to emc2/src/emc/nml_intf/emc.hh\n 2. add the type define: #define EMC_IO_GENERIC_TYPE ((NMLTYPE) 1605)\n@@ -1878,15 +1878,15 @@\n information is copied from the tool table\u2019s source pocket to pocket 0 (which represents the spindle),\n replacing whatever tool information was previously there.\n nota\n In LinuxCNC configured for nonrandom toolchanger, tool 0 (T0) has special meaning: \u201dno tool\u201d. T0\n may not appear in the tool table file, and changing to T0 will result in LinuxCNC thinking it has got\n an empty spindle.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 31 / 68\n \n 3.24.1.2. Random Toolchangers\n Random toolchanger hardware swaps the tool in the spindle (if any) with the requested tool on tool\n change. Thus the pocket that a tool resides in changes as it is swapped in and out of the spindle.\n An example of random toolchanger hardware is a carousel toolchanger.\n@@ -1923,15 +1923,15 @@\n spindle.\n diameter\n Diameter of the tool, in machine units.\n tool length offset\n Tool length offset (also called TLO), in up to 9 axes, in machine units. Axes that don\u2019t have a\n specified TLO get 0.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 32 / 68\n \n 3.24.3. G-codes affecting tools\n The G-codes that use or affect tool information are:\n 3.24.3.1. Txxx\n Tells the toolchanger hardware to prepare to switch to a specified tool xxx.\n@@ -1971,15 +1971,15 @@\n ii. load_tool() with a random toolchanger config swaps tool information between pocket\n 0 (the spindle) and the selected pocket, then saves the tool table.\n \n 2. Back in interp, settings->current_pocket is assigned the new tooldata index from settings->select\n (set by Txxx). The relevant numbered parameters (#5400-#5413) are updated with the new tool\n information from pocket 0 (spindle).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 33 / 68\n \n 3.24.3.3. G43/G43.1/G49\n Apply tool length offset. G43 uses the TLO of the currently loaded tool, or of a specified tool if the\n H-word is given in the block. G43.1 gets TLO from axis-words in the block. G49 cancels the TLO (it\n uses 0 for the offset for all axes).\n@@ -2020,15 +2020,15 @@\n to pocket 0 (the spindle) in interp\u2019s copy of the tool table, settings->tool_table. (This copy\n is not needed on random tool changer machines because there, tools don\u2019t have a home pocket\n and instead we just updated the tool in pocket 0 directly.). The relevant numbered parameters\n (#5400-#5413) are updated from the tool information in the spindle (by copying the information\n from interp\u2019s settings->tool_table to settings->parameters). (FIXME: this is a buglet, the\n params should only be updated if it was the current tool that was modified).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 34 / 68\n \n 5. 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\u2019s pocket 0 as well, via a second\n call to SET_TOOL_TABLE_ENTRY(). (This second tool-table update is not needed on random toolchanger machines because there, tools don\u2019t have a home pocket and instead we just updated\n the tool in pocket 0 directly.)\n 3.24.3.5. M61\n@@ -2062,15 +2062,15 @@\n Tool number of the tool currently installed in the spindle. Exported on the HAL pin iocontrol.0.tool-n\n (s32).\n emcioStatus.tool.toolTable[]\n An array of CANON_TOOL_TABLE structures, CANON_POCKETS_MAX long. Loaded from the tool table\n file at startup and maintained there after. Index 0 is the spindle, indexes 1-(CANON_POCKETS_MAX1) are the pockets in the toolchanger. This is a complete copy of the tool information, maintained\n separately from Interp\u2019s settings.tool_table.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 35 / 68\n \n 3.24.4.2. interp\n \n settings is of type settings, defined as struct setup_struct in src/emc/rs274ngc/interp_internal.hh\n settings.selected_pocket\n@@ -2110,15 +2110,15 @@\n are meaningless; the pocket numbers in the tool table file are ignored and tools are assigned to\n tool_table slots sequentially.\n \n settings.tool_change_at_g30 , settings.tool_change_quill_up , settings.tool_change_with_spindle_\n These are set from INI variables in the [EMCIO] section, and determine how tool changes are\n performed.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 36 / 68\n \n 3.25. Reckoning of joints and axes\n 3.25.1. In the status buffer\n The status buffer is used by Task and the UIs.\n FIXME: axis_mask and axes overspecify the number of axes\n@@ -2146,15 +2146,15 @@\n 3.25.2. In Motion\n The Motion controller realtime component first gets the number of joints from the num_joints loadtime parameter. This determines how many joints worth of HAL pins are created at startup.\n Motion\u2019s number of joints can be changed at runtime using the EMCMOT_SET_NUM_JOINTS command\n from Task.\n The Motion controller always operates on EMCMOT_MAX_AXIS axes. It always creates nine sets of axis.*.*\n pins.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n Cap\u00edtulo 4\n \n NML Messages\n List of NML messages.\n For details see src/emc/nml_intf/emc.hh.\n \n@@ -2186,15 +2186,15 @@\n EMC_JOINT_UNHOME_TYPE\n EMC_JOINT_STAT_TYPE\n \n 4.3. AXIS\n \n 37 / 68\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n EMC_AXIS_STAT_TYPE\n \n 4.4. JOG\n EMC_JOG_CONT_TYPE\n EMC_JOG_INCR_TYPE\n EMC_JOG_ABS_TYPE\n@@ -2240,15 +2240,15 @@\n EMC_TRAJ_RIGID_TAP_TYPE\n EMC_TRAJ_STAT_TYPE\n \n 4.6. MOTION\n \n 38 / 68\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n EMC_MOTION_INIT_TYPE\n EMC_MOTION_HALT_TYPE\n EMC_MOTION_ABORT_TYPE\n EMC_MOTION_SET_AOUT_TYPE\n EMC_MOTION_SET_DOUT_TYPE\n EMC_MOTION_ADAPTIVE_TYPE\n@@ -2294,15 +2294,15 @@\n EMC_AUX_ESTOP_OFF_TYPE\n EMC_AUX_ESTOP_RESET_TYPE\n EMC_AUX_INPUT_WAIT_TYPE\n EMC_AUX_STAT_TYPE\n \n 39 / 68\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 4.10. SPINDLE\n EMC_SPINDLE_ON_TYPE\n EMC_SPINDLE_OFF_TYPE\n EMC_SPINDLE_INCREASE_TYPE\n EMC_SPINDLE_DECREASE_TYPE\n EMC_SPINDLE_CONSTANT_TYPE\n@@ -2341,15 +2341,15 @@\n EMC_HALT_TYPE\n EMC_ABORT_TYPE\n EMC_STAT_TYPE\n EMC_EXEC_PLUGIN_CALL_TYPE\n \n 40 / 68\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 41 / 68\n \n Cap\u00edtulo 5\n \n Coding Style\n This chapter describes the source code style preferred by the LinuxCNC team.\n@@ -2374,15 +2374,15 @@\n if (x) {\n // do something appropriate\n }\n \n The closing brace is on a line of its own, except in the cases where it is followed by a continuation of\n the same statement, i.e. a while in a do-statement or an else in an if-statement, like this:\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 42 / 68\n \n do {\n // something important\n } while (x > 0);\n \n@@ -2425,15 +2425,15 @@\n function.\n However, if you have a complex function, and you suspect that a less-than-gifted first-year high-school\n student might not even understand what the function is all about, you should adhere to the maximum\n limits all the more closely. Use helper functions with descriptive names (you can ask the compiler to\n in-line them if you think it\u2019s performance-critical, and it will probably do a better job of it that you\n would have done).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 43 / 68\n \n Another measure of the function is the number of local variables. They shouldn\u2019t exceed 5-10, or\n you\u2019re doing something wrong. Re-think the function, and split it into smaller pieces. A human brain\n can generally easily keep track of about 7 different things, anything more and it gets confused. You\n know you\u2019re brilliant, but maybe you\u2019d like to understand what you did 2 weeks from now.\n@@ -2471,15 +2471,15 @@\n class name. Rationale: Maintains a common style across C and C++ sources, e.g., get_foo_bar().\n However, boolean methods are easier to read if they avoid underscores and use an is prefix (not to be\n confused with methods that manipulate a boolean). Rationale: Identifies the return value as TRUE or\n FALSE and nothing else, e.g., isOpen, isHomed.\n Do NOT use Not in a boolean name, it leads only leads to confusion when doing logical tests, e.g.,\n isNotOnLimit or is_not_on_limit are BAD.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 44 / 68\n \n Variable names should avoid the use of upper case and underscores except for local or private names.\n The use of global variables should be avoided as much as possible. Rationale: Clarifies which are\n variables and which are methods. Public: e.g., axislimit Private: e.g., maxvelocity_ .\n \n@@ -2514,24 +2514,24 @@\n File names: C++ sources and headers use .cc and .hh extension. The use of .c and .h are reserved for\n plain C. Headers are for class, method, and structure declarations, not code (unless the functions are\n declared inline).\n \n 5.10. Python coding standards\n Use the PEP 8 style for Python code.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 45 / 68\n \n 5.11. Comp coding standards\n In the declaration portion of a .comp file, begin each declaration at the first column. Insert extra blank\n lines when they help group related items.\n In the code portion of a .comp file, follow normal C coding style.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 46 / 68\n \n Cap\u00edtulo 6\n \n Building LinuxCNC\n 6.1. Introduction\n@@ -2560,15 +2560,15 @@\n \n This might fail too! Read this whole document, but especially the section on Setting up the test environment.\n \n 6.2. Supported Platforms\n The LinuxCNC project targets modern Debian-based distributions, including Debian, Ubuntu, and\n Mint.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 47 / 68\n \n We continuously test on the platforms listed at http://buildbot.linuxcnc.org.\n LinuxCNC builds on most other Linux distributions, though dependency management will be more\n manual and less automatic. Patches to improve portability to new platforms are always welcome.\n \n@@ -2601,15 +2601,15 @@\n within the build directory. Nothing is installed outside the build directory.\n Esto es r\u00e1pido y f\u00e1cil, y adecuado para la iteraci\u00f3n r\u00e1pida de los cambios.\n The LinuxCNC test suite runs only in a Run-In-Place build.\n Most LinuxCNC developers primarily build using this mode.\n Building for Run-In-Place follows the steps in the Quick Start section at the top of this document,\n possibly with different arguments to src/configure and make.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 48 / 68\n \n 6.3.1.1. src/configure arguments\n The src/configure script configures how the source code will be compiled. It takes many optional\n arguments.\n List all arguments to src/configure by running this:\n@@ -2645,15 +2645,15 @@\n Building just a specific target\n If you want to build just a specific part of LinuxCNC, you can name the thing you want to build\n on the make command line. For example, if you are working on a component named froboz, you\n can build its executable by running:\n $ cd linuxcnc-dev/src\n $ make ../bin/froboz\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 49 / 68\n \n 6.3.2. Building Debian Packages\n When building Debian packages, the LinuxCNC programs are compiled from source and then stored\n in a Debian package, complete with dependency information. This takes more time, and the programs\n can\u2019t be used until the Debian package is installed on a target machine.\n@@ -2692,15 +2692,15 @@\n It takes a single argument which specifies the realtime or non-realtime platform to build for. The\n normal values for this argument are:\n no-docs\n Skip building documentation.\n uspace\n Configure the Debian package for Preempt-RT realtime or for non-realtime (these two are compatible).\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 50 / 68\n \n noauto , rtai , xenomai\n Normally, the lists of RTOSes for uspace realtime to support is detected automatically. However, if\n you wish, you may specify one or more of these after uspace to enable support for these RTOSes.\n Or, to disable autodetection, specify noauto.\n@@ -2738,15 +2738,15 @@\n installed yet. Install them all with sudo apt-get install, followed by the package names.\n You can rerun dpkg-checkbuilddeps any time you want, to list any missing packages.\n \n 6.5. Setting up the environment\n This section describes the special steps needed to set up a machine to run the LinuxCNC programs,\n including the tests.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 51 / 68\n \n 6.5.1. Increase the locked memory limit\n LinuxCNC tries to improve its realtime latency by locking the memory it uses into RAM. It does this\n in order to prevent the operating system from swapping LinuxCNC out to disk, which would have bad\n effects on latency.\n@@ -2777,15 +2777,15 @@\n at github, and use that to track and publish your changes.\n After creating your own github fork of LinuxCNC, clone it to your development machine and proceed\n with your hacking as usual.\n We of the LinuxCNC project hope that you will share your changes with us, so that the community can\n benefit from your work. Github makes this sharing very easy: after you polish your changes and push\n them to your github fork, send us a Pull Request.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 52 / 68\n \n Cap\u00edtulo 7\n \n Adding Configuration Selection Items\n Example Configurations can be added to the Configuration Selector by two methods:\n@@ -2796,15 +2796,15 @@\n \n Runtime settings \u2014 the configuration selector can also offer configuration subdirectories specified\n at runtime using an exported environamental variable (LINUXCNC_AUX_CONFIGS). This variable\n should be a path list of one or more configuration directories separated by a (:). Typically, this\n variable would be set in a shell starting linuxcnc or in a user\u2019s ~/.profile startup script. Example:\n export LINUXCNC_AUX_CONFIGS=~/myconfigs:/opt/otherconfigs\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 53 / 68\n \n Cap\u00edtulo 8\n \n Contributing to LinuxCNC\n 8.1. Introduction\n@@ -2825,15 +2825,15 @@\n All of the LinuxCNC source is maintained in the Git revision control system.\n \n 8.4.1. LinuxCNC official Git repo\n The official LinuxCNC git repo is at https://github.com/linuxcnc/linuxcnc/\n Anyone can get a read-only copy of the LinuxCNC source tree via git:\n git clone https://github.com/linuxcnc/linuxcnc linuxcnc-dev\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 54 / 68\n \n If you are a developer with push access, then follow github\u2019s instructions for setting up a repository\n that you can push from.\n Note that the clone command put the local LinuxCNC repo in a directory called linuxcnc-dev, instead\n of the default linuxcnc. This is because the LinuxCNC software by default expects configs and G-code\n@@ -2868,15 +2868,15 @@\n 8.5. Overview of the process\n The high-level overview of how to contribute changes to the source goes like this:\n Communicate with the project developers and let us know what you\u2019re hacking on. Explain what\n you are doing, and why.\n Clone the git repo.\n Make your changes in a local branch.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 55 / 68\n \n Adding documentation and writing tests is an important part of adding a new feature. Otherwise,\n others won\u2019t know how to use your feature, and if other changes break your feature it can go\n unnoticed without a test.\n Share your changes with the other project developers in one of these ways:\n@@ -2910,15 +2910,15 @@\n Use the first line as a summary of the intent of the change (almost like the subject line of an e-mail).\n Follow it with a blank line, then a longer message explaining the change. Example:\n \n 8.7.3. Commit to the proper branch\n Bugfixes should go on the oldest applicable branch. New features should go in the master branch. If\n you\u2019re not sure where a change belongs, ask on irc or on the mailing list.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 56 / 68\n \n 8.7.4. Use multiple commits to organize changes\n When appropriate, organize your changes into a branch (a series of commits) where each commit\n is a logical step towards your ultimate goal. For example, first factor out some complex code into a\n new function. Then, in a second commit, fix an underlying bug. Then, in the third commit, add a new\n@@ -2959,15 +2959,15 @@\n While the branch HEAD will build, not every commit might build in such a case. That breaks git\n bisect - something somebody else might use later on to find the commit which introduced a bug. So\n beyond making sure your branch builds, it is important to assure every single commit builds as well.\n \n There\u2019s an automatic way to check a branch for each commit being buildable - see https://dustin.sallings.org/2010/03/28/git-test-sequence.html and the code at https://github.com/dustin/bindir/blob/master/gittest-sequence. Use as follows (in this case testing every commit from origin/master to HEAD, including\n running regression tests):\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n cd linuxcnc-dev\n git-test-sequence origin/master..\n \n 57 / 68\n \n \u2019(cd src && make && ../scripts/runtests)\u2019\n@@ -2998,15 +2998,15 @@\n 8.9. Other ways to contribute\n There are many ways to contribute to LinuxCNC, that are not addressed by this document. These ways\n include:\n Answering questions on the forum, mailing lists, and in IRC\n Reporting bugs on the bug tracker, forum, mailing lists, or in IRC\n Helping test experimental features\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 58 / 68\n \n Cap\u00edtulo 9\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -3040,15 +3040,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 59 / 68\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -3091,15 +3091,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 60 / 68\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -3142,15 +3142,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 61 / 68\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -3195,15 +3195,15 @@\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum\n speed of the machine. It is often desirable to limit the rapid rate when testing a G-code program\n for the first time.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 62 / 68\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -3245,28 +3245,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 63 / 68\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 64 / 68\n \n Cap\u00edtulo 10\n \n Legal Section\n Translations of this file provided in the source tree are not legally binding.\n@@ -3292,15 +3292,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 65 / 68\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any such\n manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -3349,15 +3349,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover\n must present the full title with all words of the title equally prominent and visible. You may add other\n material on the covers in addition. Copying with changes limited to the covers, as long as they preserve\n the title of the Document and satisfy these conditions, can be treated as verbatim copying in other\n respects.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 66 / 68\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must\n either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n@@ -3404,15 +3404,15 @@\n N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any Invariant\n Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 67 / 68\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -3453,15 +3453,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of this\n \n-\fDeveloper Manual V2.9.1, 04 Nov 2023\n+\fDeveloper Manual V2.9.1, 06 Nov 2023\n \n 68 / 68\n \n License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English\n version will prevail.\n 9. TERMINATION\n You may not copy, modify, sublicense, or distribute the Document except as expressly provided for\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_es.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_es.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_es.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_es.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'LinuxCNC V2.9.1, 04 Nov 2023'\n+Title: 'LinuxCNC V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-LinuxCNC V2.9.1, 04 Nov 2023\n+LinuxCNC V2.9.1, 06 Nov 2023\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ii\n \n \u00cdndice general\n \n I Getting Started & Configuration\n \n@@ -118,15 +118,15 @@\n \n 9\n \n 1.3.5.1. Basic Tweaks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n iii\n \n 1.3.6. PREEMPT_RT Tweaks (x86/AMD64 only) . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 10\n \n@@ -284,15 +284,15 @@\n \n 1.6.6.2. The GUI Way . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 24\n \n 1.6.3. Terminal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1.6.6.3. Root Access\n \n iv\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -454,15 +454,15 @@\n \n 2.3.5. Coordinate Systems\n \n 46\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n v\n \n 2.3.5.1. G53 Machine Coordinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 47\n \n@@ -620,15 +620,15 @@\n \n 57\n \n 2.6.1. Lathe Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 57\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n vi\n \n 2.6.2. Lathe Tool Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 57\n \n@@ -782,15 +782,15 @@\n \n 76\n \n 2.7.14.3.Float switch (input) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 76\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n vii\n \n 2.7.14.4.Ohmic Sensor enable (output) . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 76\n \n@@ -944,15 +944,15 @@\n \n 97\n \n 3.1.11.1.Operating without Limit Switches . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 98\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n viii\n \n 3.1.11.2.Operating without Home Switches\n \n . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -1013,15 +1013,15 @@\n 4.2.1. What is latency? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134\n 4.2.2. Latency Tests\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135\n \n 4.2.2.1. Latency Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ix\n \n 4.2.2.2. Latency Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137\n 4.2.2.3. Latency Histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137\n 4.2.3. Latency tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138\n 4.2.3.1. Tuning the BIOS for latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139\n@@ -1087,15 +1087,15 @@\n 4.4.2.14.[SPINDLE_] Section(s) . . . . . . . . . . . . . . . . . . . . . . . . . . . 166\n 4.4.2.15.[EMCIO] Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167\n 4.5. Homing Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167\n 4.5.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167\n 4.5.2. Prerequisite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168\n 4.5.3. Separate Home Switch Example Layout . . . . . . . . . . . . . . . . . . . . . . . . . . 168\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n x\n \n 4.5.4. Shared Limit/Home Switch Example Layout . . . . . . . . . . . . . . . . . . . . . . . . 169\n 4.5.5. Homing Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170\n 4.5.6. Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172\n 4.5.6.1. HOME_SEARCH_VEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172\n@@ -1139,15 +1139,15 @@\n 4.8.6. Mechanical Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182\n 4.9. Stepper Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.2. Maximum step rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.3. Pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184\n 4.9.3.1. Standard Pinout HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xi\n \n 4.9.3.2. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186\n 4.9.3.3. Changing the standard_pinout.hal . . . . . . . . . . . . . . . . . . . . . . . . . 186\n 4.9.3.4. Changing polarity of a signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187\n 4.9.3.5. Adding PWM Spindle Speed Control\n@@ -1194,15 +1194,15 @@\n 5.1.6. Timing Issues In HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202\n 5.2. HAL Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203\n 5.2.1. HAL Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203\n 5.2.1.1. loadrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204\n 5.2.1.2. addf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204\n 5.2.1.3. loadusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xii\n \n 5.2.1.4. net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206\n 5.2.1.5. setp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207\n 5.2.1.6. sets\n \n@@ -1268,15 +1268,15 @@\n 5.4.3.5. Saving the HAL configuration\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . 221\n \n 5.4.3.6. Exiting halrun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n 5.4.3.7. Restoring the HAL configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xiii\n \n 5.4.3.8. Removing HAL from memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222\n 5.4.4. Halmeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223\n 5.4.5. Stepgen Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225\n 5.4.5.1. Installing the components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225\n@@ -1318,15 +1318,15 @@\n 5.6.5. INI settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252\n 5.6.5.1. Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252\n 5.7. HAL Component List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253\n 5.7.1. Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253\n 5.7.1.1. User Interfaces (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . 254\n 5.7.1.2. Motion (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xiv\n \n 5.7.1.3. Hardware Drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254\n 5.7.1.4. Mesa and other I/O Cards (Realtime) . . . . . . . . . . . . . . . . . . . . . . . 255\n 5.7.1.5. Utilities (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256\n 5.7.1.6. Signal processing (Realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256\n@@ -1370,15 +1370,15 @@\n 5.8.7. SigGen\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279\n \n 5.8.7.1. Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279\n 5.8.7.2. Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xv\n \n 5.8.7.3. Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280\n 5.8.8. lut5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280\n 5.9. HAL Component Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281\n 5.9.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281\n@@ -1423,15 +1423,15 @@\n 5.10.1.Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294\n 5.10.2.Haltcl Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294\n 5.10.3.Haltcl INI-file variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295\n 5.10.4.Converting HAL files to Tcl files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296\n 5.10.5.Haltcl Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296\n 5.10.6.Haltcl Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xvi\n \n 5.10.7.Haltcl Interactive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n 5.10.8.Haltcl Distribution Examples (sim)\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n@@ -1498,15 +1498,15 @@\n 5.13.3.Create pins and parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308\n 5.13.3.1.Changing the prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309\n 5.13.4.Reading and writing pins and parameters . . . . . . . . . . . . . . . . . . . . . . . . . 309\n 5.13.4.1.Driving output (HAL_OUT) pins . . . . . . . . . . . . . . . . . . . . . . . . . . 309\n 5.13.4.2.Driving bidirectional (HAL_IO) pins . . . . . . . . . . . . . . . . . . . . . . . . 309\n 5.13.5.Exiting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xvii\n \n 5.13.6.Helpful Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309\n 5.13.7.Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.13.8.System Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 5.14.Canonical Device Interfaces\n@@ -1550,15 +1550,15 @@\n 6.1.1. Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323\n 6.1.2. PCI Port Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326\n 6.1.3. Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327\n 6.1.4. Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327\n 6.1.5. Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327\n 6.1.6. Common problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xviii\n \n 6.1.7. Using DoubleStep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328\n 6.1.8. probe_parport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328\n 6.1.8.1. Installing probe_parport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328\n 6.2. AX5214H Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329\n@@ -1600,15 +1600,15 @@\n 6.3.7.3. DAC & ADC module\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347\n \n 6.3.7.4. Teach Pendant module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348\n 6.3.8. Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xix\n \n 6.3.8.1. GM6-PCI card Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349\n 6.4. GS2 VFD Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349\n 6.4.1. Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349\n 6.4.2. Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350\n@@ -1650,15 +1650,15 @@\n 6.7.8. PIN Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359\n 6.7.9. Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359\n 6.7.10.HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359\n 6.7.11.Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360\n 6.7.12.GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362\n 6.7.12.1.Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xx\n \n 6.7.12.2.Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n 6.7.13.StepGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n 6.7.13.1.Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n 6.7.13.2.Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364\n@@ -1700,15 +1700,15 @@\n 6.8.5.7. fnct_15_write_multiple_coils . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377\n 6.8.5.8. fnct_16_write_multiple_registers . . . . . . . . . . . . . . . . . . . . . . . . . . 377\n 6.9. Mitsub VFD Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377\n 6.9.1. Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378\n 6.9.2. Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378\n 6.9.3. HAL example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxi\n \n 6.9.4. Configuring the Mitsubishi VFD for serial usage . . . . . . . . . . . . . . . . . . . . . 379\n 6.9.4.1. Connecting the Serial Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379\n 6.9.4.2. Modbus setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379\n 6.10.Motenc Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380\n@@ -1750,15 +1750,15 @@\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392\n \n 6.13.3.1.Pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392\n 6.13.3.2.Input latching and output updating . . . . . . . . . . . . . . . . . . . . . . . . 393\n 6.13.3.3.Step Waveform Timings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxii\n \n 6.13.3.4.HAL Functions, Pins and Parameters . . . . . . . . . . . . . . . . . . . . . . . 394\n 6.14.Powermax Modbus Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394\n 6.14.1.Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395\n 6.14.2.Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395\n@@ -1798,15 +1798,15 @@\n 7.2.6. Spindle Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408\n 7.2.6.1. Spindle Synchronized Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408\n 7.2.6.2. Spindle At Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409\n 7.3. MPG Pendant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409\n 7.4. GS2 Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411\n 7.4.1. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 8. ClassicLadder\n \n xxiii\n \n 413\n \n@@ -1851,15 +1851,15 @@\n \n 8.2.10.1.MODBUS Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440\n 8.2.10.2.Communication Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440\n 8.2.11.Debugging modbus problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440\n 8.2.11.1.Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442\n 8.2.11.2.Error response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxiv\n \n 8.2.11.3.Data response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444\n 8.2.11.4.MODBUS Bugs\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445\n@@ -1906,15 +1906,15 @@\n 9.3.2. 5-Axis Machine Tool Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484\n 9.3.3. Tool Orientation and Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484\n 9.3.4. Translation and Rotation Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485\n 9.3.5. Table Rotary/Tilting 5-Axis Configurations . . . . . . . . . . . . . . . . . . . . . . . . . 486\n 9.3.5.1. Transformations for a xyzac-trt machine tool with work offsets . . . . . . . 488\n 9.3.5.2. Transformations for a xyzac-trt machine with rotary axis offsets . . . . . . 492\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxv\n \n 9.3.5.3. Transformations for a xyzbc-trt machine with rotary axis offsets . . . . . . 495\n 9.3.6. Table Rotary/Tilting Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498\n 9.3.6.1. Vismach Simulation Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498\n 9.3.6.2. Tool-Length Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498\n@@ -1968,15 +1968,15 @@\n \n 9.6.2.2. Picking a code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513\n 9.6.2.3. Parameter handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514\n 9.6.2.4. Handling results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514\n 9.6.2.5. Execution sequencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514\n 9.6.2.6. An minimal example remapped code . . . . . . . . . . . . . . . . . . . . . . . 514\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxvi\n \n 9.6.3. Configuring Remapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515\n 9.6.3.1. The REMAP statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515\n 9.6.3.2. Useful REMAP option combinations . . . . . . . . . . . . . . . . . . . . . . . . 516\n 9.6.3.3. The argspec parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516\n@@ -2023,15 +2023,15 @@\n 9.6.11.3.G-code Cycles: cycle_prolog and cycle_epilog . . . . . . . . . . . . . . . . 539\n 9.6.11.4.S (Set Speed) : setspeed_prolog and setspeed_epilog . . . . . . . . . . . 539\n 9.6.11.5.F (Set Feed) : setfeed_prolog and setfeed_epilog . . . . . . . . . . . . . 539\n 9.6.11.6.M61 Set tool number : settool_prolog and settool_epilog . . . . . . . . 540\n 9.6.12.Remapped code execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540\n 9.6.12.1.NGC procedure call environment during remaps . . . . . . . . . . . . . . . . 540\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxvii\n \n 9.6.12.2.Nested remapped codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540\n 9.6.12.3.Sequence number during remaps . . . . . . . . . . . . . . . . . . . . . . . . . 540\n 9.6.12.4.Debugging flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540\n 9.6.12.5.Debugging Embedded Python code . . . . . . . . . . . . . . . . . . . . . . . . 541\n@@ -2077,15 +2077,15 @@\n 9.6.18.Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553\n 9.6.19.Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553\n 9.6.20.Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553\n 9.7. Moveoff Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553\n 9.7.1. Modifying an existing configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554\n 9.8. Stand Alone Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxviii\n \n 9.8.1. Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558\n 9.8.2. Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558\n 9.9. External Axis Offsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558\n 9.9.1. INI File Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559\n@@ -2132,15 +2132,15 @@\n \n 10.1.AXIS GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569\n 10.1.1.Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569\n 10.1.2.Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570\n 10.1.2.1.INI settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570\n 10.1.2.2.A Typical Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 10.1.3.AXIS Window\n \n xxix\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571\n \n@@ -2207,15 +2207,15 @@\n . . . . . . . . . . . . . . . . . . 594\n \n 10.1.14.5.\n Read the INI file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595\n 10.1.14.6.\n Read LinuxCNC Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxx\n \n 10.1.14.7.\n Change the current view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595\n 10.1.14.8.\n Creating new AXISUI HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . 595\n@@ -2266,15 +2266,15 @@\n 10.2.5.8.User Created Message HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . 620\n 10.2.5.9.Spindle Feedback Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621\n 10.2.5.10.\n Pins to Indicate Program Progress Information . . . . . . . . . . . . . . . . . 621\n 10.2.5.11.\n Tool Related Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxi\n \n 10.2.6.Auto Tool Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623\n 10.2.6.1.Provided Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624\n 10.2.6.2.INI File Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624\n 10.2.6.3.Needed Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625\n@@ -2330,15 +2330,15 @@\n 10.4.1.Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646\n 10.4.1.1.Glade File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651\n 10.4.1.2.PyGTK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651\n 10.4.2.GladeVCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652\n 10.4.2.1.Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652\n 10.4.2.2.Build a GladeVCP Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxii\n \n 10.4.3.Building a simple clean-sheet custom screen . . . . . . . . . . . . . . . . . . . . . . . 654\n 10.4.4.Handler file example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656\n 10.4.4.1.Adding Keybindings Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 657\n 10.4.4.2.Linuxcnc State Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657\n@@ -2387,15 +2387,15 @@\n 10.5.3.Key Bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669\n 10.5.4.Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670\n 10.5.5.Virtual Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670\n 10.5.6.HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670\n 10.5.7.HAL files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671\n 10.5.8.Manual Tool Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxiii\n \n 10.5.9.Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671\n 10.5.10.\n Auto Raise Z Axis on Spindle Pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672\n 10.5.11.\n@@ -2465,15 +2465,15 @@\n 10.6.1.Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694\n 10.6.2.Demonstration Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695\n 10.6.3.Library Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697\n 10.6.4.Standalone Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698\n 10.6.4.1.Standalone NGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698\n 10.6.4.2.Standalone PyNGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxiv\n \n 10.6.5.Embedding NGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699\n 10.6.5.1.Embedding NGCGUI in AXIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699\n 10.6.5.2.Embedding PyNGCGUI as a GladeVCP tab page in a GUI . . . . . . . . . . . 700\n 10.6.5.3.Additional INI File items required for NCGUI or PyNGCGUI . . . . . . . . . 700\n@@ -2512,15 +2512,15 @@\n 10.8.4.2.Package Installation (Buildbot) If The User Has Linux with LinuxCNC v2.8 721\n 10.8.4.3.Run In Place Installation If The User Has Linux with LinuxCNC v2.8 . . . . 721\n 10.8.5.Creating A QtPlasmaC Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721\n 10.8.5.1.Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721\n 10.8.5.2.Available I/Os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722\n 10.8.5.3.Recommended Settings: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxv\n \n 10.8.5.4.Configuring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724\n 10.8.5.5.Qt Dependency Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729\n 10.8.5.6.Initial Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729\n 10.8.6.Migrating to QtPlasmac From PlasmaC (AXIS or GMOCCAPY)\n@@ -2570,15 +2570,15 @@\n 10.8.9.15.\n Pause At End Of Cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769\n 10.8.9.16.\n Multiple Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769\n 10.8.9.17.\n Velocity Reduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxvi\n \n 10.8.9.18.\n THC (Torch Height Controller) . . . . . . . . . . . . . . . . . . . . . . . . . . . 771\n 10.8.9.19.\n Cutter Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772\n@@ -2653,15 +2653,15 @@\n 10.8.14.\n Customizing QtPlasmaC GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799\n 10.8.14.1.\n Add A Custom Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799\n 10.8.14.2.\n Create A New Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxvii\n \n 10.8.14.3.\n Returning To The Default Styling . . . . . . . . . . . . . . . . . . . . . . . . . 800\n 10.8.14.4.\n Custom Python Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801\n@@ -2740,15 +2740,15 @@\n \n 10.9.4.Index operations\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832\n \n 10.9.5.Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxviii\n \n 11.G-code Programming\n \n 833\n \n@@ -2799,15 +2799,15 @@\n 11.3.4.Stand Alone Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852\n 11.4.G-code Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853\n 11.4.1.Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853\n 11.4.2.Format of a line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853\n 11.4.2.1./ : Block Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854\n 11.4.2.2.Line Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxix\n \n 11.4.2.3.Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854\n 11.4.2.4.Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855\n 11.4.3.Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856\n 11.4.3.1.Numbered Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857\n@@ -2868,15 +2868,15 @@\n 11.5.2.G-Code Quick Reference Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875\n 11.5.3.G0 Rapid Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876\n 11.5.3.1.Rapid Velocity Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876\n 11.5.4.G1 Linear Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876\n 11.5.5.G2, G3 Arc Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877\n 11.5.5.1.Center Format Arcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xl\n \n 11.5.5.2.Center Format Examples\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 879\n \n@@ -2957,15 +2957,15 @@\n 11.5.40.\n G73 Drilling Cycle with Chip Breaking . . . . . . . . . . . . . . . . . . . . . . . . . . . 902\n 11.5.41.\n G74 Left-hand Tapping Cycle with Dwell . . . . . . . . . . . . . . . . . . . . . . . . . . 902\n 11.5.42.\n G76 Threading Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xli\n \n 11.5.43.\n G80-G89 Canned Cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906\n 11.5.43.1.\n Common Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906\n@@ -3043,15 +3043,15 @@\n 11.6.6.2.Tool Changer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923\n 11.6.7.M7, M8, M9 Coolant Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924\n 11.6.8.M19 Orient Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924\n 11.6.9.M48, M49 Speed and Feed Override Control . . . . . . . . . . . . . . . . . . . . . . . 925\n 11.6.10.\n M50 Feed Override Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlii\n \n 11.6.11.\n M51 Spindle Speed Override Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925\n 11.6.12.\n M52 Adaptive Feed Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925\n@@ -3124,15 +3124,15 @@\n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940\n \n 11.9.1.2.Slotting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941\n 11.9.1.3.Grid Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941\n 11.9.1.4.Smart Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942\n 11.9.1.5.Tool Length Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xliii\n \n 11.9.1.6.Hole Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943\n 11.9.1.7.Cutter Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943\n 11.9.2.Lathe Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944\n 11.9.2.1.Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944\n@@ -3206,15 +3206,15 @@\n 12.1.PyVCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950\n 12.1.1.Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950\n 12.1.2.Panel Construction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951\n 12.1.3.Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952\n 12.1.4.AXIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952\n 12.1.4.1.Example Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xliv\n \n 12.1.5.Stand Alone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954\n 12.1.6.Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955\n 12.1.6.1.Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955\n 12.1.6.2.General Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955\n@@ -3268,15 +3268,15 @@\n . . . . . . . . . . . . . . . . . . . . . . . . . 993\n \n 12.3.3.5.Integrating into AXIS, like PyVCP . . . . . . . . . . . . . . . . . . . . . . . . . 993\n 12.3.3.6.Embedding as a Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994\n 12.3.3.7.Integrating into Touchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994\n 12.3.4.GladeVCP command line options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlv\n \n 12.3.5.Understanding the GladeVCP startup process . . . . . . . . . . . . . . . . . . . . . . . 996\n 12.3.6.HAL Widget reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997\n 12.3.6.1.Widget and HAL pin naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997\n 12.3.6.2.Python attributes and methods of HAL Widgets . . . . . . . . . . . . . . . . . 998\n@@ -3343,15 +3343,15 @@\n 12.3.7.4.The Action_MDI Toggle and Action_MDI widgets . . . . . . . . . . . . . . . . 1034\n 12.3.7.5.A simple example: Execute MDI command on button press . . . . . . . . . . 1034\n 12.3.7.6.Parameter passing with Action_MDI and ToggleAction_MDI widgets . . . . 1034\n 12.3.7.7.An advanced example: Feeding parameters to an O-word subroutine\n \n . . . 1035\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlvi\n \n 12.3.7.8.Preparing for an MDI Action, and cleaning up afterwards . . . . . . . . . . 1035\n 12.3.7.9.Using the LinuxCNC Stat object to deal with status changes . . . . . . . . . 1036\n 12.3.8.GladeVCP Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037\n 12.3.8.1.User Defined Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037\n@@ -3412,15 +3412,15 @@\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1060\n \n 12.5.2.5.Libraries Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061\n 12.5.2.6.Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061\n 12.5.2.7.Local Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.5.2.8.Modifying Stock Screens\n \n xlvii\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062\n \n@@ -3464,15 +3464,15 @@\n 12.6.1.5.test_led . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087\n 12.6.1.6.test_panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088\n 12.6.1.7.cam_align . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089\n 12.6.1.8.sim_panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091\n 12.6.1.9.tool_dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092\n 12.6.2.vismach 3D Simulation Panels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlviii\n \n 12.6.2.1.QtVCP vismach_mill_xyz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093\n 12.6.2.2.QtVCP vismach_router_atc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094\n 12.6.2.3.QtVCP vismach_scara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095\n 12.6.2.4.QtVCP vismach_millturn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096\n@@ -3522,15 +3522,15 @@\n 12.7.2.1.ActionButton - Machine Controller Action Control Widget . . . . . . . . . . 1112\n 12.7.2.2.ActionToolButton - Optional Actions Menu Button Widget . . . . . . . . . 1115\n 12.7.2.3.RoundButton - Round Shapped ActionButton Widget . . . . . . . . . . . . . 1115\n 12.7.2.4.AxisToolButton - Select and Set Axis Widget . . . . . . . . . . . . . . . . . . 1115\n 12.7.2.5.CamView - Workpiece Alignment and Origin Setting Widget . . . . . . . . . . 1116\n 12.7.2.6.DROLabel - Axis Position Display Widget . . . . . . . . . . . . . . . . . . . . . 1116\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlix\n \n 12.7.2.7.GcodeDisplay - G-code Text Display Widget . . . . . . . . . . . . . . . . . . . 1117\n 12.7.2.8.GcodeEditor - G-code Program Editor Widget\n \n . . . . . . . . . . . . . . . . . 1118\n@@ -3601,15 +3601,15 @@\n 12.7.3.8.EntryDialog - Edit Line Dialog Widget . . . . . . . . . . . . . . . . . . . . . . 1153\n 12.7.3.9.CalculatorDialog - Calculator Dialog Widget . . . . . . . . . . . . . . . . . 1154\n 12.7.3.10.\n RunFromLine - Run-From-Line Dialog Widget . . . . . . . . . . . . . . . . . . 1155\n 12.7.3.11.\n VersaProbeDialog - Part Touch Probing Dialog Widget . . . . . . . . . . . . 1156\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n l\n \n 12.7.3.12.\n MachineLogDialog - Machine and Debugging Logs Dialog Widget . . . . . 1157\n 12.7.4.Other Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1157\n 12.7.4.1.NurbsEditor - NURBS Editing Widget . . . . . . . . . . . . . . . . . . . . . . 1158\n@@ -3646,15 +3646,15 @@\n 12.8.5.3.Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174\n 12.8.6.VCPWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174\n 12.8.6.1.Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174\n 12.8.7.Aux_program_loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175\n 12.8.7.1.Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175\n 12.8.7.2.Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n li\n \n 12.8.8.Keylookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176\n 12.8.8.1.Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176\n 12.8.8.2.Key Defines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177\n 12.8.9.Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179\n@@ -3723,15 +3723,15 @@\n 12.9.6.1.Translating Model parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191\n 12.9.6.2.Rotating Model Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191\n 12.9.7.Animating Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192\n 12.9.7.1.HalTranslate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192\n 12.9.7.2.HalRotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192\n 12.9.7.3.HalToolCylinder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n lii\n \n 12.9.7.4.HalToolTriangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193\n 12.9.8.Assembling the model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193\n 12.9.9.Other functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194\n 12.9.10.\n@@ -3806,15 +3806,15 @@\n 12.11.12.\n Update/Read Objects Periodically . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221\n 12.11.13.\n External Control With ZMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222\n 12.11.13.1.\n ZMQ Messages Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n liii\n \n 12.11.13.2.\n ZMQ Messages Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224\n 12.11.14.\n Sending Messages To Status Bar Or Desktop Notify Dialogs . . . . . . . . . . . . . . 1224\n@@ -3877,15 +3877,15 @@\n 13.2.3.2.The axis dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244\n 13.2.3.3.The joint dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244\n 13.2.3.4.The spindle dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246\n 13.2.4.Preparing to send commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246\n 13.2.5.Sending commands through linuxcnc.command . . . . . . . . . . . . . . . . . . . . . 1247\n 13.2.5.1.linuxcnc.command attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n liv\n \n 13.2.5.2.linuxcnc.command methods: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1248\n 13.2.6.Reading the error channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1251\n 13.2.7.Reading INI file values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1252\n 13.2.8.The linuxcnc.positionlogger type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1252\n@@ -3942,23 +3942,23 @@\n \n 1287\n \n 17.1.Origin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1287\n 17.1.1.Name Change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288\n 17.1.2.Additional Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1 / 1288\n \n Parte I\n \n Getting Started & Configuration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 2 / 1288\n \n Cap\u00edtulo 1\n \n Getting Started with LinuxCNC\n 1.1. About LinuxCNC\n@@ -3986,15 +3986,15 @@\n It can simultaneously move up to 9 axes and supports a variety of interfaces.\n The control can operate true servos (analog or PWM) with the feedback loop closed by the LinuxCNC\n software at the computer, or open loop with step-servos or stepper motors.\n Motion control features include: cutter radius and length compensation, path deviation limited to\n a specified tolerance, lathe threading, synchronized axis motion, adaptive feedrate, operator feed\n override, and constant velocity control.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3 / 1288\n \n Support for non-Cartesian motion systems is provided via custom kinematics modules. Available\n architectures include hexapods (Stewart platforms and similar concepts) and systems with rotary\n joints to provide motion such as PUMA or SCARA robots.\n LinuxCNC runs on Linux using real time extensions.\n@@ -4031,15 +4031,15 @@\n You can subscribe to the emc-users mailing list at: https://lists.sourceforge.net/lists/listinfo/emc-users\n 1.1.3.3. Web Forum\n A web forum can be found at https://forum.linuxcnc.org or by following the link at the top of the\n linuxcnc.org home page.\n This is quite active but the demographic is more user-biased than the mailing list. If you want to be\n sure that your message is seen by the developers then the mailing list is to be preferred.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 4 / 1288\n \n 1.1.3.4. LinuxCNC Wiki\n A Wiki site is a user maintained web site that anyone can add to or edit.\n \n The user maintained LinuxCNC Wiki site contains a wealth of information and tips at: https://wiki.linuxcnc.or\n@@ -4071,15 +4071,15 @@\n 1.2.2. Kernel and Version requirements\n LinuxCNC requires a kernel modified for realtime use to control real machine hardware. It can, however run on a standard kernel in simulation mode for purposes such as checking G-code, testing config\n files and learning the system. To work with these kernel versions there are two versions of LinuxCNC\n distributed. The package names are \u201dlinuxcnc\u201d and \u201dlinuxcnc-uspace\u201d.\n The realtime kernel options are preempt-rt, RTAI and Xenomai.\n You can discover the kernel version of your system with the command:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 5 / 1288\n \n uname -a\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n@@ -4110,15 +4110,15 @@\n Laptops are not generally suited to real time software step generation. Again a Latency Test run for\n an extended time will give you the info you need to determine suitability.\n 1.2.3.2. Video Cards\n If your installation pops up with 800 x 600 screen resolution then most likely Debian does not recognize\n your video card or monitor. This can sometimes be worked-around by installing drivers or creating /\n editing Xorg.conf files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 6 / 1288\n \n 1.3. Getting LinuxCNC\n This section describes how to install LinuxCNC version 2.9 on a PC already running Debian Bookworm (Debian 12). LinuxCNC requires the PREEMPT_RT real time kernel to ensure the strict timing\n required for CNC operations are met. We will also cover how to install Debian Bookworm optimised\n for LinuxCNC on the x86/AMD64 and ARM64 platforms for first time users. We will also cover some\n@@ -4153,15 +4153,15 @@\n That\u2019s it! You are done! You will find LinuxCNC under the CNC menu.\n \n 1.3.2. Install Debian Bookworm on a X86/AMD64 machine\n 1. Download Balena Etcher from https://etcher.balena.io/\n 2. Download a Debian Boookworm ISO. There are two versions to consider.\n a. The small netinst .ISO that requires a connection to the internet during the installation (recommended) https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.1.0-amd64netinst.iso\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 7 / 1288\n \n b. The much larger full live install that includes everything in Debian (use if you do not have an\n internet connection). https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-12.1.0-amd64-xfce.iso\n 3. Burn the Debian Image to a USB drive using Balena Etcher.\n 4. Connect the PC to install LinuxCNC on to a wired internet connection (only use wifi if you must).\n@@ -4194,15 +4194,15 @@\n 2. Ensure the Pi is connected to the internet. Boot the Pi. It will open a text based terminal.\n 3. Login using the root account (which does not have a password yet). Type:\n root\n \n and hit enter . Add a password to the root user account. Type:\n passwd\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 8 / 1288\n \n and allocate a password you will never forget!\n Add a new user and allocate a password. I used pi:\n adduser pi\n \n@@ -4242,15 +4242,15 @@\n a. Issue the configuration update command, which will take those changes and write them to the\n /boot/firmware/cmdline.txt and /boot/firmware/config.txt files:\n update-initramfs -u -k all\n \n 1. Install the XFCE graphical environment by typing\n apt install task-xfce-desktop\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 9 / 1288\n \n During the install you will need to select a keyboard layout/language, then tab to the \u201dOK\u201d and press\n Enter.\n Don\u2019t panic if the screen display appears corrupt, just wait until completed.\n Start the graphical environment\n@@ -4284,15 +4284,15 @@\n sudo geany /etc/lightdm/lightdm.conf\n \n scroll down to about line 126 and uncomment (remove #) both of the following lines and add YOUR\n login user name. Eg an example for user matt.\n autologin-user=matt\n autologin-user-timeout=0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 10 / 1288\n \n 1.3.6. PREEMPT_RT Tweaks (x86/AMD64 only)\n isolcpus can make a huge difference to latency on some systems, because it isolates specific CPU cores\n so they are purely used by real time threads (e.g. the LinuxCNC servo thread). The instructions below\n assume a 4 core CPU, e.g. Celeron, i3, i5, etc. Those with 2 cores or more than 4 cores need different\n@@ -4334,15 +4334,15 @@\n address 10.10.10.1\n hardware-irq-coalesce-rx-usecs 0\n \n The last line is only required for Intel network cards. It seems to be ignored on non-applicable hardware.\n Save and close geany. Reboot to restart the network. Ping the mesa card to confirm it\u2019s all working:\n ping 10.10.10.10\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 11 / 1288\n \n 1.3.9. Updating LinuxCNC on Debian Bookworm (X86 only)\n The version of LinuxCNC in Bookworm is a bit dated because of the freeze process associated with\n the Debian release process. Fortunately, there is a LinuxCNC buildbot which rebuilds version 2.9\n packages whenever the code base changes. We can \u201dtrick\u201d Debian to get the LinuxCNC repositories\n@@ -4387,15 +4387,15 @@\n sudo apt upgrade\n \n The second last line updates Linux to look at our buildbot.\n The last line upgrades all Linux programs including our LinuxCNC files.\n Repeat running LinuxCNC and note the version. It should have changed to the latest version (which\n can change daily).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12 / 1288\n \n Now any time you wish to update your version of LinuxCNC (and any other Debian programs installed\n on your PC, just type:\n sudo apt update\n sudo apt upgrade\n@@ -4436,15 +4436,15 @@\n \n If you have not installed a later kernel as described above install linux-headers. Type:\n sudo apt install linux-headers-$(uname -r)\n \n You can now install the r8168 or R8125 driver. Depending on your driver Type:\n sudo apt install r8168-dkms\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 13 / 1288\n \n or type:\n sudo apt install r8125-dkms\n \n Reboot and check you still have a network driver with\n@@ -4479,15 +4479,15 @@\n \n 1.3.12. Alternate Install Methods\n The easiest, preferred way to install LinuxCNC is to use the Live/Install Image or Debian Bookworm\n as described above. Both methods are as simple and reliable as we can make it, and are suitable for\n novice users and experienced users alike. Both methods will typically replace any existing operating\n system on your hard drive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 14 / 1288\n \n Experienced users who are familiar with Debian system administration (finding install images, manipulating apt sources, changing kernel flavors, etc.) should note that new installations are supported\n on the platforms listed in the table below. \u201damd64\u201d refers to any 64-bit x86 system, i.e. the installation\n is not specific to AMD processors.\n Please be aware that in Debian Bookworm, the preempt_rt kernel is a dependency of linuxcnc-uspace.\n@@ -4580,15 +4580,15 @@\n Configuration Selector.\n The Configuration Selector offers a selection of configurations organized:\n My Configurations - User configurations located in linuxcnc/configs in your home directory.\n Sample Configurations - Sample configurations, when selected, are copied to linuxcnc/configs. Once\n a sample configuration was copied to your local directory, the launcher will offer it as My Configurations. The names under which these local configurations are presented correspond to the names\n of the directories within the configs/ directory:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 15 / 1288\n \n \u2022 sim - Configurations that include simulated hardware. These can be used for testing or learning\n how LinuxCNC works.\n \u2022 by_interface - Configurations organized by GUI.\n \u2022 by_machine - Configurations organized by machine.\n@@ -4621,15 +4621,15 @@\n vigilant\n vitalsystems\n Related hardware may be required to use these configurations as starting points for a system.\n The by_machine configurations are organized around complete, known systems like:\n boss\n cooltool\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 16 / 1288\n \n scortbot erIII\n sherline\n smithy\n tormach\n@@ -4648,15 +4648,15 @@\n parport - Applications to test parport.\n pyvcp - Example pyvcp applications.\n xhc-hb04 - Applications to test an xhc-hb04 USB wireless MPG\n nota\n Under the Apps directory, only applications that are usefully modified by the user are offered for\n copying to the user\u2019s directory.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 17 / 1288\n \n Figura 1.1: Selector de Configuraci\u00f3n de LinuxCNC\n Click any of the listed configurations to display specific information about it. Double-click a configuration or click OK to start the configuration.\n Select Create Desktop Shortcut and then click OK to add an icon on the Ubuntu desktop to directly\n launch this configuration without showing the Configuration Selector screen.\n@@ -4672,15 +4672,15 @@\n All configurations listed under Sample Configurations/sim are intended to run on any computer. No\n specific hardware is required and real-time support is not needed.\n These configurations are useful for studying individual capabilities or options. The sim configurations\n are organized according to the graphical user interface used in the demonstration. The directory for\n axis contains the most choices and subdirectories because it is the most tested GUI. The capabilities\n demonstrated with any specific GUI may be available in other GUIs as well.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 18 / 1288\n \n 1.4.5. Configuration Resources\n 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\n at least one INI file (iniflename.ini) that is used to describe a specific configuration.\n File resources within the copied directory will typically include one or more INI file (filename.ini)\n@@ -4722,15 +4722,15 @@\n The details will depend on which platform you\u2019re running on. Open a terminal then type lsb_release\n -ic to find this information out:\n lsb_release -ic\n Distributor ID: Debian\n Codename:\n Buster\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 19 / 1288\n \n You should be running on Debian Buster, Bullseye or Bookworm or Ubuntu 20.04 \u201dFocal Fossa\u201d or\n newer. LinuxCNC will not run on older distributions than these.\n You will also need to check which realtime kernel is being used:\n uname -r\n@@ -4767,15 +4767,15 @@\n deb https://linuxcnc.org buster base\n 2.9-rtpreempt\n deb https://linuxcnc.org bullseye base\n 2.9-uspace\n deb https://linuxcnc.org bookworm base\n 2.9-uspace\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 20 / 1288\n \n Click Add Source, then Close in the Software Sources window. If it pops up a window informing\n you that the information about available software is out-of-date, click the Reload button.\n 1.5.1.2. Upgrading to the new version\n Now your computer knows where to get the new version of the software, next we need to install it.\n@@ -4792,15 +4792,15 @@\n will be automatically upgraded to the new one.\n 1.5.1.3. Ubuntu\n Click on the Dash Home icon in the top left.\n In the Search field, type \u201dupdate\u201d, then click on the Update Manager icon.\n Click the Check button to fetch the list of packages available.\n Click the Install Updates button to install the new versions of all packages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 21 / 1288\n \n 1.5.2. Updating without Network\n To update without a network connection you need to download the .deb then install it with dpkg. The\n .debs can be found in https://linuxcnc.org/dists/ .\n You have to drill down from the above link to find the correct deb for your installation. Open a terminal\n@@ -4835,15 +4835,15 @@\n In the extremely unlikely event that you are using canterp, know that the module has moved from\n /usr/lib/libcanterp.so to /usr/lib/linuxcnc/canterp.so, and the [TASK]INTERPRETER setting\n correspondingly needs to change from libcanterp.so to canterp.so.\n \n 1.5.4. Updating Configuration Files (for 2.9.x)\n No changes should be necessary to configuration files when moving from 2.8 to 2.9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 22 / 1288\n \n 1.5.4.1. Spindle limits in the INI\n It is now possible to add settings to the [SPINDLE] section of the INI file\n MAX_FORWARD_VELOCITY = 20000 The maximum spindle speed (in rpm)\n MIN_FORWARD_VELOCITY = 3000 The minimum spindle speed (in rpm)\n@@ -4873,15 +4873,15 @@\n 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 \n 1.6.1. Automatic Login\n 1.6.1.1. Debian\n Debian Stretch uses the Xfce desktop environment by default, with the lightDM display manager\n lightDM. To get automatic login with Stretch:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 23 / 1288\n \n In a terminal, use the command:\n $ /usr/sbin/lightdm --show-config\n \n Make a note of the absolute path to the configuration file lightdm.conf.\n@@ -4917,15 +4917,15 @@\n \n 1.6.4. Man Pages\n A man page (short for manual page) is a form of software documentation usually found on a Unix or\n Unix-like operating system like Linux.\n To view a man page open up a terminal to find out something about the find command in the terminal\n window type:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 24 / 1288\n \n man find\n \n Use the Page Up and Page Down keys to view the man page and the Q key to quit viewing.\n nota\n@@ -4957,15 +4957,15 @@\n 1. Right click on the desktop and select Create Launcher\n 2. Type a name in like sudo edit\n 3. Type gksudo \u201dgnome-open %u\u201d as the command and save the launcher to your desktop\n 4. Drag a file onto your launcher to open and edit\n 1.6.6.3. Root Access\n In Ubuntu you can become root by typing in \u201dsudo -i\u201d in a terminal window then typing in your password. Be careful, because you can really foul things up as root if you don\u2019t know what you\u2019re doing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 25 / 1288\n \n 1.6.7. Terminal Commands\n 1.6.7.1. Working Directory\n To find out the path to the present working directory in the terminal window type:\n pwd\n@@ -5001,15 +5001,15 @@\n pwd\n \n And pwd might return the following result:\n /home/joe\n \n With this information put the command together like this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 26 / 1288\n \n find /home/joe/linuxcnc -name \\*.ini -print\n \n The -name is the name of the file your looking for and the -print tells it to print out the result to the\n terminal window. The \\*.ini tells find to return all files that have the .ini extension. The backslash is\n@@ -5043,15 +5043,15 @@\n and Add. Give it a name and put gnome-terminal in the command box.\n \n 1.6.9. Hardware Problems\n 1.6.9.1. Hardware Info\n To find out what hardware is connected to your motherboard in a terminal window type:\n lspci -v\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 27 / 1288\n \n 1.6.9.2. Monitor Resolution\n During installation Ubuntu attempts to detect the monitor settings. If this fails you are left with a\n generic monitor with a maximum resolution of 800x600.\n Instructions for fixing this are located here:\n@@ -5064,15 +5064,15 @@\n is the same as f0, e.g., a file named f0 in the startup directory\n ../f1\n refers to a file f1 in the parent directory\n ../../f2\n refers to a file f2 in the parent of the parent directory\n ../../../f3 etc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 28 / 1288\n \n Cap\u00edtulo 2\n \n General User Information\n 2.1. User Foreword\n@@ -5101,15 +5101,15 @@\n The Composition rule allows us to build a predictable control system from the many modules available by making them connectable. We achieve connectability by setting up standard interfaces to sets\n of modules and following those standards.\n The Separation rule requires that we make distinct parts that do little things. By separating functions\n debugging is much easier and replacement modules can be dropped into the system and comparisons\n easily made.\n 1 Found at link:https://en.wikipedia.org/wiki/Separation_of_mechanism_and_policy, 2022-11-13\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 29 / 1288\n \n What does the Unix way mean for you as a user of LinuxCNC. It means that you are able to make\n choices about how you will use the system. Many of these choices are a part of machine integration,\n but many also affect the way you will use your machine. As you read you will find many places where\n you will need to make comparisons. Eventually you will make choices, \u201dI\u2019ll use this interface rather\n@@ -5144,15 +5144,15 @@\n the high level controllers that coordinate the generation and execution of motion control of the CNC\n machine, namely the motion controller (EMCMOT), the discrete input/output controller (EMCIO)\n and the task executor (EMCTASK).\n The below illustration is a simple block diagram showing what a typical 3-axis CNC mill with stepper\n motors might look like:\n 2 Found at link:https://en.wikipedia.org/wiki/Unix_philosophy, 07/06/2008\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 30 / 1288\n \n Figura 2.1: Simple LinuxCNC Controlled Machine\n A computer running LinuxCNC sends a sequence of pulses via the parallel port to the stepper drives,\n each of which has one stepper motor connected to it. Each drive receives two independent signals;\n one signal to command the drive to move its associated stepper motor in a clockwise or anti-clockwise\n@@ -5174,15 +5174,15 @@\n The INI file contains all the basic hardware information regarding the operation of the CNC mill,\n such as the number of steps each stepper motor must turn to complete one full revolution, the\n maximum rate at which each stepper may operate at, the limits of travel of each axis or the\n configuration and behaviour of limit switches on each axis.\n \u2022 My_CNC.hal\n This HAL file contains information that tells LinuxCNC how to link the internal virtual signals to\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 31 / 1288\n \n physical connections beyond the computer. For example, specifying pin 4 on the parallel port to\n send out the Z axis step direction signal, or directing LinuxCNC to cease driving the X axis motor\n when a limit switch is triggered on parallel port pin 13.\n \u2022 custom.hal\n@@ -5210,85 +5210,85 @@\n 2.2.3. Graphical User Interfaces\n A graphical user interface is the part of the LinuxCNC that the machine tool operator interacts with.\n LinuxCNC comes with several types of user interfaces which may be chosen from by editing certain\n fields contained in the INI file:\n AXIS\n AXIS, the standard keyboard GUI interface. This is also the default GUI launched when a Configuration Wizard is used to create a desktop icon launcher:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 2.2: AXIS, the standard keyboard GUI interface\n \n Touchy\n Touchy, a touch screens GUI:\n \n 32 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 2.3: Touchy, a touch screen GUI\n \n Gscreen\n Gscreen, a user-configurable touch screen GUI:\n \n 33 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 34 / 1288\n \n Figura 2.4: Gscreen, a configurable base touch screen GUI\n \n GMOCCAPY\n GMOCCAPY, a touch screen GUI based on Gscreen. GMOCCAPY is also designed to work equally\n well in applications where a keyboard and mouse are the preferred methods of controlling the\n GUI:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 35 / 1288\n \n Figura 2.5: GMOCCAPY, a touch screen GUI based on Gscreen\n \n NGCGUI\n NGCGUI, a subroutine GUI that provides wizard-style programming of G code. NGCGUI may be\n run as a standalone program or embedded into another GUI as a series of tabs. The following\n screenshot shows NGCGUI embedded into AXIS:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 36 / 1288\n \n Figura 2.6: NGCGUI, a graphical interface integrated into AXIS\n \n TkLinuxCNC\n TkLinuxCNC, another interface based on Tcl/Tk. Once the most popular interface after AXIS.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 37 / 1288\n \n Figura 2.7: TkLinuxCNC graphical interface\n \n QtDragon\n QtDragon, a touch screen GUI based on QtVCP using the PyQt5 library. It comes in two versions\n QtDragon and QtDragon_hd. They are very similar in features but QtDragon_hd is made for larger\n monitors.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 38 / 1288\n \n Figura 2.8: QtDragon, a touch screen GUI based on QtVCP\n \n QtPlasmaC\n QtPlasmaC, a touch screen plasma cutting GUI based on QtVCP using the PyQt5 library. It comes\n in three aspect ratios, 16:9, 4:3, and 9:16.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 39 / 1288\n \n Figura 2.9: QtPlasmaC, a touch screen plasma cutting GUI based on QtVCP\n \n 2.2.4. User Interfaces\n These User interfaces are a way to interact with LinuxCNC outside of the graphical user interfaces.\n@@ -5302,41 +5302,41 @@\n add indicators, readouts, switches or sliders to the basic appearance of one of the GUIs for increased\n flexibility or functionality. Two styles of Virtual Control Panel are offered in LinuxCNC:\n PyVCP\n PyVCP, a Python-based virtual control panel that can be added to the AXIS GUI. PyVCP only\n utilises virtual signals contained within the Hardware Abstraction Layer, such as the spindle-atspeed indicator or the Emergency Stop output signal, and has a simple no-frills appearance. This\n makes it an excellent choice if the user wants to add a Virtual Control Panel with minimal fuss.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 40 / 1288\n \n Figura 2.10: PyVCP Example Embedded Into AXIS GUI\n \n GladeVCP\n GladeVCP, a Glade-based virtual control panel that can be added to the AXIS or Touchy GUIs.\n GladeVCP has the advantage over PyVCP in that it is not limited to the display or control of HAL\n virtual signals, but can include other external interfaces outside LinuxCNC such as window or\n network events. GladeVCP is also more flexible in how it may be configured to appear on the\n GUI:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 41 / 1288\n \n Figura 2.11: GladeVCP Example Embedded Into AXIS GUI\n \n QtVCP\n QtVCP, a PyQt5-based virtual control panel that can be added to most GUIs or run as a standalone\n panel. QtVCP has the advantage over PyVCP in that it is not limited to the display or control of\n HAL virtual signals, but can include other external interfaces outside LinuxCNC such as window\n or network events by extending with python code. QtVCP is also more flexible in how it may be\n configured to appear on the GUI with many special widgets:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 42 / 1288\n \n Figura 2.12: QtVCP Example Embedded Into QtDragon GUI\n \n 2.2.6. Languages\n LinuxCNC uses translation files to translate LinuxCNC User Interfaces into many languages including\n@@ -5352,15 +5352,15 @@\n lessons learned. A beautiful finish, tight tolerances and caution during the work are evidence of lessons\n learned. No machine nor program can replace human experience.\n Now that you start working with the LinuxCNC software, you have to put yourself in the shoes of an\n operator. You must be in the role of someone in charge of a machine. It\u2019s a machine that will wait\n for your commands and then execute the orders that you will give it. In these pages, we will give the\n explanations which will help you to become a good CNC operator with LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 43 / 1288\n \n 2.2.8. Modes of Operation\n When LinuxCNC is running, there are three different major modes used for inputting commands.\n These are Manual, Auto, and Manual Data Input (MDI). Changing from one mode to another makes\n a big difference in the way that the LinuxCNC control behaves. There are specific things that can be\n@@ -5400,15 +5400,15 @@\n cam detector is not employed with G64 Pn.\n The basic acceleration and deceleration described above is not complex and there is no compromise\n to be made. In the INI file the specified machine constraints, such as maximum axis velocity and axis\n acceleration, must be obeyed by the trajectory planner.\n For more information on the Trajectory Planner INI options see the Trajectory Section in the INI\n chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 44 / 1288\n \n 2.3.1.2. Path Following\n A less straightforward problem is that of path following. When you program a corner in G-code, the\n trajectory planner can do several things, all of which are right in some cases:\n It can decelerate to a stop exactly at the coordinates of the corner, and then accelerate in the new\n@@ -5448,15 +5448,15 @@\n that a specification of G64 P0 has the same effect as G64 alone (above), which is necessary for\n backward compatibility for old G-code programs. See the G64 section of the G-code chapter.\n Blending without tolerance\n The controlled point will touch each specified movement at at least one point. The machine will\n 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\n the end point of the move is as large as it needs to be to keep up the best contouring feed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 45 / 1288\n \n Naive CAM Detector\n Successive G1 moves that involve only the XYZ axes that deviate less than Q- from a straight\n line are merged into a single straight line. This merged movement replaces the individual G1\n movements for the purposes of blending with tolerance. Between successive movements, the\n@@ -5491,15 +5491,15 @@\n the feed rate in units per second, the acceleration time is ta = F/A and the acceleration distance is\n da = F*ta /2. The deceleration time and distance are the same, making the critical distance d = da +\n dd = 2 * da = F2 /A.\n For example, for a feed rate of 1 inch per second and an acceleration of 10 inches/sec2 , the critical\n distance is 12 /10 = 1/10 = 0.1 inches.\n For a feed rate of 0.5 inch per second, the critical distance is 52 /100 = 25/100 = 0.025 inches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 46 / 1288\n \n 2.3.2. G-code\n 2.3.2.1. Defaults\n When LinuxCNC first starts up many G- and M-codes are loaded by default. The current active G- and\n M-codes can be viewed on the MDI tab in the Active G-codes: window in the AXIS interface. These\n@@ -5531,15 +5531,15 @@\n There are several options when doing manual tool changes. See the [EMCIO] section for information\n on configuration of these options. Also see the G28 and G30 section of the G-code chapter.\n \n 2.3.5. Coordinate Systems\n The Coordinate Systems can be confusing at first. Before running a CNC machine you must understand the basics of the coordinate systems used by LinuxCNC. In depth information on the LinuxCNC\n Coordinate Systems is in the Coordinate System section of this manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 47 / 1288\n \n 2.3.5.1. G53 Machine Coordinate\n When you home LinuxCNC you set the G53 Machine Coordinate System to 0 for each axis homed.\n No other coordinate systems or tool offsets are changed by homing.\n The only time you move in the G53 machine coordinate system is when you program a G53 on the\n@@ -5571,22 +5571,22 @@\n in relation to the material.\n Note also the position of the limit switches and the direction of activation of their cams. Several\n combinations are possible, for example it is possible (contrary to the drawing) to place a single fixed\n limit switch in the middle of the table and two mobile cams to activate it. In this case the limits will\n be reversed, +X will be on the right of the table and -X on the left. This inversion does not change\n anything from the point of view of the direction of movement of the tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 48 / 1288\n \n Figura 2.14: Typical Mill Configuration\n The following diagram shows a typical lathe showing direction of travel of the tool and limit switches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 2.15: Typical Lathe Configuration\n \n 2.4. Starting LinuxCNC\n 2.4.1. Running LinuxCNC\n LinuxCNC is started with the script file linuxcnc.\n linuxcnc [options] []\n@@ -5601,15 +5601,15 @@\n $ linuxcnc [Options] path/to/your_ini_file\n Name the configuration INI file using its path\n $ linuxcnc [Options] -l\n Use the previously used configuration INI file\n \n 49 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 50 / 1288\n \n Options:\n -d: Turn on \u201ddebug\u201d mode\n -v: Turn on \u201dverbose\u201d mode\n -r: Disable redirection of stdout and stderr to ~/linuxcnc_print.txt and\n@@ -5635,15 +5635,15 @@\n or GladeVCP objects with HAL pins you must use the postgui HAL file to make any connections to\n those pins. See the [HAL] section of the INI configuration for more information.\n 2.4.1.1. Configuration Selector\n If no INI file is passed to the linuxcnc script it loads the configuration selector so you can choose and\n save a sample configuration. Once a sample configuration has been saved it can be modified to suit\n your application. The configuration files are saved in linuxcnc/configs directory.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 51 / 1288\n \n 2.5. CNC Machine Overview\n This section gives a brief description of how a CNC machine is viewed from the input and output ends\n of the Interpreter.\n \n@@ -5659,15 +5659,15 @@\n two motors for one axis is better handled by kinematics rather than by a second linear axis.\n nota\n If the motion of mechanical components is not independent, as with hexapod machines, the\n RS274/NGC language and the canonical machining functions will still be usable, as long as the lower\n levels of control know how to control the actual mechanisms to produce the same relative motion of\n tool and workpiece as would be produced by independent axes. This is called kinematics.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 52 / 1288\n \n nota\n With LinuxCNC, the case of the XYYZ gantry machine with two motors for one axis is better handled\n by the kinematics than by an additional linear axis.\n \n@@ -5698,15 +5698,15 @@\n \n 2.5.2. Control and Data Components\n 2.5.2.1. Linear Axes\n The X, Y, and Z axes form a standard right-handed coordinate system of orthogonal linear axes. Positions of the three linear motion mechanisms are expressed using coordinates on these axes.\n The U, V and W axes also form a standard right-handed coordinate system. X and U are parallel, Y and\n V are parallel, and Z and W are parallel (when A, B, and C are rotated to zero).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 53 / 1288\n \n 2.5.2.2. Rotational Axes\n The rotational axes are measured in degrees as wrapped linear axes in which the direction of positive\n rotation is counterclockwise when viewed from the positive end of the corresponding X, Y, or Z-axis.\n By wrapped linear axis, we mean one on which the angular position increases without limit (goes\n@@ -5746,15 +5746,15 @@\n 1. If any of XYZ are moving, F is in units per minute in the XYZ cartesian system, and all other axes\n (ABCUVW) move so as to start and stop in coordinated fashion.\n 2. Otherwise, if any of UVW are moving, F is in units per minute in the UVW cartesian system, and\n all other axes (ABC) move so as to start and stop in coordinated fashion.\n 3. Otherwise, the move is pure rotary motion and the F word is in rotary units in the ABC pseudocartesian system.\n 3 If the parallelism requirement is violated, the system builder will have to say how to distinguish clockwise from counterclockwise.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 54 / 1288\n \n 2.5.2.6. Cooling\n Flood or droplets cooling can be enabled separately. RS274/NGC language stops them together. See\n section about cooling control.\n 2.5.2.7. Dwell\n@@ -5782,15 +5782,15 @@\n 2.5.2.11. Tool Carousel\n Zero or one tool is assigned to each slot in the tool carousel.\n 2.5.2.12. Tool Change\n A machining center may be commanded to change tools.\n 2.5.2.13. Pallet Shuttle\n The two pallets may be exchanged by command.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 55 / 1288\n \n 2.5.2.14. Speed Override\n The speed override buttons can be activated (they function normally) or rendered inoperative (they no\n longer have any effect). The RS274/NGC language has a command that activates all the buttons and\n another that disables them. See inhibition and activation speed correctors. See also here for further\n@@ -5819,15 +5819,15 @@\n 2.5.3.2. Block Delete Switch\n If the block delete switch is on, lines of G-code which start with a slash (the block delete character)\n are not interpreted. If the switch is off, such lines are interpreted. Normally the block delete switch\n should be set before starting the NGC program.\n 2.5.3.3. Optional Program Stop Switch\n If this switch is on and an M1 code is encountered, program execution is paused.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 56 / 1288\n \n 2.5.4. Tool Table\n A tool table is required to use the Interpreter. The file tells which tools are in which tool changer slots\n and what the size and type of each tool is. The name of the tool table is defined in the INI file:\n [EMCIO]\n@@ -5876,15 +5876,15 @@\n 0.0\n 0.0\n \n Comment\n G28 Home X\n G28 Home Y\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 57 / 1288\n \n See the Parameters section for more information.\n \n 2.6. Lathe User Information\n This chapter will provide information specific to lathes.\n@@ -5915,30 +5915,30 @@\n There is also a built-in tool table editor in the AXIS display. The maximum number of entries in the\n tool table is 56. The maximum tool and pocket number is 99999.\n Earlier versions of LinuxCNC had two different tool table formats for mills and lathes, but since the\n 2.4.x release, one tool table format is used for all machines. Just ignore the parts of the tool table that\n don\u2019t pertain to your machine, or which you don\u2019t need to use. For more information on the specifics\n of the tool table format, see the Tool Table Section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 58 / 1288\n \n 2.6.3. Lathe Tool Orientation\n The following figure shows the lathe tool orientations with the center line angle of each orientation\n and info on FRONTANGLE and BACKANGLE.\n The FRONTANGLE and BACKANGLE are clockwise starting at a line parallel to Z+.\n \n Figura 2.16: Lathe Tool Orientations\n In AXIS the following figures show what the Tool Positions look like, as entered in the tool table.\n Tool Positions 1, 2, 3 & 4Tool Positions 123 & 4 23 & 4 3 & 4\n \n Tool Positions 5, 6, 7 & 8Tool Positions 567 & 8 67 & 8 7 & 8\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 59 / 1288\n \n 2.6.4. Tool Touch Off\n When running in lathe mode in AXIS you can set the X and Z in the tool table using the Touch Off\n window. If you have a tool turret you normally have Touch off to fixture selected when setting up your\n turret. When setting the material Z zero you have Touch off to material selected. For more information\n@@ -5964,15 +5964,15 @@\n The Z axis offsets can be a bit confusing at first because there are two elements to the Z offset. There\n is the tool table offset, and the machine coordinate offset. First we will look at the tool table offsets.\n One method is to use a fixed point on your lathe and set the Z offset for all tools from this point. Some\n use the spindle nose or chuck face. This gives you the ability to change to a new tool and set its Z\n offset without having to reset all the tools.\n A typical session might be:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 60 / 1288\n \n 1. Home each axis if not homed.\n 2. Make sure no offsets are in effect for the current coordinate system.\n 3. Set the current tool with Tn M6 G43 where n is the tool number.\n 4. Select the Z axis in the Manual Control window.\n@@ -6005,15 +6005,15 @@\n Constant Surface Speed CSS or Constant Surface Speed uses the machine X origin modified by\n the tool X offset to compute the spindle speed in RPM. CSS will track changes in tool offsets. The X\n machine origin should be when the reference tool (the one with zero offset) is at the center of rotation.\n For more information see the G96 Section.\n Feed per Revolution Feed per revolution will move the Z axis by the F amount per revolution. This\n is not for threading, use G76 for threading. For more information see the G95 Section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 61 / 1288\n \n 2.6.6. Arcs\n Calculating arcs can be mind challenging enough without considering radius and diameter mode on\n lathes as well as machine coordinate system orientation. The following applies to center format arcs.\n On a lathe you should include G18 in your preamble as the default is G17 even if you\u2019re in lathe mode,\n@@ -6041,15 +6041,15 @@\n The control point for the tool follows the programmed path. The control point is the intersection of a\n line parallel to the X and Z axis and tangent to the tool tip diameter, as defined when you touch off the\n X and Z axes for that tool. When turning or facing straight sided parts the cutting path and the tool\n edge follow the same path. When turning radius and angles the edge of the tool tip will not follow the\n programmed path unless cutter comp is in effect. In the following figures you can see how the control\n point does not follow the tool edge as you might assume.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 62 / 1288\n \n Figura 2.17: Control point\n \n 2.6.7.2. Cutting Angles without Cutter Comp\n Now imagine we program a ramp without cutter comp. The programmed path is shown in the following\n@@ -6057,28 +6057,28 @@\n same as long as we are moving in an X or Z direction only.\n \n Figura 2.18: Ramp Entry\n Now as the control point progresses along the programmed path the actual cutter edge does not follow\n the programmed path as shown in the following figure. There are two ways to solve this, cutter comp\n and adjusting your programmed path to compensate for tip radius.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 63 / 1288\n \n Figura 2.19: Ramp Path\n In the above example it is a simple exercise to adjust the programmed path to give the desired actual\n path by moving the programmed path for the ramp to the left the radius of the tool tip.\n 2.6.7.3. Cutting a Radius\n In this example we will examine what happens during a radius cut without cutter comp. In the next\n 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.\n \n Figura 2.20: Turning Cut\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 64 / 1288\n \n In this next figure you can see as the tool approaches the end of the part the control point still follows\n the path but the tool tip has left the part and is cutting air. You can also see that even though a radius\n has been programmed the part will actually end up with a square corner.\n \n@@ -6086,15 +6086,15 @@\n Now you can see as the control point follows the radius programmed the tool tip has left the part and\n is now cutting air.\n \n Figura 2.22: Radius Cut\n In the final figure we can see the tool tip will finish cutting the face but leave a square corner instead\n of a nice radius. Notice also that if you program the cut to end at the center of the part a small amount\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 65 / 1288\n \n of material will be left from the radius of the tool. To finish a face cut to the center of a part you have\n to program the tool to go past center at least the nose radius of the tool.\n \n Figura 2.23: Face Cut\n@@ -6115,15 +6115,15 @@\n width.\n Plasma torches are similar in design to the automotive spark plug. They consist of negative and positive\n sections separated by a center insulator. Inside the torch, the pilot arc starts in the gap between the\n negatively charged electrode and the positively charged tip. Once the pilot arc has ionised the plasma\n gas, the superheated column of gas flows through the small orifice in the torch tip, which is focused\n on the metal to be cut.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 66 / 1288\n \n In a Plasma Cutting Torch a cool gas enters Zone B, where a pilot arc between the electrode and the\n torch tip heats and ionises the gas. The main cutting arc then transfers to the workpiece through the\n column of plasma gas in Zone C. By forcing the plasma gas and electric arc through a small orifice, the\n torch delivers a high concentration of heat to a small area. The stiff, constricted plasma arc is shown\n@@ -6139,15 +6139,15 @@\n works well, and starts quickly. But, because of the high frequency high voltage power that is required\n generated to ionise the air, it has some drawbacks. It often interferes with surrounding electronic\n circuitry, and can even damage components. Also a special circuit is needed to create a Pilot arc.\n Inexpensive models will not have a pilot arc, and require touching the consumable to the work to\n start. Employing a HF circuit also can increase maintenance issues, as there are usually adjustable\n points that must be cleaned and readjusted from time to time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 67 / 1288\n \n 2.7.2.2. Blowback Start\n This start type uses air pressure supplied to the cutter to force a small piston or cartridge inside the\n torch head back to create a small spark between the inside surface of the consumable, ionising the\n air, and creating a small plasma flame. This also creates a \u201dpilot arc\u201d that provides a plasma flame\n@@ -6172,15 +6172,15 @@\n If the torch is too high or too low then the edges can become excessively bevelled. It is also critical\n that the torch is held perpendicular to the surface.\n Torch to work distance can impact edge bevel\n \n Negative cut angle: torch too low, increase torch to work distance.\n Positive cut angle: torch too high, decrease torch to work distance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 68 / 1288\n \n nota\n A slight variation in cut angles may be normal, as long as it is within tolerance.\n \n The ability to precisely control the cutting height in such a hostile and ever changing environment is\n@@ -6206,15 +6206,15 @@\n Blowback start to minimise electrical noise to simplify construction\n A Machine torch is preferred but many have used hand torches.\n A fully shielded torch tip to allow ohmic sensing\n If you have the budget, a higher end machines will supply:\n Manufacturer provided cut charts which will save many hours and material waste calibrating cut\n parameters\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 69 / 1288\n \n Dry Contacts for ArcOK\n Terminals for Arc On switch\n Raw arc voltage or divided arc voltage output\n Optionally a RS485 interface if using a Hypertherm plasma cutter and want to control it from the\n@@ -6258,15 +6258,15 @@\n A plasma table builder should connect one side of these pins to field power and the other to an input\n pin. This then allows the CNC controller to know when a valid arc is established and also when an\n arc is lost unexpectedly. There is a potential trap here when the input is a high impedance circuit\n such as a Mesa card. If the dry contacts are a simple relay, there is a high probability that the current\n passing through the relay is less than the minimum current specification. Under these conditions, the\n relay contacts can suffer from a buildup of oxide which over time can result in intermittent contact\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 70 / 1288\n \n operation. To prevent this from happening, a pull down resistor should be installed on the controller\n input pin. Care should be taken to ensure that this resistor is selected to ensure the minimum current\n passes through the relay and is of sufficient wattage to handle the power in the circuit. Finally, the\n resistor should be mounted in such a way that the generated heat does not damage anything whilst\n@@ -6306,15 +6306,15 @@\n of the material surface. This ohmic sensing circuit is operating in an extremely hostile environment\n so a number of failsafes need to be implemented to ensure safety of both the CNC electronics and\n the operator. In plasma cutting, the earth clamp attached to the material is positive and the torch is\n negative. It is recommended that:\n 1. Ohmic sensing only be implemented where the torch has a shield that is isolated from the torch\n tip that conveys the cutting arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 71 / 1288\n \n 2. The ohmic circuit uses a totally separate isolated power supply that activates an opto-isolated\n relay to enable the probing signal to be transmitted to the CNC controller.\n 3. The positive side of the circuit should be at the torch\n 4. Both sides of the circuit needs to be isolated by opto-isolated relays until probing is being undertaken\n@@ -6336,15 +6336,15 @@\n threshold above which it is deemed contact is made and an output is enabled. By monitoring the voltage, a lower \u201cbreak circuit\u201d threshold can be set to build in strong switch hysteresis. This minimises\n false triggering. In our testing, we found the material sensing using this method was more sensitive\n and robust as well as being simpler to implement the wiring. One further advantage is using software\n outputs instead of physical I/O pins is that it frees up pins to use for other purposes. This advantage\n is helpful to get the most out of the Mesa 7I96 which has limited I/O pins.\n The following circuit diagram shows how to implement a hypersensing circuit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 72 / 1288\n \n We used a 15 W Mean Well HDR-15 Ultra Slim DIN Rail Supply 24 V DIN rail based isolated power\n supply. This is a double insulated Isolation Class II device that will withstand any arc voltage that\n might be applied to the terminals.\n 2.7.7.4. Example HAL Code for Hypersensing\n@@ -6361,15 +6361,15 @@\n setp ohmicsense.thcad-fullscale\n \n 140200\n 988300\n 32\n 5\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 73 / 1288\n \n setp ohmicsense.volt-divider\n 4.9\n setp ohmicsense.ohmic-threshold\n 22.0\n@@ -6402,15 +6402,15 @@\n \n 2.7.10. Torch Breakaway\n It is recommended that a mechanism is provided to allow the torch to \u201cbreak away\u201d or fall off in the\n case of impact with the material or a cut part that has tipped up. A sensor should be installed to allow\n the CNC controller to detect if this has occurred and pause the running program. Usually a break\n away is implemented using magnets to secure the torch to the Z axis stage.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 74 / 1288\n \n 2.7.11. Corner Lock / Velocity Anti-Dive\n The LinuxCNC trajectory planner is responsible for translating velocity and acceleration commands\n into motion that obey the laws of physics. For example, motion will slow when negotiating a corner.\n Whilst this is not a problem with milling machines or routers, this poses a particular problem for\n@@ -6441,15 +6441,15 @@\n Hypertherm\u2019s True Hole Technology also look on PlasmaSpider, user seanp has posted extensively on\n his work using simple air plasma.\n The generally accepted method to get good holes from 37mm dia. and down to material thickness with\n minimal taper using an air plasma is:\n 1. Use recommended cutting current for consumables.\n 2. Use fixed (no THC) recommended cutting height for consumables.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 75 / 1288\n \n 3. Cut from 60 % to 70 % of the recommended feed rate of consumables and materials.\n 4. Start lead in at or near center of hole.\n 5. Use perpendicular lead in.\n 6. No lead out, either a slight over burn or early torch off depending on what works best for you.\n@@ -6486,15 +6486,15 @@\n 2.7.14.1. Arc OK (input)\n Inverter closes dry contacts when a valid arc is established\n Connect Field power to one Inverter ArcOK terminal.\n Connect other Inverter Ok Terminal to input pin.\n Usually connected to one of the \u0300 \u0300motion.digital- \u0300 <\n \u0300 nn> pins for use from G-code with M66\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 76 / 1288\n \n 2.7.14.2. Torch On (output)\n Triggers a relay to close the torch on switch in the inverter.\n Connect the torch on terminals on the inverter to the relay output terminals.\n Connect one side of the coil to the output pin.\n@@ -6524,15 +6524,15 @@\n 2.7.14.5. Ohmic Sensing (input)\n Take care to follow the ohmic sensing schematic shown previously.\n An isolated power supply triggers a relay when the torch shield contacts the material.\n Connect field power to one output terminal and the other to the input.\n Take care to observe relay polarity if opto-coupled solid State relays are used.\n Usually connected to motion.probe-input and may be or\u2019d with the float switch.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 77 / 1288\n \n As can be seen, plasma tables are pin intensive and we have already consumed about 15 inputs before\n the normal estops are added. Others have other views but it is the writer\u2019s opinion that the Mesa\n 7I76E is preferred over the cheaper 7I96 to allow for MPG\u2019s, scale and axis selection switch and other\n features you may wish to add over time. If your table uses servos, there are a number of alternatives.\n@@ -6575,15 +6575,15 @@\n G42.1 D#<_hal[plasmac_run.kerf-width-f]> for right of programmed path\n G40 to turn compensation off\n \n nota\n Integrators should familiarise themselves with the LinuxCNC documentation for the various LinuxCNC\n G-code commands mentioned above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 78 / 1288\n \n 2.7.16. External Offsets and Plasma Cutting\n External Offsets were introduced to LinuxCNC with version 2.8. By external, it means that we can\n apply an offset external to the G-code that the trajectory planner knows nothing about. It easiest\n to explain with an example. Picture a lathe with an external offset being applied by a mathematical\n@@ -6634,15 +6634,15 @@\n Full scale\n 0V\n \n 928 kHz (928 kHz/32 = 29 kHz)\n \n 121.6 kHz (121.6 kHz/32 = 3.8 kHz)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 79 / 1288\n \n Because the full scale is 10 Volts, then the frequency per Volt is:\n (29000 Hz - 3800 Hz) / 10 V = 2520 Hz per Volt\n So assuming we have a 5 Volt input, the calculated frequency would be:\n (2520 Hz/V * 5 V) + 3800 Hz = 16400 Hz\n@@ -6675,15 +6675,15 @@\n as 24:1 (and 50:1 becomes 75:1). This is not a problem with more reputable brands (e.g., Thermal\n Dynamics, Hypertherm, ESAB etc). So if you are seeing lower than expected cutting voltages, it might\n be preferable to reconfigure the THCAD to read raw arc voltage.\n Remembering that plasma arc voltages are potentially lethal, here are some suggested criteria.\n Pilot Arc Start Because there is not likely to be any significant EMI, you should be able to safely\n install the THCAD in your control panel if you have followed our construction guidelines.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 80 / 1288\n \n If you do not have a voltage divider, either install scaling resistors inside the plasma cutter and\n install the THCAD in the control panel or follow the suggestions for HF start machines.\n If you have a voltage divider, install a THCAD-10 in your control panel. We\u2019ve had no problems with\n this configuration with a 120 A Thermal Dynamics plasma cutter.\n@@ -6721,15 +6721,15 @@\n be located away from the electronics and the plasma machine. This hardware also allows the use of\n 24 Volt logic systems which are much more noise tolerant. Components should be mounted in a metal\n enclosure connected to the mains earth. It is strongly recommended that an EMI filter is installed on\n the mains power connection. The simplest way is to use a EMI filtered mains power IEC connector\n commonly used on PC\u2019s and electric appliances which allows this to be achieved with no extra work.\n Plan the layout of components in the enclosure so that mains power, high voltage motor wires and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 81 / 1288\n \n logic signals are kept as separate as possible from each other. If they do have to cross, keep them at\n 90 degrees.\n Peter Wallace from Mesa Electronics suggests: \u201dIf you have a CNC compatible plasma source with a\n voltage divider, I would mount the THCAD inside your electronics enclosure with all the other motion\n@@ -6774,15 +6774,15 @@\n is relatively straightforward if you use the axis or joint position from one of the motion pins and the\n lincurve component to map downdraft zones to the correct output pin.\n \n 2.7.22. Designing For Speed And Acceleration\n In plasma cutting, speed and acceleration are king. The higher the acceleration, the less the machine\n needs to slow down when negotiating corners. This implies that the gantry should be as light as\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 82 / 1288\n \n possible without sacrificing torsional stiffness. A 100 mm x 100 mm x 2 mm aluminium box section has\n equivalent torsional stiffness to an 80 mm x 80 mm T slot extrusion yet is 62 % lighter. So does the\n convenience of T slots outweigh the additional construction?\n \n@@ -6822,29 +6822,29 @@\n 2.7.26. Post Processors For Plasma Cutting\n CAM programs (Computer Aided Manufacture) are the bridge between CAD (Computer Aided Design)\n and the final CNC (Computer Numerical Control) operation. They often include a user configurable\n post processor to define the code that is generated for a specific machine or dialect of G-code.\n Many LinuxCNC users are perfectly happy with using Inkscape to convert SVG vector based files to\n G-code. If you are using a plasma cutter for hobby or home use, consider this option.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 83 / 1288\n \n However, if your needs are more complex, probably the best and most reasonably priced solution\n is SheetCam. SheetCam supports both Windows and Linux and post processors are available for it\n including the QtPlasmaC configuration. SheetCam allows you to nest parts over a full sheet of material\n and allows you to configure toolsets and code snippets to suit your needs. SheetCam post processors\n are text files written in the Lua programming language and are generally easy to modify to suit your\n exact requirements. For further information, consult the SheetCam web site and their support forum.\n Another popular post-processor is included with the popular Fusion360 package but the included\n post-processors will need some customisation.\n LinuxCNC is a CNC application and discussions of CAM techniques other than this introductory discussion are out of scope of LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 84 / 1288\n \n Cap\u00edtulo 3\n \n Configuration Wizards\n 3.1. Stepper Configuration Wizard\n@@ -6855,15 +6855,15 @@\n & direction.\n StepConf is installed when you install LinuxCNC and is in the CNC menu.\n StepConf places a file in the linuxcnc/config directory to store the choices for each configuration you\n create. When you change something, you need to pick the file that matches your configuration name.\n The file extension is .stepconf.\n The StepConf Wizard works best with at least 800 x 600 screen resolution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 85 / 1288\n \n 3.1.2. Start Page\n \n Figura 3.1: StepConf Entry Page\n The three first radio buttons are self-explanatory:\n@@ -6874,15 +6874,15 @@\n StepConf Wizard. StepConf will highlight the lastconf that was built.\n Import - Import a Mach configuration file and attempt to convert it to a LinuxCNC config file. After\n the import, you will go though the pages of StepConf to confirm/modify the entries. The original\n mach XML file will not be changed.\n These next options will be recorded in a preference file for the next run of StepConf.\n Create Desktop Shortcut - This will place a link on your desktop to the files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 86 / 1288\n \n Create Desktop Launcher - This will place a launcher on your desktop to start your application.\n Create Simulated Hardware - This allows you to build a config for testing, even if you don\u2019t have\n the actual hardware.\n \n@@ -6894,15 +6894,15 @@\n Machine Name - Choose a name for your machine. Use only uppercase letters, lowercase letters,\n digits, - and _.\n Axis Configuration - Choose XYZ (Mill), XYZA (4-axis mill) or XZ (Lathe).\n Machine Units - Choose Inch or mm. All subsequent entries will be in the chosen units. Changing\n this also changes the default values in the Axes section. If you change this after selecting values in\n any of the axes sections, they will be over-written by the default values of the selected units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 87 / 1288\n \n Driver Type - If you have one of the stepper drivers listed in the pull down box, choose it. Otherwise,\n select Other and find the timing values in your driver\u2019s data sheet and enter them as nano seconds\n in the Driver Timing Settings. If the data sheet gives a value in microseconds, multiply by 1000. For\n example, enter 4.5 \u00b5s as 4500 ns.\n@@ -6930,15 +6930,15 @@\n worst case numbers are. Run the test at least a few minutes. The longer you run the test the better it\n will be at catching events that might occur at less frequent intervals. This is a test for your computer\n only, so no hardware needs to be connected to run the test.\n \n aviso\n Do not attempt run LinuxCNC while the latency test is running.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 88 / 1288\n \n Figura 3.3: Latency Test\n Latency is how long it takes the PC to stop what it is doing and respond to an external request. In our\n case, the request is the periodic heartbeat that serves as a timing reference for the step pulses. The\n lower the latency, the faster you can run the heartbeat, and the faster and smoother the step pulses\n@@ -6954,15 +6954,15 @@\n If your Max Jitter number is less than about 15-20 \u00b5s (15000-20000 ns), the computer should give very\n nice results with software stepping. If the max latency is more like 30-50 \u00b5s, you can still get good\n results, but your maximum step rate might be a little disappointing, especially if you use microstepping\n or have very fine pitch leadscrews. If the numbers are 100 \u00b5s or more (100,000 ns), then the PC is not\n a good candidate for software stepping. Numbers over 1 millisecond (1,000,000 ns) mean the PC is\n not a good candidate for LinuxCNC, regardless of whether you use software stepping or not.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 89 / 1288\n \n 3.1.5. Parallel Port Setup\n \n Figura 3.4: Parallel Port Setup Page\n You may specify the address as a hexadecimal (often 0x378) or as linux\u2019s default port number (probably\n@@ -6971,15 +6971,15 @@\n if the signal is inverted (0V for true/active, 5V for false/inactive).\n 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).\n Inputs and Outputs - If the input or output is not used set the option to Unused.\n External E-Stop - This can be selected from an input pin drop down box. A typical E-Stop chain uses\n all normally closed contacts.\n Homing & Limit Switches - These can be selected from an input pin drop down box for most configurations.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 90 / 1288\n \n Charge Pump - If your driver board requires a charge pump signal select Charge Pump from the\n drop down list for the output pin you wish to connect to your charge pump input. The charge pump\n output is connected to the base thread by StepConf. The charge pump output will be about 1/2 of\n the maximum step rate shown on the Basic Machine Configuration page.\n@@ -6991,15 +6991,15 @@\n \n Figura 3.5: Parallel Port 2 Setup Page\n The second Parallel port (if selected) can be configured and It\u2019s pins assigned on this page. No step and\n direction signals can be selected. You may select in or out to maximizes the number of input/output\n pins that are available. You may specify the address as a hexadecimal (often 0x378) or as linux\u2019s\n default port number (probably 1).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 91 / 1288\n \n 3.1.7. Axis Configuration\n \n Figura 3.6: Axis Configuration Screen\n Motor Steps Per Revolution - The number of full steps per motor revolution. If you know how many\n@@ -7010,15 +7010,15 @@\n If not, enter 1:1.\n Leadscrew Pitch - Enter the pitch of the leadscrew here. If you chose Inch units, enter the number\n of threads per inch. If you chose mm units, enter the number of millimeters per revolution (e.g.,\n enter 2 for 2mm/rev). If the machine travels in the wrong direction, enter a negative number here\n instead of a positive number, or invert the direction pin for the axis.\n Maximum Velocity - Enter the maximum velocity for the axis in units per second.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 92 / 1288\n \n Maximum Acceleration - The correct values for these items can only be determined through experimentation. See Finding Maximum Velocity to set the speed and Finding Maximum Acceleration to\n set the acceleration.\n Home Location - The position the machine moves to after completing the homing procedure for this\n axis. For machines without home switches, this is the location the operator manually moves the\n@@ -7047,15 +7047,15 @@\n Pulse rate at max speed determines the BASE_PERIOD. Values above 20000Hz may lead to slow\n response time or even lockups (the fastest usable pulse rate varies from computer to computer)\n Axis SCALE - The number that will be used in the INI file [SCALE] setting. This is how many steps\n per user unit.\n Test this axis - This will open a window to allow testing for each axis. This can be used after filling\n out all the information for this axis.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 93 / 1288\n \n Figura 3.7: Axis Test\n Test this axis is a basic tester that only outputs step and direction signals to try different values for\n acceleration and velocity.\n importante\n@@ -7078,15 +7078,15 @@\n If the machine did not obviously stall, click the Run button off. The axis now returns to the position\n where it started. If the position is incorrect, then the axis stalled or lost steps during the test. Reduce\n Velocity and start the test again.\n If the machine doesn\u2019t move, stalls, or loses steps, no matter how low you turn Velocity, verify the\n following:\n Correct step waveform timings\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 94 / 1288\n \n Correct pinout, including Invert on step pins\n Correct, well-shielded cabling\n Physical problems with the motor, motor coupling, leadscrew, etc.\n Once you have found a speed at which the axis does not stall or lose steps during this testing procedure,\n@@ -7098,15 +7098,15 @@\n Velocity. Once you have found a value at which the axis does not stall or lose steps during this testing\n procedure, reduce it by 10 % and use that as the axis Maximum Acceleration.\n \n 3.1.8. Spindle Configuration\n \n Figura 3.8: Spindle Configuration Page\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 95 / 1288\n \n This page only appears when Spindle PWM is chosen in the Parallel Port Pinout page for one of the\n outputs.\n 3.1.8.1. Spindle Speed Control\n If Spindle PWM appears on the pinout, the following information should be entered:\n@@ -7150,29 +7150,29 @@\n Change the spindle speed by entering a different S-number: S800. Valid numbers (at this point) range\n from 1 to 1000.\n For two different S-numbers, measure the actual spindle speed in RPM. Record the S-numbers and\n actual spindle speeds. Run StepConf again. For Speed enter the measured speed, and for PWM enter\n the S-number divided by 1000.\n Because most spindle drivers are somewhat nonlinear in their response curves, it is best to:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 96 / 1288\n \n Make sure the two calibration speeds are not too close together in RPM.\n Make sure the two calibration speeds are in the range of speeds you will typically use while milling.\n For instance, if your spindle will go from 0 RPM to 8000 RPM, but you generally use speeds from 400\n RPM (10 %) to 4000 RPM (100 %), then find the PWM values that give 1600 RPM (40 %) and 2800\n RPM (70 %).\n \n 3.1.9. Options\n \n Figura 3.9: Advanced Options Configuration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 97 / 1288\n \n Include Halui - This will add the Halui user interface component. See the HALUI Chapter for more\n information on.\n Include PyVCP - This option adds the PyVCP panel base file or a sample file to work on. See the\n PyVCP Chapter for more information.\n@@ -7197,15 +7197,15 @@\n Before the hard stop there is a limit switch. If the limit switch is encountered during normal operation,\n LinuxCNC shuts down the motor amplifier. The distance between the hard stop and limit switch must\n be long enough to allow an unpowered motor to coast to a stop.\n Before the limit switch there is a soft limit. This is a limit enforced in software after homing. If a MDI\n command or G-code program would pass the soft limit, it is not executed. If a jog would pass the soft\n limit, it is terminated at the soft limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 98 / 1288\n \n The home switch can be placed anywhere within the travel (between hard stops). As long as external\n hardware does not deactivate the motor amplifiers when the limit switch is reached, one of the limit\n switches can be used as a home switch.\n The zero position is the location on the axis that is 0 in the machine coordinate system. Usually the zero\n@@ -7232,15 +7232,15 @@\n LinuxCNC expects a TRUE value when a switch is closed, so the corresponding Invert box must be\n checked on the pinout configuration page. The pull up resistor show in the diagrams pulls the input\n high until the connection to ground is made and then the input goes low. Otherwise the input might\n float between on and off when the circuit is open. Typically for a parallel port you might use 47 k\u03a9;.\n \n Figura 3.11: Normally Closed Switches (N/C) wiring in series (simplified diagram)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 99 / 1288\n \n Figura 3.12: Normally Open Switches (N/O) wiring in parallel (simplified diagram)\n The following combinations of switches are permitted in StepConf:\n Combine home switches for all axes\n Combine limit switches for all axes\n@@ -7263,15 +7263,15 @@\n everything to tailor it to your needs. This would be the choice if you need extensive modifications\n beyond PnCconf\u2019s scope or just want to tinker with / learn about LinuxCNC.\n You navigate the wizard pages with the forward, back, and cancel buttons there is also a help button\n that gives some help information about the pages, diagrams and an output page.\n sugerencia\n PnCconf\u2019s help page should have the most up to date info and has additional details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 100 / 1288\n \n 3.2.1. Step by Step Instructions\n \n Figura 3.13: PnCconf Splash\n \n@@ -7283,15 +7283,15 @@\n places a note in those files. It also allows you to select desktop shortcut / launcher options. A desktop\n shortcut will place a folder icon on the desktop that points to your new configuration files. Otherwise\n you would have to look in your home folder under linuxcnc/configs.\n A Desktop launcher will add an icon to the desktop for starting your config directly. You can also\n launch it from the main menu by using the Configuration Selector LinuxCNC found in CNC menu and\n selecting your config name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 101 / 1288\n \n 3.2.3. Basic Machine Information\n \n Figura 3.14: PnCconf Basic\n \n@@ -7303,15 +7303,15 @@\n sugerencia\n Los valores predeterminados no se convierten cuando se usa sistema m\u00e9trico, as\u00ed que \u00a1aseg\u00farese\n de que sean valores correctos!\n \n Computer Response Time\n The servo period sets the heart beat of the system. Latency refers to the amount of time the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 102 / 1288\n \n computer can be longer then that period. Just like a railroad, LinuxCNC requires everything\n on a very tight and consistent time line or bad things happen. LinuxCNC requires and uses a\n real time operating system, which just means it has a low latency ( lateness ) response time\n when LinuxCNC requires its calculations and when doing LinuxCNCs calculations it cannot be\n@@ -7358,15 +7358,15 @@\n Up to 3 parallel ports (referred to as parports) can be used as simple I/O. You must set the address\n of the parport. You can either enter the Linux parallel port numbering system (0,1,or 2) or enter\n the actual address. The address for an on board parport is often 0x0278 or 0x0378 (written in\n hexadecimal) but can be found in the BIOS page. The BIOS page is found when you first start\n your computer you must press a key to enter it (such as F2). On the BIOS page you can find\n the parallel port address and set the mode such as SPP, EPP, etc on some computers this info is\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 103 / 1288\n \n displayed for a few seconds during start up. For PCI parallel port cards the address can be found\n by pressing the parport address search button. This pops up the help output page with a list of\n all the PCI devices that can be found. In there should be a reference to a parallel port device with\n a list of addresses. One of those addresses should work. Not all PCI parallel ports work properly.\n@@ -7395,15 +7395,15 @@\n has no graphical window\n look can be changed with custom themes\n QtPlasmaC\n fully featured plasmac configuration based on the QtVCP infrastructure.\n mouse/keyboard operation or touchscreen operation\n no VCP integration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 104 / 1288\n \n 3.2.4. External Configuration\n This page allows you to select external controls such as for jogging or overrides.\n \n Figura 3.15: External Controls\n@@ -7414,15 +7414,15 @@\n switch based OEM joystick.\n Joystick jogging\n Requires a custom device rule to be installed in the system. This is a file that LinuxCNC uses to\n connect to Linux\u2019s device list. PnCconf will help to prepare this file.\n Search for device rule will search the system for rules, you can use this to find the name of\n devices you have already built with PnCconf.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 105 / 1288\n \n Add a device rule will allow you to configure a new device by following the prompts. You will\n need your device available.\n test device allows you to load a device, see its pin names and check its functions with halmeter.\n joystick jogging uses HALUI and hal_input components.\n@@ -7439,15 +7439,15 @@\n PnCconf allows overrides of feed rates and/or spindle speed using a pulse generator (MPG) or\n switches (eg. rotary).\n \n 3.2.5. GUI Configuration\n Here you can set defaults for the display screens, add virtual control panels (VCP), and set some\n LinuxCNC options..\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 106 / 1288\n \n Figura 3.16: GUI Configuration\n \n Front-end GUI Options\n The default options allows general defaults to be chosen for any display screen.\n@@ -7458,15 +7458,15 @@\n Touchy defaults are options specific to Touchy. Most of Touchy\u2019s options can be changed while Touchy\n is running using the preference page. Touchy uses GTK to draw its screen, and GTK supports themes.\n Themes controls the basic look and feel of a program. You can download themes from the net or edit\n them yourself. There are a list of the current themes on the computer that you can pick from. To help\n some of the text to stand out PnCconf allows you to override the Themes\u2019s defaults. The position and\n force max options can be used to move Touchy to a second monitor if the system is capable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 107 / 1288\n \n QtPlasmaC options are specific to QtPlasmac, any common options that are not required will be disabled. If QtPlasmac is selected then the following screen will be a user button setup screen that is\n specific to QtPlasmaC and VCP options will not be available.\n VCP options\n Virtual Control Panels allow one to add custom controls and displays to the screen. AXIS and\n@@ -7506,15 +7506,15 @@\n You can select a GTK theme which sets the basic look and feel of the panel. You Usually want this to\n match the front-end screen. These options will be used if you press the Display sample button. With\n GladeVCP depending on the front-end screen, you can select where the panel will display.\n You can force it to be stand-alone or with AXIS it can be in the center or on the right side, with Touchy\n it can be in the center.\n Defaults and Options\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 108 / 1288\n \n Require homing before MDI / Running\n \u2022 If you want to be able to move the machine before homing uncheck this checkbox.\n Popup Tool Prompt\n \u2022 Choose between an on screen prompt for tool changes or export standard signal names for\n@@ -7530,15 +7530,15 @@\n custom HAL code to support tool changers.\n \n 3.2.6. Mesa Configuration\n The Mesa configuration pages allow one to utilize different firmwares. On the basic page you selected\n a Mesa card here you pick the available firmware and select what and how many components are\n available.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 109 / 1288\n \n Figura 3.17: Mesa Board Configuration\n Parport address is used only with Mesa parport card, the 7i43. An on board parallel port usually uses\n 0x278 or 0x378 though you should be able to find the address from the BIOS page. The 7i43 requires\n the parallel port to use the EPP mode, again set in the BIOS page. If using a PCI parallel port the\n@@ -7548,15 +7548,15 @@\n \n PDM PWM and 3PWM base frequency sets the balance between ripple and linearity. If using Mesa\n daughter boards the docs for the board should give recommendations.\n \n importante\n It\u2019s important to follow these to avoid damage and get the best performance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 110 / 1288\n \n The 7i33 requires PDM and a PDM base frequency of 6 MHz\n The 7i29 requires PWM and a PWM base frequency of 20 kHz\n The 7i30 requires PWM and a PWM base frequency of 20 kHz\n The 7i40 requires PWM and a PWM base frequency of 50 kHz\n@@ -7580,49 +7580,49 @@\n the I/O setup pages. Only I/O tabs will be shown for available connectors, depending on the Mesa\n board.\n \n 3.2.7. Mesa I/O Setup\n The tabs are used to configure the input and output pins of the Mesa boards. PnCconf allows one to\n create custom signal names for use in custom HAL files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 111 / 1288\n \n Figura 3.18: Mesa I/O C2 Setup\n On this tab with this firmware the components are setup for a 7i33 daughter board, usually used with\n closed loop servos. Note the component numbers of the encoder counters and PWM drivers are not\n in numerical order. This follows the daughter board requirements.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 112 / 1288\n \n Figura 3.19: Mesa I/O C3 Setup\n On this tab all the pins are GPIO. Note the 3 digit numbers - they will match the HAL pin number.\n GPIO pins can be selected as input or output and can be inverted.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 113 / 1288\n \n Figura 3.20: Mesa I/O C4 Setup\n On this tab there are a mix of step generators and GPIO. Step generators output and direction pins\n can be inverted. Note that inverting a Step Gen-A pin (the step output pin) changes the step timing.\n It should match what your controller expects.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3.2.8. Parallel port configuration\n \n The parallel port can be used for simple I/O similar to Mesa\u2019s GPIO pins.\n \n 114 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 115 / 1288\n \n 3.2.9. Axis Configuration\n \n Figura 3.21: Axis Drive Configuration\n This page allows configuring and testing of the motor and/or encoder combination. If using a servo\n@@ -7634,15 +7634,15 @@\n Handbook 1 standards or AXIS graphical display will not make much sense. Hopefully the help\n page and diagrams can help figure this out. Note that axis directions are based on TOOL movement not table movement. There is no acceleration ramping with the open loop test so start with\n lower DAC numbers. By moving the axis a known distance one can confirm the encoder scaling.\n The encoder should count even without the amp enabled depending on how power is supplied to\n the encoder.\n 1 \u201daxis nomenclature\u201d in the chapter \u201dNumerical Control\u201d in the \u201dMachinery\u2019s Handbook\u201d published by Industrial Press.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 116 / 1288\n \n aviso\n If the motor and encoder do not agree on counting direction then the servo will run away when\n using PID control.\n \n@@ -7688,15 +7688,15 @@\n Note that we want raw output such that our measured result is identical to the commanded output.\n This means\n \u2022 cmd=a*raw+b\n \u2022 raw=(cmd-b)/a\n As a result, the a and b coefficients from the linear fit can be used as the scale and offset for the\n controller directly.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 117 / 1288\n \n MAX OUTPUT\n 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\n scaling to raw output units. The value is applied symmetrically to both the plus and the minus\n side.\n@@ -7713,25 +7713,25 @@\n speed.\n Brushless Motor Control\n These options are used to allow low level control of brushless motors using special firmware and\n daughter boards. It also allows conversion of HALL sensors from one manufacturer to another.\n It is only partially supported and will require one to finish the HAL connections. Contact the\n mail-list or forum for more help.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 118 / 1288\n \n Figura 3.22: Axis Scale Calculation\n The scale settings can be directly entered or one can use the calculate scale button to assist. Use the\n check boxes to select appropriate calculations. Note that pulley teeth requires the number of teeth\n not the gear ratio. Worm turn ratio is just the opposite it requires the gear ratio. If your happy with\n the scale press apply otherwise push cancel and enter the scale directly.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 119 / 1288\n \n Figura 3.23: Axis Configuration\n Also refer to the diagram tab for two examples of home and limit switches. These are two examples\n of many different ways to set homing and limits.\n \n@@ -7742,15 +7742,15 @@\n Remember positive and negative directions refer to the TOOL not the table as per the Machinists\n handbook.\n On a typical knee or bed mill\n when the TABLE moves out that is the positive Y direction\n when the TABLE moves left that is the positive X direction\n when the TABLE moves down that is the positive Z direction\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 120 / 1288\n \n when the HEAD moves up that is the positive Z direction\n On a typical lathe\n when the TOOL moves right, away from the chuck\n that is the positive Z direction\n@@ -7794,15 +7794,15 @@\n will be zero.\n (machine) ORIGIN\n The Origin is the MACHINE zero point. (not the zero point you set your cutter / material at).\n LinuxCNC uses this point to reference everything else from. It should be inside the software\n limits. LinuxCNC uses the home switch location to calculate the origin position (when using\n home switches or must be manually set if not using home switches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 121 / 1288\n \n Travel distance\n This is the maximum distance the axis can travel in each direction. This may or may not be able\n to be measured directly from origin to limit switch. The positive and negative travel distances\n should add up to the total travel distance.\n@@ -7841,30 +7841,30 @@\n LinuxCNC will search for an encoder index pulse while in the latch stage of homing.\n Use Compensation File\n Allows specifying a Comp filename and type. Allows sophisticated compensation. See AXIS Section of the INI chapter.\n Use Backlash Compensation\n Allows setting of simple backlash compensation. Can not be used with Compensation File. See\n AXIS Section of the INI chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 122 / 1288\n \n Figura 3.24: AXIS Help Diagram\n The diagram should help to demonstrate an example of limit switches and standard axis movement\n directions. In this example the Z axis was two limit switches, the positive switch is shared as a home\n switch. The MACHINE ORIGIN (zero point) is located at the negative limit. The left edge of the carriage\n is the negative trip pin and the right the positive trip pin. We wish the FINAL HOME POSITION to be\n 4 inches away from the ORIGIN on the positive side. If the carriage was moved to the positive limit\n we would measure 10 inches between the negative limit and the negative trip pin.\n \n 3.2.10. Spindle Configuration\n If you select spindle signals then this page is available to configure spindle control.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 123 / 1288\n \n sugerencia\n Many of the option on this page will not show unless the proper option was selected on previous\n pages!\n \n@@ -7876,15 +7876,15 @@\n If you picked a VCP spindle display option then spindle-at-speed scale and filter settings may be\n shown.\n Spindle-at-speed allows LinuxCNC to wait till the spindle is at the requested speed before moving\n the axis. This is particularly handy on lathes with constant surface feed and large speed diameter\n changes. It requires either encoder feedback or a digital spindle-at-speed signal typically connected\n to a VFD drive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 124 / 1288\n \n If using encoder feedback, you may select a spindle-at-speed scale setting that specifies how close\n the actual speed must be to the requested speed to be considered at-speed.\n If using encoder feedback, the VCP speed display can be erratic - the filter setting can be used to\n smooth out the display. The encoder scale must be set for the encoder count / gearing used.\n@@ -7899,25 +7899,25 @@\n HALUI Chapter for more info on using custom halcmds. There are several ladder program options.\n The Estop program allows an external ESTOP switch or the GUI frontend to throw an Estop. It also\n has a timed lube pump signal. The Z auto touch-off is with a touch-off plate, the GladeVCP touch-off\n button and special HALUI commands to set the current user origin to zero and rapid clear. The serial\n modbus program is basically a blank template program that sets up ClassicLadder for serial modbus.\n See the ClassicLadder Chapter in the manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 125 / 1288\n \n Figura 3.26: PnCconf, advanced options\n \n 3.2.12. HAL Components\n On this page you can add additional HAL components you might need for custom HAL files. In this\n way one should not have to hand edit the main HAL file, while still allowing user needed components.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 126 / 1288\n \n Figura 3.27: HAL Components\n The first selection is components that pncconf uses internally. You may configure pncconf to load extra\n instances of the components for your custom HAL file.\n Select the number of instances your custom file will need, PnCconf will add what it needs after them.\n@@ -7928,15 +7928,15 @@\n heading Thread command. The components will be added to the thread between reading of inputs\n and writing of outputs, in the order you write them in the thread command.\n \n 3.2.13. Advanced Usage Of PnCconf\n PnCconf does its best to allow flexible customization by the user. PnCconf has support for custom\n signal names, custom loading of components, custom HAL files and custom firmware.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 127 / 1288\n \n There are also signal names that PnCconf always provides regardless of options selected, for user\u2019s\n custom HAL files With some thought most customizations should work regardless if you later select\n different options in PnCconf.\n Eventually if the customizations are beyond the scope of PnCconf\u2019s frame work you can use PnCconf\n@@ -7968,15 +7968,15 @@\n Loading Custom Firmware\n PnCconf searches for firmware on the system and then looks for the XML file that it can convert\n to what it understands. These XML files are only supplied for officially released firmware from\n the LinuxCNC team. To utilize custom firmware one must convert it to an array that PnCconf\n understands and add its file path to PnCconf\u2019s preference file. By default this path searches the\n desktop for a folder named custom_firmware and a file named firmware.py.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 128 / 1288\n \n The hidden preference file is in the user\u2019s home file, is named .pncconf-preferences and require one\n to select show hidden files in your file manager to see and edit it or on the command line you use ls\n with the -a option. The contents of this file can be seen when you first load PnCconf - press the help\n button and look at the output page.\n@@ -7987,15 +7987,15 @@\n custom.hal is for HAL commands that don\u2019t have to be run after the GUI frontend loads. It is\n run after the configuration-named HAL file.\n custom_postgui.hal is for commands that must be run after AXIS loads or a standalone PyVCP\n display loads.\n custom_gvcp.hal is for commands that must be run after GladeVCP is loaded.\n shutdown.hal is for commands to run when LinuxCNC shuts down in a controlled manner.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 129 / 1288\n \n Cap\u00edtulo 4\n \n Configuration\n 4.1. Integrator Concepts\n@@ -8015,15 +8015,15 @@\n /home/fred/linuxcnc/nc_files\n /home/fred/linuxcnc/configs/mill\n \u2022 /home/fred/linuxcnc/configs/mill/mill.ini\n \u2022 /home/fred/linuxcnc/configs/mill/mill.hal\n \u2022 /home/fred/linuxcnc/configs/mill/mill.var\n \u2022 /home/fred/linuxcnc/configs/mill/tool.tbl\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 130 / 1288\n \n 4.1.1.2. Command Line\n If you run LinuxCNC from the command line and specify the name and location of the INI file the file\n locations can be in a different place. To view the options for running LinuxCNC from the command\n line run linuxcnc -h.\n@@ -8057,15 +8057,15 @@\n requirements affect the shortest period you can use.\n Worst case latencies might only happen a few times a minute, and the odds of bad latency happening\n just as the motor is changing direction are low. So you can get very rare errors that ruin a part every\n once in a while and are impossible to troubleshoot.\n 1 This section refers to using stepgen, LinuxCNC\u2019s built-in step generator. Some hardware devices have their own step\n generator and do not use LinuxCNC\u2019s built-in one. In that case, refer to your hardware manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 131 / 1288\n \n The simplest way to avoid this problem is to choose a BASE_PERIOD that is the sum of the longest\n timing requirement of your drive, and the worst case latency of your computer. This is not always the\n best choice. For example, if you are running a drive with a 20 \u00b5s direction signal hold time requirement,\n and your latency test said you have a maximum latency of 11 \u00b5s , then if you set the BASE_PERIOD\n@@ -8097,15 +8097,15 @@\n system might. These differences exist because servos are a closed loop system, unlike stepper motors\n which are generally run open loop. What does closed loop mean? Let\u2019s look at a simplified diagram of\n how a servomotor system is connected.\n 2 steplen refers to a parameter that adjusts the performance of LinuxCNC\u2019s built-in step generator, stepgen, which is a HAL\n component. This parameter adjusts the length of the step pulse itself. Keep reading, all will be explained eventually.\n 3 dirhold refers to a parameter that adjusts the length of the direction hold time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 132 / 1288\n \n Figura 4.1: Servo Loop\n This diagram shows that the input signal (and the feedback signal) drive the summing amplifier, the\n summing amplifier drives the power amplifier, the power amplifier drives the motor, the motor drives\n the load (and the feedback device), and the feedback device (and the input signal) drive the motor.\n@@ -8123,15 +8123,15 @@\n They are three common mathematical techniques that are applied to the task of getting a working\n process to follow a set point. In the case of LinuxCNC the process we want to control is actual axis\n position and the set point is the commanded axis position.\n 4 If it helps, the closest equivalent to this in the digital world are state machines, sequential machines and so forth, where\n what the outputs are doing now depends on what the inputs (and the outputs) were doing before. If it doesn\u2019t help, then\n nevermind.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 133 / 1288\n \n Figura 4.2: PID Loop\n By tuning the three constants in the PID controller algorithm, the controller can provide control action\n designed for specific process requirements. The response of the controller can be described in terms\n of the responsiveness of the controller to an error, the degree to which the controller overshoots the\n@@ -8159,15 +8159,15 @@\n 4.1.4.4. Derivative term\n The rate of change of the process error is calculated by determining the slope of the error over time\n (i.e., its first derivative with respect to time) and multiplying this rate of change by the derivative gain.\n The derivative term slows the rate of change of the controller output and this effect is most noticeable\n close to the controller set point. Hence, derivative control is used to reduce the magnitude of the\n overshoot produced by the integral component and improve the combined controller-process stability.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 134 / 1288\n \n 4.1.4.5. Loop tuning\n If the PID controller parameters (the gains of the proportional, integral and derivative terms) are\n chosen incorrectly, the controlled process input can be unstable, i.e., its output diverges, with or\n without oscillation, and is limited only by saturation or mechanical breakage. Tuning a control loop\n@@ -8204,15 +8204,15 @@\n stepping).\n Latency is far more important than CPU speed. A lowly Pentium II that responds to interrupts within\n 10 microseconds each and every time can give better results than the latest and fastest P4 Hyperthreading beast.\n The CPU isn\u2019t the only factor in determining latency. Motherboards, video cards, USB ports, and a\n number of other things can hurt the latency. The best way to find out what you are dealing with is to\n run the latency test.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 135 / 1288\n \n Generating step pulses in software has one very big advantage - it\u2019s free. Just about every PC has a\n parallel port that is capable of outputting step pulses that are generated by the software. However,\n software step pulses also have some disadvantages:\n limited maximum step rate\n@@ -8236,15 +8236,15 @@\n \n This will start the latency test with a base-thread period of 50uS and a servo-thread period of 1mS.\n For available options, on the command line enter:\n latency-test -h\n \n After starting a latency test you should see something like this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 136 / 1288\n \n Figura 4.3: HAL Latency Test\n While the test is running, you should abuse the computer. Move windows around on the screen. Surf\n the web. Copy some large files around on the disk. Play some music. Run an OpenGL program such\n as glxgears. The idea is to put the PC through its paces while the latency test checks to see what the\n@@ -8266,15 +8266,15 @@\n (several milliseconds) when using the onboard video. But a $5 used video card solved the problem.\n LinuxCNC does not require bleeding edge hardware.\n \n For more information on stepper tuning see the Stepper Tuning Chapter.\n Additional command line tools are available for examining latency when LinuxCNC is not\n running.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 137 / 1288\n \n 4.2.2.2. Latency Plot\n latency-plot makes a strip chart recording for a base and a servo thread. It may be useful to see spikes\n in latency when other applications are started or used. Usage:\n latency-plot --help\n@@ -8316,15 +8316,15 @@\n 25000, min: 5000)\n (servo thread interval, default: 1000000, min: 25000)\n (base bin size, default: 100\n (servo bin size, default: 100\n (base bins, default: 200\n (servo bins, default: 200\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n --logscale\n --text\n --show\n --nobase\n --verbose\n --nox\n@@ -8353,15 +8353,15 @@\n and they all may benefit from tuning for optimal latency.\n A primary goal in tuning the system for LinuxCNC is to reserve a CPU for the exclusive use of LinuxCNC\u2019s realtime tasks, so that other tasks (both user programs and kernel threads) do not interfere\n with LinuxCNC\u2019s access to that CPU.\n When specific tuning options are believed to be universally helpful LinuxCNC does this tuning automatically at startup, but many tuning options are machine-specific and cannot be done automatically.\n The person installing LinuxCNC will need to experimentally determine the optimal tuning for their\n system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 139 / 1288\n \n 4.2.3.1. Tuning the BIOS for latency\n PC BIOSes vary wildly in their latency behavior.\n Tuning the BIOS is tedious because you have to reboot the computer, make one small tweak in the\n BIOS, boot Linux, and run the latency test (potentially for a long time) to see what effects your BIOS\n@@ -8397,15 +8397,15 @@\n parallel port that is capable of outputting step pulses that are generated by the software. However,\n software step pulses also have some disadvantages:\n limited maximum step rate\n jitter in the generated pulses\n loads the CPU\n This chapter has some steps that can help you get the best results from software generated steps.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 140 / 1288\n \n 4.3.1.1. Run a Latency Test\n The CPU is not the only factor determining latency. Motherboards, graphics cards, USB ports and\n many other things can degrade it. The best way to know what to expect from a PC is to run the RT\n latency tests.\n@@ -8444,15 +8444,15 @@\n Step Pulse \u201d0\u201d Time: 2.0 \u00b5s min (Step on rising edge)\n Step Pulse \u201d1\u201d Time: 1.0 \u00b5s min\n Direction Setup:\n 200 ns (0.2 \u00b5s) before step pulse rising edge\n 200 ns (0.2 \u00b5s) hold after step pulse rising edge\n From the Xylotex datasheet:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 141 / 1288\n \n Minimum DIR setup time before rising edge of STEP Pulse 200 ns Minimum\n DIR hold time after rising edge of STEP pulse 200 ns\n Minimum STEP pulse high time 2.0 \u00b5s\n Minimum STEP pulse low time 1.0 \u00b5s\n@@ -8498,15 +8498,15 @@\n will lock up. If you are aiming for periods of less than 25 \u00b5s, you should start at 25 \u00b5s or more, run\n LinuxCNC, and see how things respond. If all is well, you can gradually decrease the period. If the\n mouse pointer starts getting sluggish, and everything else on the PC slows down, your period is a\n little too short. Go back to the previous value that let the computer run smoothly.\n In this case, suppose you started at 25 \u00b5s, trying to get to 13 \u00b5s, but you find that around 16 \u00b5s is the\n limit - any less and the computer doesn\u2019t respond very well. So you use 16 \u00b5s. With a 16 \u00b5s period and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 142 / 1288\n \n 11 \u00b5s latency, the shortest output time will be 16-11 = 5 \u00b5s. The drive only needs 2 \u00b5s, so you have\n some margin. Margin is good - you don\u2019t want to lose steps because you cut the timing too close.\n What is the maximum step rate? Remember, two periods to make a step. You settled on 16 \u00b5s for the\n period, so a step takes 32 \u00b5s. That works out to a not bad 31,250 steps per second.\n@@ -8548,15 +8548,15 @@\n step rate that you will be able to generate.\n I\u2019ve added a few things to the spreadsheet to calculate max speed and stepper electrical calculations.\n \n 4.4. INI Configuration\n 4.4.1. The INI File Components\n A typical INI file follows a rather simple layout that includes;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 143 / 1288\n \n comments\n sections\n variables\n Each of these elements is separated on single lines. Each end of line or newline character creates a\n@@ -8595,15 +8595,15 @@\n [RS274NGC] settings used by the G-code interpreter\n [EMCMOT] settings used by the real time motion controller\n [TASK] settings used by the task controller\n [HAL] specifies .hal files\n [HALUI] MDI commands used by HALUI\n [APPLICATIONS] Other applications to be started by LinuxCNC\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 144 / 1288\n \n [TRAJ] additional settings used by the real time motion controller\n [JOINT_n] individual joint variables\n [AXIS_l] individual axis variables\n [KINS] kinematics variables\n@@ -8641,15 +8641,15 @@\n TYPE = LINEAR\n ...\n SCALE = 16000\n \n To introduce a custom section with its own variables, add the section and variables to the INI file.\n Custom Section Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 145 / 1288\n \n [PROBE]\n Z_FEEDRATE = 50\n Z_OFFSET = 12\n Z_SAFE_DISTANCE = -10\n@@ -8689,15 +8689,15 @@\n #INCLUDE /home/myusername/myincludes/display.inc\n #INCLUDE ~/linuxcnc/myincludes/rs274ngc.inc\n \n The #INCLUDE directives are supported for one level of expansion only \u2014 an included file may not\n include additional files. The recommended file extension is .inc. Do not use a file extension of .ini for\n included files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 146 / 1288\n \n 4.4.2. INI File Sections\n 4.4.2.1. [EMC] Section\n VERSION = 1.1 - The version number for the configuration. Any value other than 1.1 will cause the\n configuration checker to run and try to update the configuration to the new style joint axes type of\n@@ -8728,15 +8728,15 @@\n value.\n CONE_BASESIZE = .25 - Override the default cone/tool base size of .5 in the graphics display.\n MAX_FEED_OVERRIDE = 1.2 - The maximum feed override the user may select. 1.2 means 120 % of\n the programmed feed rate.\n MIN_SPINDLE_OVERRIDE = 0.5 - The minimum spindle override the user may select. 0.5 means 50 %\n of the programmed spindle speed. (This is used to set the minimum spindle speed.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 147 / 1288\n \n MIN_SPINDLE_0_OVERRIDE = 0.5 - The minimum spindle override the user may select. 0.5 means\n 50 % of the programmed spindle speed. (This is used to set the minimum spindle speed.) On multi\n spindle machine there will be entries for each spindle number. Only used by the QtVCP based user\n interfaces.\n@@ -8771,15 +8771,15 @@\n powered CPU may see improvement with a longer setting. Usually the default is fine.\n PREVIEW_TIMEOUT = 5 - Timeout (in seconds) for loading graphical preview of G-code. Currently\n AXIS only.\n nota\n The following [DISPLAY] items are used by GladeVCP and PyVCP, see the embedding a tab section of\n the GladeVCP Chapter or the PyVCP Chapter for more information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 148 / 1288\n \n EMBED_TAB_NAME = GladeVCP demo\n \n EMBED_TAB_COMMAND = halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID\\} -u ./glad\n ./gladevcp/manual-example.ui\n@@ -8817,15 +8817,15 @@\n LATHE = 1 - Any non-empty value (including \u201d0\u201d) causes axis to use \u201dlathe mode\u201d with a top view\n and with Radius and Diameter on the DRO.\n BACK_TOOL_LATHE = 1 - Any non-empty value (including \u201d0\u201d) causes axis to use \u201dback tool lathe\n mode\u201d with inverted X axis.\n FOAM = 1 - Any non-empty value (including \u201d0\u201d) causes axis to change the display for foam-cutter\n mode.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 149 / 1288\n \n GEOMETRY = XYZABCUVW - Controls the preview and backplot of motion. This item consists of a\n sequence of axis letters and control characters, optionally preceded with a \u201d-\u201d sign:\n 1. The letters X, Y, Z specify translation along the named coordinate.\n 2. The letters A, B, C specify rotation about the corresponding axes X, Y, Z.\n@@ -8866,15 +8866,15 @@\n JOG_AXES = - The order in which jog keys are assigned to axis letters. The left and right arrows are\n assigned to the first axis letter, up and down to the second, page up/page down to the third, and left\n and right bracket to the fourth. If unspecified, the default is determined from the [TRAJ]COORDINATES,\n [DISPLAY]LATHE and [DISPLAY]FOAM values.\n JOG_INVERT = - For each axis letter, the jog direction is inverted. The default is \u201dX\u201d for lathes and\n blank otherwise.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 150 / 1288\n \n nota\n The settings for JOG_AXES and JOG_INVERT apply to world mode jogging by axis coordinate letter\n and are in effect while in world mode after successful homing. When operating in joint mode prior\n to homing, keyboard jog keys are assigned in a fixed sequence: left/right: joint0, up/down: joint1,\n@@ -8913,15 +8913,15 @@\n The program file associated with an extension must have either the full path to the program or be\n located in a directory that is on the system path.\n \n It is also possible to specify an interpreter:\n PROGRAM_EXTENSION = .py Python Script\n py = python\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 151 / 1288\n \n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle. Many more G-code generators are on the LinuxCNC Wiki site\n https://wiki.linuxcnc.org/.\n@@ -8963,15 +8963,15 @@\n PARAMETER_FILE = myfile.var - The file located in the same directory as the INI file which contains\n the parameters used by the interpreter (saved between runs).\n ORIENT_OFFSET = 0 - A float value added to the R word parameter of an M19 Orient Spindle operation. Used to define an arbitrary zero position regardless of encoder mount orientation.\n RS274NGC_STARTUP_CODE = G17 G20 G40 G49 G64 P0.001 G80 G90 G92.1 G94 G97 G98 - A string\n of NC codes that the interpreter is initialized with. This is not a substitute for specifying modal Gcodes at the top of each NGC file, because the modal codes of machines differ, and may be changed\n by G-code interpreted earlier in the session.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 152 / 1288\n \n SUBROUTINE_PATH = ncsubroutines:/tmp/testsubs:lathesubs:millsubs - Specifies a colon (:)\n separated list of up to 10 directories to be searched when single-file subroutines are specified in\n 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\n that they are listed. The first matching subroutine file found in the search is used. Directories are\n@@ -9023,15 +9023,15 @@\n OWORD_WARNONLY = 0 (Default: 0)\n Warn rather than error in case of errors in O-word subroutines.\n DISABLE_G92_PERSISTENCE = 0 (Default: 0) Allow to clear the G92 offset automatically when config\n start-up.\n DISABLE_FANUC_STYLE_SUB = 0 (Default: 0) If there is reason to disable Fanuc subroutines set it to\n 1.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 153 / 1288\n \n nota\n The above six options were controlled by the FEATURES bitmask in versions of LinuxCNC prior to 2.8.\n This INI tag will no longer work.\n For reference:\n@@ -9067,15 +9067,15 @@\n from the command line using the -m option ($ linuxcnc -h).\n 4.4.2.6. [TASK] Section\n TASK = milltask - Specifies the name of the task executable. The task executable does various\n things, such as\n \u2022 communicate with the UIs over NML,\n \u2022 communicate with the realtime motion planner over non-HAL shared memory, and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 154 / 1288\n \n \u2022 interpret G-code. Currently there is only one task executable that makes sense for 99.9 % of users,\n milltask.\n CYCLE_TIME = 0.010 - The period, in seconds, at which TASK will run. This parameter affects the\n polling interval when waiting for motion to complete, when executing a pause instruction, and when\n@@ -9112,15 +9112,15 @@\n HALFILE = LIB:halcheck.tcl [nopopup]\n \n nota\n The LIB:halcheck.tcl line should be the last [HAL]HALFILE. Specify the nopopup option to suppress\n the popup message and allow immediate starting. Connections made using a POSTGUI_HALFILE are\n not checked.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 155 / 1288\n \n TWOPASS = ON - Use twopass processing for loading HAL components. With TWOPASS processing,\n lines of files specified in [HAL]HALFILE are processed in two passes. In the first pass (pass0), all\n HALFILES are read and multiple appearances of loadrt and loadusr commands are accumulated.\n These accumulated load commands are executed at the end of pass0. This accumulation allows load\n@@ -9159,15 +9159,15 @@\n (first character is / or ~), a relative filename (first characters of filename are ./), or as a file in the\n INI file directory. If no executable file is found using these names, then the user search PATH is\n used to find the application.\n Examples:\n \u2022 Simulate inputs to HAL pins for testing (using sim_pin \u2014 a simple GUI to set inputs to parameters,\n unconnected pins, or signals with no writers):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 156 / 1288\n \n APP = sim_pin motion.probe-input halui.abort motion.analog-in-00\n \n \u2022 Invoke halshow with a previuosly saved watchlist. Since LinuxCNC sets the working directory to\n the directory for the INI file, you can refer to files in that directory (example: my.halshow):\n@@ -9210,15 +9210,15 @@\n 10 / (2.0 * 100 * 0.001) = 50 segments to always reach maximum velocity along the fastest axis.\n In practice, this number isn\u2019t that important to tune, since the look ahead rarely needs the full depth\n unless you have lots of very short segments. If during testing, you notice strange slowdowns and\n can\u2019t figure out where they come from, first try increasing this depth using the formula above.\n If you still see strange slowdowns, it may be because you have short segments in the program. If\n this is the case, try adding a small tolerance for Naive CAM detection. A good rule of thumb is this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 157 / 1288\n \n # min_length ~= v_req * t_c\n # where:\n # v_req = desired velocity in UU / sec\n # t_c = servo period (seconds)\n@@ -9264,15 +9264,15 @@\n Finally, no amount of tweaking will speed up a tool path with lots of small, tight corners, since you\u2019re\n limited by cornering acceleration.\n SPINDLES = 3 - The number of spindles to support. It is imperative that this number matches the\n \u201dnum_spindles\u201d parameter passed to the motion module.\n COORDINATES = X Y Z - The names of the axes being controlled. Only X, Y, Z, A, B, C, U, V, W are\n valid. Only axes named in COORDINATES are accepted in G-code. It is permitted to write an axis\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 158 / 1288\n \n name more than once (e.g., X Y Y Z for a gantry machine). For the common trivkins kinematics,\n joint numbers are assigned in sequence according to the trivkins parameter coordinates=. So, for\n trivkins coordinates=xz, joint0 corresponds to X and joint1 corresponds to Z. See the kinematics\n man page ($ man kins) for information on trivkins and other kinematics modules.\n@@ -9315,15 +9315,15 @@\n TPMOD = alternate_trajectory_planning module [tp_parms=value]\n The TPMOD variable is optional. If specified, use a specified (user-built) module instead of the default\n (tpmod). Module parameters (tp_parms) may be included if supported by the named module. The\n setting may be overridden from the command line using the -t option ($ linuxcnc -h).\n NO_PROBE_JOG_ERROR = 0 - Allow to bypass probe tripped check when you jog manually.\n NO_PROBE_HOME_ERROR = 0 - Allow to bypass probe tripped check when homing is in progress.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 159 / 1288\n \n 4.4.2.11. [KINS] Section\n JOINTS = 3 - Specifies the number of joints (motors) in the system. For example, a trivkins XYZ\n machine with a single motor for each axis has 3 joints. A gantry machine with one motor on each\n of two of the axes, and two motors on the third axis, has 4 joints. (This config variable may be used\n@@ -9361,15 +9361,15 @@\n offsets:\n axis..eoffset-enable\n axis..eoffset-count\n axis..eoffset-scale\n \n See the chapter: External Axis Offsets for usage information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 160 / 1288\n \n 4.4.2.13. [JOINT_] Sections\n The specifies the joint number 0 \u2026 (num_joints-1) The value of num_joints is set by [KINS]JOINTS=.\n The [JOINT_0], [JOINT_1], etc. sections contains general parameters for the individual components\n in the joint control module. The joint section names begin numbering at 0, and run through the number\n@@ -9404,15 +9404,15 @@\n COMP_FILE = file.extension - The compensation file consists of map of position information for the\n 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\n 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\n in ascending order to the largest value of nominals. File names are case sensitive and can contain\n letters and/or numbers. Currently the limit inside LinuxCNC is for 256 triplets per joint.\n If COMP_FILE is specified for a joint, BACKLASH is not used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 161 / 1288\n \n COMP_FILE_TYPE = 0 or 1 - Specifies the type of compensation file. The first value is the nominal\n (commanded) position for both types.\n A COMP_FILE_TYPE must be specified for each COMP_FILE.\n \u2022 Type 0: The second value specifies the actual position as the joint is moving in the positive direction (increasing value). The third value specifies the actual position as the joint is moving in the\n@@ -9454,15 +9454,15 @@\n produce a ramp of error trip points. You could think of this as a graph where one dimension is speed\n and the other is permitted following error. As speed increases the amount of following error also\n increases toward the FERROR value.\n FERROR = 1.0 - FERROR is the maximum allowable following error, in machine units. If the difference\n 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\n file, velocity-proportional following errors are used. Here, the maximum allowable following error is\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 162 / 1288\n \n proportional to the speed, with FERROR applying to the rapid rate set by [TRAJ]MAX_VELOCITY, and\n proportionally smaller following errors for slower speeds. The maximum allowable following error\n will always be greater than MIN_FERROR. This prevents small following errors for stationary axes\n from inadvertently aborting motion. Small following errors will always be present due to vibration,\n@@ -9502,15 +9502,15 @@\n Additional sequences may be specified with numbers increasing by 1 (in absolute value). Skipping\n of sequence numbers is not allowed. If a HOME_SEQUENCE is omitted, the joint will not be homed\n by the \u201dHome All\u201d function. More than one joint can be homed at the same time by specifying the\n same sequence number for more than one joint. A negative sequence number is used to defer the\n final move for all joints having that (negative or positive) sequence number. For additional info, see:\n HOME SEQUENCE.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 163 / 1288\n \n VOLATILE_HOME = 0 - When enabled (set to 1) this joint will be unhomed if the Machine Power is\n off or if E-Stop is on. This is useful if your machine has home switches and does not have position\n feedback such as a step and direction driven machine.\n These parameters are relevant to joints controlled by servos.\n@@ -9543,15 +9543,15 @@\n for the motor amplifier. The units on the I gain are volts per machine unit second, e.g.,\n D = 0 - The derivative gain for the joint servo. The value multiplies the difference between the\n 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.,\n FF0 = 0 - The 0th order feed forward gain. This number is multiplied by the commanded position,\n resulting in a contribution to the computed voltage for the motor amplifier. The units on the FF0\n gain are volts per machine unit, e.g.,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 164 / 1288\n \n FF1 = 0 - The 1st order feed forward gain. This number is multiplied by the change in commanded\n position per second, resulting in a contribution to the computed voltage for the motor amplifier. The\n units on the FF1 gain are volts per machine unit per second, e.g.,\n 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\n@@ -9591,15 +9591,15 @@\n -10\n -9\n \n Measured\n -9.93\n -8.83\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 165 / 1288\n \n Cuadro 4.1: (continued)\n Raw\n 0\n 1\n@@ -9638,15 +9638,15 @@\n section. For stepper systems, this is the number of step pulses issued per machine unit. For a linear\n joint one machine unit will be equal to the setting of LINEAR_UNITS. For an angular joint one unit is\n equal to the setting in ANGULAR_UNITS. For servo systems, this is the number of feedback pulses per\n machine unit. A second number, if specified, is ignored.\n For example, on a 1.8 degree stepper motor with half-stepping, and 10 revs/inch gearing, and desired\n machine units of inch, we have:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 166 / 1288\n \n nota\n Old INI and HAL files used INPUT_SCALE for this value.\n \n ENCODER_SCALE = 20000 (Optionally used in PnCconf built configs) - Specifies the number of pulses\n@@ -9683,15 +9683,15 @@\n must not be run in reverse. In this context \u201dmax\u201d refers to the absolute magnitude of the spindle\n speed.\n MIN_REVERSE_VELOCITY = 3000 \u0300This setting is equivalent to MIN_FORWARD_VELOCITY but for reverse spindle rotation. It will default to the MIN_FORWARD_VELOCITY if omitted.\n INCREMENT = 200 Sets the step size for spindle speed increment / decrement commands. This can\n have a different value for each spindle. This setting is effective with AXIS and Touchy but note that\n some control screens may handle things differently.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 167 / 1288\n \n HOME_SEARCH_VELOCITY = 100 - FIXME: Spindle homing not yet working. Sets the homing speed\n (rpm) for the spindle. The spindle will rotate at this velocity during the homing sequence until the\n spindle index is located, at which point the spindle position will be set to zero. Note that it makes\n no sense for the spindle home position to be any value other than zero, and so there is no provision\n@@ -9729,15 +9729,15 @@\n absolute encoders. Homing seems simple enough - just move each joint to a known location, and set\n LinuxCNC\u2019s internal variables accordingly. However, different machines have different requirements,\n and homing is actually quite complicated.\n nota\n While it is possible to use LinuxCNC without homing switches/home procedures or limit switches, It\n defeats the extra security of the soft limits.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 168 / 1288\n \n 4.5.2. Prerequisite\n Homing relies on some fundamental machine assumptions.\n The negative and positive directions are based on Tool Movement which can be different from the\n actual machine movement. I.e., on a mill typically the table moves rather then the tool.\n@@ -9764,15 +9764,15 @@\n While it is possible to use LinuxCNC with the G53 machine origin outside the soft machine limits, if\n you use G28 or G30 without setting the parameters it goes to the origin by default. This would trip\n the limit switches before getting to position.\n \n 4.5.3. Separate Home Switch Example Layout\n This example shows minimum and maximum limit switches with a separate home switch.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 169 / 1288\n \n Figura 4.6: Demonstrative Separate Switch Layout\n A is the negative soft limit\n B is the G53 machine coordinate Origin\n C is the home switch trip point\n@@ -9791,15 +9791,15 @@\n Homing sets the G53 coordinate system, while the machine origin (zero point) can be anywhere,\n setting the zero point at the negative soft limit makes all G53 coordinates positive, which is probably\n easiest to remember. Do this by setting MIN_LIMIT = 0 and make sure MAX_LIMIT is positive.\n \n 4.5.4. Shared Limit/Home Switch Example Layout\n This example shows a maximum limit switch and a combined minimum limit/home switch.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 170 / 1288\n \n Figura 4.7: Demonstrative Shared Switch Layout\n A is the negative soft limit.\n B is the G53 machine coordinate Origin.\n C is the home switch trip point shared with (-L) minimum limit trip.\n@@ -9817,21 +9817,21 @@\n \n 4.5.5. Homing Sequence\n There are four possible homing sequences defined by the sign of HOME_SEARCH_VEL and HOME_LATCH_VEL, along with the associated configuration parameters as shown in the following table.\n Two basic conditions exist, HOME_SEARCH_VEL and HOME_LATCH_VEL are the same sign or they\n are opposite signs. For a more detailed description of what each configuration parameter does, see\n the following section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 171 / 1288\n \n Figura 4.8: Homing Sequences\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 172 / 1288\n \n 4.5.6. Configuration\n The following determines exactly how the home sequence behaves. They are defined in an [JOINT_n]\n section of the INI file.\n Homing Type\n@@ -9885,15 +9885,15 @@\n value is zero.\n 4.5.6.3. HOME_FINAL_VEL\n This variable has units of machine-units per second.\n It specifies the speed that LinuxCNC uses when it makes its move from HOME_OFFSET to the HOME\n position. If the HOME_FINAL_VEL is missing from the INI file, then the maximum joint speed is used\n to make this move. The value must be a positive number.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 173 / 1288\n \n 4.5.6.4. HOME_IGNORE_LIMITS\n Can hold the values YES / NO. The default value for this parameter is NO. This flag determines whether\n LinuxCNC will ignore the limit switch input for this joint while homing. This setting will not ignore\n limit inputs for other joints. If you do not have a separate home switch set this to YES and connect the\n@@ -9925,15 +9925,15 @@\n switch or home switch then index pulse (depending on configuration), and setting the coordinate of\n that point to HOME_OFFSET, LinuxCNC makes a move to HOME as the final step of the homing\n process. The default value is zero. Note that even if this parameter is the same as HOME_OFFSET,\n the joint will slightly overshoot the latched position as it stops. Therefore there will always be a small\n move at this time (unless HOME_SEARCH_VEL is zero, and the entire search/latch stage was skipped).\n This final move will be made at the joint\u2019s maximum velocity unless HOME_FINAL_VEL has been set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 174 / 1288\n \n nota\n The distinction between HOME_OFFSET and HOME is that HOME_OFFSET first establishes the origin\n location and scale on the machine by applying the HOME_OFFSET value to the location where home\n was found, and then HOME says where the joint should move to on that scale.\n@@ -9969,15 +9969,15 @@\n The initial HOME_SEQUENCE number may be 0, 1 (or -1). The absolute value of sequence numbers\n must increment by one \u2014 skipping sequence numbers is not supported. If a sequence number is omitted, HOME ALL homing will stop upon completion of the last valid sequence number.\n Negative HOME_SEQUENCE values indicate that joints in the sequence should synchronize the\n final move to [JOINT_n]HOME by waiting until all joints in the sequence are ready. If any joint has a\n negative HOME_SEQUENCE value, then all joints with the same absolute value (positive or negative)\n of the HOME_SEQUENCE item value will synchronize the final move.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 175 / 1288\n \n A negative HOME_SEQUENCE also applies to commands to home a single joint. If the HOME_SEQUENCE\n value is negative, all joints having the same absolute value of that HOME_SEQUENCE will be homed together with a synchronized final move. If the HOME_SEQUENCE value is zero or positive,\n a command to home the joint will home only the specified joint.\n Joint mode jogging of joints having a negative HOME_SEQUENCE is disallowed. In common gantry\n@@ -10020,15 +10020,15 @@\n 4.5.6.13. LOCKING_INDEXER\n If this joint is a locking rotary indexer, it will unlock before homing, and lock afterward.\n 4.5.6.14. Immediate Homing\n If a joint does not have home switches or does not have a logical home position like a rotary joint and\n you want that joint to home at the current position when the \u201dHome All\u201d button is pressed in the AXIS\n GUI, then the following INI entries for that joint are needed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 176 / 1288\n \n HOME_SEARCH_VEL = 0\n HOME_LATCH_VEL = 0\n HOME_USE_INDEX = NO\n HOME_OFFSET = 0 (Or the home position offset (HOME))\n@@ -10074,15 +10074,15 @@\n net hsequence_select => motion.homing-inhibit\n \n nota\n INI HAL pins (like ini.N.home_sequence) are not available until milltask starts so execution of the\n above HAL commands should be deferred using a postgui HAL file or a delayed [APPLICATION]APP=\n script.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 177 / 1288\n \n nota\n Realtime synchronization of joint jogging for multiple joints requires additional HAL connections for the Manual-Pulse-Generator (MPG) type jog pins (joint.N.enable, joint.N.scale,\n joint.N.counts).\n \n@@ -10113,15 +10113,15 @@\n \n 4.6.2. Usage\n INI file options:\n [EMCIO] section\n PROTOCOL_VERSION = 2\n Defaults to 2. Setting to 1 will emulate old iocontrol behaviour.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 178 / 1288\n \n EMCIO = iov2 -support-start-change\n You need to explicitly enable the start-change protocol by adding the -support-start-change option; otherwise the start-change pin remains low and start-change-ack is ignored. The reason for\n this is better backwards compatibility.\n [TASK] section\n@@ -10152,15 +10152,15 @@\n iocontrol.0.tool-prepared (bit, in) Should be driven TRUE when a tool prepare is completed.\n iocontrol.0.user-enable-out (bit, out) FALSE when an internal E-stop condition exists\n iocontrol.0.user-request-enable (bit, out) TRUE when the user has requested that E-stop be cleared\n Additional pins added by I/O Control V2\n emc-abort: (bit, out) signals emc-originated abort to toolchanger.\n emc-abort-ack: (bit, in) Acknowledge line from toolchanger for previous signal, or jumpered to aborttool-change if not used in toolchanger. NB: after signaling an emc-abort, iov2 will block until emcabort-ack is raised.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 179 / 1288\n \n emc-reason: (S32, out) convey cause for EMC-originated abort to toolchanger. Usage: UI informational. Valid during emc-abort TRUE.\n start-change: (bit, out) asserted at the very beginning of an M6 operation, before any spindle-off,\n quill-up, or move-to-toolchange-position operations are executed.\n start-change-ack: (bit, in) acknowledgment line for start-change.\n@@ -10196,15 +10196,15 @@\n EMC_ABORT_AUX_ESTOP = 2,\n EMC_ABORT_MOTION_OR_IO_RCS_ERROR = 3,\n EMC_ABORT_TASK_STATE_OFF = 4,\n EMC_ABORT_TASK_STATE_ESTOP_RESET = 5,\n EMC_ABORT_TASK_STATE_ESTOP = 6,\n EMC_ABORT_TASK_STATE_NOT_ON = 7,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 180 / 1288\n \n EMC_ABORT_TASK_ABORT = 8,\n EMC_ABORT_USER = 100\n iov2 adds one more code, namely EMC_ABORT_BY_TOOLCHANGER_FAULT = 101 which is signaled\n when an M6 aborts due to the toolchanger-faulted pin being TRUE.\n@@ -10239,15 +10239,15 @@\n [DISPLAY]\n DISPLAY = axis\n LATHE = 1\n ...\n [KINS]\n KINEMATICS = trivkins\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 181 / 1288\n \n JOINTS = 3\n [TRAJ]\n COORDINATES = X Z\n ...\n@@ -10289,15 +10289,15 @@\n The Latency Test determines how late your computer processor is in responding to a request. Some\n hardware can interrupt the processing which could cause missed steps when running a CNC machine.\n This is the first thing you need to do. Follow the instructions here to run the latency test.\n \n 4.8.2. Sherline\n 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.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 182 / 1288\n \n 4.8.3. Xylotex\n If you have a Xylotex you can skip the following sections and go straight to the Stepper Config Wizard.\n LinuxCNC has provided quick setup for the Xylotex machines.\n \n@@ -10396,15 +10396,15 @@\n \n Leadscrew\n Teeth\n \n Leadscrew\n Pitch\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Axis\n \n Steps/Rev.\n \n 183 / 1288\n \n@@ -10454,15 +10454,15 @@\n Leadscrew Pitch =\n 5.00 mm per turn\n From the above information: - The leadscrew moves 5.00 mm per turn. - The motor turns 3.000 times\n per 1 leadscrew turn. - The drive takes 8 microstep inputs to make the stepper step once. - The drive\n needs 1600 steps to turn the stepper one revolution.\n So the scale needed is:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 184 / 1288\n \n 4.9. Stepper Configuration\n 4.9.1. Introduction\n The preferred way to set up a standard stepper machine is with the Step Configuration Wizard. See\n the Stepper Configuration Wizard Chapter.\n@@ -10500,15 +10500,15 @@\n The ones relevant for our pinout are:\n signals: Xstep, Xdir & Xen\n pins: parport.0.pin-XX-out & parport.0.pin-XX-in\n \n Depending on what you have chosen in your INI file you are using either standard_pinout.hal or xylotex_pinout.hal. These are two files that instruct the HAL how to link the various signals & pins. Further\n on we\u2019ll investigate the standard_pinout.hal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 4.9.3.1. Standard Pinout HAL\n This file contains several HAL commands, and usually looks like this:\n # standard pinout config file for 3-axis steppers\n # using a parport for I/O\n #\n # first load the parport driver\n@@ -10554,15 +10554,15 @@\n ### that\u2019s ok, hook the same signal to all the axes, but be sure to\n ### set HOME_IS_SHARED and HOME_SEQUENCE in the INI file.\n ###\n # net homeswitches <= parport.0.pin-10-in\n \n 185 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 186 / 1288\n \n # net homeswitches => joint.0.home-sw-in\n # net homeswitches => joint.1.home-sw-in\n # net homeswitches => joint.2.home-sw-in\n ###\n@@ -10598,15 +10598,15 @@\n net Xstep parport.0.pin-02-out\n net Xdir parport.0.pin-03-out\n \n or basically any other out pin you like.\n Hint: make sure you don\u2019t have more than one signal connected to the same pin.\n 5 The fastest thread in the LinuxCNC setup, usually the code gets executed every few tens of microseconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 187 / 1288\n \n 4.9.3.4. Changing polarity of a signal\n If external hardware expects an \u201dactive low\u201d signal, set the corresponding -invert parameter. For\n instance, to invert the spindle control signal:\n setp parport.0.pin-09-invert TRUE\n@@ -10640,15 +10640,15 @@\n 4.10. Stepper Diagnostics\n If what you get is not what you expect many times you just got some experience. Learning from the\n experience increases your understanding of the whole. Diagnosing problems is best done by divide\n and conquer. By this I mean if you can remove 1/2 of the variables from the equation each time you\n will find the problem the fastest. In the real world this is not always the case, but it\u2019s usually a good\n place to start.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 188 / 1288\n \n 4.10.1. Common Problems\n 4.10.1.1. Stepper Moves One Step\n The most common reason in a new installation for a stepper motor not to move is that the step and\n direction signals are exchanged. If you press the jog forward and jog backward keys, alternately , and\n@@ -10678,15 +10678,15 @@\n If you added backlash you need to increase the STEPGEN_MAXACCEL up to double the MAX_ACCELERATIO\n in the AXIS section of the INI file for each axis you added backlash to. LinuxCNC uses \u201dextra acceleration\u201d at a reversal to take up the backlash. Without backlash correction, step generator acceleration\n can be just a few percent above the motion planner acceleration.\n 4.10.2.2. RTAPI Error\n When you get this error:\n RTAPI: ERROR: Unexpected realtime delay on task n\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 189 / 1288\n \n This error is generated by rtapi based on an indication from RTAI that a deadline was missed. It is\n usually an indication that the BASE_PERIOD in the [EMCMOT] section of the ini file is set too low. You\n should run the Latency Test for an extended period of time to see if you have any delays that would\n cause this problem. If you used the Stepconf Wizard, run it again, and test the Base Period Jitter again,\n@@ -10732,15 +10732,15 @@\n G0 Z1.000\n G0 Z0.500\n #1000 = [#1000 - 1]\n o101 endwhile\n ( msg, Done...Z should be exactly .5\u201d above table )\n M2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 190 / 1288\n \n 4.11. Filter Programs\n 4.11.1. Introduction\n Most of LinuxCNC\u2019s screens have the ability to send loaded files through a filter program or use the\n filter program to make G-code. Such a filter can do any desired task: Something as simple as making\n@@ -10762,15 +10762,15 @@\n PROGRAM_EXTENSION = .py Python Script\n py = python\n \n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 191 / 1288\n \n Figura 4.9: Circular Holes\n If the filter program sends lines to stderr of the form:\n FILTER_PROGRESS=10\n \n@@ -10790,15 +10790,15 @@\n time.sleep(.1)\n # output a line of G-code\n print(\u2019G0 X1\u2019, file=sys.stdout)\n # update progress\n print(\u2019FILTER_PROGRESS={}\u2019.format(i), file=sys.stderr)\n except:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 192 / 1288\n \n # This causes an error message\n print(\u2019Error; But this was only a test\u2019, file=sys.stderr)\n raise SystemExit(1)\n \n@@ -10841,15 +10841,15 @@\n raise SystemExit(1)\n def process(self):\n try:\n # get next line of code\n codeLine = self.temp[self.line]\n # process the line somehow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 193 / 1288\n \n # push out processed code\n print(codeLine, file=sys.stdout)\n self.line +=1\n # update progress\n@@ -10871,15 +10871,15 @@\n else:\n path = None\n app = QApplication(sys.argv)\n w = CustomDialog(path=path)\n w.show()\n sys.exit( app.exec_() )\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 194 / 1288\n \n Cap\u00edtulo 5\n \n HAL (Hardware Abstraction Layer)\n 5.1. HAL Introduction\n@@ -10903,15 +10903,15 @@\n of what CNC machines need to do, or space craft.\n Any machine controller needs to know:\n about its internal state and how this maps to the environment (machine coordinates, state of switches/regulators),\n how actuators are expected to change that state,\n how allow for updates of the internal state by sensors (encoders, probes).\n The HAL layer consists of parts (referred to as \u201dcomponents\u201d) that\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 195 / 1288\n \n are connected with each other, e.g., to update position data or have the planning algorithm tell the\n motors about the next step.\n may know how to communicate with hardware,\n may simply process incoming data and provide data outputs to other components,\n@@ -10944,15 +10944,15 @@\n from within C/C++ programs,\n but none of these interfaces are HAL itself.\n HAL itself is not a program, it consists of one or more lists of loaded programs (the components) that\n are periodically executed (in strict sequence), and an area of shared-memory that these components\n use to interchange data. The main HAL script runs only once at machine startup, setting up the realtime threads and the shared-memory locations, loading the components and setting up the data links\n between them (the \u201dsignals\u201d and \u201dpins\u201d).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 196 / 1288\n \n In principle multiple machines could share a common HAL to allow them to inter-operate, however\n the current implementation of LinuxCNC is limited to a single interpreter and a single Task module.\n Currently this is almost always a G-code interpreter and \u201dmilltask\u201d (which was found to also work well\n for lathes and adequately for robots) but these modules are selectable at load-time. With an increasing\n@@ -10993,15 +10993,15 @@\n number of components that know a lot about CNC and present that information via pins. There are\n pins representing\n static information about the machine\n the current state of the machine\n \u2022 end switches\n \u2022 positions counted by steppers or as measured by encoders\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 197 / 1288\n \n recipients for instructions\n \u2022 manual control of machine position (\u201djogging\u201d)\n \u2022 positions that stepper motors should take next\n In a analogy to electronic cables, pins can be wired, so the value changing in one pin serves as input to\n@@ -11041,15 +11041,15 @@\n \u2022 developing over time.\n \n 5.1.3. HAL System Design\n HAL is based on traditional system design techniques. HAL is based on the same principles that\n are used to design hardware circuits and systems, so it is useful to examine those principles first.\n Any system, including a CNC machine, consists of interconnected components. For the CNC machine,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 198 / 1288\n \n those components might be the main controller, servo amps or stepper drives, motors, encoders, limit\n switches, pushbutton pendants, perhaps a VFD for the spindle drive, a PLC to run a toolchanger, etc.\n The machine builder must aselect, mount and wire these pieces together to make a complete system.\n \n@@ -11071,15 +11071,15 @@\n black boxes. During the design stage, he decides which parts he is going to use - steppers or servos,\n which brand of servo amp, what kind of limit switches and how many, etc. The integrator\u2019s decisions\n about which specific components to use is based on what that component does and the specifications\n supplied by the manufacturer of the device. The size of a motor and the load it must drive will affect the\n choice of amplifier needed to run it. The choice of amplifier may affect the kinds of feedback needed\n by the amp and the velocity or position signals that must be sent to the amp from a control.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 199 / 1288\n \n In the HAL world, the integrator must decide what HAL components are needed. Usually every interface card will require a driver. Additional components may be needed for software generation of step\n pulses, PLC functionality, and a wide variety of other tasks.\n 5.1.3.2. Interconnection Design\n The designer of a hardware system not only selects the parts, he also decides how those parts will be\n@@ -11105,15 +11105,15 @@\n HAL provides the software equivalents of a voltmeter, oscilloscope, signal generator, and other tools\n needed for testing and tuning a system. The same commands used to build the system can be used to\n make changes as needed.\n 5.1.3.5. Summary\n This document is aimed at people who already know how to do this kind of hardware system integration, but who do not know how to connect the hardware to LinuxCNC. See the Remote Start Example\n section in the HAL UI Examples documentation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 200 / 1288\n \n Figura 5.2: Remote Start Example (Schema)\n The traditional hardware design as described above ends at the edge of the main control. Outside the\n control are a bunch of relatively simple boxes, connected together to do whatever is needed. Inside,\n the control is a big mystery \u2014 one huge black box that we hope works.\n@@ -11138,15 +11138,15 @@\n because these terms are not arranged in alphabetical order. They are arranged by their relationship\n or flow in the HAL way of things.\n Component\n When we talked about hardware design, we referred to the individual pieces as parts, building\n blocks, black boxes, etc. The HAL equivalent is a component or HAL component. This document\n uses HAL component when there is likely to be confusion with other kinds of components, but\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 201 / 1288\n \n normally just uses component. A HAL component is a piece of software with well-defined inputs,\n outputs, and behavior, that can be installed and interconnected as needed. + + Many HAL Components model the behaviour of a tangible part of a machine, and a pin may indeed be meant to\n be connected to a physical pin on the device to communicate with it, hence the names. But most\n often this is not the case. Imagine a retrofit of a manual lathe/mill. What LinuxCNC implements\n@@ -11187,15 +11187,15 @@\n Currently there are 4 types, as follows:\n bit - a single TRUE/FALSE or ON/OFF value\n float - a 64 bit floating point value, with approximately 53 bits of resolution and over 1000 bits\n of dynamic range.\n u32 - a 32 bit unsigned integer, legal values are 0 to 4,294,967,295\n s32 - a 32 bit signed integer, legal values are -2,147,483,647 to +2,147,483,647\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 202 / 1288\n \n Function\n Real hardware components tend to act immediately on their inputs. For example, if the input\n voltage to a servo amp changes, the output also changes automatically. However software components cannot act automatically. Each component has specific code that must be executed to\n do whatever that component is supposed to do. In some cases, that code simply runs as part of\n@@ -11237,15 +11237,15 @@\n de-energizes the coil. So the relay still switches rapidly between on and off, but at a rate determined\n by how often the PLC evaluates the rung.\n In HAL, the function is the code that evaluates the rung(s). In fact, the HAL-aware realtime version\n of ClassicLadder exports a function to do exactly that. Meanwhile, a thread is the thing that runs the\n function at specific time intervals. Just like you can choose to have a PLC evaluate all its rungs every\n 10 ms, or every second, you can define HAL threads with different periods.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 203 / 1288\n \n What distinguishes one thread from another is not what the thread does - that is determined by which\n functions are connected to it. The real distinction is simply how often a thread runs.\n In LinuxCNC you might have a 50 \u00b5s thread and a 1 ms thread. These would be created based on\n BASE_PERIOD and SERVO_PERIOD, the actual times depend on the values in your INI file.\n@@ -11260,15 +11260,15 @@\n 5.2.1. HAL Commands\n More detailed information can be found in the man page for halcmd: run man halcmd in a terminal\n window.\n To see the HAL configuration and check the status of pins and parameters use the HAL Configuration\n window on the Machine menu in AXIS. To watch a pin status open the Watch tab and click on each\n pin you wish to watch and it will be added to the watch window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 204 / 1288\n \n Figura 5.3: HAL Configuration Window\n \n 5.2.1.1. loadrt\n The command loadrt loads a real time HAL component. Real time component functions need to be\n@@ -11282,15 +11282,15 @@\n The addf command adds a function to a real-time thread. If the StepConf wizard was used to create\n the configuration, two threads have been created ( \u0300 \u0300base-thread \u0300 \u0300 and \u0300 \u0300servo-thread \u0300 \u0300).\n addf adds function functname to thread threadname. Default is to add the function in the order they\n are in the file. If position is specified, adds the function to that spot in the thread. A negative position\n indicates the position with respect to the end of the thread. For example 1 is start of thread, -1 is the\n end of the thread, -3 is third from the end.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 205 / 1288\n \n For some functions it is important to load them in a certain order, like the parport read and write\n functions. The function name is usually the component name plus a number. In the following example\n the component or2 is loaded and show function shows the name of the or2 function.\n $ halrun\n@@ -11357,15 +11357,15 @@\n to wait for the component, which will have the given . This only applies\n if the component has a name option.\n \n -w\n \n to wait for the program to exit\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n -i\n \n to ignore the program return value (with -w)\n \n -n\n \n@@ -11396,15 +11396,15 @@\n A pin can be connected to a signal if it obeys the following rules:\n An IN pin can always be connected to a signal.\n An IO pin can be connected unless there\u2019s an OUT pin on the signal.\n An OUT pin can be connected only if there are no other OUT or IO pins on the signal.\n The same signal-name can be used in multiple net commands to connect additional pins, as long as\n the rules above are obeyed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 207 / 1288\n \n Figura 5.4: Signal Direction\n This example shows the signal xStep with the source being stepgen.0.out and with two readers,\n parport.0.pin-02-out and parport.0.pin-08-out. Basically the value of stepgen.0.out is sent to\n the signal xStep and that value is then sent to parport.0.pin-02-out and parport.0.pin-08-out.\n@@ -11427,15 +11427,15 @@\n 5.2.1.5. setp\n The command setp sets the value of a pin or parameter. The valid values will depend on the type of\n the pin or parameter. It is an error if the data types do not match.\n Some components have parameters that need to be set before use. Parameters can be set before use\n or while running as needed. You cannot use setp on a pin that is connected to a signal.\n Syntax and Examples of setp\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 208 / 1288\n \n setp \n setp parport.0.pin-08-out TRUE\n \n 5.2.1.6. sets\n@@ -11472,15 +11472,15 @@\n linkps parport.0.pin-02-out X-Step\n \n The linkps command has been superseded by the net command.\n the command newsig creates a new HAL signal by the name and the data type of .\n Type must be bit, s32, u32 or float. Error if already exists.\n Syntax and Examples of newsig\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 209 / 1288\n \n newsig \n newsig Xstep bit\n \n More information can be found in the HAL manual or the man pages for halrun.\n@@ -11509,15 +11509,15 @@\n you used the Stepper Config Wizard.\n custom.hal This file is loaded next and before the GUI loads. This is where you put your custom HAL\n commands that you want loaded before the GUI is loaded.\n custom_postgui.hal This file is loaded after the GUI loads. This is where you put your custom HAL\n commands that you want loaded after the GUI is loaded. Any HAL commands that use PyVCP widgets\n need to be placed here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 210 / 1288\n \n 5.2.4. HAL Parameter\n Two parameters are automatically added to each HAL component when it is created. These parameters\n allow you to scope the execution time of a component.\n .time\n@@ -11565,15 +11565,15 @@\n \n out\n False\n False\n False\n True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 211 / 1288\n \n 5.2.5.2. not\n The not component is a bit inverter.\n Syntax\n not [count=n] | [names=name1[,name2...]]\n@@ -11623,15 +11623,15 @@\n \n out\n True\n True\n True\n False\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 212 / 1288\n \n 5.2.5.4. xor2\n The xor2 component is a two input xor (exclusive or)-gate.\n Syntax\n xor2[count=n] | [names=name1[,name2...]]\n@@ -11680,15 +11680,15 @@\n 5.2.7.1. weighted_sum\n The weighted sum converts a group of bits into an integer. The conversion is the sum of the weights of\n the bits present plus any offset. It\u2019s similar to binary coded decimal but with more options. The hold\n bit interrupts the input processing, so that the sum value no longer changes.\n Syntax for loading component weighted_sum\n loadrt weighted_sum wsum_sizes=size[,size,...]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 213 / 1288\n \n Creates groups of \u0300 \u0300weighted_sum \u0300 \u0300s, each with the given number of input bits (size).\n To update the weighted_sum, the process_wsums must be attached to a thread.\n Add process_wsums to servo thread\n addf process_wsums servo-thread\n@@ -11777,15 +11777,15 @@\n loadrt and2 count=3\n \n Configurations are more readable if you specify with the names= option for components where it is\n supported, e.g.:\n Example load command resulting in explicitly named components aa, ab, ac.\n loadrt and2 names=aa,ab,ac\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 214 / 1288\n \n It can be a maintenance problem to keep track of the components and their names, since when you\n add (or remove) a component, you must find and update the single loadrt directive applicable to the\n component.\n TWOPASS processing is enabled by including an INI file parameter in the [HAL] section,\n@@ -11826,15 +11826,15 @@\n use a derivative component to estimate the velocities and accelerations on each (x,y,z) coordinate,\n using the count= method will give arcane component names like ddt.0, ddt.1, ddt.2, etc.\n Alternatively, using the names= option like:\n loadrt ddt names=xvel,yvel,zvel\n ...\n loadrt ddt names=xaccel,yaccel,zaccel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 215 / 1288\n \n results in components sensibly named xvel, yvel, zvel, xaccel, yaccel, zaccel.\n Many comps supplied with the distribution are created with the halcompile utility and support the\n names= option. These include the common logic components that are the glue of many LinuxCNC\n configurations.\n@@ -11875,15 +11875,15 @@\n the simple names= (or count=) parameters accepted by the HAL Component Generator (halcompile)\n are expected. More complex parameter items included in specialized LinuxCNC components may not\n be handled properly.\n A .hal file may be excluded from TWOPASS processing by including a magic comment line anywhere in\n the .hal file. The magic comment line must begin with the string: #NOTWOPASS. Files specified with this\n magic comment are sourced by halcmd using the -k (keep going if failure) and -v (verbose) options.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 216 / 1288\n \n This exclusion provision can be used to isolate problems or for loading any special LinuxCNC component that does not require or benefit from TWOPASS processing.\n Ordinarily, the loadrt ordering of realtime components is not critical, but loadrt ordering for special\n components can be enforced by placing the such loadrt directives in an excluded file.\n nota\n@@ -11917,15 +11917,15 @@\n 5.4. HAL Tutorial\n 5.4.1. Introduction\n Configuration moves from theory to device \u2014 HAL device that is. For those who have had just a bit of\n computer programming, this section is the Hello World of the HAL.\n halrun can be used to create a working system. It is a command line or text file tool for configuration\n and tuning. The following examples illustrate its setup and operation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 217 / 1288\n \n 5.4.2. Halcmd\n halcmd is a command line tool for manipulating HAL. A more complete man page exists for halcmd\n and installed together with LinuxCNC, from source or from a package. If LinuxCNC has been compiled\n as run-in-place, the man page is not installed but is accessible in the LinuxCNC main directory with\n@@ -11963,15 +11963,15 @@\n Linux. Unfortunately, each RTOS does things a little differently.\n To address these differences, the LinuxCNC team came up with RTAPI, which provides a consistent\n way for programs to talk to the RTOS. If you are a programmer who wants to work on the internals\n of LinuxCNC, you may want to study linuxcnc/src/rtapi/rtapi.h to understand the API. But if you are\n a normal person, all you need to know about RTAPI is that it (and the RTOS) needs to be loaded into\n the memory of your computer before you do anything with HAL.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 218 / 1288\n \n 5.4.3. A Simple Example\n 5.4.3.1. Loading a component\n For this tutorial, we are going to assume that you have successfully installed the Live CD and, if using\n a RIP 1 , invoke the rip-environment script to prepare your shell. In that case, all you need to do is load\n@@ -12021,15 +12021,15 @@\n step. The RT under Type indicates that siggen is a realtime component. The User under Type indicates\n it is a non-realtime component.\n Next, let\u2019s see what pins siggen makes available:\n Show Pins\n 1 Run In Place, when the source files have been downloaded to a user directory and are compiled and executed directly from\n there.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 219 / 1288\n \n halcmd: show pin\n Component Pins:\n Owner\n Type\n@@ -12124,15 +12124,15 @@\n to any threads, so users is zero 2 .\n 5.4.3.3. Making realtime code run\n To actually run the code contained in the function siggen.0.update, we need a realtime thread. The\n component called threads that is used to create a new thread. Lets create a thread called \u201dtest-thread\u201d\n with a period of 1 ms (1,000 \u00b5s or 1,000,000 ns):\n 2 CodeAddr and Arg fields were used during development and should probably disappear.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 220 / 1288\n \n halcmd: loadrt threads name1=test-thread period1=1000000\n \n Let\u2019s see if that worked:\n Show Threads\n@@ -12227,15 +12227,15 @@\n Owner\n Type Dir\n \n Value\n \n Name\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3\n 3\n 3\n 3\n 3\n 3\n@@ -12348,15 +12348,15 @@\n Most of what we have done with halcmd so far has simply been viewing things with the show command.\n However two of the commands actually changed things. As we design more complex systems with HAL,\n we will use many commands to configure things just the way we want them. HAL has the memory of\n an elephant, and will retain that configuration until we shut it down. But what about next time? We\n don\u2019t want to manually enter a bunch of commands every time we want to use the system.\n Saving the configuration of the entire HAL with a single command.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 222 / 1288\n \n halcmd: save\n # components\n loadrt threads name1=test-thread period1=1000000\n loadrt siggen\n@@ -12392,15 +12392,15 @@\n file saved.hal to add it there).\n 5.4.3.8. Removing HAL from memory\n If an unexpected shutdown of a HAL session occurs you might have to unload HAL before another\n session can begin. To do this type the following command in a terminal window.\n Removing HAL\n halrun -U\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 223 / 1288\n \n 5.4.4. Halmeter\n You can build very complex HAL systems without ever using a graphical interface. However there is\n something satisfying about seeing the result of your work. The first and simplest GUI tool for the HAL\n is halmeter. It is a very simple program that is the HAL equivalent of the handy multimeter (or analog\n@@ -12439,27 +12439,27 @@\n \n At this point we have the siggen component loaded and running. It\u2019s time to start halmeter.\n Starting Halmeter\n halcmd: loadusr halmeter\n \n The first window you will see is the \u201dSelect Item to Probe\u201d window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 224 / 1288\n \n Figura 5.5: Halmeter Select Window\n This dialog has three tabs. The first tab displays all of the HAL pins in the system. The second one\n displays all the signals, and the third displays all the parameters. We would like to look at the pin\n siggen.0.cosine first, so click on it then click the \u201dClose\u201d button. The probe selection dialog will\n close, and the meter looks something like the following figure.\n \n Figura 5.6: Halmeter Window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 225 / 1288\n \n To change what the meter displays press the \u201dSelect\u201d button which brings back the \u201dSelect Item to\n Probe\u201d window.\n You should see the value changing as siggen generates its cosine wave. Halmeter refreshes its display\n about 5 times per second.\n@@ -12533,15 +12533,15 @@\n siggen.0.sawtooth\n siggen.0.sine\n siggen.0.square\n siggen.0.triangle\n stepgen.0.counts\n stepgen.0.dir\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3\n 3\n 3\n 3\n 3\n 3\n@@ -12707,15 +12707,15 @@\n input of the first step pulse generator. The first step is to connect the signal to the signal generator\n output. To connect a signal to a pin we use the net command.\n net command\n halcmd: net X-vel <= siggen.0.cosine\n \n To see the effect of the net command, we show the signals again.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 227 / 1288\n \n halcmd: show sig\n Signals:\n Type\n float\n@@ -12794,15 +12794,15 @@\n Every time it is executed, it calculates the values of the sine, cosine, triangle, and square outputs. To\n make smooth signals, it needs to run at specific intervals.\n The other three functions are related to the step pulse generators.\n The first one, stepgen.capture_position, is used for position feedback. It captures the value of an\n internal counter that counts the step pulses as they are generated. Assuming no missed steps, this\n counter indicates the position of the motor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 228 / 1288\n \n The main function for the step pulse generator is stepgen.make_pulses. Every time make_pulses runs\n it decides if it is time to take a step, and if so sets the outputs accordingly. For smooth step pulses, it\n should run as frequently as possible. Because it needs to run so fast, make_pulses is highly optimized\n and performs only a few calculations. Unlike the others, it does not need floating point math.\n@@ -12877,15 +12877,15 @@\n pulse generator isn\u2019t quite right. By default, it generates an output frequency of 1 step per second\n with an input of 1.0. It is unlikely that one step per second will give us one inch per second of table\n movement. Let\u2019s assume instead that we have a 5 turn per inch leadscrew, connected to a 200 step\n per rev stepper with 10x microstepping. So it takes 2000 steps for one revolution of the screw, and\n 5 revolutions to travel one inch. That means the overall scaling is 10000 steps per inch. We need\n to multiply the velocity input to the step pulse generator by 10000 to get the proper output. That is\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 229 / 1288\n \n exactly what the parameter stepgen.n.velocity-scale is for. In this case, both the X and Y axis have\n the same scaling, so we set the scaling parameters for both to 10000.\n halcmd: setp stepgen.0.position-scale 10000\n halcmd: setp stepgen.1.position-scale 10000\n@@ -12920,24 +12920,24 @@\n halcmd loadusr halscope\n \n If LinuxCNC is not running or the autosave.halscope file does not match the pins available in the\n current running LinuxCNC the scope GUI window will open, immediately followed by a Realtime\n function not linked dialog that looks like the following figure. To change the sample rate left click on\n the samples box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 230 / 1288\n \n Figura 5.7: Realtime function not linked dialog\n This dialog is where you set the sampling rate for the oscilloscope. For now we want to sample once\n per millisecond, so click on the 989 \u00b5s thread slow and leave the multiplier at 1. We will also leave the\n record length at 4000 samples, so that we can use up to four channels at one time. When you select\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 231 / 1288\n \n a thread and then click OK, the dialog disappears, and the scope window looks something like the\n following figure.\n \n Figura 5.8: Initial scope window\n@@ -12949,33 +12949,33 @@\n length - more channels means shorter records, since the memory available for the record is fixed at\n approximately 16,000 samples.\n The channel buttons run across the bottom of the halscope screen. Click button 1, and you will see the\n Select Channel Source dialog as shown in the following figure. This dialog is very similar to the one\n used by Halmeter. We would like to look at the signals we defined earlier, so we click on the Signals\n tab, and the dialog displays all of the signals in the HAL (only two for this example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 232 / 1288\n \n Figura 5.9: Select Channel Source\n To choose a signal, just click on it. In this case, we want channel 1 to display the signal X-vel. Click on\n the Signals tab then click on X-vel and the dialog closes and the channel is now selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 233 / 1288\n \n Figura 5.10: Select Signal\n The channel 1 button is pressed in, and channel number 1 and the name X-vel appear below the row\n of buttons. That display always indicates the selected channel - you can have many channels on the\n screen, but the selected one is highlighted, and the various controls like vertical position and scale\n always work on the selected one.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 234 / 1288\n \n Figura 5.11: Halscope\n To add a signal to channel 2, click the 2 button. When the dialog pops up, click the Signals tab, then\n click on Y-vel. We also want to look at the square and triangle wave outputs. There are no signals\n connected to those pins, so we use the Pins tab instead. For channel 3, select siggen.0.triangle and\n@@ -12986,15 +12986,15 @@\n a 4000 sample record length, and are acquiring 1000 samples per second, it will take halscope about\n 2 seconds to fill half of its buffer. During that time a progress bar just above the main screen will show\n the buffer filling. Once the buffer is half full, the scope waits for a trigger. Since we haven\u2019t configured\n one yet, it will wait forever. To manually trigger it, click the Force button in the Trigger section at the\n top right. You should see the remainder of the buffer fill, then the screen will display the captured\n waveforms. The result will look something like the following figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 235 / 1288\n \n Figura 5.12: Captured Waveforms\n The Selected Channel box at the bottom tells you that the purple trace is the currently selected one,\n channel 4, which is displaying the value of the pin siggen.0.square. Try clicking channel buttons 1\n through 3 to highlight the other three traces.\n@@ -13002,29 +13002,29 @@\n The traces are rather hard to distinguish since all four are on top of each other. To fix this, we use\n the Vertical controls in the box to the right of the screen. These controls act on the currently selected\n channel. When adjusting the gain, notice that it covers a huge range - unlike a real scope, this one\n can display signals ranging from very tiny (pico-units) to very large (Tera-units). The position control\n moves the displayed trace up and down over the height of the screen only. For larger adjustments the\n offset button should be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 236 / 1288\n \n Figura 5.13: Vertical Adjustment\n The large Selected Channel button at the bottom indicates that channel 1 is currently selected channel\n and that it matches the X-vel signal. Try clicking on the other channels to put their traces in evidence\n and to be able to move them with the Pos cursor.\n 5.4.6.4. Triggering\n Using the Force button is a rather unsatisfying way to trigger the scope. To set up real triggering, click\n on the Source button at the bottom right. It will pop up the Trigger Source dialog, which is simply a\n list of all the probes that are currently connected. Select a probe to use for triggering by clicking on\n it. For this example we will use channel 3, the triangle wave as shown in the following figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 237 / 1288\n \n Figura 5.14: Trigger Source Dialog\n After setting the trigger source, you can adjust the trigger level and trigger position using the sliders\n in the Trigger box along the right edge. The level can be adjusted from the top to the bottom of the\n screen, and is displayed below the sliders. The position is the location of the trigger point within\n@@ -13034,15 +13034,15 @@\n trigger point is visible as a vertical line in the progress box above the screen. The trigger polarity can\n be changed by clicking the button just below the trigger level display. It will then become descendant.\n Note that changing the trigger position stops the scope once the position has been adjusted, you\n relaunch the scope by clicking on the Normal button of Run mode the group.\n Now that we have adjusted the vertical controls and triggering, the scope display looks something\n like the following figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 238 / 1288\n \n Figura 5.15: Waveforms with Triggering\n \n 5.4.6.5. Horizontal Adjustments\n To look closely at part of a waveform, you can use the zoom slider at the top of the screen to expand\n@@ -13051,15 +13051,15 @@\n the sampling rate. For example, we would like to look at the actual step pulses that are being generated\n in our example. Since the step pulses may be only 50 \u00b5s long, sampling at 1 kHz isn\u2019t fast enough. To\n change the sample rate, click on the button that displays the number of samples and sample rate to\n bring up the Select Sample Rate dialog figure. For this example, we will click on the 50 \u00b5s thread,\n fast, which gives us a sample rate of about 20 kHz. Now instead of displaying about 4 seconds worth\n of data, one record is 4000 samples at 20 kHz, or about 0.20 seconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 239 / 1288\n \n Figura 5.16: Sample Rate Dialog\n \n 5.4.6.6. More Channels\n Now let\u2019s look at the step pulses. Halscope has 16 channels, but for this example we are using only 4 at\n@@ -13068,15 +13068,15 @@\n do the same for channel 4. Even though the channels are turned off, they still remember what they are\n connected to, and in fact we will continue to use channel 3 as the trigger source. To add new channels,\n select channel 5, and choose pin stepgen.0.dir, then channel 6, and select stepgen.0.step. Then\n click run mode Normal to start the scope, and adjust the horizontal zoom to 5 ms per division. You\n should see the step pulses slow down as the velocity command (channel 1) approaches zero, then the\n direction pin changes state and the step pulses speed up again. You might want toincrease the gain on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 240 / 1288\n \n channel 1 to about 20 milli per division to better see the change in the velocity command. The result\n should look like the following figure.\n \n Figura 5.17: Step Pulses\n@@ -13088,15 +13088,15 @@\n If the scope_rt component was not already loaded, halscope will load it and request 80000 total samples, so that when sampling 4 channels at a time there will be 20000 samples per channel. (If scope_rt\n was already loaded, the numeric argument to halscope will have no effect).\n \n 5.5. HAL Examples\n All of these examples assume you are starting with a StepConf-based configuration and have two\n threads base-thread and servo-thread. The StepConf wizard will create an empty custom.hal and a\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 241 / 1288\n \n custom_postgui.hal file. The custom.hal file will be loaded after the configuration HAL file and the\n custom_postgui.hal file is loaded after the GUI has been loaded.\n \n 5.5.1. Connecting Two Outputs\n@@ -13158,15 +13158,15 @@\n pin. From the direction arrow you can see that the button is and output and the or2.0.in0 is an input.\n The output from or2 goes to the input of the LED.\n \n 5.5.2. Manual Toolchange\n In this example it is assumed that you\u2019re rolling your own configuration and wish to add the HAL\n Manual Toolchange window. The HAL Manual Toolchange is primarily useful if you have presettable\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 242 / 1288\n \n tools and you store the offsets in the tool table. If you need to touch off for each tool change then it is\n best just to split up your G-code. To use the HAL Manual Toolchange window you basically have to\n 1. load the hal_manualtoolchange component,\n 2. then send the iocontrol tool change to the hal_manualtoolchange change and\n@@ -13206,15 +13206,15 @@\n Make the connections.\n setp mult2.in1 60\n net xpos-cmd ddt.0.in\n net X-IPS mult2.0.in0 <= ddt.0.out\n net X-ABS abs.0.in <= mult2.0.out\n net X-IPM abs.0.out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 243 / 1288\n \n In this last section we are setting the mult2.0.in1 to 60 to convert the inch per second to inch per\n minute (IPM) that we get from the ddt.0.out.\n The xpos-cmd sends the commanded position to the ddt.0.in. The ddt computes the derivative of the\n change of the input.\n@@ -13228,15 +13228,15 @@\n 5.5.4. Soft Start Details\n This example shows how the HAL components lowpass, limit2 or limit3 can be used to limit how fast\n a signal changes.\n In this example we have a servo motor driving a lathe spindle. If we just used the commanded\n spindle speeds on the servo it will try to go from present speed to commanded speed as fast as it\n can. This could cause a problem or damage the drive. To slow the rate of change we can send the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 244 / 1288\n \n spindle.N.speed-out through a limiter before the PID, so that the PID command value changes to\n new settings more slowly.\n Three built-in components that limit a signal are:\n limit2 limits the range and first derivative of a signal.\n@@ -13275,15 +13275,15 @@\n Next to set up a trigger signal click on the Source None button and select square. The button will\n change to Source Chan 1.\n Next click on Single in the Run Mode radio buttons box. This will start a run and when it finishes you\n will see your traces.\n To separate the signals so you can see them better click on a channel then use the Pos slider in the\n Vertical box to set the positions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 245 / 1288\n \n To see the effect of changing the set point values of any of the components you can change them in\n the terminal window. To see what different gain settings do for lowpass just type the following in the\n terminal window and try different settings.\n setp lowpass.0.gain *.01\n@@ -13297,15 +13297,15 @@\n 5.5.5. Stand Alone HAL\n In some cases you might want to run a GladeVCP screen with just HAL. For example say you had a\n stepper driven device that all you need is to run a stepper motor. A simple Start/Stop interface is all\n you need for your application so no need to load up and configure a full blown CNC application.\n In the following example we have created a simple GladeVCP panel with one stepper.\n Basic Syntax\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 246 / 1288\n \n # load the winder.glade GUI and name it winder\n loadusr -Wn winder gladevcp -c winder -u handler.py winder.glade\n # load realtime components\n loadrt threads name1=fast period1=50000 fp1=0 name2=slow period2=1000000\n@@ -13344,15 +13344,15 @@\n default is 4 each. The number of Spindles is set with num_spindles, default is 1.\n Pin and parameter names starting with axis.L and joint.N are read and updated by the motion-controller\n function.\n Motion is loaded with the motmod command. A kins should be loaded before motion.\n loadrt motmod base_period_nsec=[\u2019period\u2019] servo_period_nsec=[\u2019period\u2019]\n traj_period_nsec=[\u2019period\u2019] num_joints=[\u20190-9\u2019]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 247 / 1288\n \n num_dio=[\u20191-64\u2019] num_aio=[\u20191-16\u2019] unlock_joints_mask=[\u20190xNN\u2019]\n num_spindles=[\u20191-8\u2019]\n \n base_period_nsec = 50000 - the Base task period in nanoseconds. This is the fastest thread in the\n@@ -13391,15 +13391,15 @@\n motion.adaptive-feed - (float, in) When adaptive feed is enabled with M52 P1 , the commanded\n velocity is multiplied by this value. This effect is multiplicative with the NML-level feed override\n value and motion.feed-hold. As of version 2.9 of LinuxCNC it is possible to use a negative adaptive\n feed value to run the G-code path in reverse.\n motion.analog-in-00 - (float, in) These pins (00, 01, 02, 03 or more if configured) are controlled by\n M66.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 248 / 1288\n \n motion.analog-out-00 - (float, out) These pins (00, 01, 02, 03 or more if configured) are controlled\n by M67 or M68.\n motion.coord-error - (bit, out) TRUE when motion has encountered an error, such as exceeding a\n soft limit\n@@ -13438,15 +13438,15 @@\n acceleration limits. The value on this pin does not reflect the feed override or any other adjustments.\n motion.teleop-mode - (bit, out) TRUE when motion is in teleop mode, as opposed to coordinated\n mode\n motion.tooloffset.x \u2026 motion.tooloffset.w - (float, out, one per axis) shows the tool offset in effect;\n it could come from the tool table (G43 active), or it could come from the G-code (G43.1 active)\n motion.on-soft-limit - (bit, out) TRUE when the machine is on a soft limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 249 / 1288\n \n motion.probe-input - (bit, in) G38.n uses the value on this pin to determine when the probe has\n made contact. TRUE for probe contact closed (touching), FALSE for probe contact open.\n motion.program-line - (s32, out) The current program line while executing. Zero if not running or\n between lines while single stepping.\n@@ -13476,15 +13476,15 @@\n to determine whether the realtime motion controller is meeting its timing constraints\n motion.servo.last-period-ns - (float, RO)\n 5.6.1.4. Functions\n Generally, these functions are both added to the servo-thread in the order shown.\n motion-command-handler - Receives and processes motion commands\n motion-controller - Runs the LinuxCNC motion controller\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 250 / 1288\n \n 5.6.2. Spindle\n LinuxCNC can control upto eight spindles. Motion will produce the following pins: The N (integer\n between 0 and 7) substitutes the spindle number.\n 5.6.2.1. Pins\n@@ -13522,15 +13522,15 @@\n spindle.N.orient-angle - (float,out) Desired spindle orientation for M19. Value of the M19 R word\n parameter plus the value of the [RS274NGC]ORIENT_OFFSET INI parameter.\n spindle.N.orient-mode - (s32,out) Desired spindle rotation mode M19. Default 0.\n spindle.N.orient - (out,bit) Indicates start of spindle orient cycle. Set by M19. Cleared by any of M3,\n M4, or M5. If spindle-orient-fault is not zero during spindle-orient true, the M19 command fails with\n an error message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 251 / 1288\n \n spindle.N.is-oriented - (in, bit) Acknowledge pin for spindle-orient. Completes orient cycle. If spindleorient was true when spindle-is-oriented was asserted, the spindle-orient pin is cleared and the\n spindle-locked pin is asserted. Also, the spindle-brake pin is asserted.\n spindle.N.orient-fault - (s32, in) Fault code input for orient cycle. Any value other than zero will\n cause the orient cycle to abort.\n@@ -13568,15 +13568,15 @@\n See the motion man page motion(9) for details on the pins and parameters.\n \n 5.6.4. iocontrol\n iocontrol - accepts non-realtime I/O commands via NML, interacts with HAL .\n iocontrol\u2019s HAL pins are turned on and off in non-realtime context. If you have strict timing requirements or simply need more I/O, consider using the realtime synchronized I/O provided by motion\n instead.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 252 / 1288\n \n 5.6.4.1. Pins\n iocontrol.0.coolant-flood (bit, out) TRUE when flood coolant is requested.\n iocontrol.0.coolant-mist (bit, out) TRUE when mist coolant is requested.\n iocontrol.0.emc-enable-in (bit, in) Should be driven FALSE when an external E-Stop condition exists.\n@@ -13606,15 +13606,15 @@\n ini.N.home_offset - (float, in) [JOINT_N]HOME_OFFSET\n ini.N.home_offset - (s32, in) [JOINT_N]HOME_SEQUENCE\n ini.L.min_limit - (float, in) [AXIS_L]MIN_LIMIT\n ini.L.max_limit - (float, in) [AXIS_L]MAX_LIMIT\n ini.L.max_velocity - (float, in) [AXIS_L]MAX_VELOCITY\n ini.L.max_acceleration - (float, in) [AXIS_L]MAX_ACCELERATION\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 253 / 1288\n \n nota\n The per-axis min_limit and max_limit pins are honored continuously after homing. The per-axis ferror\n and min_ferror pins are honored when the machine is on and not in position. The per-axis max_velocity\n and max_acceleration pins are sampled when the machine is on and the motion_state is free (homing\n@@ -13646,15 +13646,15 @@\n If you do not find the man page or the name of the man page is already taken by another UNIX tool\n with the LinuxCNC man page residing in another section, then try to explicitly specify the section, as\n in man _sectionno_ axis, with sectionno = 1 for non-realtime and 9 for realtime components.\n nota\n See also the Man Pages section of the docs main page or the directory listing. To search in the man\n pages, use the UNIX tool apropos.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 254 / 1288\n \n 5.7.1.1. User Interfaces (non-realtime)\n axis\n axis-remote\n gmoccapy\n@@ -13735,15 +13735,15 @@\n gs2_vfd\n hy_gt_vfd\n \n Communicate with Mesa ethernet cards\n HAL non-realtime component for Automation Direct GS2 VFDs\n HAL non-realtime component for Huanyang GT-series VFDs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n hy_vfd\n mb2hal\n mitsub_vfd\n monitorxhc-hb04\n pi500_vfd\n pmx485\n@@ -13826,15 +13826,15 @@\n Pluto-P driver for the parallel port FPGA, for steppers\n serport\n Hardware driver for the digital I/O bits of the 8250 and 16550 serial port\n sserial\n hostmot2 - Smart Serial LinuxCNC HAL driver for the Mesa Electronics\n HostMot2 Smart-Serial remote cards\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n thc\n \n 256 / 1288\n \n Torch Height Control using a Mesa THC card or any analog to velocity input\n \n@@ -13917,15 +13917,15 @@\n Toggles between a specified number of output bits\n Inverter\n One-shot pulse generator\n Two-input OR gate\n 8-bit binary match detector.\n IEC TOF timer - delay falling edge on a signal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 257 / 1288\n \n toggle\n toggle2nist\n ton\n timedelay\n@@ -14016,15 +14016,15 @@\n updown\n Counts up or down, with optional limits and wraparound behavior.\n wcomp\n Window comparator.\n weighted_sumConvert a group of bits to an integer.\n xhc_hb04_util xhc-hb04 convenience utility\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 258 / 1288\n \n bin2gray\n Converts a number to the gray-code representation\n bitslice\n Converts an unsigned-32 input into individual bits\n@@ -14092,15 +14092,15 @@\n \n Accepts NML motion commands, interacts with HAL in realtime\n \n 3 When the input is a position, this means that the position is limited.\n 4 When the input is a position, this means that position and velocity are limited.\n 5 When the input is a position, this means that the position, velocity, and acceleration are limited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 259 / 1288\n \n 5.7.1.9. Motor control (Realtime)\n at_pid\n bldc\n clarke2\n@@ -14171,15 +14171,15 @@\n hal_exit.3hal\n hal_export_funct.3hal\n hal_float_t.3hal\n hal_get_lock.3hal\n hal_init.3hal\n hal_link.3hal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n hal_malloc.3hal\n hal_param_bit_new.3hal\n hal_param_bit_newf.3hal\n hal_param_float_new.3hal\n hal_param_float_newf.3hal\n hal_param_new.3hal\n@@ -14230,15 +14230,15 @@\n rtapi_exit.3rtapi\n rtapi_get_clocks.3rtapi\n rtapi_get_msg_level.3rtapi\n rtapi_get_time.3rtapi\n \n 260 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 261 / 1288\n \n rtapi_inb.3rtapi\n rtapi_init.3rtapi\n rtapi_module_param.3rtapi\n RTAPI_MP_ARRAY_INT.3rtapi\n@@ -14282,21 +14282,21 @@\n velocity mode, it drives a motor at the commanded speed, while obeying velocity and acceleration limits. It is a realtime component only, and depending on CPU speed, etc., is capable of maximum step\n rates of 10 kHz to perhaps 50 kHz. The step pulse generator block diagram shows three block diagrams, each is a single step pulse generator. The first diagram is for step type 0, (step and direction).\n The second is for step type 1 (up/down, or pseudo-PWM), and the third is for step types 2 through\n 14 (various stepping patterns). The first two diagrams show position mode control, and the third one\n shows velocity mode. Control mode and step type are set independently, and any combination can be\n selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 5.19: Step Pulse Generator Block Diagram position mode\n \n 262 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 263 / 1288\n \n Loading stepgen component\n halcmd: loadrt stepgen step_type= [ctrl_type=]\n \n \n@@ -14345,15 +14345,15 @@\n (bit) stepgen. \u0300\n ____.phase-C \u0300 - Phase C output (step types 3-14 only).\n (bit) stepgen. \u0300\n ____.phase-D \u0300 - Phase D output (step types 5-14 only).\n (bit) stepgen. \u0300\n ____.phase-E \u0300 - Phase E output (step types 11-14 only).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 264 / 1288\n \n 5.8.1.2. Parameters\n (float) stepgen. \u0300\n ____.position-scale \u0300 - Steps per position unit. This parameter is used for\n both output and feedback.\n@@ -14402,15 +14402,15 @@\n takes effect the first time the code runs. Since one step requires steplen ns high and stepspace ns low,\n the maximum frequency is 1,000,000,000 divided by (steplen + stepspace)\u2019. If maxfreq is set higher\n than that limit, it will be lowered automatically. If maxfreq is zero, it will remain zero, but the output\n frequency will still be limited.\n When using the parallel port driver the step frequency can be doubled using the parport reset function\n together with StepGen\u2019s doublefreq setting.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 265 / 1288\n \n Figura 5.20: Step and Direction Timing\n Step Type 1 Step type 1 has two outputs, up and down. Pulses appear on one or the other, depending\n on the direction of travel. Each pulse is steplen ns long, and the pulses are separated by at least\n stepspace ns. The maximum frequency is the same as for step type 0. If maxfreq is set higher than\n@@ -14422,33 +14422,33 @@\n \n Step Type 2 - 14 Step types 2 through 14 are state based, and have from two to five outputs. On\n each step, a state counter is incremented or decremented. The Two-and-Three-Phase, Four-Phase,\n and Five-Phase show the output patterns as a function of the state counter. The maximum frequency\n is 1,000,000,000 divided by steplen, and as in the other modes, maxfreq will be lowered if it is above\n the limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 5.21: Two-and-Three-Phase Step Types\n \n 266 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 267 / 1288\n \n Figura 5.22: Four-Phase Step Types\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 268 / 1288\n \n Figura 5.23: Five-Phase Step Types\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 269 / 1288\n \n 5.8.1.4. Functions\n The component exports three functions. Each function acts on all of the step pulse generators - running\n different generators in different threads is not supported.\n (funct) stepgen.make-pulses - High speed function to generate and count pulses (no floating point).\n@@ -14483,15 +14483,15 @@\n use a type 1 output (PWM and direction) and the third will use a type 2 output (UP and DOWN). There\n is no default value, if is not not specified, no PWM generator will be installed. The maximum number of frequency generators is 8 (as defined by MAX_CHAN in pwmgen.c). Each generator\n is independent, but all are updated by the same function(s), at the same time. In the descriptions that\n follow, is the number of specific generators. The numbering of PWM generators starts at 0.\n Unloading PWMgen\n unloadrt pwmgen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 270 / 1288\n \n 5.8.2.1. Output Types\n The PWM generator supports three different output types.\n Output type 0 - PWM output pin only. Only positive commands are accepted, negative values are\n treated as zero (and will be affected by the parameter min-dc if it is non-zero).\n@@ -14535,15 +14535,15 @@\n to zero when disabled, regardless of this setting).\n (float) pwmgen. \u0300\n ____.max-dc \u0300 - Maximum duty cycle, between 0.0 and 1.0.\n (float) pwmgen. \u0300\n ____.curr-dc \u0300 - Current duty cycle - after all limiting and rounding (read\n only).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 271 / 1288\n \n 5.8.2.4. Functions\n The component exports two functions. Each function acts on all of the PWM generators - running\n different generators in different threads is not supported.\n (funct) pwmgen.make-pulses - High speed function to generate PWM waveforms (no floating point).\n@@ -14564,15 +14564,15 @@\n The base thread should be 1/2 count speed to allow for noise and timing variation. For example if you\n have a 100 pulse per revolution encoder on the spindle and your maximum RPM is 3000 the maximum\n base thread should be 25 \u00b5s. A 100 pulse per revolution encoder will have 400 counts. The spindle\n speed of 3000 RPM = 50 RPS (revolutions per second). 400 * 50 = 20,000 counts per second or 50 \u00b5s\n between counts.\n The Encoder Counter Block Diagram is a block diagram of one channel of an encoder counter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 272 / 1288\n \n Figura 5.24: Encoder Counter Block Diagram\n Loading Encoder\n halcmd: loadrt encoder [num_chan=]\n \n@@ -14586,15 +14586,15 @@\n \n 5.8.3.1. Pins\n encoder.__.counter-mode (bit, I/O) (default: FALSE) - Enables counter mode. When true,\n the counter counts each rising edge of the phase-A input, ignoring the value on phase-B. This is\n useful for counting the output of a single channel (non-quadrature) sensor. When false, it counts in\n quadrature mode.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 273 / 1288\n \n encoder.__.missing-teeth (s32, In) (default: 0) - Enables the use of missing-tooth index.\n This allows a single IO pin to provide both position and index information. If the encoder wheel has\n 58 teeth with two missing, spaced as if there were 60(common for automotive crank sensors) then\n the position-scale should be set to 60 and missing-teeth to 2. To use this mode counter-mode should\n@@ -14633,15 +14633,15 @@\n pulse.\n encoder.__.reset (bit, In) - When True, force counts and position to zero immediately.\n encoder.__.velocity (float, Out) - Velocity in scaled units per second. encoder uses an\n algorithm that greatly reduces quantization noise as compared to simply differentiating the position\n output. When the magnitude of the true velocity is below min-speed-estimate, the velocity output is\n 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 274 / 1288\n \n 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\n counts once per full cycle. In counter-mode, this parameter is ignored. The 1x mode is useful for\n some jogwheels.\n 5.8.3.2. Parameters\n@@ -14657,15 +14657,15 @@\n \n 5.8.4. PID\n This component provides Proportional/Integral/Derivative control loops. It is a realtime component\n only. For simplicity, this discussion assumes that we are talking about position loops, however this\n component can be used to implement other feedback loops such as speed, torch height, temperature,\n etc. The PID Loop Block Diagram is a block diagram of a single PID loop.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 275 / 1288\n \n Figura 5.25: PID Loop Block Diagram\n Loading PID\n halcmd: loadrt pid [num_chan=] [debug=1]\n \n@@ -14677,15 +14677,15 @@\n cluttering the pin list.\n Unloading PID\n halcmd: unloadrt pid\n \n 5.8.4.1. Pins\n The three most important pins are\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 276 / 1288\n \n (float) pid. \u0300\n ____.command \u0300 - The desired position, as commanded by another system\n component.\n (float) pid. \u0300\n@@ -14722,15 +14722,15 @@\n (float) pid..deadband - Amount of error that will be ignored\n (float) pid..maxerror - Limit on error\n (float) pid..maxerrorI - Limit on error integrator\n (float) pid..maxerrorD - Limit on error derivative\n (float) pid..maxcmdD - Limit on command derivative\n (float) pid..maxcmdDD - Limit on command 2nd derivative\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 277 / 1288\n \n (float) pid..maxoutput - Limit on output value\n All max* limits are implemented so that if the value of this parameter is zero, there is no limit.\n If debug=1 was specified when the component was installed, four additional pins will be exported:\n (float) pid..errorI - Integral of error.\n@@ -14763,15 +14763,15 @@\n ____.phase-A \u0300 - Quadrature output.\n (bit) sim-encoder. \u0300\n ____.phase-B \u0300 - Quadrature output.\n (bit) sim-encoder. \u0300\n ____.phase-Z \u0300 - Index pulse output.\n When .speed is positive, .phase-A leads .phase-B.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 278 / 1288\n \n 5.8.5.2. Parameters\n (u32) sim-encoder. \u0300\n ____.ppr \u0300 - Pulses Per Revolution.\n (float) sim-encoder. \u0300\n@@ -14808,15 +14808,15 @@\n 5.8.6.1. Pins\n Each individual filter has two pins.\n (bit) debounce. \u0300\n ____.____.in \u0300 - Input of filter in group .\n (bit) debounce. \u0300\n ____.____.out \u0300 - Output of filter in group .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 279 / 1288\n \n 5.8.6.2. Parameters\n Each group of filters has one parameter6 .\n (s32) debounce. \u0300\n ____.delay \u0300 - Filter delay for all filters in group .\n@@ -14854,15 +14854,15 @@\n (float) siggen. \u0300\n ____.triangle \u0300 - Triangle wave output.\n (float) siggen. \u0300\n ____.square \u0300 - Square wave output.\n 6 Each individual filter also has an internal state variable. There is a compile time switch that can export that variable as a\n parameter. This is intended for testing, and simply wastes shared memory under normal circumstances.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 280 / 1288\n \n All five outputs have the same frequency, amplitude, and offset.\n In addition to the output pins, there are three control pins:\n (float) siggen. \u0300\n ____.frequency \u0300 - Sets the frequency in Hertz, default value is 1 Hz.\n@@ -14940,15 +14940,15 @@\n 0\n \n Output\n \n 7 Prior to version 2.1, frequency, amplitude, and offset were parameters. They were changed to pins to allow control by other\n components.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 281 / 1288\n \n Cuadro 5.6: (continued)\n Bit 4\n 0\n 0\n@@ -15131,15 +15131,15 @@\n function is 0xa. The hexadecimal prefix is 0x.\n \n 5.9. HAL Component Generator\n 5.9.1. Introduction\n This section introduces to the compilation HAL components, i.e. the addition of some machinists\u2019\n knowledge on how to deal with the machine. It should be noted that such components do not ne-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 282 / 1288\n \n cessarily deal with the hardware directly. They often do, but not necessarily, e.g. there could be a\n component to convert between imperial and metric scales, so this section does not require to dive\n into the interaction with hardware.\n Writing a HAL component can be a tedious process, most of it in setup calls to rtapi_ and hal_ functions\n@@ -15179,15 +15179,15 @@\n loadrt threads name1=servo-thread period1=1000000\n loadrt ddt\n addf ddt.0 servo-thread\n \n More information on loadrt and addf can be found in the HAL Basics.\n To test your component you can follow the examples in the HAL Tutorial.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 283 / 1288\n \n 5.9.4. Definitions\n component - A component is a single real-time module, which is loaded with halcmd loadrt. One\n .comp file specifies one component. The component name and file name must match.\n instance - A component can have zero or more instances. Each instance of a component is created\n@@ -15221,15 +15221,15 @@\n option OPT (VALUE);\n variable CTYPE STARREDNAME ([SIZE]);\n description DOC;\n examples DOC;\n notes DOC;\n see_also DOC;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 284 / 1288\n \n license LICENSE;\n author AUTHOR;\n include HEADERFILE;\n Parentheses indicate optional items. A vertical bar indicates alternatives. Words in CAPITALS indicate\n@@ -15280,15 +15280,15 @@\n 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\n array is created its size will be CONDSIZE.\n DOC - A string that documents the item. String can be a C-style \u201ddouble quoted\u201d string, like:\n \u201dSelects the desired edge: TRUE means falling, FALSE means rising\u201d\n \n or a Python-style \u201dtriple quoted\u201d string, which may include embedded newlines and quote characters, such as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 285 / 1288\n \n \u201d\u201d\u201dThe effect of this parameter, also known as \u201dthe orb of zot\u201d,\n will require at least two paragraphs to explain.\n Hopefully these paragraphs have allowed you to understand \u201dzot\u201d\n better.\u201d\u201d\u201d\n@@ -15326,15 +15326,15 @@\n items for numbered instances are named component-name..item-name.\n option default_count number - (default: 1) Normally, the module parameter count defaults to 1. If\n specified, the count will default to this value instead.\n option count_function yes - (default: no) Normally, the number of instances to create is specified in\n the module parameter count; if count_function is specified, the value returned by the function int\n get_count(void) is used instead, and the count module parameter is not defined.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 286 / 1288\n \n option rtapi_app no - (default: yes) Normally, the functions rtapi_app_main() and rtapi_app_exit()\n are automatically defined. With option rtapi_app no, they are not, and must be provided in the C\n code. Use the following prototypes:\n \u2018int rtapi_app_main(void);\u2018\n@@ -15380,15 +15380,15 @@\n Module is a custom Homing module loaded using [EMCMOT]HOMEMOD=modulename .\n option tpmod yes - (default: no)\n Module is a custom Trajectory Planning (tp) module loaded using [TRAJ]TPMOD=modulename .\n If an option\u2019s VALUE is not specified, then it is equivalent to specifying option \u2026 yes.\n The result of assigning an inappropriate value to an option is undefined.\n The result of using any other option is undefined.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 287 / 1288\n \n 5.9.7.3. License and Authorship\n LICENSE - Specify the license of the module for the documentation and for the MODULE_LICENSE()\n module declaration. For example, to specify that the module\u2019s license is GPL v2 or later:\n \u2018license \u201dGPL\u201d; // indicates GPL v2 or later\u2018\n@@ -15421,15 +15421,15 @@\n comp_id\n fperiod\n rtapi_app_main\n rtapi_app_exit\n extra_setup\n extra_cleanup\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 288 / 1288\n \n 5.9.9. Convenience Macros\n \n Based on the items in the declaration section, halcompile creates a C structure called struct __comp_state.\n However, instead of referring to the members of this structure (e.g., *(inst->name)), they will generally be referred to using the macros below. The details of struct __comp_state and these macros\n@@ -15472,15 +15472,15 @@\n component, to allow for a variable number of input pins to each logic gate and to allow for a selection\n of any of the basic boolean logic functions and, or, and xor.\n The default number of allowed personality items is a compile-time setting (64). The default applies to\n numerous components included in the distribution that are built using halcompile.\n To alter the allowed number of personality items for user-built components, use the --personality\n option with halcompile. For example, to allow up to 128 personality times:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 289 / 1288\n \n [sudo] halcompile --personality=128 --install ...\n \n When using components with personality, normal usage is to specify a personality item for each specified component instance. Example for 3 instances of the logic component:\n loadrt logic names=and4,or3,nand5, personality=0x104,0x203,0x805\n@@ -15518,15 +15518,15 @@\n halcompile --document rtexample.comp\n \n The resulting manpage, example.9 can be viewed with\n man ./example.9\n \n or copied to a standard location for manual pages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 290 / 1288\n \n 5.9.14. Compiling non-realtime components outside the source tree\n halcompile can process, compile, install, and document non-realtime components:\n halcompile non-rt-example.comp\n halcompile --compile non-rt-example.comp\n@@ -15566,15 +15566,15 @@\n pin in float theta;\n function _;\n license \u201dGPL\u201d; // indicates GPL v2 or later\n ;;\n #include \n FUNCTION(_) { sin_ = sin(theta); cos_ = cos(theta); }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 291 / 1288\n \n 5.9.15.3. out8\n This component is a driver for a fictional card called \u201dout8\u201d, which has 8 pins of digital output which\n are treated as a single 8-bit value. There can be a varying number of such cards in the system, and they\n can be at various addresses. The pin is called out_ because out is an identifier used in . It\n@@ -15619,15 +15619,15 @@\n \n 5.9.15.4. hal_loop\n component hal_loop;\n pin out float example;\n \n This fragment of a component illustrates the use of the hal_ prefix in a component name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 292 / 1288\n \n loop is a common name, and the hal_ prefix avoids potential name collisions with other unrelated\n software. For example, on RTAI realtime systems realtime code runs in the kernel, so if the component\n were named just loop it could easily conflict with the standard loop kernel module.\n When loaded, halcmd show comp will show a component called hal_loop. However, the pin shown by\n@@ -15671,15 +15671,15 @@\n function _ nofp;\n description \u201d\u201d\u201d\n Experimental general \u2019logic function\u2019 component. Can perform \u2019and\u2019, \u2019or\u2019\n and \u2019xor\u2019 of up to 16 inputs. Determine the proper value for \u2019personality\u2019\n by adding:\n .IP \\\\(bu 4\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 293 / 1288\n \n The number of input pins, usually from 2 to 16\n .IP \\\\(bu\n 256 (0x100) if the \u2019and\u2019 output is desired\n .IP \\\\(bu\n@@ -15726,15 +15726,15 @@\n void unset(hal_bit_t *p){\n *p = 0;\n }\n //main function\n FUNCTION(_) {\n if (in < 0){\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 294 / 1288\n \n set(&out1);\n unset(&out2);\n }else if (in >0){\n unset(&out2);\n@@ -15774,15 +15774,15 @@\n The halcmd language used in HAL files has a simple syntax that is actually a subset of the more\n powerful general-purpose Tcl scripting language.\n \n 5.10.2. Haltcl Commands\n Haltcl files use the Tcl scripting language augmented with the specific commands of the LinuxCNC\n hardware abstraction layer (HAL). The HAL-specific commands are:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 295 / 1288\n \n addf, alias,\n delf, delsig,\n getp, gets\n ptype,\n@@ -15833,15 +15833,15 @@\n not a list.\n When the value could contain special characters (quote characters, curly-brace characters, embedded\n whitespace, and other characters that have special meaning in Tcl) then it is necessary to distinguish\n between the list of values and the initial (and possibly only) value in the list.\n In Tcl, this is written [lindex $::SECTION(ITEM) 0].\n For example: given the following INI values\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 296 / 1288\n \n [HOSTMOT2]\n DRIVER=hm2_eth\n IPADDR=\u201d10.10.10.10\u201d\n BOARD=7i92\n@@ -15879,15 +15879,15 @@\n Whitespace in the bare expression is not allowed, use quotes for that:\n setp scale.0.gain \u201d6.28 / 360.0 * $::JOINT_0(radius) * 60.0\u201d\n \n In other contexts, such as loadrt, you must explicitly use the Tcl expr command ([expr {}]) for computational expressions.\n Example\n loadrt motion base_period=[expr {500000000/$::TRAJ(MAX_PULSE_RATE)}]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 297 / 1288\n \n 5.10.6. Haltcl Examples\n Consider the topic of stepgen headroom. Software stepgen runs best with an acceleration constraint\n that is \u201da bit higher\u201d than the one used by the motion planner. So, when using halcmd files, we force\n INI files to have a manually calculated value.\n@@ -15926,15 +15926,15 @@\n $ halrun -T haltclfile.tcl\n \n 5.10.8. Haltcl Distribution Examples (sim)\n The configs/sim/axis/simtcl directory includes an INI file that uses a .tcl file to demonstrate a haltcl\n configuration in conjunction with the usage of twopass processing. The example shows the use of Tcl\n procedures, looping, the use of comments and output to the terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 298 / 1288\n \n 5.11. HAL User Interface\n 5.11.1. Introduction\n Halui is a HAL based user interface for LinuxCNC, it connects HAL pins to NML commands. Most of\n the functionality (buttons, indicators etc.) that is provided by a traditional GUI (AXIS, GMOCCAPY,\n@@ -15982,15 +15982,15 @@\n IN FALSE halui.mdi-command-02 <== call-mysub\n ...\n \n When a halui MDI pin is set (pulsed) true, halui will send the MDI command defined in the INI. This\n will not always succeed depending on the current operating mode (e.g., while in AUTO halui can\u2019t\n successfully send MDI commands).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 299 / 1288\n \n 5.11.3. Example Configuration\n An example sim config (configs/sim/axis/halui_pyvcp/halui.ini) is included in the distribution.\n \n 5.11.4. Halui Pin Reference\n@@ -16016,15 +16016,15 @@\n halui.feed-override.scale (float, in) - pin for setting the scale for increase and decrease of feedoverride.\n halui.feed-override.value (float, out) - current FO value\n 5.11.4.4. Mist\n halui.mist.is-on (bit, out) - indicates mist is on\n halui.mist.off (bit, in) - pin for requesting mist off\n halui.mist.on (bit, in) - pin for requesting mist on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 300 / 1288\n \n 5.11.4.5. Flood\n halui.flood.is-on (bit, out) - indicates flood is on\n halui.flood.off (bit, in) - pin for requesting flood off\n halui.flood.on (bit, in) - pin for requesting flood on\n@@ -16049,15 +16049,15 @@\n setting counts directly.\n halui.max-velocity.decrease (bit, in) - pin for decreasing max velocity\n halui.max-velocity.increase (bit, in) - pin for increasing max velocity\n halui.max-velocity.scale (float, in) - the amount applied to the current maximum velocity with each\n transition from off to on of the increase or decrease pin in machine units per second.\n halui.max-velocity.value (float, out) - is the maximum linear velocity in machine units per second.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 301 / 1288\n \n 5.11.4.10. MDI\n halui.mdi-command- (bit, in) - halui will try to send the MDI command defined in the INI.\n is a two digit number starting at 00.\n If the command succeeds then it will place LinuxCNC in the MDI mode and then back to Manual\n@@ -16094,15 +16094,15 @@\n positive software limit\n halui.joint.selected.on-soft-min-limit (bit out) - status pin telling that the selected joint is on the\n negative software limit\n halui.joint.selected.override-limits (bit out) - status pin telling that the selected joint\u2019s limits are\n temporarily overridden\n halui.joint.selected.unhome (bit in) - pin for unhoming the selected joint\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 302 / 1288\n \n 5.11.4.12. Joint Jogging\n N = joint number (0 \u2026 num_joints-1)\n halui.joint.jog-deadband (float in) - pin for setting jog analog deadband (jog analog inputs smaller/slower than this - in absolute value - are ignored)\n halui.joint.jog-speed (float in) - pin for setting jog speed for plus/minus jogging.\n@@ -16130,15 +16130,15 @@\n L = axis letter (xyzabcuvw)\n halui.axis.L.select (bit) - pin for selecting axis by letter\n halui.axis.L.is-selected (bit out) - status pin that axis L is selected\n halui.axis.L.pos-commanded (float out) - Commanded axis position in machine coordinates\n halui.axis.L.pos-feedback float out) - Feedback axis position in machine coordinates\n halui.axis.L.pos-relative (float out) - Feedback axis position in relative coordinates\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 303 / 1288\n \n 5.11.4.14. Axis Jogging\n L = axis letter (xyzabcuvw)\n halui.axis.jog-deadband (float in) - pin for setting jog analog deadband (jog analog inputs smaller/slower than this (in absolute value) are ignored)\n halui.axis.jog-speed (float in) - pin for setting jog speed for plus/minus jogging.\n@@ -16171,15 +16171,15 @@\n halui.mode.is-mdi (bit, out) - indicates MDI mode is on\n halui.mode.is-teleop (bit, out) - indicates coordinated jog mode is on\n halui.mode.joint (bit, in) - pin for requesting joint by joint jog mode\n halui.mode.manual (bit, in) - pin for requesting manual mode\n halui.mode.mdi (bit, in) - pin for requesting MDI mode\n halui.mode.teleop (bit, in) - pin for requesting coordinated jog mode\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 304 / 1288\n \n 5.11.4.16. Program\n halui.program.block-delete.is-on (bit, out) - status pin telling that block delete is on\n halui.program.block-delete.off (bit, in) - pin for requesting that block delete is off\n halui.program.block-delete.on (bit, in) - pin for requesting that block delete is on\n@@ -16213,15 +16213,15 @@\n halui.spindle.N.override.direct-value (bit, in) - false when using encoder to change counts, true\n when setting counts directly.\n halui.spindle.N.override.increase (bit, in) - pin for increasing the SO (+=scale)\n halui.spindle.N.override.scale (float, in) - pin for setting the scale on changing the SO\n halui.spindle.N.override.value (float, out) - current SO value\n halui.spindle.N.override.reset (bit, in) - pin for resetting the SO value (scale=1.0)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 305 / 1288\n \n 5.11.4.19. Spindle\n halui.spindle.N.brake-is-on (bit, out) - indicates brake is on\n halui.spindle.N.brake-off (bit, in) - pin for deactivating spindle/brake\n halui.spindle.N.brake-on (bit, in) - pin for activating spindle-brake\n@@ -16247,15 +16247,15 @@\n halui.tool.diameter (float out) - Current tool diameter, or 0 if no tool is loaded.\n halui.tool.number (u32, out) - indicates current selected tool\n \n 5.12. Halui Examples\n For any Halui examples to work you need to add the following line to the [HAL] section of the ini file.\n HALUI = halui\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 306 / 1288\n \n 5.12.1. Remote Start\n To connect a remote program start button to LinuxCNC you use the halui.program.run pin and the\n halui.mode.auto pin. You have to insure that it is OK to run first by using the halui.mode.is-auto\n pin. You do this with an and2 component. The following figure shows how this is done. When the\n@@ -16277,15 +16277,15 @@\n This example was developed to allow LinuxCNC to move a rotary axis on a signal from an external\n machine. The coordination between the two systems will be provided by two Halui components:\n halui.program.is-paused\n halui.program.resume\n In your customized HAL file, add the following two lines that will be connected to your I/O to turn on\n the program pause or to resume when the external system wants LinuxCNC to continue.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 307 / 1288\n \n net ispaused halui.program.is paused => \u201dyour output pin\u201d\n net resume halui.program.resume <= \u201dyour input pin\u201d\n \n Your input and output pins are connected to the pins wired to the other controller. They may be parallel\n@@ -16326,15 +16326,15 @@\n \n Copy the above listing into a file named \u201dpassthrough\u201d, make it executable (chmod +x), and place it\n on your $PATH. Then try it out:\n Screen copy with details on the execution of the newly created passthrough HAL module.\n $ halrun\n halcmd: loadusr passthrough\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 308 / 1288\n \n halcmd: show pin\n Component Pins:\n Owner Type Dir\n 03\n@@ -16407,15 +16407,15 @@\n \n The full pin or parameter name is formed by joining the prefix and the suffix with a \u201d.\u201d, so in the\n example the pin created is called passthrough.in.\n h.ready()\n \n Once all the pins and parameters have been created, call the .ready() method.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 309 / 1288\n \n 5.13.3.1. Changing the prefix\n The prefix can be changed by calling the .setprefix() method. The current prefix can be retrieved by\n calling the .getprefix() method.\n \n@@ -16449,15 +16449,15 @@\n unload request arrives, the process should either exit in a short time, or call the .exit() method on\n the component if substantial work (such as reading or writing files) must be done to complete the\n shutdown process.\n \n 5.13.6. Helpful Functions\n See Python HAL Interface for an overview of available functions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 310 / 1288\n \n 5.13.7. Constants\n Use these to specify details rather then the value they hold.\n HAL_BIT\n HAL_FLOAT\n@@ -16488,15 +16488,15 @@\n Note that only the __ and __ fields are defined for a canonical device. The\n _, __, and __ fields are set based on the characteristics of\n the real device.\n \n 5.14.2. Digital Input\n The canonical digital input (I/O type field: digin) is quite simple.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 311 / 1288\n \n 5.14.2.1. Pins\n \n (bit) in\n State of the hardware input.\n@@ -16523,15 +16523,15 @@\n \n (funct) write\n Read out and invert, and set hardware output accordingly.\n \n 5.14.4. Analog Input\n The canonical analog input (I/O type: adcin). This is expected to be used for analog to digital converters, which convert e.g. voltage to a continuous range of values.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 312 / 1288\n \n 5.14.4.1. Pins\n \n (float) value\n The hardware reading, scaled according to the scale and offset parameters.\n@@ -16561,15 +16561,15 @@\n \n (float) value\n The value to be written. The actual value output to the hardware will depend on the scale and\n offset parameters.\n (bit) enable\n If false, then output 0 to the hardware, regardless of the value pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 313 / 1288\n \n 5.14.5.2. Parameters\n \n (float) offset\n This will be added to the value before the hardware is updated.\n@@ -16605,15 +16605,15 @@\n the man page available:\n cd toplevel_directory_for_rip_build\n . scripts/rip-environment\n man halcmd\n \n The HAL Tutorial has a number of examples of halcmd usage, and is a good tutorial for halcmd.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 314 / 1288\n \n 5.15.2. Halmeter\n Halmeter is a voltmeter for the HAL. It lets you look at a pin, signal, or parameter, and displays the\n current value of that item. It is pretty simple to use. Start it by typing halmeter in an X windows shell.\n Halmeter is a GUI application. It will pop up a small window, with two buttons labeled \u201dSelect\u201d and\n@@ -16638,23 +16638,23 @@\n displays the value. Multiple \u0300 \u0300halmeter \u0300 \u0300s can be open at the same time. If you use a script to open\n multiple \u0300 \u0300halmeter \u0300 \u0300s you can set the position of each one with -g X Y relative to the upper left corner\n of your screen. For example:\n loadusr halmeter pin hm2.0.stepgen.00.velocity-fb -g 0 500\n \n See the man page for more options and the section Halmeter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 315 / 1288\n \n Figura 5.27: Halmeter selection window\n \n Figura 5.28: Halmeter watch window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 316 / 1288\n \n 5.15.3. Halshow\n halshow (complete usage description) can be started from the command line to show details for selected components, pins, parameters, signals, functions, and threads of a running HAL. The WATCH tab\n provides a continuous display of selected pin, parameters, and signal items. The File menu provides\n buttons to save the watch items to a watch list and to load an existing watch list. The watch list items\n@@ -16670,15 +16670,15 @@\n Notes:\n Create watchfile in halshow using: \u2019File/Save Watch List\u2019.\n LinuxCNC must be running for standalone usage.\n \n Figura 5.29: Halshow Watch Tab\n A watchfile created using the File/Save Watch List menu item is formatted as a single line with tokens\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 317 / 1288\n \n \u201dpin+\u201d, \u201dparam+\u201d, \u201dsig=+\u201d, followed by the appropriate pin, param, or signal name. The token-name\n pairs are separated by a space character.\n Single Line Watchfile Example\n pin+joint.0.pos-hard-limit pin+joint.1.pos-hard-limit sig+estop-loop\n@@ -16725,15 +16725,15 @@\n pin:\n IN or I/O (and not connected to a signal with a writer)\n param: RW\n signal: connected to a writable pin\n HAL item types bit,s32,u32,float are supported.\n When a bit item is specified, a pushbutton is created\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 318 / 1288\n \n to manage the item in one of three manners specified\n by radio buttons:\n toggle: Toggle value when button pressed\n pulse: Pulse item to 1 once when button pressed\n@@ -16754,15 +16754,15 @@\n \n Figura 5.30: sim_pin Window\n \n 5.15.6. Simulate Probe\n simulate_probe is a simple GUI to simulate activation of the pin motion.probe-input. Usage:\n simulate_probe &\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 319 / 1288\n \n Figura 5.31: simulate_probe Window\n \n 5.15.7. HAL Histogram\n hal-histogram is a command line utility to display histograms for HAL pins.\n@@ -16807,15 +16807,15 @@\n 1. LinuxCNC (or another HAL application) must be running.\n 2. If no pinname is specified, default is: motion-command-handler.time.\n 3. This app may be opened for 5 pins.\n 4. Pintypes float, s32, u32, bit are supported.\n 5. The pin must be associated with a thread supporting floating point. For a base thread, this may\n require using loadrt motmod ... base_thread_fp=1 .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 320 / 1288\n \n Figura 5.32: hal-histogram Window\n \n 5.15.8. Halreport\n halreport is a command-line utility that generates a report about HAL connections for a running\n@@ -16826,15 +16826,15 @@\n 3. Each pin\u2019s component_function, thread, and addf-order.\n 4. Non-realtime component pins having non-ordered functions.\n 5. Identification of unknown functions for unhandled components.\n 6. Signals with no output.\n 7. Signals with no inputs.\n 8. Functions with no addf.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 321 / 1288\n \n 9. Warning tags for components marked as deprecated/obsolete in docs.\n 10. Real names for pins that use alias names.\n The report can be generated from the command line and directed to an output file (or stdout if no\n outfilename is specified):\n@@ -16910,15 +16910,15 @@\n \n servo-thread 004\n servo-thread 008\n \n In the example above, the HALFILE uses halcmd aliases to simplify pin names for an hostmot2 FPGA\n board with commands like:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 322 / 1288\n \n alias pin hm2_7i92.0.stepgen.00.position-fb h.00.position-fb\n \n nota\n Questionable component function detection may occur for\n@@ -16932,15 +16932,15 @@\n Component pins that cannot be associated with a known thread function report the function as \u201dUnknown\u201d.\n \n halreport generates a connections report (without pin types, and current values) for a running HAL\n application to aid in designing and verifying connections. This helps with the understanding what the\n source of a pin value is. Use this information with applications like halshow, halmeter, halscope or\n the halcmd show command in a terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 323 / 1288\n \n Cap\u00edtulo 6\n \n Hardware Drivers\n 6.1. Parallel Port Driver\n@@ -16973,15 +16973,15 @@\n The parport driver can control up to 8 ports (defined by MAX_PORTS in hal_parport.c). The ports are\n numbered starting at zero.\n \n 6.1.1. Loading\n The hal_parport driver is a real time component so it must be loaded into the real time thread with\n loadrt. The configuration string describes the parallel ports to be used, and (optionally) their types. If\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 324 / 1288\n \n the configuration string does not describe at least one port, it is an error.\n loadrt hal_parport cfg=\u201dport [type] [port [type] ...]\u201d\n \n Specifying the Port Numbers below 16 refer to parallel ports detected by the system. This is the\n@@ -17005,15 +17005,15 @@\n 2 to 9 explicitly specified as outputs. Note that you must know the base address of the parallel ports\n to configure the drivers correctly. For ISA bus ports, this is usually not a problem, since the ports\n are almost always at a well-known address, such as 0x278 or 0x378 which are typically configured\n in the BIOS. The addresses of PCI bus cards are usually found with lspci -v in an I/O ports line, or\n in a kernel message after running sudo modprobe -a parport_pc. There is no default address, so if\n does not contain at least one address, it is an error.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 325 / 1288\n \n Figura 6.1: Parport block diagram\n Type For each parallel port handled by the hal_parport driver, a type can optionally be specified. The\n type is one of in, out, epp, or x.\n Cuadro 6.1: Parallel Port Direction\n@@ -17073,15 +17073,15 @@\n out\n out\n in\n in\n in\n in\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 326 / 1288\n \n Cuadro 6.1: (continued)\n Pin\n 14\n 15\n@@ -17144,15 +17144,15 @@\n direction.\n loadrt hal_parport cfg=\u201d0x378 0xc000\u201d\n \n Please note that your values will differ. The Netmos cards are Plug-N-Play, and might change their\n settings depending on which slot you put them into, so if you like to get under the hood and re-arrange\n things, be sure to check these values before you start LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 327 / 1288\n \n 6.1.3. Pins\n parport.

.pin- \u0300\n ____-out \u0300 (bit) Drives a physical output pin.\n parport.

.pin- \u0300\n@@ -17196,15 +17196,15 @@\n in the same thread as write. If -reset is TRUE, then the reset function will set the pin to the value\n of -out-invert. This can be used in conjunction with stepgen\u2019s doublefreq to produce one step per\n period. The stepgen stepspace for that pin must be set to 0 to enable doublefreq.\n The individual functions are provided for situations where one port needs to be updated in a very fast\n thread, but other ports can be updated in a slower thread to save CPU time. It is probably not a good\n idea to use both an -all function and an individual function at the same time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 328 / 1288\n \n 6.1.6. Common problems\n If loading the module reports\n insmod: error inserting \u2019/home/jepler/emc2/rtlib/hal_parport.ko\u2019:\n -1 Device or resource busy\n@@ -17246,15 +17246,15 @@\n \n Then use of this module will probably be necessary.\n Finally, HAL parport components should be loaded:\n loadrt probe_parport\n loadrt hal_parport ...\n 1 In the LinuxCNC packages for Ubuntu, the file /etc/modprobe.d/emc2 generally prevents parport_pc from being automatically loaded.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 329 / 1288\n \n 6.2. AX5214H Driver\n The Axiom Measurement & Control AX5214H is a 48 channel digital I/O board. It plugs into an ISA\n bus, and resembles a pair of 8255 chips. In fact it may be a pair of 8255 chips, but I\u2019m not sure. If/when\n someone starts a driver for an 8255 they should look at the ax5214 code, much of the work is already\n@@ -17293,15 +17293,15 @@\n module, and FALSE drives it high, turning OFF the OPTO-22 module. If -invert is TRUE, then setting\n the HAL out- pin TRUE will drive the physical pin high and turn the module OFF.\n \n 6.2.4. Functions\n (funct) ax5214..read \u2014 Reads all digital inputs on one board.\n (funct) ax5214..write \u2014 Writes all digital outputs on one board.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 330 / 1288\n \n 6.3. General Mechatronics Driver\n General Mechatronics GM6-PCI card based motion control system\n For detailed description, please refer to the System integration manual.\n The GM6-PCI motion control card is based on an FPGA and a PCI bridge interface ASIC. A small\n@@ -17319,15 +17319,15 @@\n loadrt hal_gm\n \n During loading (or attempted loading) the driver prints some useful debugging messages to the kernel\n log, which can be viewed with dmesg.\n Up to 3 boards may be used in one system.\n The following connectors can be found on the GM6-PCI card:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 331 / 1288\n \n Figura 6.2: GM6-PCI card connectors and LEDs\n \n 6.3.1. I/O connectors\n \n@@ -17363,15 +17363,15 @@\n 2\n IOx/0\n \n Each pin can be configured as digital input or output. GM6-PCI motion control card has 4 general\n purpose I/O (GPIO) connectors, with eight configurable I/O on each. Every GPIO pin and parameter\n name begins as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 332 / 1288\n \n gm..gpio.\n \n where is from 0 to 3.\n State of the first pin of the first GPIO connector on the GM6-PCI card.\n@@ -17420,15 +17420,15 @@\n When True, pin value will be inverted.\n Used when pin is configured as output.\n \n 6.3.2. Axis connectors\n \n Figura 6.4: Pin numbering of axis connectors\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 333 / 1288\n \n Cuadro 6.5: Pinout of axis connectors\n 1\n 2\n 3\n@@ -17456,15 +17456,15 @@\n modules to the axis connectors. Seven different system configurations are presented in the System integration manual for evaluating typical applications. Also the detailed description of the Axis modules\n can be found in the System integration manual.\n For evaluating the appropriate servo-drive structure the modules have to be connected as the following\n block diagram shows:\n \n Figura 6.5: Servo axis interfaces\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 334 / 1288\n \n 6.3.2.2. Encoder\n The GM6-PCI motion control card has six encoder modules. Each encoder module has three channels:\n Channel-A\n Channel-B\n@@ -17528,15 +17528,15 @@\n calculate velocity. It greatly reduces\n quantization noise as compared to\n simply differentiating the position\n output. When the measured velocity is\n below min-speed-estimate, the\n velocity output is 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 335 / 1288\n \n Cuadro 6.7: Encoder parameters\n Parameters\n .counter-mode\n \n@@ -17611,15 +17611,15 @@\n example, if position-scale is 2000, then\n 1000 counts of the encoder will\n produce a position of 0.5 units.\n \n Setting encoder module of axis 0 to receive 500 CPR quadrature encoder signal and use\n reset to round position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 336 / 1288\n \n setp gm.0.encoder.0.counter-mode 0\n # 0: quad, 1: stepDir\n setp gm.0.encoder.0.index-mode 1\n # 0: reset pos at index, 1:round pos at index\n@@ -17690,15 +17690,15 @@\n \n Parameter description\n When 0, module produces Step/Dir signal.\n When 1, it produces Up/Down step signals.\n And when it is 2, it produces quadrature\n output signals.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 337 / 1288\n \n Cuadro 6.9: (continued)\n Parameters\n .control-type\n \n@@ -17755,15 +17755,15 @@\n Minimum time between two step pulses in\n nano-seconds.\n Minimum time between step pulse and\n direction change in nanoseconds.\n \n For evaluating the appropriate values see the timing diagrams below:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 338 / 1288\n \n Figura 6.6: Reference signal timing diagrams\n Setting StepGen module of axis 0 to generate 1000 step pulse per position unit\n setp gm.0.stepgen.0.step-type 0\n setp gm.0.stepgen.0.control-type 0\n@@ -17781,15 +17781,15 @@\n # step generator, let interpolator control it.\n setp gm.0.stepgen.0.position-scale 1000 # 1000 step/position unit\n setp gm.0.stepgen.0.steplen 1000\n # 1000 ns = 1 \u00b5s\n setp gm.0.stepgen.0.stepspace1000\n # 1000 ns = 1 \u00b5s\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 339 / 1288\n \n setp gm.0.stepgen.0.dirdelay 2000\n \n # 2000 ns = 2 \u00b5s\n \n@@ -17842,15 +17842,15 @@\n direction\n (bit, In)\n \n Pin description\n Enable DAC output. When enable is\n false, DAC output is 0.0 V.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 340 / 1288\n \n Cuadro 6.11: (continued)\n Pins\n \n Type and\n@@ -17911,15 +17911,15 @@\n gm..can-gm.\n \n where is from 0 to 5. For example, gm.0.can-gm.0.position refers to the output position\n of axis 0 in position units.\n HAL pins are updated by function:\n gm..write\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 341 / 1288\n \n 6.3.3.1. Pins\n Cuadro 6.13: CAN module pins\n Pins\n \n@@ -17965,15 +17965,15 @@\n \n Pin description\n Indicates that watchdog timer is expired.\n \n Watchdog timer overrun causes the set of power-enable to low in hardware.\n 6.3.4.2. Parameters\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 342 / 1288\n \n Cuadro 6.16: Watchdog parameters\n Parameters\n \n Type and\n@@ -18078,15 +18078,15 @@\n 2\n V+\n (Ext.)\n \n The GM6-PCI motion control card has two limit- and one homing switch input for each joint. All the\n names of these pins begin as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 343 / 1288\n \n gm..joint.\n \n where is from 0 to 5. For example, gm.0.joint.0.home-sw-in indicates the state of the\n axis 0 home switch.\n@@ -18142,15 +18142,15 @@\n 6.3.6. Status LEDs\n 6.3.6.1. CAN\n Color: Orange\n Blink, during data communication.\n On, when any of the buffers are full - communication error.\n Off, when no data communication.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 344 / 1288\n \n 6.3.6.2. RS485\n Color: Orange\n Blink, during initialization of modules on the bus\n On, when the data communication is up between all initialized modules.\n@@ -18175,15 +18175,15 @@\n Available module types:\n 8-channel relay output module - gives eight NO-NC relay output on a three pole terminal connector\n for each channel.\n 8-channel digital input module - gives eight optical isolated digital input pins.\n 8 channel ADC and 4-channel DAC module - gives four digital-to-analogue converter outputs and\n eight analogue-to-digital inputs. This module is also optically isolated from the GM6-PCI card.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 345 / 1288\n \n Automatic node recognizing Each node connected to the bus was recognized by the GM6-PCI card\n automatically. During starting LinuxCNC, the driver export pins and parameters of all available modules automatically.\n Fault handling If a module does not answer regularly the GM6-PCI card drops down the module. If\n a module with output do not gets data with correct CRC regularly, the module switch to error state\n@@ -18213,15 +18213,15 @@\n Type and\n direction\n (bit, Out)\n \n Pin description\n Output pin for relay\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 346 / 1288\n \n Cuadro 6.21: Relay output module parameters\n Parameters\n \n Type and\n@@ -18284,15 +18284,15 @@\n # First input of the node.\n # Identifies the first GM6-PCI motion control card (PCI card address\n # Selects node with address 0 on the RS485 bus\n # Selects the first digital input module\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 347 / 1288\n \n 6.3.7.3. DAC & ADC module\n For pinout, connection and electrical charasteristics of the module, please refer to the System integration manual.\n All the pins and parameters are updated by the following function:\n gm..rs485\n@@ -18364,15 +18364,15 @@\n #\n .adc-0\n \n # First analogue channel of the node.\n # Identifies the first GM6-PCI motion control card (PCI card address \u2190# Selects node with address 0 on the RS485 bus\n # Selects the first analogue input of the module\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 348 / 1288\n \n 6.3.7.4. Teach Pendant module\n For pinout, connection and electrical charasteristics of the module, please refer to the System integration manual.\n All the pins and parameters are updated by the following function:\n gm..rs485\n@@ -18455,15 +18455,15 @@\n # First analogue channel of the node.\n # Identifies the first GM6-PCI motion control card (PCI card address\n # Selects node with address 0 on the RS485 bus\n # Selects the first analogue input of the module\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 349 / 1288\n \n 6.3.8. Errata\n 6.3.8.1. GM6-PCI card Errata\n The revision number in this section refers to the revision of the GM6-PCI card device.\n Rev. 1.2\n@@ -18496,15 +18496,15 @@\n number you set on the GS2.\n -v or --verbose Turn on debug messages.\n -A or --accel-seconds (default: 10.0) Seconds to accelerate the spindle from 0 to max. RPM.\n -D or --decel-seconds (default: 0.0) Seconds to decelerate the spindle from max. RPM to 0. If\n set to 0.0 the spindle will be allowed to coast to a stop without controlled deceleration.\n 2 In Europe the equivalent can be found under the brand name Omron.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 350 / 1288\n \n -R or --braking-resistor This argument should be used when a braking resistor is installed on the\n GS2 VFD (see Appendix A of the GS2 manual). It disables deceleration over-voltage stall prevention\n (see GS2 modbus Parameter 6.05), allowing the VFD to keep braking even in situations where the\n motor is regenerating high voltage. The regenerated voltage gets safely dumped into the braking\n@@ -18534,15 +18534,15 @@\n .spindle-on (bit, in) 1 for ON and 0 for OFF sent to VFD\n .status-1 (s32, out) Drive Status of the VFD (see the GS2 manual)\n .status-2 (s32, out) Drive Status of the VFD (see the GS2 manual)\n nota\n The status value is a sum of all the bits that are on. So a 163 which means the drive is in the run\n mode is the sum of 3 (run) + 32 (freq set by serial) + 128 (operation set by serial).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 351 / 1288\n \n 6.4.3. Parameters\n With being gs2_vfd or the name given during loading with the -n option:\n .error-count (s32, RW)\n .loop-time (float, RW) how often the modbus is polled (default: 0.1)\n@@ -18614,15 +18614,15 @@\n 31\n 26\n 24\n 21\n 19\n 23\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12\n 13\n 14\n 15\n 16\n 17\n@@ -18709,15 +18709,15 @@\n 6.5.5. Functions\n hal_pi_gpio.read - Add this to the base thread to update the HAL pin values to match the physical\n input values.\n hal_pi_gpio.write - Add this to the base thread to update the physical pins to match the HAL values.\n Typically the read function will be early in the call list, before any encoder counters and the write\n function will be later in the call list, after stepgen.make-pulses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 353 / 1288\n \n 6.5.6. Pin Numbering\n The GPIO connector and the pinout has been consistent since around 2015. These older Pi models\n are probably a poor choice for LinuxCNC anyway. However, this driver is designed to work with them,\n and will detect and correctly configure for the two alternative pinouts.\n@@ -18794,15 +18794,15 @@\n active-high\n active-high\n active-high\n active-high\n active-high\n active-high\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n line\n line\n line\n line\n line\n line\n@@ -18923,15 +18923,15 @@\n hal_gpio.NAME-in-not - HAL_OUT An inverted version of the above, for convenience\n hal_gpio.NAME-out - HAL_IN use this pin to transfer a HAL bit value to a physical output\n \n 6.6.4. Parameters\n hal_gpio.reset_ns - HAL_RW - \u201dsetp\u201d this parameter to control the pulse length of pins added to the\n \u201dreset\u201d list. The value will be limited between 0 and thread-period / 4.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 355 / 1288\n \n 6.6.5. Functions\n hal_gpio.read - Add this to the base thread to update the HAL pin values to match the physical input\n values.\n hal_gpio.write - Add this to the base thread to update the physical pins to match the HAL values.\n@@ -18966,15 +18966,15 @@\n \n 6.6.8. Author\n Andy Pugh\n \n 6.6.9. Known Bugs\n None at this time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 356 / 1288\n \n 6.7. Mesa HostMot2 Driver\n 6.7.1. Introduction\n HostMot2 is an FPGA configuration developed by Mesa Electronics for their line of Anything I/O motion\n control cards. The firmware is open source, portable and flexible. It can be configured (at compiletime) with zero or more instances (an object created at runtime) of each of several Modules: encoders\n@@ -19003,15 +19003,15 @@\n need a firmware binary.\n \n 6.7.3. Installing Firmware\n Depending on how you installed LinuxCNC you may have to open the Synaptic Package Manager from\n the System menu and install the package for your Mesa card. The quickest way to find them is to do a\n search for hostmot2 in the Synaptic Package Manager. Mark the firmware for installation, then apply.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 357 / 1288\n \n 6.7.4. Loading HostMot2\n The LinuxCNC support for the HostMot2 firmware is split into a generic driver called hostmot2 and\n two low-level I/O drivers for the Anything I/O boards. The low-level I/O drivers are hm2_7i43 and\n hm2_pci (for all the PCI- and PC-104/Plus-based Anything I/O boards). The hostmot2 driver must be\n@@ -19048,15 +19048,15 @@\n \n 6.7.6. HostMot2 Functions\n hm2_..read - Read all inputs, update input HAL pins.\n hm2_..write - Write all outputs.\n hm2_..read_gpio - Read the GPIO input pins only. (This function is not\n available on the 7I43 due to limitations of the EPP bus.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 358 / 1288\n \n hm2_..write_gpio - Write the GPIO control registers and output pins\n only. (This function is not available on the 7I43 due to limitations of the EPP bus.)\n nota\n The above read_gpio and write_gpio functions should not normally be needed, since the GPIO bits are\n@@ -19102,15 +19102,15 @@\n [ 1141.053418] hm2/hm2_5i20.0: IO Pin 007 (P2-15): PWMGen #0, pin Out0 (PWM or Up) (Output)\n [ 1141.053422] hm2/hm2_5i20.0: IO Pin 008 (P2-17): IOPort\n [ 1141.053425] hm2/hm2_5i20.0: IO Pin 009 (P2-19): PWMGen #0, pin Out1 (Dir or Down) ( \u2190Output)\n [ 1141.053429] hm2/hm2_5i20.0: IO Pin 010 (P2-21): IOPort\n [ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin Not-Enable (Output)\n ...\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 359 / 1288\n \n [ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output)\n [ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output)\n [ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output)\n [ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output)\n@@ -19139,15 +19139,15 @@\n mothercard on LinuxCNC startup. If you are using Run In Place, you must still install a hostmot2firmware- package. There is more information about firmware and configuration in the Configurations section.\n \n 6.7.10. HAL Pins\n The HAL pins for each configuration can be seen by opening up Show HAL Configuration from the\n Machine menu. All the HAL pins and parameters can be found there. The following figure is of the\n 5I20 configuration used above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 360 / 1288\n \n Figura 6.9: 5i20 HAL Pins\n \n 6.7.11. Configurations\n 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\u2019s look\n@@ -19163,15 +19163,15 @@\n 7I47). So in this way we can save two ports (48 bits) for GPIO.\n Here are tables of the firmwares available in the official packages. There may be additional firmwares\n available at the Mesanet.com website that have not yet made it into the LinuxCNC official firmware\n packages, so check there too.\n 3x20 (6-port various) Default Configurations (The 3x20 comes in 1M, 1.5M, and 2M gate versions. So\n far, all firmware is available in all gate sizes.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Firmware\n SV24\n SVST16_24\n \n Encoder\n 24\n@@ -19384,15 +19384,15 @@\n 0\n 4\n \n GPIO\n 0\n 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Firmware\n SVST8_4IM2\n \n Encoder\n 8 (+IM)\n \n@@ -19497,15 +19497,15 @@\n in - (Bit, Out) Normal state of the hardware input pin. Both full GPIO pins and I/O pins used as inputs\n by active module instances have this pin.\n in_not - (Bit, Out) Inverted state of the hardware input pin. Both full GPIO pins and I/O pins used as\n inputs by active module instances have this pin.\n out - (Bit, In) Value to be written (possibly inverted) to the hardware output pin. Only full GPIO pins\n have this pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 363 / 1288\n \n 6.7.12.2. Parameters\n invert_output - (Bit, RW) This parameter only has an effect if the is_output parameter is true. If this\n parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin.\n Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.\n@@ -19542,15 +19542,15 @@\n position-cmd - (Float, In) Target position of stepper motion, in user-defined position units.\n position-fb - (Float, Out) Feedback position in user-defined position units (counts / position_scale).\n velocity-cmd - (Float, In) Target velocity of stepper motion, in user-defined position units per second.\n This pin is only used when the stepgen is in velocity control mode (control-type=1).\n velocity-fb - (Float, Out) Feedback velocity in user-defined position units per second.\n 3 At present, the firmware supports multi-phase stepper outputs, but the driver doesn\u2019t. Interested volunteers are solicited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 364 / 1288\n \n 6.7.13.2. Parameters\n dirhold - (u32, RW) Minimum duration of stable Direction signal after a step ends, in nanoseconds.\n dirsetup - (u32, RW) Minimum duration of stable Direction signal before a step begins, in nanoseconds.\n maxaccel - (Float, RW) Maximum acceleration, in position units per second per second. If set to 0,\n@@ -19585,15 +19585,15 @@\n The function of the Out0 and Out1 I/O pins varies with output-type parameter (see below).\n The hm2 pwmgen representation is similar to the software pwmgen component. Each pwmgen instance has the following pins and parameters:\n 6.7.14.1. Pins\n enable - (Bit, In) If true, the pwmgen will set its Not-Enable pin false and output its pulses. If enable\n is false, pwmgen will set its Not-Enable pin true and not output any signals.\n value - (Float, In) The current pwmgen command value, in arbitrary units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 365 / 1288\n \n 6.7.14.2. Parameters\n output-type - (s32, RW) This emulates the output_type load-time argument to the software pwmgen\n component. This parameter may be changed at runtime, but most of the time you probably want\n to set it at startup and then leave it alone. Accepted values are 1 (PWM on Out0 and Direction on\n@@ -19635,15 +19635,15 @@\n the resulting value on the I/O pin is available on the in and in_not pins. Only full GPIO pins and\n I/O pins used as outputs by active module instances have this parameter.\n \n 6.7.15. Encoder\n Encoders have names like hm2_..encoder... Instance is a twodigit number that corresponds to the HostMot2 encoder instance number. There are num_encoders\n instances, starting with 00.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 366 / 1288\n \n Each encoder uses three or four input I/O pins, depending on how the firmware was compiled. Threepin encoders use A, B, and Index (sometimes also known as Z). Four-pin encoders use A, B, Index, and\n Index-mask.\n The hm2 encoder representation is similar to the one described by the Canonical Device Interface\n (in the HAL General Reference document), and to the software encoder component. Each encoder\n@@ -19681,15 +19681,15 @@\n vel-timeout - (Float, RW) When the encoder is moving slower than one pulse for each time that\n the driver reads the count from the FPGA (in the hm2_read() function), the velocity is harder to\n estimate. The driver can wait several iterations for the next pulse to arrive, all the while reporting\n the upper bound of the encoder velocity, which can be accurately guessed. This parameter specifies\n how long to wait for the next pulse, before reporting the encoder stopped. This parameter is in\n seconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 367 / 1288\n \n 6.7.16. 5I25 Configuration\n 6.7.16.1. Firmware\n The 5I25 firmware comes preloaded for the daughter card it is purchased with. So the firmware=xxx.BIT\n is not part of the hm2_pci configuration string when using a 5I25.\n@@ -19723,15 +19723,15 @@\n maxlimit: +10\n maxfullscale: 10\n If you wanted to say scale the analog out of a channel to IPS for a velocity mode servo (say 24 IPS\n max) you could set the limits like this:\n minlimit: -24\n maxlimit: +24\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 368 / 1288\n \n maxfullscale: 24\n If you wanted to scale the analog out of a channel to RPM for a 0 to 6000 RPM spindle with 0-10 V\n control you could set the limits like this:\n minlimit: 0\n@@ -19763,15 +19763,15 @@\n to facilitate the low level protocol debug.\n You have more than one device to connect. MB2HAL is very efficiently managing multiple devices,\n transactions and links. Currently I am monitoring two axis drivers using a Rs232 port, a VFD driver\n using another Rs232 port, and a remote I/O using TCP/IP.\n You want a protocol to connect your Arduino to HAL. Look the included sample configuration file,\n sketch and library for Arduino Modbus.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 369 / 1288\n \n 6.8.2. Usage\n a. Create a config file from the example below\n 1. Set component name (optional)\n Set HAL_MODULE_NAME=mymodule (default HAL_MODULE_NAME=mb2hal)\n@@ -19851,15 +19851,15 @@\n The serial port. For example \u201d/dev/ttyS0\u201d. Ignored if\n LINK_TYPE=serial\n LINK_TYPE=tcp.\n SERIAL_BAUD Integer If\n The baud rate. Ignored if LINK_TYPE=tcp.\n LINK_TYPE=serial\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 370 / 1288\n \n Value\n Type\n Required\n Description\n@@ -19952,15 +19952,15 @@\n parameter above.\n \n 6.8.3.3. Error codes\n While debugging transactions, note the returned \u201dret[]\u201d value correspond to:\n Modbus protocol exceptions:\n 0x01 - ILLEGAL_FUNCTION - the FUNCTION code received in the query is not allowed or invalid.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 371 / 1288\n \n 0x02 - ILLEGAL_DATA_ADDRESS - the DATA ADDRESS received in the query is not an allowable\n address for the slave or is invalid.\n 0x03 - ILLEGAL_DATA_VALUE - a VALUE contained in the data query field is not an allowable value\n or is invalid.\n@@ -19996,15 +19996,15 @@\n # ++++++++++++++++++++++++\n [MB2HAL_INIT]\n #OPTIONAL: Debug level of init and INI file parsing.\n # 0 = silent.\n # 1 = error messages (default).\n # 2 = OK confirmation messages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 372 / 1288\n \n # 3 = debugging messages.\n # 4 = maximum debugging messages (only in transactions).\n INIT_DEBUG=3\n #OPTIONAL: Set to 1.1 to enable the new functions:\n@@ -20049,15 +20049,15 @@\n SERIAL_BAUD=115200\n #if LINK_TYPE=serial then REQUIRED (only 1st time).\n #if LINK_TYPE=tcp then IGNORED\n #Data bits. One of 5,6,7,8.\n SERIAL_BITS=8\n #if LINK_TYPE=serial then REQUIRED (only 1st time).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 373 / 1288\n \n #if LINK_TYPE=tcp then IGNORED\n #Data parity. One of: even, odd, none.\n SERIAL_PARITY=none\n #if LINK_TYPE=serial then REQUIRED (only 1st time).\n@@ -20141,15 +20141,15 @@\n #\n Both pin values are added and limited to 65535 (UINT16_MAX). Normally use one and let \u2190the other open (read as 0).\n # fnct_15_write_multiple_coils:\n #\n mb2hal.m.n.bit\n (input)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 374 / 1288\n \n # fnct_16_write_multiple_registers:\n #\n mb2hal.m.n.float\n (input)\n@@ -20212,15 +20212,15 @@\n -0x07 Unsuccessful programming request using function code 13 or \u219014.\n #MEMORY_PARITY_ERROR\n -0x08 SLAVE parity error in MEMORY.\n #GATEWAY_PROBLEM_PATH\n -0x0A (-10) Gateway path(s) not available.\n #GATEWAY_PROBLEM_TARGET -0x0B (-11) The target device failed to repond (generated by \u2190master, not slave).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n #/* Program or connection */\n #COMM_TIME_OUT\n -0x0C (-12)\n #PORT_SOCKET_FAILURE\n -0x0D (-13)\n #SELECT_FAILURE\n@@ -20277,15 +20277,15 @@\n HAL_TX_NAME=XDrive02\n MAX_UPDATE_RATE=10.0\n DEBUG=1\n [TRANSACTION_07]\n \n 375 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 376 / 1288\n \n MB_TX_CODE=fnct_06_write_single_register\n FIRST_ELEMENT=20\n NELEMENTS=1\n HAL_TX_NAME=XDrive03\n@@ -20318,15 +20318,15 @@\n 6.8.5.3. fnct_03_read_holding_registers\n mb2hal.m.n.float float out\n mb2hal.m.n.int s32 out\n 6.8.5.4. fnct_04_read_input_registers\n mb2hal.m.n.float float out\n mb2hal.m.n.int s32 out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 377 / 1288\n \n 6.8.5.5. fnct_05_write_single_coil\n mb2hal.m.n.bit bit in\n NELEMENTS needs to be 1 or PIN_NAMES must contain just one name.\n 6.8.5.6. fnct_06_write_single_register\n@@ -20357,15 +20357,15 @@\n This component is loaded using the halcmd \u201dloadusr\u201d command:\n loadusr -Wn coolant mitsub_vfd spindle=02 coolant=01\n \n The above command says:\n loadusr, wait for coolant pins to be ready, component mitsub_vfd, with 2 slaves named spindle (slave\n #2) and coolant (slave #1)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 378 / 1288\n \n 6.9.1. Command Line Options\n The command line options are:\n -b or --baud : set the baud rate - all networked VFDs must be the same\n -p or --port : sets the port to use such as /dev/ttyUSB0\n@@ -20391,15 +20391,15 @@\n .scale-fb (float, in) Scales the motor-fb pin to arbitrary units. default 1 = Hertz.\n .scale-amps (float, in) Scales the motor-amps pin to arbitrary units. default 1 = amps.\n .scale-power (float, in) Scales the motor-power pin to arbitrary units. default 1 = .\n .estop (bit, in) puts the VFD into emergency-stopped status.\n .status-bit-N (bit, out) N = 0 to 7, status bits are user configurable on the VFD. Bit 3 should be\n set to at speed and bit 7 should be set to alarm. Others are free to be set as required.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 379 / 1288\n \n 6.9.3. HAL example\n #\n # example usage of the Mitsubishi VFD driver\n #\n@@ -20458,15 +20458,15 @@\n Fr-A700 F700 E700 D700 technical manual for the 700 series\n The VFD must have PR settings adjusted manually for serial communication.\n One must power cycle the VFD for some of these to register eg PR 79\n PR 77 set to 1 -to unlock other PR modification.\n PR 79 set to 1 or 0 -for communication thru serial.\n PR 117 set to 0-31 -slave number, driver must reference same number.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 380 / 1288\n \n PR 118 tested with 96 -baud rate (can be set to 48,96,192) if driver is also set.\n PR 119 set to 0 -stop bit/data length (8 bits, two stop)\n PR 120 set to 0 -no parity\n PR 121 set to 1-10 -if 10 (maximum) COM errors then VFD faults.\n@@ -20501,15 +20501,15 @@\n (bit) motenc..enc--reset-count - If this pin is true, the counter will immediately\n be reset to zero, and the pin will be cleared.\n (float) motenc..dac--value - Analog output value for DAC (in user units, see -gain\n and -offset)\n (float) motenc..adc--value - Analog input value read by ADC (in user units, see\n -gain and -offset)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 381 / 1288\n \n (bit) motenc..in- - State of digital input pin, see canonical digital input.\n (bit) motenc..in--not - Inverted state of digital input pin, see canonical digital\n input.\n (bit) motenc..out- - Value to be written to digital output, seen canonical digital\n@@ -20555,15 +20555,15 @@\n (funct) motenc..encoder-read - Reads all encoder counters.\n (funct) motenc..adc-read - Reads the analog-to-digital converters.\n (funct) motenc..digital-in-read - Reads digital inputs.\n (funct) motenc..dac-write - Writes the voltages to the DACs.\n (funct) motenc..digital-out-write - Writes digital outputs.\n (funct) motenc..misc-update - Updates misc stuff.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 382 / 1288\n \n 6.11. Opto22 Driver\n PCI AC5 ADAPTER CARD / HAL DRIVER\n \n 6.11.1. The Adapter Card\n@@ -20598,15 +20598,15 @@\n signal to this pin to write to an I/O point of the card. The PINNUMBER represents the position in\n the relay rack.Eg. PINNUMBER 23 is position 23 in a Opto22 relay rack and would be pin 1 on the\n 50 pin header connector.\n opto_ac5.[BOARDNUMBER].led[NUMBER] OUT bit - Turns one of the 4 onboard LEDs on/off. LEDs\n are numbered 0 to 3.\n BOARDNUMBER can be 0-3 PORTNUMBER can be 0 or 1. Port 0 is closest to the card bracket.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 383 / 1288\n \n 6.11.4. Parameters\n opto_ac5.[BOARDNUMBER].port[PORTNUMBER].out-[PINNUMBER]-invert W bit - When TRUE,\n invert the meaning of the corresponding -out pin so that TRUE gives LOW and FALSE gives HIGH.\n \n@@ -20643,15 +20643,15 @@\n 24 bits represented in a BINARY number. Bit 1 is the rightmost number:\n 16 zeros for the 16 inputs and 8 ones for the 8 outputs\n 000000000000000011111111\n \n This converts to FF on the calculator, so 0xff is the number to use for portconfig0 and/or portconfig1\n when loading the driver.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 384 / 1288\n \n 6.11.7. Pin Numbering\n HAL pin 00 corresponds to bit 1 (the rightmost) which represents position 0 on an Opto22 relay rack.\n HAL pin 01 corresponds to bit 2 (one spot to the left of the rightmost) which represents position 1 on\n an Opto22 relay rack. HAL pin 23 corresponds to bit 24 (the leftmost) which represents position 23\n@@ -20694,15 +20694,15 @@\n Alternatively, the 8 digital output pins can be used as additional digital outputs, it works the same\n way as above with the syntax : extradout=0xnn\u2019. The extradac and extradout options are mutually\n exclusive on each board, you can only specify one.\n The UPC and PPMC encoder boards can timestamp the arrival of encoder counts to refine the derivation of axis velocity. This derived velocity can be fed to the PID hal component to produce smoother D\n term response. The syntax is : timestamp=0xnn[,0xmm], this works the same way as above to select\n which board is being configured. Default is to not enable the timestamp option. If you put this option\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 385 / 1288\n \n on the command line, it enables the option. The first n selects the EPP bus, the second one matches\n the address of the board having the option enabled. The driver checks the revision level of the board\n to make sure it has firmware supporting the feature, and produces an error message if the board does\n not support it.\n@@ -20743,15 +20743,15 @@\n timestamp=0x00 option.\n (All float output) ppmc..encoder..position - Encoder position, in user units.\n (All bit bidir) ppmc..encoder..index-enable - Connect to joint.#.index-enable for\n home-to-index. This is a bidirectional HAL signal. Setting it to true causes the encoder hardware\n to reset the count to zero on the next encoder index pulse. The driver will detect this and set the\n signal back to false.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 386 / 1288\n \n (PPMC float output) ppmc..DAC..value - sends a signed value to the 16-bit Digital\n to Analog Converter on the PPMC DAC16 board commanding the analog output voltage of that DAC\n channel.\n (UPC bit input) ppmc..pwm..enable - Enables a PWM generator.\n@@ -20790,15 +20790,15 @@\n an output value equal to the 1/scale value will produce an output of + or - value Volts. So, if the\n scale parameter is 0.1 and you send a value of 0.5, the output will be 5.0 Volts.\n (UPC float) ppmc..pwm..scale - Scaling for PWM generator. If scale is X, then the\n duty cycle will be 100 % when the value pin is X (or -X).\n (UPC float) ppmc..pwm..max-dc - Maximum duty cycle, from 0.0 to 1.0.\n (UPC float) ppmc..pwm..min-dc - Minimum duty cycle, from 0.0 to 1.0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 387 / 1288\n \n (UPC float) ppmc..pwm..duty-cycle - Actual duty cycle (used mostly for troubleshooting.)\n (UPC bit) ppmc..pwm..bootstrap - If true, the PWM generator will generate a\n short sequence of pulses of both polarities when E-stop goes false, to reset the shutdown latches\n on some PWM servo drives.\n@@ -20832,15 +20832,15 @@\n These writes are organized into blocks of contiguous registers to be written in a block to minimize\n CPU overhead.\n \n 6.13. Pluto P Driver\n 6.13.1. General Info\n The Pluto-P is a FPGA board featuring the ACEX1K chip from Altera.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 388 / 1288\n \n 6.13.1.1. Requirements\n 1. A Pluto-P board\n 2. An EPP-compatible parallel port, configured for EPP mode in the system BIOS or a PCI EPP\n compatible parallel port card.\n@@ -20876,15 +20876,15 @@\n isolation and protection. Traditional parallel port optoisolator boards do not work with pluto_servo\n due to the bidirectional nature of the EPP protocol.\n 6.13.1.4. LED\n When the device is unprogrammed, the LED glows faintly. When the device is programmed, the LED\n glows according to the duty cycle of PWM0 (LED = UP0 xor DOWN0) or STEPGEN0 (LED = STEP0\n xor DIR0).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 389 / 1288\n \n 6.13.1.5. Power\n 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\n these VCC pins. The required current is not yet known, but is probably around 50mA plus I/O current.\n The regulator on the Pluto-P board is a low-dropout type. Supplying 5V at the power jack will allow\n@@ -20915,15 +20915,15 @@\n 18 digital outputs: 10 dedicated, 8 shared with PWM functions. (Example: A lathe with unidirectional\n PWM spindle control may use 13 total digital outputs)\n 20 digital inputs: 8 dedicated, 12 shared with Quadrature functions. (Example: A lathe with index\n pulse only on the spindle may use 13 total digital inputs.)\n EPP communication with the PC. The EPP communication typically takes around 100 \u00b5s on machines\n tested so far, enabling servo rates above 1 kHz.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 390 / 1288\n \n 6.13.2.1. Pinout\n UPx - The up (up/down mode) or pwm (pwm+direction mode) signal from PWM generator X. May be\n used as a digital output if the corresponding PWM channel is unused, or the output on the channel\n is always negative. The corresponding digital output invert may be set to TRUE to make UPx active\n@@ -20953,15 +20953,15 @@\n \n Behavior if both\n functions used\n When pwm-0-pwmdir is\n TRUE, this pin is the PWM\n output\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 391 / 1288\n \n Cuadro 6.27: (continued)\n Primary function\n \n Alternate Function\n@@ -21073,15 +21073,15 @@\n Read same value\n \n 6.13.2.2. Input latching and output updating\n PWM duty cycles for each channel are updated at different times.\n 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.\n Digital inputs IN0 through IN19 are all latched at the same time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 392 / 1288\n \n Quadrature positions for each channel are latched at different times.\n 6.13.2.3. HAL Functions, Pins and Parameters\n A list of all loadrt arguments, HAL function names, pin names and parameter names is in the manual\n page, pluto_servo.9.\n@@ -21108,15 +21108,15 @@\n OUTx - Dedicated digital output #x\n GND - Ground\n VCC - +3.3V regulated DC\n While the extended main connector has a superset of signals usually found on a Step & Direction DB25\n connector\u20144 step generators, 9 inputs, and 6 general-purpose outputs\u2014the layout on this header is\n different than the layout of a standard 26-pin ribbon cable to DB25 connector.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 393 / 1288\n \n Figura 6.11: Pluto-Step Pinout\n \n 6.13.3.2. Input latching and output updating\n Step frequencies for each channel are updated at different times.\n@@ -21125,15 +21125,15 @@\n Feedback positions for each channel are latched at different times.\n 6.13.3.3. Step Waveform Timings\n The firmware and driver enforce step length, space, and direction change times. Timings are rounded\n up to the next multiple of 1.6\u03bcs, with a maximum of 49.6\u03bcs. The timings are the same as for the software stepgen component, except that dirhold and dirsetup have been merged into a single parameter\n dirtime which should be the maximum of the two, and that the same step timings are always applied\n to all channels.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 394 / 1288\n \n Figura 6.12: Pluto-Step Timings\n \n 6.13.3.4. HAL Functions, Pins and Parameters\n A list of all loadrt arguments, HAL function names, pin names and parameter names is in the manual\n@@ -21148,15 +21148,15 @@\n \n This component is loaded using the halcmd \u201dloadusr\u201d command:\n loadusr -Wn pmx485 pmx485 /dev/ttyUSB0\n \n This will load the pmx485 component using the /dev/ttyUSB0 port and wait for it to become ready.\n It is necessary to name the port to use for communications.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 395 / 1288\n \n 6.14.1. Pins\n pmx485.mode-set (bit, in) # set cutting mode\n pmx485.current-set (bit, in) # set cutting current\n pmx485.pressure-set (bit, in) # set gas pressure\n@@ -21187,15 +21187,15 @@\n Disconnect the Powermax power supply from its power source for approximately 30 seconds. When\n you power the system back ON, it will no longer be in remote mode.\n \n 6.14.3. Reference:\n Hypertherm Application Note #807220\n \u201dPowermax45 XP/65/85/105/125\u00ae Serial Communication Protocol\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 396 / 1288\n \n 6.15. Servo To Go Driver\n The Servo-To-Go (STG) is one of the first PC motion control cards supported by LinuxCNC. It is an\n ISA card and it exists in different flavors (all supported by this driver). The board includes up to 8\n channels of quadrature encoder input, 8 channels of analog input and output, 32 bits digital I/O, an\n@@ -21235,15 +21235,15 @@\n 6.15.2. Pins\n stg..counts - (s32) Tracks the counted encoder ticks.\n stg..position - (float) Outputs a converted position.\n stg..dac-value - (float) Drives the voltage for the corresponding DAC.\n stg..adc-value - (float) Tracks the measured voltage from the corresponding ADC.\n stg.in- - (bit) Tracks a physical input pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 397 / 1288\n \n stg.in--not - (bit) Tracks a physical input pin, but inverted.\n stg.out- - (bit) Drives a physical output pin\n For each pin, is the axis number, and is the logic pin number of the STG if\n IIOO is defined, there are 16 input pins (in-00 .. in-15) and 16 output pins (out-00 .. out-15), and they\n@@ -21277,15 +21277,15 @@\n and ShuttlePRO2 devices with LinuxCNC\u2019s HAL.\n If the driver is started without command-line arguments, it will probe all /dev/hidraw* device files for\n Shuttle devices, and use all devices found. If it is started with command-line arguments, it will only\n probe the devices specified.\n The ShuttleXpress has five momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 398 / 1288\n \n The ShuttlePRO has 13 momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n The ShuttlePRO2 has 15 momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n@@ -21323,15 +21323,15 @@\n .spring-wheel-s32 (s32 out)\n The current deflection of the spring-wheel (the outer wheel). It\u2019s 0 at rest, and ranges from -7 at\n the counter-clockwise extreme to +7 at the clockwise extreme.\n .spring-wheel-f (float out)\n The current deflection of the spring-wheel (the outer wheel). It\u2019s 0.0 at rest, -1.0 at the counterclockwise extreme, and +1.0 at the clockwise extreme. The Shuttle devices report the springwheel position as an integer from -7 to +7, so this pin reports only 15 discrete values in it\u2019s\n range.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 399 / 1288\n \n 6.17. VFS11 VFD Driver\n This is a non-realtime HAL program to control the S11 series of VFDs from Toshiba.\n vfs11_vfd supports serial and TCP connections. Serial connections may be RS232 or RS485. RS485 is\n supported in full- and half-duplex mode. TCP connections may be passive (wait for incoming connection), or active outgoing connections, which may be useful to connect to TCP-based devices or through\n@@ -21365,15 +21365,15 @@\n in registers F500 and F501 respectively. Used in PID loops to choose shorter ramp times to avoid\n oscillation.\n .alarm-code (s32, out) non-zero if drive is in alarmed state. Bitmap describing alarm information\n (see register FC91 description). Use err-reset (see below) to clear the alarm.\n .at-speed (bit, out) when drive is at commanded speed (see speed-tolerance below)\n .current-load-percentage (float, out) reported from the VFD\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 400 / 1288\n \n .dc-brake (bit, in) engage the DC brake. Also turns off spindle-on.\n .enable (bit, in) enable the VFD. If false, all operating parameters are still read but control is\n released and panel control is enabled (subject to VFD setup).\n .err-reset (bit, in) reset errors (alarms a.k.a Trip and e-stop status). Resetting the VFD may\n@@ -21410,15 +21410,15 @@\n .status (s32, out) Drive Status of the VFD (see the TOSVERT VF-S11 Communications Function\n Instruction Manual, register FD01). A bitmap.\n .trip-code (s32, out) trip code if VF-S11 is in tripped state.\n .error-count (s32, out) number of Modbus transactions which returned an error\n .max-speed (bit, in) ignore the loop-time parameter and run Modbus at maximum speed, at the\n expense of higher CPU usage. Suggested use during spindle positioning.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 401 / 1288\n \n 6.17.3. Parameters\n Where is vfs11_vfd or the name given during loading with the -n option.\n .frequency-limit (float, RO) upper limit read from VFD setup.\n .loop-time (float, RW) how often the Modbus is polled (default interval 0.1 seconds)\n@@ -21454,15 +21454,15 @@\n # 1 2\n STOPBITS=1\n #rs232 rs485\n SERIAL_MODE=rs485\n # up down none\n # this feature might not work with a stock Ubuntu\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n # libmodbus5/libmodbus-dev package, and generate a warning\n # execution will continue as if RTS_MODE=up were given.\n RTS_MODE=up\n #--------------------# modbus timers in seconds\n # inter-character timer\n BYTE_TIMEOUT=0.5\n@@ -21501,15 +21501,15 @@\n # see orient.9 and motion.9\n net spindle-orient spindle.0.orient spindle-vfd.max-speed spindle-vfd.jog-mode\n # take precedence over control panel\n setp spindle-vfd.enable 1\n \n 402 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 403 / 1288\n \n 6.17.6. Panel operation\n The vfs11_vfd driver takes precedence over panel control while it is enabled (see enable pin), effectively disabling the panel. Clearing the enable pin re-enables the panel. Pins and parameters can still\n be set, but will not be written to the VFD untile the enable pin is set. Operating parameters are still\n read while bus control is disabled. Exiting the vfs11_vfd driver in a controlled way will release the\n@@ -21542,30 +21542,30 @@\n protocol. So the last parameter which you\u2019d want to change is the protocol - set from Toshiba Inverter\n Protocol to Modbus; thereafter, the Windows app is useless.\n To increase the upper frequency limit, the UL and FH parameters must be changed on the panel. I\n increased them from 50 to 80.\n See dump-params.mio for a description of non-standard VF-S11 parameters of my setup. This file is\n for the modio Modbus interactive utility.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 404 / 1288\n \n 6.17.9. Programming Note\n The vfs11_vfd driver uses the libmodbus version 3 library which is more recent than the version 2\n code used in gs2_vfd.\n The Ubuntu libmodbus5 and libmodbus-dev packages are only available starting from Ubuntu 12\n (Precise Pengolin). Moreover, these packages lack support for the MODBUS_RTS_MODE_* flags. Therefore, building vfs11_vfd using this library might generate a warning if RTS_MODE= is specified in\n the INI file.\n To use the full functionality on lucid and precise:\n remove the libmodbus packages: sudo apt-get remove libmodbus5 libmodbus-dev\n build and install libmodbus version 3 from source as outlined here.\n Libmodbus does not build on Ubuntu Hardy, hence vfs11_vfd is not available on Hardy.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 405 / 1288\n \n Cap\u00edtulo 7\n \n Hardware Examples\n 7.1. PCI Parallel Port\n@@ -21596,15 +21596,15 @@\n and then added the following lines so the parport will be read and written:\n addf parport.1.read base-thread\n addf parport.1.write base-thread\n \n After doing the above then run your config and verify that the parallel port got loaded in Machine/Show\n HAL Configuration window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 406 / 1288\n \n 7.2. Spindle Control\n LinuxCNC can control up to 8 spindles. The number is set in the INI file. The examples below all refer\n to a single-spindle config with spindle control pins with names like spindle.0... In the case of a multiple\n spindle machine all that changes is that additional pins exist with names such as spindle.6...\n@@ -21640,15 +21640,15 @@\n \n 7.2.3. Spindle Enable\n If you need a spindle enable signal, link your output pin to spindle.0.on. To link these pins to a parallel\n port pin put something like the following in your .hal file, making sure you pick the pin that is connected\n to your control device.\n net spindle-enable spindle.0.on => parport.0.pin-14-out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 407 / 1288\n \n 7.2.4. Spindle Direction\n If you have direction control of your spindle, then the HAL pins spindle.N.forward and spindle.N.reverse\n are controlled by the G-codes M3 and M4. Spindle speed Sn must be set to a positive non-zero value\n for M3/M4 to turn on spindle motion.\n@@ -21690,15 +21690,15 @@\n # the output of spindle ramp is sent to the scale in\n net spindle-ramped <= spindle-ramp.out => scale.0.in\n # to know when to start the motion we send the near component\n # (named spindle-at-speed) to the spindle commanded speed from\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 408 / 1288\n \n # the signal spindle-cmd and the actual spindle speed\n # provided your spindle can accelerate at the maxv setting.\n net spindle-cmd => spindle-at-speed.in1\n net spindle-ramped => spindle-at-speed.in2\n@@ -21738,15 +21738,15 @@\n 1 In this example, we will assume that some encoders have already been issued to axes/joints 0, 1, and 2. So the next encoder\n available for us to attach to the spindle would be number 3. Your situation may differ.\n 2 The HAL encoder index-enable is an exception to the rule in that it behaves as both an input and an output, see the Encoder\n Section for details\n 3 It is because we selected non-quadrature simple counting\u2026 above that we can get away with quadrature counting without\n having any B quadrature input.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 409 / 1288\n \n 7.2.6.2. Spindle At Speed\n To enable LinuxCNC to wait for the spindle to be at speed before executing a series of moves, the spindle.N.at-speed needs to turn true at the moment the spindle is at the commanded speed. To achieve\n this you need spindle feedback from an encoder. Since the feedback and the commanded speed are\n not usually exactly the same you should to use the near component to determine that the two numbers\n@@ -21785,15 +21785,15 @@\n loadrt encoder num_chan=1\n loadrt mux4 count=1\n addf encoder.capture-position servo-thread\n addf encoder.update-counters base-thread\n addf mux4.0 servo-thread\n # If your MPG outputs a quadrature signal per click set x4 to 1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 410 / 1288\n \n # If your MPG puts out 1 pulse per click set x4 to 0\n setp encoder.0.x4-mode 0\n # For velocity mode, set to 1\n # In velocity mode the axis stops when the dial is stopped\n@@ -21840,15 +21840,15 @@\n loadrt ilowpass\n addf ilowpass.0 servo-thread\n setp ilowpass.0.scale 1000\n setp ilowpass.0.gain 0.01\n # If your MPG outputs a quadrature signal per click set x4 to 1\n # If your MPG puts out 1 pulse per click set x4 to 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 411 / 1288\n \n setp encoder.0.x4-mode 0\n # For velocity mode, set to 1\n # In velocity mode the axis stops when the dial is stopped\n # even if that means the commanded motion is not completed,\n@@ -21891,15 +21891,15 @@\n 7.4.1. Example\n This example shows the connections needed to use an Automation Direct GS2 VFD to drive a spindle.\n The spindle speed and direction is controlled by LinuxCNC.\n Using the GS2 component involves very little to set up. We start with a StepConf Wizard generated\n config. Make sure the pins with \u201dSpindle CW\u201d and \u201dSpindle PWM\u201d are set to unused in the parallel\n port setup screen.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 412 / 1288\n \n In the custom.hal file we place the following to connect LinuxCNC to the GS2 and have LinuxCNC\n control the drive.\n GS2 Example\n # load the non-realtime component for the Automation Direct GS2 VFDs\n@@ -21928,15 +21928,15 @@\n P4.00 (Source of Frequency Command) must be set to Frequency determined by RS232C/RS485\n communication interface, 05.\n P9.01 (Transmission Speed) must be set to 9600 baud, 01.\n P9.02 (Communication Protocol) must be set to \u201dModbus RTU mode, 8 data bits, no parity, 2 stop\n bits\u201d, 03.\n A PyVCP panel based on this example is here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 413 / 1288\n \n Cap\u00edtulo 8\n \n ClassicLadder\n 8.1. ClassicLadder Introduction\n@@ -21966,15 +21966,15 @@\n along the top and bottom of the page while the rungs are drawn vertically from left to right.\n A program in ladder logic, also called a ladder diagram, is similar to a schematic for a set of relay\n circuits. Ladder logic is useful because a wide variety of engineers and technicians can understand\n and use it without much additional training because of the resemblance.\n Ladder logic is widely used to program PLCs, where sequential control of a process or manufacturing\n operation is required. Ladder logic is useful for simple but critical control systems, or for reworking\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 414 / 1288\n \n old hardwired relay circuits. As programmable logic controllers became more sophisticated it has also\n been used in very complex automation systems.\n Ladder logic can be thought of as a rule-based language, rather than a procedural language. A rung in\n the ladder represents a rule. When implemented with relays and other electromechanical devices, the\n@@ -22004,15 +22004,15 @@\n \n The input on the left, B0, a normally open contact, is connected to the coil (output) on the right, Q0.\n Now imagine a voltage gets applied to the leftmost end, because the input B0 turns true (e.g. the\n input is activated, or the user pushed the NO contact). The voltage has a direct path to reach the coil\n (output) on the right, Q0. As a consequence, the Q0 coil (output) will turn from 0/off/false to 1/on/true.\n If the user releases B0, the Q0 output quickly returns to 0/off/false.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 415 / 1288\n \n 8.1.4. Basic Latching On-Off Circuit\n Building on the above example, suppose we add a switch that closes whenever the coil Q0 is active.\n This would be the case in a relay, where the coil can activate the switch contacts; or in a contactor,\n where there are often several small auxiliary contacts in addition to the large 3-phase contacts that\n@@ -22044,15 +22044,15 @@\n back on.\n 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\n also a very safe circuit, in that if start and stop are both pressed at the same time, the stop function\n always wins.\n This is the basic building block of much of ladder programming, so if you are new to it, you would do\n well to make sure that you understand how this circuit operates.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 416 / 1288\n \n 8.2. ClassicLadder Programming\n 8.2.1. Ladder Concepts\n ClassicLadder is a type of programming language originally implemented on industrial PLCs (it\u2019s\n called Ladder Programming). It is based on the concept of relay contacts and coils, and can be used to\n@@ -22081,15 +22081,15 @@\n 8.2.3.1. Files\n Typically ClassicLadder components are placed in the custom.hal file if your working from a Stepconf\n generated configuration. These must not be placed in the custom_postgui.hal file or the Ladder Editor\n menu will be grayed out.\n nota\n Ladder files (.clp) must not contain any blank spaces in the name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 417 / 1288\n \n 8.2.3.2. Realtime Module\n Loading the ClassicLadder real time module (classicladder_rt) is possible from a HAL file, or directly\n using a halcmd instruction. The first line loads real time the ClassicLadder module. The second line\n adds the function classicladder.0.refresh to the servo thread. This line makes ClassicLadder update\n@@ -22168,15 +22168,15 @@\n \n Objects of most interest are numPhysInputs, numPhysOutputs, numS32in, and numS32out.\n Changing these numbers will change the number of HAL bit pins available. numPhysInputs and\n numPhysOutputs control how many HAL bit (on/off) pins are available. numS32in and numS32out\n control how many HAL signed integers (+- integer range) pins are available.\n For example (you don\u2019t need all of these to change just a few):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 418 / 1288\n \n loadrt classicladder_rt numRungs=12 numBits=100 numWords=10\n numTimers=10 numMonostables=10 numCounters=10 numPhysInputs=10\n numPhysOutputs=10 numArithmExpr=100 numSections=4 numSymbols=200\n numS32in=5 numS32out=5\n@@ -22210,29 +22210,29 @@\n If you first load ladder program with the --nogui option then load ClassicLadder again with no options\n the GUI will display the last loaded ladder program.\n In AXIS you can load the GUI from File/Ladder Editor\u2026\n \n 8.2.5. ClassicLadder GUI\n If you load ClassicLadder with the GUI it will display two windows: Section display, and section manager.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 419 / 1288\n \n 8.2.5.1. Sections Manager\n When you first start up ClassicLadder you get an empty Sections Manager window.\n \n Figura 8.1: Sections Manager Default Window\n This window allows you to name, create or delete sections and choose what language that section\n uses. This is also how you name a subroutine for call coils.\n 8.2.5.2. Section Display\n When you first start up ClassicLadder you get an empty Section Display window. Displayed is one\n empty rung.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 420 / 1288\n \n Figura 8.2: Section Display Default Window\n Most of the buttons are self explanatory:\n The Vars button is for looking at variables, toggle it to display one, the other, both, then none of the\n windows.\n@@ -22250,15 +22250,15 @@\n and the first %W (in an equation). You might see some funny labels, such as (103) in the rungs. This is\n displayed (on purpose) because of an old bug- when erasing elements older versions sometimes didn\u2019t\n erase the object with the right code. You might have noticed that the long horizontal connection button\n sometimes did not work in the older versions. This was because it looked for the free code but found\n something else. The number in the brackets is the unrecognized code. The ladder program will still\n work properly, to fix it erase the codes with the editor and save the program.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 421 / 1288\n \n 8.2.5.3. The Variable Windows\n 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\n other, both, then none of the variable windows.\n \n@@ -22269,27 +22269,27 @@\n at the top allow you to select what 15 variables will be displayed in each column. For instance, if the %B\n Variable column were 15 entries high, and you entered 5 at the top of the column, variables %B5\n to %B19 would be displayed. The check boxes allow you to set and unset %B variables manually as\n long as the ladder program isn\u2019t setting them as outputs. Any Bits that are set as outputs by the\n program when ClassicLadder is running can not be changed and will be displayed as checked if on\n and unchecked if off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 422 / 1288\n \n Figura 8.4: Watch Window\n The Watch Window displays variable status. The edit box beside it is the number stored in the variable\n and the drop-down box beside that allow you to choose whether the number to be displayed in hex,\n decimal or binary. If there are symbol names defined in the symbols window for the word variables\n showing and the display symbols checkbox is checked in the section display window, symbol names\n 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\n checked) over an existing variable number/name and press the Enter Key.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 423 / 1288\n \n 8.2.5.4. Symbol Window\n \n Figura 8.5: Symbol Names window\n This is a list of symbol names to use instead of variable names to be displayed in the section window\n@@ -22297,30 +22297,30 @@\n and capital letters), symbol name. If the variable can have a HAL signal connected to it ( %I, %Q,\n and %W-if you have loaded s32 pin with the real time module) then the comment section will show the\n current HAL signal name or lack thereof. Symbol names should be kept short to display better. Keep\n in mind that you can display the longer HAL signal names of %I, %Q and %W variable by clicking on\n them in the section window. Between the two, one should be able to keep track of what the ladder\n program is connected to!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 424 / 1288\n \n 8.2.5.5. The Editor window\n \n Figura 8.6: Editor Window\n Add - adds a rung after the selected rung\n Insert - inserts a rung before the selected rung\n Delete - deletes the selected rung\n Modify - opens the selected rung for editing\n Starting from the top left image:\n Object Selector, Eraser\n N.O. Input, N.C. Input, Rising Edge Input, Falling Edge Input\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 425 / 1288\n \n Horizontal Connection, Vertical Connection, Long Horizontal Connection\n Timer IEC Block, Counter Block, Compare Variable\n Old Timer Block, Old Monostable Block (These have been replaced by the IEC Timer)\n COILS - N.O. Output, N.C. Output, Set Output, Reset Output\n@@ -22349,21 +22349,21 @@\n Compare - creates a compare block to compare variable to values or other variables, e.g. %W1<=5\n or %W1= %W2. Compare cannot be placed in the right most side of the section display.\n Variable Assignment - creates an assignment block so you to assign values to variables, e.g. %W2=7\n or %W1= %W2. ASSIGNMENT functions can only be placed at the right most side of the section display.\n 8.2.5.6. Config Window\n The config window shows the current project status and has the Modbus setup tabs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 426 / 1288\n \n Figura 8.7: Config Window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 427 / 1288\n \n 8.2.6. Ladder objects\n 8.2.6.1. CONTACTS\n Represent switches or relay contacts. They are controlled by the variable letter and number assigned\n to them.\n@@ -22398,15 +22398,15 @@\n The time intervals can be set in multiples of 100&8239;ms, seconds, or minutes.\n There are also Variables for IEC timers that can be read and/or written to in compare or operate\n blocks.\n %TMxxx.Q - timer done (Boolean, read write)\n %TMxxx.P - timer preset (read write)\n %TMxxx.V - timer value (read write)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 428 / 1288\n \n 8.2.6.3. TIMERS\n Represent count down timers. This is deprecated and replaced by IEC Timers.\n Timers have 4 contacts.\n E - enable (input) starts timer when true, resets when goes false\n@@ -22436,15 +22436,15 @@\n 8.2.6.5. COUNTERS\n Represent up/down counters.\n There are 7 contacts:\n R - reset (input) will reset the count to 0.\n P - preset (input) will set the count to the preset number assigned from the edit menu.\n U - up count (input) will add one to the count.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 429 / 1288\n \n D - down count (input) will subtract one from the count.\n E - under flow (output) will be true when the count rolls over from 0 to 9999.\n D - done (output) will be true when the count equals the preset.\n F - overflow (output) will be true when the count rolls over from 9999 to 0.\n@@ -22477,15 +22477,15 @@\n %W1<2* %C0.V\n \n To find out if S32in bit 2 is equal to 10 the syntax would be:\n %IW2=10\n \n Note: Compare uses the arithmetic equals not the double equals that programmers are used to.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 430 / 1288\n \n 8.2.6.7. VARIABLE ASSIGNMENT\n For variable assignment, e.g. assign this number (or evaluated number) to this variable %xxx, there are\n two math functions MINI and MAXI that check a variable for maximum (0x80000000) and minimum\n values (0x07FFFFFFF) (think signed values) and keeps them from going beyond.\n@@ -22503,23 +22503,23 @@\n when LinuxCNC is started.\n \n The following figure shows an Assignment and a Comparison Example. %QW0 is a S32out bit and %IW0\n is a S32in bit. In this case the HAL pin classicladder.0.s32out-00 will be set to a value of 5 and\n when the HAL pin classicladder.0.s32in-00 is 0 the HAL pin classicladder.0.out-00 will be set\n to True.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 8.8: Assign/Compare Ladder Example\n \n Figura 8.9: Assignment Expression Example\n \n 431 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 432 / 1288\n \n Figura 8.10: Comparison Expression Example\n \n 8.2.6.8. COILS\n Coils represent relay coils. They are controlled by the variable letter and number assigned to them.\n@@ -22545,15 +22545,15 @@\n If you use a N.C. contact with a N.C. coil the logic will work (when the coil is energized the\n contact will be closed) but that is really hard to follow!\n \n A JUMP COIL is used to JUMP to another section, like a goto in BASIC programming language.\n If you look at the top left of the sections display window you will see a small label box and a longer\n comment box beside it. Now go to Editor\u2192Modify then go back to the little box, type in a name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 433 / 1288\n \n Go ahead and add a comment in the comment section. This label name is the name of this rung only\n and is used by the JUMP COIL to identify where to go.\n When placing a JUMP COIL, add it in the rightmost position and change the label to the rung you want\n to JUMP to.\n@@ -22600,15 +22600,15 @@\n %M \u0300\n __xx__.P \u0300 - Monostable xx preset (integer)\n %C \u0300\n __xx__.D \u0300 - Counter xx done (Boolean, user read only)\n %C \u0300\n __xx__.E \u0300 - Counter xx empty overflow (Boolean, user read only)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 434 / 1288\n \n %C \u0300\n __xx__.F \u0300 - Counter xx full overflow (Boolean, user read only)\n %C \u0300\n __xx__.V \u0300 - Counter xx current value (integer)\n@@ -22647,15 +22647,15 @@\n Selector arrow, Eraser\n Ordinary step, Initial (Starting) step\n Transition, Step and Transition\n Transition Link-Downside, Transition Link-Upside\n Pass-through Link-Downside, Pass-through Link-Upside Jump\n Link, Comment Box\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 435 / 1288\n \n Figura 8.11: Sequence Editor Window\n ORDINARY STEP - has a unique number for each one\n STARTING STEP - a sequential program must have one. This is where the program will start.\n TRANSITION - shows the variable that must be true for control to pass through to the next step.\n@@ -22666,15 +22666,15 @@\n PASS-THROUGH LINK-DOWNSIDE - splits the logic flow to two lines that BOTH must be true to\n continue (Think AND logic)\n PASS-THROUGH LINK-UPSIDE - combines two concurrent (AND logic) logic lines back together\n JUMP LINK - connects steps that are not underneath each other such as connecting the last step to\n the first\n COMMENT BOX - used to add comments\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 436 / 1288\n \n To use links, you must have steps already placed. Select the type of link, then select the two steps or\n transactions one at a time. It takes practice!\n With sequential programming: The variable %X \u0300\n __xxx__ (e.g., \u0300%X5) is used to see if a step is active. The variable %X \u0300\n@@ -22705,21 +22705,21 @@\n 6 - write single register\n 8 - echo test\n 15 - write multiple coils\n 16 - write multiple registers\n If you do not specify a --modmaster when loading the ClassicLadder non-realtime program this page\n will not be displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 437 / 1288\n \n Figura 8.12: Modbus I/O Config\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 438 / 1288\n \n Figura 8.13: Modbus Communication Config\n SERIAL PORT - For IP blank. For serial the location/name of serial driver, e.g., /dev/ttyS0 ( or /dev/ttyUSB0 for a USB-to-serial converter).\n SERIAL SPEED - Should be set to speed the slave is set for - 300, 600, 1200, 2400, 4800, 9600,\n 19200, 38400, 57600, 115200 are supported.\n@@ -22733,15 +22733,15 @@\n DEBUG LEVEL - Set this to 0-3 (0 to stop printing debug info besides no-response errors).\n READ COILS/INPUTS MAP TO - Select what variables that read coils/inputs will update. (B or Q).\n WRITE COILS MAP TO - Select what variables that write coils will updated from (B,Q,or I).\n READ REGISTERS/HOLDING - Select what variables that read registers will update (W or QW).\n WRITE REGISTERS MAP TO - Select what variables that read registers will updated from (W, QW,\n or IW).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 439 / 1288\n \n SLAVE ADDRESS - For serial the slaves ID number usually settable on the slave device (usually\n 1-256). For IP the slave IP address plus optionally the port number.\n TYPE ACCESS - This selects the MODBUS function code to send to the slave (eg what type of\n request).\n@@ -22780,15 +22780,15 @@\n ClassicLadder uses RTU protocol (not ASCII).\n 8 data bits, No parity is used, and 1 stop bit is also known as 8-N-1.\n Baud rate must be the same for slave and master. ClassicLadder can only have one baud rate so all\n the slaves must be set to the same rate.\n Pause inter frame is the time to pause after receiving an answer.\n 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).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 440 / 1288\n \n 8.2.10.1. MODBUS Info\n ClassicLadder can use distributed inputs/outputs on modules using the Modbus protocol (\u201dmaster\u201d:\n polling slaves).\n The slaves and theirs I/O can be configured in the config window.\n@@ -22818,24 +22818,24 @@\n 8.2.11. Debugging modbus problems\n A good reference for the protocol: https://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf.\n If you run linuxcnc/classicladder from a terminal, it will print the Modbus commands and slave responses.\n Here we set ClassicLadder to request slave 1, to read holding registers (function code 3) starting\n at address 8448 (0x2100). We ask for 1 (2 byte wide) data element to be returned. We map it to a\n ClassicLadder variable starting at 2.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 441 / 1288\n \n Figura 8.14: Modbus I/O Register Setup\n Note in this image we have set the debug level to 1 so modbus messages are printed to the terminal. We\n have mapped our read and written holding registers to ClassicLadder\u2019s %W variables so our returned\n data will be in %W2 as in the other image we mapped the data starting at the 2nd element.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 442 / 1288\n \n Figura 8.15: Modbus Communication Setup\n \n 8.2.11.1. Request\n Lets look at an example of reading one hold register at 8448 Decimal (0x2100 Hex).\n@@ -22864,15 +22864,15 @@\n (2\n 1 to 125 (0x7D)\n Bytes)\n (2 by- Calculated\n tes)\n automatically\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 443 / 1288\n \n Here is an example sent command as printed in the terminal (all Hex):\n INFO CLASSICLADDERModbus I/O module to send: Lgt=8 \n code-83 ) 2 C0 F1\n \n (Slave address-1\n@@ -22982,15 +22982,15 @@\n Slave number = 1 (0x1) = Slave address 1\n Requested function code = 3 (0x3) = read holding register requested\n count of byte registers = 2 (0x1) = return 2 bytes (each register value is 2 bytes wide)\n value of highbyte = 0 (0x0) = high byte value of address 8448 (0x2100)\n value of lowbyte = 0 (0x0) = high byte value of address 8448 (0x2100)\n Checksum = (0xB844)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 445 / 1288\n \n (high and low bytes are combined to create a 16 bit value and then transferred to ClassicLadder\u2019s\n variable.) Read Registers can be mapped to %W or %QW (internal memory or HAL out pins). Write\n registers can be mapped from %W, %QW or %IW (internal memory, HAL out pins or HAL in pins). The\n variable number will start at the number entered in the modbus I/O registry setup page\u2019s column:\n@@ -23009,15 +23009,15 @@\n \n 8.2.12. Setting up ClassicLadder\n In this section we will cover the steps needed to add ClassicLadder to a Stepconf Wizard generated\n config. On the advanced Configuration Options page of Stepconf Wizard check off \u201dInclude ClassicLadder PLC\u201d.\n \n Figura 8.16: Stepconf ClassicLadder\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 446 / 1288\n \n 8.2.12.1. Add the Modules\n If you used the Stepconf Wizard to add ClassicLadder you can skip this step.\n To manually add ClassicLadder you must first add the modules. This is done by adding a couple of\n lines to the custom.hal file.\n@@ -23033,47 +23033,47 @@\n window open the Editor. In the Editor window select Modify. Now a Properties window pops up and\n the Section Display shows a grid. The grid is one rung of ladder. The rung can contain branches. A\n simple rung has one input, a connector line and one output. A rung can have up to six horizontal\n branches. While it is possible to have more than one circuit in a run the results are not predictable.\n \n Figura 8.17: Section Display with Grid\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 447 / 1288\n \n Now click on the N.O. input in the Editor Window.\n \n Figura 8.18: Editor Window\n Now click in the upper left grid to place the N.O. Input into the ladder.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 448 / 1288\n \n Figura 8.19: Section Display with Input\n Repeat the above steps to add a N.O. output to the upper right grid and use the Horizontal Connection\n to connect the two. It should look like the following. If not, use the Eraser to remove unwanted sections.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 449 / 1288\n \n Figura 8.20: Section Display with Rung\n Now click on the OK button in the Editor window. Now your Section Display should look like this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 450 / 1288\n \n Figura 8.21: Section Display Finished\n To save the new file select Save As and give it a name. The .clp extension will be added automatically.\n It should default to the running config directory as the place to save it.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 451 / 1288\n \n Figura 8.22: Save As Dialog\n Again if you used the Stepconf Wizard to add ClassicLadder you can skip this step.\n To manually add a ladder you need to add add a line to your custom.hal file that will load your ladder\n file. Close your LinuxCNC session and add this line to your custom.hal file.\n@@ -23084,15 +23084,15 @@\n \n 8.3. ClassicLadder Examples\n 8.3.1. Wrapping Counter\n To have a counter that wraps around you have to use the preset pin and the reset pin. When you\n create the counter set the preset at the number you wish to reach before wrapping around to 0. The\n logic is if the counter value is over the preset then reset the counter and if the underflow is on then\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 452 / 1288\n \n set the counter value to the preset value. As you can see in the example when the counter value is\n greater than the counter preset the counter reset is triggered and the value is now 0. The underflow\n output %Q2 will set the counter value at the preset when counting backwards.\n \n@@ -23102,15 +23102,15 @@\n This example shows you how to reject extra pulses from an input. Suppose the input pulse %I0 has\n an annoying habit of giving an extra pulse that spoils our logic. The TOF (Timer Off Delay) prevents\n the extra pulse from reaching our cleaned up output %Q0. How this works is when the timer gets\n an input the output of the timer is on for the duration of the time setting. Using a normally closed\n contact %TM0.Q the output of the timer blocks any further inputs from reaching our output until it\n times out.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 453 / 1288\n \n Figura 8.24: Reject Extra Pulse\n \n 8.3.3. External E-Stop\n The External E-Stop example is in the /config/classicladder/cl-estop folder. It uses a PyVCP panel to\n@@ -23124,15 +23124,15 @@\n \n Next we add ClassicLadder to our custom.hal file by adding these two lines:\n loadrt classicladder_rt\n addf classicladder.0.refresh servo-thread\n \n Next we run our config and build the ladder as shown here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 454 / 1288\n \n Figura 8.25: E-Stop Section Display\n After building the ladder select Save As and save the ladder as estop.clp\n Now add the following line to your custom.hal file.\n # Load the ladder\n@@ -23144,15 +23144,15 @@\n %I2 = Input from LinuxCNC\u2019s E-Stop Reset Pulse\n %I3 = Input from the PyVCP panel reset button\n %Q0 = Output to LinuxCNC to enable\n %Q1 = Output to external driver board enable pin (use a N/C output if your board had a disable\n pin)\n Next we add the following lines to the custom_postgui.hal file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 455 / 1288\n \n # E-Stop example using PyVCP buttons to simulate external components\n # The PyVCP checkbutton simulates a normally closed external E-Stop\n net ext-estop classicladder.0.in-00 <= pyvcp.py-estop\n # Request E-Stop Enable from LinuxCNC\n@@ -23186,36 +23186,36 @@\n \u201dpy-reset\u201d\n \u201dReset\u201d\n \n \n \n Now start up your config and it should look like this.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 456 / 1288\n \n Figura 8.26: AXIS E-Stop\n Note that in this example like in real life you must clear the remote E-Stop (simulated by the checkbox)\n before the AXIS E-Stop or the external Reset will put you in OFF mode. If the E-Stop in the AXIS screen\n was pressed, you must press it again to clear it. You cannot reset from the external after you do an\n E-Stop in AXIS.\n \n 8.3.4. Timer/Operate Example\n In this example we are using the Operate block to assign a value to the timer preset based on if an\n input is on or off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 457 / 1288\n \n Figura 8.27: Timer/Operate Example\n In this case %I0 is true so the timer preset value is 10. If %I0 was false the timer preset would be 5.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 458 / 1288\n \n Cap\u00edtulo 9\n \n Temas avanzados\n 9.1. Kinematics\n@@ -23243,15 +23243,15 @@\n Cartesian coordinates. The A B C axes refer to rotational coordinates about the X Y Z axes respectively.\n The U V W axes refer to additional coordinates that are commonly made colinear to the X Y Z axes\n respectively.\n 1 The word \u201daxes\u201d is also commonly (and wrongly) used when talking about CNC machines, and referring to the moving\n directions of the machine.\n 2 Kinematics: a two way function to transform from Cartesian space to joint space.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 459 / 1288\n \n 9.1.2. Trivial Kinematics\n The simplest machines are those in which which each joint is placed along one of the Cartesian axes.\n On these machines the mapping from Cartesian space (the G-code program) to the joint space (the\n actual actuators of the machine) is trivial. It is a simple 1:1 mapping:\n@@ -23305,15 +23305,15 @@\n 3 If the machine (for example a lathe) is mounted with only the X, Z and A axes and the INI file of LinuxCNC contains only\n \n the definition of these 3 joints, then the previous assertion is false. Because we currently have (joint0=X, joint1=Z, joint2=A)\n which assumes that joint1=Y. To make this work in LinuxCNC just define all the axes (XYZA), LinuxCNC will then use a simple\n loop in HAL for unused Y axis.\n 4 Another way to make it work is to change the corresponding code and recompile the software.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 460 / 1288\n \n Use of the coordinates= parameter is recommended for configurations that omit axis letters. 5\n The trivkins kinematics module also allows the same coordinate to be specified for more than one\n joint. This feature can be useful on machines like a gantry having two independent motors for the y\n coordinate. Such a machine could use coordinates=xyyz resulting in joint assignments:\n@@ -23334,15 +23334,15 @@\n \n Figura 9.1: Bipod setup\n 5 Historically, the trivkins module did not support the coordinates= parameter so lathe configs were often configured as XYZ\n machines. The unused Y axis was configured to 1) home immediately, 2) use a simple loopback to connect its position command\n HAL pin to its position feedback HAL pin, and 3) hidden in gui displays. Numerous sim configs use these methods in order to\n share common HAL files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 461 / 1288\n \n The Bipod we are talking about is a device that consists of 2 motors placed on a wall, from which a\n device is hung using some wire. The joints in this case are the distances from the motors to the device\n (named AD and BD in the figure).\n The position of the motors is fixed by convention. Motor A is in (0,0), which means that its X coordinate\n@@ -23374,15 +23374,15 @@\n double x = (AD2 - BD2 + Bx * Bx) / (2 * Bx);\n double y2 = AD2 - x * x;\n if(y2 < 0) return -1;\n pos->tran.x = x;\n pos->tran.y = sqrt(y2);\n return 0;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 462 / 1288\n \n 9.1.3.2. Inverse transformation\n The inverse kinematics is much easier in our example, as we can write it directly:\n \n or translated to actual code:\n@@ -23417,15 +23417,15 @@\n \n int kinematicsSwitchable(void)\n int kinematicsSwitch(int switchkins_type)\n KINS_NOT_SWITCHABLE\n \n The function kinematicsSwitchable() returns 1 if multiple kinematics types are supported. The function kinematicsSwitch() selects the kinematics type. See Switchable Kinematitcs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 463 / 1288\n \n nota\n The majority of provided kinematics modules support a single kinematics type and use the directive\n \u201dKINS_NOT_SWITCHABLE\u201d to supply defaults for the required kinematicsSwitchable() and kinematicsSwitch() functions.\n \n@@ -23458,15 +23458,15 @@\n nota\n This document does not cover the creation of a vismach model which, while certainly very useful,\n requires just as much careful modeling if it is to match the genserkins model derived in this document.\n \n nota\n There may be errors and/or shortcomings \u2014 use at your own risk!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 464 / 1288\n \n 9.2.2. General\n With the proliferation of industrial robots comes an increased interest to control used robots with\n LinuxCNC. A common type of robot used in industry and manufacturing is the \u201dserial manipulator\u201d\n designed as a series of motorized joints connected by rigid links. Serial robots often have six joints\n@@ -23509,15 +23509,15 @@\n \n 9.2.4. Modified DH-Parameters as used in genserkins\n Note that genserkins does not handle offsets to theta-values \u2014 theta is the joint variable that is controlled by LinuxCNC. With the CS aligned with the joint, a rotation around its Z-Axis is identical to\n the rotation commanded to that joint by LinuxCNC. This makes it impossible to define the 0\u00b0 position\n of our robots joints arbitrarily.\n The three configurable parameters are:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 465 / 1288\n \n 1. alpha : positive or negative rotation (in radians) around the X-axis of the \u201dcurrent coordinate\n system\u201d\n 2. a : positive distance, along X, between two joint axes specified in machine units (mm or inch)\n defined in the system\u2019s INI file.\n@@ -23548,87 +23548,87 @@\n but there is no point in setting it other than 0.\n \n 9.2.8. Detailed Example (RV-6SL)\n Described below is a method to derive the required \u201dmodified DH-parameters\u201d for a Mitsubishi RV6SDL and how to set the parameters in the HAL file to be used with the genserkins kinematics in\n LinuxCNC. The necessary dimensions are best taken from a dimensional drawing provided by the\n manufacturer of the robot.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 466 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 467 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 468 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 469 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 470 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 471 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 472 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 473 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 474 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 475 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 476 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 477 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 478 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 479 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 480 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 481 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 482 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 483 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 484 / 1288\n \n 9.2.9. Credits\n Thanks to user Aciera for all text and the graphics for the RV-6SL robot!\n \n 9.3. 5-Axis Kinematics\n@@ -23657,27 +23657,27 @@\n of the cutter tip position and the cutter orientation relative to the workpiece coordinate system. Two\n vectors, as generated by most CAM systems and shown in Fig. 1, contain this information:\n \n The K vector is equivalent to the 3rd vector from the pose matrix E6 that was used in the 6-axis robot\n kinematics [3] and the Q vector is equivalent to the 4th vector of E6 . In MASTERCAM for example this\n information is contained in the intermediate output \u201d.nci\u201d file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 485 / 1288\n \n Figura 9.2: Cutter location data\n \n 9.3.4. Translation and Rotation Matrices\n Homogeneous transformations provide a simple way to describe the mathematics of multi-axis machine kinematics. A transformation of the space H is a 4x4 matrix and can represent translation and\n rotation transformations. Given a point x,y,x described by a vector u = {x,y,z,1}T , then its transformation v is represented by the matrix product\n \n There are four fundamental transformation matrices on which 5-axis kinematics can be based:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 486 / 1288\n \n The matrix T(a,b,c) implies a translation in the X, Y, Z coordinate directions by the amounts a, b, c\n respectively. The R matrices imply rotations of the angle theta about the X, Y and Z coordinate axes\n respectively. The C and S symbols refer to cosine and sine functions respectively.\n \n@@ -23687,15 +23687,15 @@\n A rotary table which rotates about the vertical Z-axes (C-rotation, secondary) mounted on a tilting\n table which rotates about the X- or Y-axis (A- or B-rotation, primary). The workpiece is mounted on\n the rotary table.\n A tilting table which rotates about the X- or Y-axis (A- or B-rotation, secondary) is mounted on a\n rotary table which rotates about the Z-axis (C-rotation, primary), with the workpiece on the tilting\n table.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 487 / 1288\n \n Figura 9.3: General configuration and coordinate systems\n 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\n describe the relative position and orientation between these coordinate frames\n We need to describe a relationship between the workpiece coordinate system and the tool coordinate system. This can be defined by a transformation matrix w At , which can be found by subsequent\n@@ -23703,43 +23703,43 @@\n defined coordinate system. In general such a transformation may look as follows:\n \n where each matrix i-1 Aj is a translation matrix T or a rotation matrix R of the form (2,3).\n Matrix multiplication is a simple process in which the elements of each row of the lefthand matrix\n A is multiplied by the elements of each column of the righthand matrix B and summed to obtain an\n element in the result matrix C, ie.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 488 / 1288\n \n In Fig. 2 a generic configuration with coordinate systems is shown [4]. It includes table rotary/tilting\n axes as well as spindle rotary/tilting axes. Only two of the rotary axes are actually used in a machine\n tool.\n First we will develop the transformations for the first type of configuration mentioned above, ie. a table\n tilting/rotary (trt) type with no rotating axis offsets. We may give it the name xyzac-trt configuration.\n We also develop the transformations for the same type (xyzac-trt), but with rotating axis offsets.\n Then we develop the transformations for a xyzbc-trt configuration with rotating axis offsets.\n 9.3.5.1. Transformations for a xyzac-trt machine tool with work offsets\n \n Figura 9.4: vismach model of xyzac-trt with coincident rotation axes\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 489 / 1288\n \n We deal here with a simplified configuration in which the tilting axis and rotary axis intersects at a\n point called the pivot point as shown in Fig. 4. therefore the two coordinate systems Ows and Owp of\n Fig. 2 are coincident.\n \n Figura 9.5: Table tilting/rotary configuration\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 490 / 1288\n \n In these equations Lx , Ly , Lz defines the offsets of the pivot point of the two rotary axes A and C\n relative to the workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances\n of the pivot point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot\n point. The pivot point is at the intersection of the two rotary axes. The signs of the SA and SC terms\n@@ -23758,56 +23758,56 @@\n Equating the last column of (8) with the tool position vector Q, we can write:\n \n The vector on the right hand side can also be written as the product of a matrix and a vector resulting\n in:\n \n This can be expanded to give\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 491 / 1288\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (13) as P = (Q AP )-1 * Q. Noting that the square matrix is a homogeneous 4x4 matrix containing a rotation matrix R and translation vector q, for which the inverse can\n be written as:\n \n where R^T is the transpose of R (rows and columns swappped). We therefore obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 492 / 1288\n \n 9.3.5.2. Transformations for a xyzac-trt machine with rotary axis offsets\n \n Figura 9.6: vismach model of xyzac-trt with rotational axis offsets (positive)\n We deal here with a extended configuration in which the tilting axis and rotary axis do not intersect\n at a point but have an offset Dy . Furthermore, there is also an z-offset between the two coordinate\n systems Ows and Owp of Fig. 2, called Dz . A vismach model is shown in Fig. 5 and the offsets are\n shown in Fig. 6 (positive offsets in this example). To simplify the configuration, the offsets Lx , Ly , Lz\n of the previous case are not included. They are probably not necessary if one uses the G54 offsets in\n LinuxCNC by means of the \u201dtouch of\u201d facility.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 493 / 1288\n \n Figura 9.7: Table tilting/rotary xyzac-trt configuration, with axis offsets\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n In these equations Dy , Dz defines the offsets of the pivot point of the rotary axes A relative to the\n workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances of the pivot\n point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot point. The\n pivot point is on the A rotary axis.\n When multiplied in accordance with (18), we obtain:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 494 / 1288\n \n We can now equate the third column of this matrix with our given tool orientation vector K, ie.:\n \n From these equations we can solve for the rotation angles thetaA , thetaC . From the third row we find:\n \n@@ -23821,42 +23821,42 @@\n in:\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (25) as P = (Q AP )-1 * Q using (15) as before. We thereby obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 495 / 1288\n \n 9.3.5.3. Transformations for a xyzbc-trt machine with rotary axis offsets\n \n Figura 9.8: vismach model of xyzbc-trt with rotational axis offsets (negative)\n We deal here again with a extended configuration in which the tilting axis (about the y-axis) and rotary\n axis do not intersect at a point but have an offset Dx . Furthermore, there is also an z-offset between the\n two coordinate systems Ows and Owp of Fig. 2, called Dz . A vismach model is shown in Fig. 7 (negative\n offsets in this example) and the positive offsets are shown in Fig. 8.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 496 / 1288\n \n Figura 9.9: Table tilting/rotary xyzbc-trt configuration, with axis offsets\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n In these equations Dx , Dz defines the offsets of the pivot point of the rotary axes B relative to the\n workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances of the pivot\n point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot point. The\n pivot point is on the B rotary axis.\n When multiplied in accordance with (29), we obtain:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 497 / 1288\n \n We can now equate the third column of this matrix with our given tool orientation vector K, i.e.:\n \n From these equations we can solve for the rotation angles thetaB , thetaC . From the third row we find:\n \n@@ -23871,15 +23871,15 @@\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (37) as P = (Q AP )-1 * Q.\n With the same approach as before, we obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 498 / 1288\n \n 9.3.6. Table Rotary/Tilting Examples\n LinuxCNC includes kinematics modules for the xyzac-trt and xyzbc-trt topologies described in the\n mathematics detailed above. For interested users, the source code is available in the git tree in the\n src/emc/kinematics/ directory.\n@@ -23923,15 +23923,15 @@\n \n 9.3.7. Custom Kinematics Components\n LinuxCNC implements kinematics using a HAL component that is loaded at startup of LinuxCNC. The\n most common kinematics module, trivkins, implements identity (trivial) kinematics where there is a\n one-to-one correspondence between an axis coordinate letter and a motor joint. Additional kinematics\n modules for more complex systems (including xyzac-trt and xyzbc-trt described above) are available.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 499 / 1288\n \n See the kins manpage (\\$ man kins) for brief descriptions of the available kinematics modules.\n The kinematics modules provided by LinuxCNC are typically written in the C-language. Since a standard structure is used, creation of a custom kinematics module is facilitated by copying an existing\n source file to a user file with a new name, modifying it, and then installing.\n Installation is done using halcompile:\n@@ -23953,29 +23953,29 @@\n module. These pins can be connected to a signal for dynamic control or set once with HAL connections\n like:\n # set offset parameters\n net :tool-offset motion.tooloffset.z xyzac-trt-kins.tool-offset\n setp xyzac-trt-kins.y-offset 0\n setp xyzac-trt-kins.z-offset 20\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 9.3.8. Figures\n \n Figura 9.10: Table tilting/rotating configuration\n \n 500 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 9.11: Spindle/table tilting configuration\n \n 501 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 502 / 1288\n \n Figura 9.12: Spindle tilting/rotary configuration\n \n 9.3.9. REFERENCES\n 1. AXIS MACHINE TOOLS: Kinematics and Vismach Implementation in LinuxCNC, RJ du Preez,\n@@ -23992,15 +23992,15 @@\n 9.4.1. Introduction\n A number of kinematics modules support the switching of kinematics calculations. These modules\n support a default kinematics method (type0), a second built-in method (type1), and (optionally) a userprovided kinematics method (type2). Identity kinematics are typically used for the type1 method.\n The switchkins functionality can be used for machines where post-homing joint control is needed\n during setup or to avoid movement near singularities from G-code. Such machines use specific kinematics calculations for most operations but can be switched to identity kinematics for control of\n individual joints after homing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 503 / 1288\n \n The kinematics type is selected by a motion module HAL pin that can be updated from a G-code\n program or by interactive MDI commands. The halui provisions for activating MDI commands can be\n used to allow buttons to select the kinematics type using hardware controls or a virtual panel (PyVCP,\n GladeVCP, etc.).\n@@ -24034,15 +24034,15 @@\n # custom identity ordering: joint0==c, joint1==b, ...\n # KINEMATICS = genhexkins coordinates=cbazyx\n \n nota\n If the coordinates= parameter is omitted, the default joint-letter identity assignments are\n joint0==x,joint1=y,\u2026\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 504 / 1288\n \n The joint assignments provided for identity kinematics when using the coordinates parameter are\n identical to those provided for the trivkins module. However, duplication of axis letters to assign\n multiple joints for a coordinate letter is not generally applicable for serial or parallel kinematics (like\n genserkins, pumakins, genhexkins, etc.) where there is no simple relationship between joints and\n@@ -24074,15 +24074,15 @@\n 9.4.4. Usage\n 9.4.4.1. HAL Connections\n Switchkins functionality is enabled by the pin motion.switchkins-type. Typically, this pin is sourced\n by an analog output pin like motion.analog-out-03 so that it can be set by M68 commands. Example:\n net :kinstype-select <= motion.analog-out-03\n net :kinstype-select => motion.switchkins-type\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 505 / 1288\n \n 9.4.4.2. G-/M-code commands\n Kinstype selection is managed using G-code sequences like:\n ...\n M68 E3 Q1 ;update analog-out-03 to select kinstype 1\n@@ -24121,15 +24121,15 @@\n XYZABCUVW):\n [AXIS_L]\n MIN_LIMIT =\n MAX_LIMIT =\n MAX_VELOCITY =\n MIN_ACCELERATION =\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 506 / 1288\n \n The INI file limits specified apply to the type 0 default kinematics type that is activated at startup. These limits may not be applicable when switching to alternative kinematics. However, since\n an interpreter-motion synchronization is required when switching kinematics, INI-HAL pins can be\n used to setup limits for a pending kinematics type.\n nota\n@@ -24172,15 +24172,15 @@\n the set XYZABCUVW. The INI file settings ([AXIS_L]) are not applicable when operating with identity\n (type1) kinematics. To address this use case, the user M-code scripts can be designed as follows:\n M129 (Switch to identity type1)\n 1. read and parse INI file\n 2. HAL: setp the INI-HAL limit pins for each axis letter ([AXIS_L]) according to the identity-referenced\n joint number INI file setting ([JOINT_N])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 507 / 1288\n \n 3. HAL: setp motion.switchkins-type 1\n 4. MDI: execute a syncing G-code (M66E0L0)\n M128 (restore robot default kinematics type 0)\n 1. read and parse INI file\n@@ -24225,15 +24225,15 @@\n and edited to supply custom kinematics with kinstype==2.\n The user custom kinematics file can be compiled from out-of-tree source locations for rt-preempt\n implementations or by replacing the in-tree template file (src/emc/kinematics/userkfuncs.c) for rtai\n systems.\n Preempt-rt make example:\n $ userkfuncs=/home/myname/kins/mykins.c make && sudo make setuid\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 508 / 1288\n \n 9.4.7. Warnings\n Unexpected behavior can result if a G-code program is inadvertently started with an incompatible\n kinematics type. Unwanted behavior can be circumvented in G-code programs by:\n 1. Connecting appropriate kinstype.is.N HAL pins to digital input pins (like motion.digital-in-0m).\n@@ -24265,15 +24265,15 @@\n reference set point value. The difference (or error signal) is then used to calculate a new value for a\n manipulable input to the process that brings the process measured value back to its desired set point.\n Unlike simpler control algorithms, the PID controller can adjust process outputs based on the history and rate of change of the error signal, which gives more accurate and stable control. (It can be\n shown mathematically that a PID loop will produce accurate, stable control in cases where a simple\n proportional control would either have a steady-state error or would cause the process to oscillate).\n 6 This Subsection is taken from an much more extensive article found at https://en.wikipedia.org/wiki/PID_controller\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 509 / 1288\n \n 9.5.1.1. Control loop basics\n Intuitively, the PID loop tries to automate what an intelligent operator with a gauge and a control\n knob would do. The operator would read a gauge showing the output measurement of a process, and\n use the knob to adjust the input of the process (the action) until the process\u2019s output measurement\n@@ -24315,15 +24315,15 @@\n low or too high value. By adding a negative proportion of (i.e. subtracting part of) the average error\n from the process input, the average difference between the process output and the set point is always\n being reduced. Therefore, eventually, a well-tuned PID loop\u2019s process output will settle down at the\n set point.\n Derivative To handle the future, the first derivative (the slope of the error) over time is calculated, and\n multiplied by another (negative) constant D, and also added to (subtracting error from) the controlled\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 510 / 1288\n \n quantity. The derivative term controls the response to a change in the system. The larger the derivative\n term, the more rapidly the controller responds to changes in the process\u2019s output.\n More technically, a PID loop can be characterized as a filter applied to a complex frequency-domain\n system. This is useful in order to calculate whether it will actually reach a stable value. If the values\n@@ -24407,15 +24407,15 @@\n Pc /8\n \n Final Steps After tuning the axis check the following error with Halscope to make sure it is within\n your machine requirements. More information on Halscope is in the HAL User manual.\n 7 Introduced in the 1942 paper Optimum Settings for Automatic Controllers, DOI 10.1115/1.2899060 also available from\n The Internet Archive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 511 / 1288\n \n 9.6. Remap Extending G-code\n 9.6.1. Introduction: Extending the RS274NGC Interpreter by Remapping Codes\n 9.6.1.1. A Definition: Remapping Codes\n By remapping codes we mean one of the following:\n@@ -24445,15 +24445,15 @@\n Generally, the behavior of a remapped code may be defined in the following ways:\n You define a O-word subroutine which implements the desired behavior\n Alternatively, you may employ a Python function which extends the interpreter\u2019s behavior.\n How to glue things together M- and G-codes, and O-words subroutine calls have some fairly different syntax.\n O-word procedures, for example, take positional parameters with a specific syntax like so:\n o call [1.234] [4.65]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 512 / 1288\n \n whereas M- or G-codes typically take required or optional word parameters. For instance, G76 (threading) requires the P,Z,I,J and K words, and optionally takes the R,Q,H, E and L words.\n So it isn\u2019t simply enough to say whenever you encounter code X, please call procedure Y - at least\n some checking and conversion of parameters needs to happen. This calls for some glue code between\n the new code, and its corresponding NGC procedure to execute before passing control to the NGC\n@@ -24490,15 +24490,15 @@\n Decide about the execution sequence.\n 9.6.2.1. Builtin Remaps\n Please note that currently only some existing codes can be redefined, while there are many free codes\n that may be available for remapping. When developing redefined existing code, it is a good idea to\n start with an unassigned G- or M- code, so that you can use both an existing behavior as well as a new\n one. When you\u2019re done, redefine the existing code to use your remapping configuration.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 513 / 1288\n \n The current set of unused M-codes, available for user definition, can be found in the unallocated\n M-codes section.\n For G-codes, see the unallocated G-codes list.\n Existing codes that can be reassigned are listed in the remappable codes section.\n@@ -24531,15 +24531,15 @@\n which might be made available by remapping. When developing a redefined existing code, it might be\n a good idea to start with an unallocated G- or M-code, so both the existing and new behavior can be\n exercised. When done, redefine the existing code to use your remapping setup.\n The current set of unused M-codes open to user definition can be found here.\n Unallocated G-codes are listed here.\n Existing codes which may be remapped are listed here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 514 / 1288\n \n 9.6.2.3. Parameter handling\n Let\u2019s assume the new code will be defined by an NGC procedure, and needs some parameters, some\n of which might be required, others might be optional. We have the following options to feed values to\n the procedure:\n@@ -24576,15 +24576,15 @@\n [RS274NGC]\n REMAP=M400\n \n modalgroup=10 argspec=Pq ngc=myprocedure\n \n In a nutshell, this means:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 515 / 1288\n \n The M400 code takes a required parameter P and an optional parameter Q. Other words in the current\n block are ignored with respect to the M400 code. If the P word is not present, fail execution with an\n error.\n When an M400 code is encountered, execute myprocedure.ngc along the other modal group 10 Mcodes as per order of execution.\n@@ -24622,15 +24622,15 @@\n Basename of an O-word subroutine file name. Do not specify an .ngc extension. Searched for in\n the directories specified in the directory specified in [DISPLAY]PROGRAM_PREFIX, then in [RS274NGC]SUB\n Mutually exclusive with python=. It is an error to omit both ngc= and python=.\n python=\n Instead of calling an ngc O-word procedure call a Python function. The function is expected to\n be defined in the module_basename.oword module. Mutually exclusive with ngc=.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 516 / 1288\n \n prolog=\n Before executing an ngc procedure, call this Python function. The function is expected to be\n defined in the module_basename.remap module. Optional.\n epilog=\n@@ -24669,15 +24669,15 @@\n An empty argspec, or no argspec argument at all implies the remapped code does not receive any\n parameters from the block. It will ignore any extra parameters present.\n Note that RS274NGC rules still apply - for instance you may use axis words (e.g., X, Y, Z) only in the\n context of a G-code.\n Axis words may also only be used if the axis is enabled. If only XYZ are enabled, ABCUVW will not be\n available to be used in argspec.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 517 / 1288\n \n Words F, S and T (short FST) will have the normal functions but will be available as variables in the\n remapped function. F will set feedrate, S will set spindle RPM, T will trigger the tool prepare function.\n Words FST should not be used if this behavior is not desired.\n Words DEIJKPQR have no predefined function and are recommended for use as argspec parameters.\n@@ -24719,15 +24719,15 @@\n (the q argspec is optional since its lowercase in the argspec. Use as follows:)\n o100 if [EXISTS[#]]\n (debug, Q word set: #)\n o100 endif\n o endsub\n M2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 518 / 1288\n \n Executing M400 will fail with the message user-defined M400: missing: P.\n Executing M400 P123 will display P word=123.000000.\n Executing M400 P123 Q456 will display P word=123.000000 and Q word set: 456.000000.\n Example for positional parameter passing to NGC procedures Assume the code is defined as\n@@ -24768,15 +24768,15 @@\n Advanced example: Remapped codes in pure Python The interpreter and emccanon modules\n expose most of the Interpreter and some Canon internals, so many things which so far required coding\n in C/C+\\+ can be now be done in Python.\n The following example is based on the nc_files/involute.py script - but canned as a G-code with\n some parameter extraction and checking. It also demonstrates calling the interpreter recursively (see\n self.execute()).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 519 / 1288\n \n Assuming a definition like so (NB: this does not use argspec):\n REMAP=G88.1 modalgroup=1 py=involute\n The involute function in python/remap.py listed below does all word extraction from the current\n block directly. Note that interpreter errors can be translated to Python exceptions. Remember this is\n@@ -24820,15 +24820,15 @@\n y = y0 + a * (sin(t) - t * cos(t))\n self.execute(\u201dG1 X%f Y%f\u201d % (x,y),lineno())\n if c.z_flag: # retract to starting height\n self.execute(\u201dG0 Z%f\u201d % (old_z),lineno())\n except InterpreterException,e:\n msg = \u201d%d: \u2019 %s\u2019 - %s\u201d % (e.line_number,e.line_text, e.error_message)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 520 / 1288\n \n return msg\n return INTERP_OK\n \n The examples described so far can be found in configs/sim/axis/remap/getting-started with complete\n@@ -24872,15 +24872,15 @@\n (dire but necessary).\n Note than when remapping an existing code, we completely disable this codes\u2019 built-in functionality\n of the interpreter.\n So our remapped code will need to do a bit more than just generating some commands to move the\n machine as we like - it will also need to replicate those steps from this sequence which are needed to\n keep the interpreter and task happy.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 521 / 1288\n \n However, this does not affect the processing of tool change-related commands in task and iocontrol.\n This means when we execute step 6b this will still cause iocontrol to do its thing.\n Decisions, decisions:\n Do we want to use an O-word procedure or do it all in Python code?\n@@ -24915,15 +24915,15 @@\n the \u201draise tool-change and wait for tool-changed to become high\u201d HAL sequence in iocontrol,\n besides setting the XXXX pins\n What you need to decide is whether the existing iocontrol HAL sequences are sufficient to drive your\n changer. Maybe you need a different interaction sequence - for instance more HAL pins, or maybe a\n more complex interaction. Depending on the answer, we might continue to use the existing iocontrol\n HAL sequences, or define our own ones.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 522 / 1288\n \n For the sake of documentation, we\u2019ll disable these iocontrol sequences, and roll our own - the result\n will look and feel like the existing interaction, but now we have complete control over them because\n they are executed in our own O-word procedure.\n So what we\u2019ll do is use some motion.digital-* and motion.analog-* pins, and the associated M62\n@@ -24974,15 +24974,15 @@\n follows:\n REMAP=M6\n \n modalgroup=6\n \n prolog=change_prolog ngc=change epilog=change_epilog\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 523 / 1288\n \n So the prolog covering steps 1 and 2 would look like so - we decide to pass a few variables to\n the remap procedure which can be inspected and changed there, or used in a message. Those are:\n tool_in_spindle, selected_tool (tool numbers) and their respective tooldata indices current_pocket\n and selected_pocket:\n@@ -25028,15 +25028,15 @@\n if self.return_value > 0.0:\n # commit change\n self.selected_pocket = int(self.params[\u201dselected_pocket\u201d])\n emccanon.CHANGE_TOOL(self.selected_pocket)\n # cause a sync()\n self.tool_change_flag = True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 524 / 1288\n \n self.set_tool_parameters()\n return INTERP_OK\n else:\n return \u201dM6 aborted (return code %.1f)\u201d % (self.return_value)\n@@ -25074,15 +25074,15 @@\n M6 (change_prolog): #, #, #, #\n M61 (settool_prolog): # , #\n S (setspeed_prolog): #\n F (setfeed_prolog): #\n If you have specific needs for extra parameters to be made visible, that can simply be added to the\n prolog - practically all of the interpreter internals are visible to Python.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 525 / 1288\n \n 9.6.5.6. Making minimal changes to the built in codes, including M6\n Remember that normally remapping a code completely disables all internal processing for that code.\n However, in some situations it might be sufficient to add a few codes around the existing M6 built in\n implementation, like a tool length probe, but other than that retain the behavior of the built in M6.\n@@ -25132,15 +25132,15 @@\n cblock = self.blocks[self.remap_level]\n if not cblock.t_flag:\n return \u201dT requires a tool number\u201d\n tool\n \n = cblock.t_number\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 526 / 1288\n \n if tool:\n (status, pocket) = self.find_tool_pocket(tool)\n if status != INTERP_OK:\n return \u201dT%d: pocket not found\u201d % (tool)\n@@ -25188,15 +25188,15 @@\n remap is aborted.\n The way to do this is by using the [RS274NGC]ON_ABORT_COMMAND feature. This INI option specifies a\n O-word procedure call which is executed if task for some reason aborts program execution. on_abort\n receives a single parameter indicating the cause for calling the abort procedure, which might be used\n for conditional cleanup.\n The reasons are defined in nml_intf/emc.hh\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 527 / 1288\n \n EMC_ABORT_TASK_EXEC_ERROR = 1,\n EMC_ABORT_AUX_ESTOP = 2,\n EMC_ABORT_MOTION_OR_IO_RCS_ERROR = 3,\n EMC_ABORT_TASK_STATE_OFF = 4,\n@@ -25245,15 +25245,15 @@\n Make sure on_abort.ngc is along the interpreter search path (recommended location: SUBROUTINE_PATH\n so as not to clutter your NC_FILES directory with internal procedures).\n Statements in that procedure typically would assure that post-abort any state has been cleaned up,\n like HAL pins properly reset. For an example, see configs/sim/axis/remap/rack-toolchange.\n Note that terminating a remapped code by returning INTERP_ERROR from the epilog (see previous\n section) will also cause the on_abort procedure to be called.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 528 / 1288\n \n 9.6.5.9. Error handling: failing a remapped code NGC procedure\n If you determine in your handler procedure that some error condition occurred, do not use M2 to end\n your handler - see above:\n If displaying an operator error message and stopping the current program is good enough, use the\n@@ -25288,15 +25288,15 @@\n 9.6.6.2. Adjusting the behavior of M0, M1, M60\n A use case for remapping M0/M1 would be to customize the behavior of the existing code. For instance,\n it could be desirable to turn off the spindle, mist and flood during an M0 or M1 program pause, and\n turn these settings back on when the program is resumed.\n For a complete example doing just that, see configs/sim/axis/remap/extend-builtins/, which\n adapts M1 as laid out above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 529 / 1288\n \n 9.6.7. Creating new G-code cycles\n A G-code cycle as used here is meant to behave as follows:\n On first invocation, the associated words are collected and the G-code cycle is executed.\n If subsequent lines just continue parameter words applicable to this code, but no new G-code, the\n@@ -25340,15 +25340,15 @@\n [PYTHON]\n TOPLEVEL = \n Filename of the initial Python script to execute on startup. This script is responsible for\n setting up the package name structure, see below.\n PATH_PREPEND = \n Prepend this directory to PYTHON_PATH. A repeating group.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 530 / 1288\n \n PATH_APPEND = \n Append this directory to PYTHON_PATH. A repeating group.\n LOG_LEVEL = \n Log level of plugin-related actions. Increase this if you suspect problems. Can be very verbose.\n@@ -25387,15 +25387,15 @@\n 9.6.9.2. The Interpreter as seen from Python\n \n The interpreter is an existing C++ class (Interp) defined in src/emc/rs274ngc. Conceptually all oword. Python calls are methods of this Interp class, although there is no explicit\n Python definition of this class (it is a Boost.Python wrapper instance) and hence receive the as the\n first parameter self which can be used to access internals.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 531 / 1288\n \n 9.6.9.3. The Interpreter __init__ and __delete__ functions\n If the TOPLEVEL module defines a function __init__, it will be called once the interpreter is fully\n configured (INI file read, and state synchronized with the world model).\n If the TOPLEVEL module defines a function __delete__, it will be called once before the interpreter is\n@@ -25434,15 +25434,15 @@\n \u2022 when a comment like ;py, is executed - during execution of a remapped\n code: any prolog=, python= and epilog= handlers.\n Calling O-word Python subroutines\n Arguments:\n self\n The interpreter instance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 532 / 1288\n \n *args\n The list of actual positional parameters. Since the number of actual parameters may vary, it is\n best to use this style of declaration:\n # this would be defined in the oword module\n@@ -25480,15 +25480,15 @@\n print(\u201d%s: %s\u201d % (w, words[w]))\n if words[\u2019p\u2019] < 78: # NB: could raise an exception if p were optional\n return \u201dfailing miserably\u201d\n return INTERP_OK\n \n Return values:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 533 / 1288\n \n INTERP_OK\n Return this on success. You need to import this from interpreter.\n a message text\n Returning a string from a handler means this is an error message, abort the program. Works like\n@@ -25525,15 +25525,15 @@\n # post-sync() execution resumes here:\n pin_status = emccanon.GET_EXTERNAL_DIGITAL_INPUT(0,0);\n print(\u201dpin status=\u201d,pin_status)\n \n aviso\n The yield feature is fragile. The following restrictions apply to the usage of yield INTERP_EXECUTE_FINISH:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 534 / 1288\n \n Python code executing a yield INTERP_EXECUTE_FINISH must be part of a remap procedure. Yield\n does not work in a Python oword procedure.\n A Python remap subroutine containing yield INTERP_EXECUTE_FINISH statement may not return\n a value, as with normal Python yield statements.\n@@ -25575,15 +25575,15 @@\n return \u201dtestparam forgot to assign #\u201d\n return INTERP_OK\n o sub\n (debug, call_level=#<_call_level> myname=#)\n ; try commenting out the next line and run again\n # = [# * 3]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 535 / 1288\n \n #1 = [#1 * 5]\n #2 = [#2 * 3]\n o endsub\n m2\n@@ -25625,15 +25625,15 @@\n \n except InterpreterException,e:\n msg = \u201d%d: \u2019 %s\u2019 - %s\u201d % (e.line_number,e.line_text, e.error_message)\n return msg # replace builtin error message\n \n Canon The canon layer is practically all free functions. Example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 536 / 1288\n \n import emccanon\n def example(self,*args):\n ....\n emccanon.STRAIGHT_TRAVERSE(line,x0,y0,z0,0,0,0,0,0,0)\n@@ -25670,15 +25670,15 @@\n Import that module from the TOPLEVEL script.\n # namedparams.py\n # trivial example\n def _pi(self):\n return 3.1415926535\n # = [2 * # * #<_pi>]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 537 / 1288\n \n Functions in namedparams.py are expected to return a float or int value. If a string is returned, this\n sets the interpreter error message and aborts execution.\n \u00d2nly functions with a leading underscore are added as parameters, since this is the RS274NGC convention for globals.\n It is possible to redefine an existing predefined parameter by adding a Python function of the same\n@@ -25708,15 +25708,15 @@\n no further action is taken. This can be used for instance to minimally adjust the built in behavior be\n preceding or following it with some other statements.\n Otherwise, the # and # parameters are extracted from the subroutine\u2019s parameter\n space. This means that the NGC procedure could change these values, and the epilog takes the\n changed values in account.\n Then, the Canon command SELECT_TOOL(#) is executed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 538 / 1288\n \n 9.6.11.2. M6: change_prolog and change_epilog\n These wrap a NGC procedure for M6 Tool Change.\n Actions of change_prolog\n The following three steps are applicable only if the iocontrol-v2 component is used:\n@@ -25745,15 +25745,15 @@\n In case the NGC procedure executed the M6 command (which then refers to the built in M6 behavior), no further action is taken. This can be used for instance to minimally adjust the built in behavior be preceding or following it with some other statements.\n Otherwise, the # parameter is extracted from the subroutine\u2019s parameter space,\n and used to set the interpreter\u2019s current_pocket variable. Again, the procedure could change this\n value, and the epilog takes the changed value in account.\n Then, the Canon command CHANGE_TOOL(#) is executed.\n The new tool parameters (offsets, diameter etc) are set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 539 / 1288\n \n 9.6.11.3. G-code Cycles: cycle_prolog and cycle_epilog\n These wrap a NGC procedure so it can act as a cycle, meaning the motion code is retained after\n finishing execution. If the next line just contains parameter words (e.g. new X,Y values), the code is\n executed again with the new parameter words merged into the set of the parameters given in the first\n@@ -25786,15 +25786,15 @@\n \u2022 retain the current motion mode so a continuation line without a motion code will execute the\n same motion code.\n 9.6.11.4. S (Set Speed) : setspeed_prolog and setspeed_epilog\n TBD\n 9.6.11.5. F (Set Feed) : setfeed_prolog and setfeed_epilog\n TBD\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 540 / 1288\n \n 9.6.11.6. M61 Set tool number : settool_prolog and settool_epilog\n TBD\n \n 9.6.12. Remapped code execution\n@@ -25848,15 +25848,15 @@\n user-defined - not interpreted\n by LinuxCNC\n user-defined - not interpreted\n by LinuxCNC\n \n or these flags into the [EMC]DEBUG variable as needed. For a current list of debug flags see src/emc/nml_intf/debugflags.h.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 541 / 1288\n \n 9.6.12.5. Debugging Embedded Python code\n Debugging of embedded Python code is harder than debugging normal Python scripts, and only a\n limited supply of debuggers exists. A working open-source based solution is to use the Eclipse IDE,\n and the PydDev Eclipse plug in and its remote debugging feature.\n@@ -25876,15 +25876,15 @@\n pydevd.settrace() will block execution if Eclipse and the Pydev debug server have not been\n started.\n \n To cover the last two steps: the o procedure helps to get into the debugger from MDI mode.\n See also the call_pydevd function in util.py and its usage in remap.involute to set a breakpoint.\n Here\u2019s a screen-shot of Eclipse/PyDevd debugging the involute procedure from above:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 542 / 1288\n \n See the Python code in configs/sim/axis/remap/getting-started/python for details.\n \n 9.6.13. Axis Preview and Remapped code execution\n For complete preview of a remapped code\u2019s tool path some precautions need to be taken. To understand what is going on, let\u2019s review the preview and execution process (this covers the AXIS case, but\n@@ -25900,15 +25900,15 @@\n Now, what about preview of this procedure? At preview time, of course it is not known whether the\n probe succeeds or fails - but you would likely want to see what the maximum depth of the probe is,\n and assume it succeeds and continues execution to preview further movements. Also, there is no point\n in displaying a probe failed message and aborting during preview.\n The way to address this issue is to test in your procedure whether it executes in preview or execution\n mode. This can be checked for by testing the #<_task> predefined named parameter - it will be 1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 543 / 1288\n \n during actual execution and 0 during preview. See configs/sim/axis/remap/manual-toolchange-withtool-length-switch/nc_subroutines/manual_change.ngc for a complete usage example.\n Within Embedded Python, the task instance can be checked for by testing self.task - this will be 1 in\n the milltask instance, and 0 in the preview instance(s).\n \n@@ -25952,15 +25952,15 @@\n G07\n G08\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n \n G05.1 G05.2 G05.3\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 544 / 1288\n \n Cuadro 9.2: Table of Allocated G-codes 10-19\n #\n 10\n 11\n@@ -26043,15 +26043,15 @@\n G41\n G42\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n G41.1\n G42.1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 545 / 1288\n \n Cuadro 9.5: (continued)\n #\n 43\n 44\n@@ -26132,15 +26132,15 @@\n G71\n G72\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n G71.1 G71.2\n G72.1 G72.2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 546 / 1288\n \n Cuadro 9.8: (continued)\n #\n 76\n 77\n@@ -26233,15 +26233,15 @@\n \n Mx7\n \n Mx8\n \n Mx9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 547 / 1288\n \n Cuadro 9.11: (continued)\n #\n 10-19\n 20-29\n@@ -26371,15 +26371,15 @@\n FIXME Write missing information\n \n 9.6.16. Models of Task execution\n FIXME Write missing information\n 9.6.16.1. Traditional iocontrol/iocontrolv2 execution\n FIXME Write missing information\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 548 / 1288\n \n 9.6.16.2. Redefining IO procedures\n FIXME Write missing information\n 9.6.16.3. Execution-time Python procedures\n FIXME Write missing information\n@@ -26413,15 +26413,15 @@\n 9.6.17.3. Predicting the machine position\n To compute canonical machine operations in advance during read ahead, the interpreter must be able\n to predict the machine position after each line of G-code, and that is not always possible.\n Let\u2019s look at a simple example program which does relative moves (G91), and assume the machine\n starts at x=0,y=0,z=0. Relative moves imply that the outcome of the next move relies on the position\n of the previous one:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 549 / 1288\n \n N10 G91\n N20 G0 X10 Y-5 Z20\n N30 G1 Y20 Z-5\n N40 G0 Z30\n@@ -26462,15 +26462,15 @@\n 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\n interpreter state with the world model. Technically, this means updating internal variables to reflect\n HAL pin values, reload tool geometries after an M6, and convey results of a probe.\n The interpreter\u2019s synch() method is called by task and does just that - read all the world model\n actual values which are relevant for further execution.\n 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.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 550 / 1288\n \n 9.6.17.6. Word order and execution order\n One or several words may be present on an NGC block if they are compatible (some are mutually\n exclusive and must be on different lines). The execution model however prescribes a strict ordering\n of execution of codes, regardless of their appearance on the source line (G-code Order of Execution).\n@@ -26507,15 +26507,15 @@\n Tool information is held in the emcStatus structure, which is shared by all parties. One of its fields\n is the toolTable array, which holds the description as loaded from the tool table file (tool number,\n diameter, frontangle, backangle and orientation for lathe, tool offset information).\n The authoritative source and only process actually setting tool information in this structure is the\n iocontrol process. All others processes just consult this structure. The interpreter holds actually a\n local copy of the tool table.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 551 / 1288\n \n For the curious, the current emcStatus structure can be accessed by Python statements. The interpreter\u2019s perception of the tool currently loaded for instance is accessed by:\n ;py,from interpreter import *\n ;py,print(this.tool_table[0])\n \n@@ -26552,15 +26552,15 @@\n When the interpreter sees an M6, it:\n 1. checks whether a T command has already been executed (test settings->selected_pocket to be\n >= 0) and fail with Need tool prepared -Txx- for toolchange message if not.\n 2. check for cutter compensation being active, and fail with Cannot change tools with cutter radius\n compensation on if so.\n 3. stop the spindle except if the \u201dTOOL_CHANGE_WITH_SPINDLE_ON\u201d INI option is set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 552 / 1288\n \n 4. generate a rapid Z up move if if the \u201dTOOL_CHANGE_QUILL_UP\u201d INI option is set.\n 5. if TOOL_CHANGE_AT_G30 was set:\n a. move the A, B and C indexers if applicable\n b. generate rapid move to the G30 position\n@@ -26594,15 +26594,15 @@\n in configs/sim/axis/remap/toolchange/python/toolchange.py.\n 9.6.17.13. How M61 (Change tool number) works\n M61 requires a non-negative \u0300Q \u0300parameter (tool number). If zero, this means unload tool, else set\n current tool number to Q.\n Building the replacement for M61 An example Python redefinition for M61 can be found in the\n set_tool_number function in configs/sim/axis/remap/toolchange/python/toolchange.py.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 553 / 1288\n \n 9.6.18. Status\n 1. The RELOAD_ON_CHANGE feature is fairly broken. Restart after changing a Python file.\n 2. M61 (remapped or not) is broken in iocontrol and requires iocontrol-v2 to actually work.\n \n@@ -26645,15 +26645,15 @@\n internally. A warning pin is set and a message issued if the apply-offsets pin is deasserted while offsets\n are applied. The warning pin remains TRUE until the offsets are removed or the apply-offsets pin is\n set.\n Typically, the move-enable pin is connected to external controls and the apply-offsets pin is connected\n to halui.program.is-paused (for offsets only while paused) or set to TRUE (for continuously applied\n offsets).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 554 / 1288\n \n Applied offsets are automatically returned to zero (respecting limits) when either of the enabling\n inputs is deactivated. The zero value tolerance is specified by the epsilon input pin value.\n Waypoints are recorded when the moveoff component is enabled. Waypoints are managed with the\n waypoint-sample-secs and waypoint-threshold pins. When the backtrack-enable pin is TRUE, the autoreturn path follows the recorded waypoints. When the memory available for waypoints is exhausted,\n@@ -26696,15 +26696,15 @@\n configs/sim/touchy/ngcgui (touchy-ui)\n \n 9.7.1. Modifying an existing configuration\n A system-provided HAL file (LIB:hookup_moveoff.tcl) can be used to adapt an existing configuration to\n use the moveoff component. Additional INI file settings support the use of a simple GUI (moveoff_gui)\n for controlling offsets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 555 / 1288\n \n When the system HAL file (LIB:hookup_moveoff.tcl) is properly specified in a configuration INI file, it\n will:\n 1. Disconnect the original joint.N.motor-pos-cmd and joint.N.motor-pos-fb pin connections\n 2. Load (loadrt) the moveoff component (using the name mv) with a personality set to accommodate\n@@ -26746,15 +26746,15 @@\n EPSILON =\n WAYPOINT_SAMPLE_SECS =\n WAYPOINT_THRESHOLD =\n \n The moveoff_gui is used to make additional required connections and provide a popup GUI to:\n 1. Provide a control togglebutton to Enable/Disable offsets\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 556 / 1288\n \n 2. Provide a control togglebutton to Enable/Disable backtracking\n 3. Provide control pushbuttons to Increment/Decrement/Zero each axis offset\n 4. Display each axis offset current value\n 5. Display current offset status (disabled, active, removing, etc)\n@@ -26797,15 +26797,15 @@\n net external_offset_1 mv.offset-in-1\n net external_offset_2 mv.offset-in-2\n net external_backtrack_en mv.backtrack-enable\n \n These signals (external_enable, external_offset_M, external_backtrack_en) may be managed by subsequent HALFILES (including POSTGUI_HALFILEs) to provide customized control of the component\n while using the moveoff_gui display for current offset values and offset status.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 557 / 1288\n \n The moveoff_gui is configured with command line options. For details on the operation of moveoff_gui,\n see the man page:\n $ man moveoff_gui\n \n@@ -26870,15 +26870,15 @@\n Note: If the moveoff move-enable pin (mv.move-enable) is connected when\n moveoff_gui is started, external controls are required and only\n displays are provided.\n \n 9.8. Stand Alone Interpreter\n The rs274 stand alone interpreter is available for use via the command line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 558 / 1288\n \n 9.8.1. Usage\n Usage: rs274 [-p interp.so] [-t tool.tbl] [-v var-file.var] [-n 0|1|2]\n [-b] [-s] [-g] [input file [output file]]\n -p: Specify the pluggable interpreter to use\n@@ -26916,15 +26916,15 @@\n \n 9.9. External Axis Offsets\n External axis offsets are supported during teleop (world) jogs and coordinated (G-code) motion. External axis offsets are enabled on a per-axis basis by INI file settings and controlled dynamically by\n INI input pins. The INI interface is similar to that used for wheel jogging. This type of interface is\n typically implemented with a manual-pulse-generator (mpg) connected to an encoder INI component\n that counts pulses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 559 / 1288\n \n 9.9.1. INI File Settings\n For each axis letter (L in xyzabcuvw):\n [AXIS_L]OFFSET_AV_RATIO = value (controls accel/vel for external offsets)\n \n@@ -26955,15 +26955,15 @@\n 9.9.2.2. Other Motion HAL Pins\n 1. motion.eoffset-active Output(bit): non-zero external offsets applied\n 2. motion.eoffset-limited Output(bit): motion inhibited due to soft limit\n \n 9.9.3. Usage\n The axis input HAL pins (enable,scale,counts) are similar to the pins used for wheel jogging.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 560 / 1288\n \n 9.9.3.1. Offset Computation\n At each servo period, the axis.L.eoffset-counts pin is compared to its value in the prior period. The\n increase or decrease (positive or negative delta) of the axis.L.eoffset-counts pin is multiplied by the\n current axis.L.eoffset-scale pin value. This product is accumulated in an internal register and exported\n@@ -27001,15 +27001,15 @@\n limit will stop motion in the offending axis without a deacceleration interval. Similarly, during\n coordinated motion with external offsets enabled, reaching a soft limit will stop motion with no deacceleration phase. For this case, it does not matter if the offsets are zero.\n When motion is stopped with no deacceleration phase, system acceleration limits may be violated\n and lead to: 1) a following error (and/or a thump) for a servo motor system, 2) a loss of steps for a\n stepper motor system. In general, it is recommended that external offsets are applied in a manner to\n avoid approaching soft limits.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 561 / 1288\n \n 9.9.3.4. Notes\n External offsets apply to axis coordinate letters (xyzabcuvw). All joints must be homed before external\n axis offsets are honored.\n If an axis.L.eoffset-enable HAL pin is reset when its offset is non-zero, the offset is maintained. The\n@@ -27044,15 +27044,15 @@\n a terminal:\n $ sim_pin axis.z.eoffset-enable axis.z.eoffset-scale axis.z.eoffset-counts\n \n The use of external offsets is aided by displaying information related to the current offsets: the current\n eoffset value and the requested eoffset value, the axis pos-cmd, and (for an identity kinematics machine) the corresponding joint motor pos-cmd and motor-offset. The provided sim configuration (see\n below) demonstrates an example PyVCP panel for the AXIS GUI.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 562 / 1288\n \n In the absence of a custom display, halshow can be started as an auxiliary application with a custom\n watch list.\n Example INI file settings to simulate the HAL pin eoffset connections and display eoffset information\n for the z axis (for identity kinematics with z==joint2):\n@@ -27090,15 +27090,15 @@\n 9.9.6.2. jwp_z.ini\n The sim config sim/configs/axis/external_offsets/jwp_z.ini demonstrates a jog-while-pause capability\n for a single (Z) coordinate:\n Panel LEDs are provided to show important status items.\n Controls are provided to set the eoffset scale factor and to increment/decrement/clear the eoffset\n counts.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 563 / 1288\n \n 9.9.6.3. dynamic_offsets.ini\n This sim config sim/configs/axis/external_offsets/dynamic_offsets.ini demonstrates dynamically applied\n offsets by connecting a sinusoidal waveform to the z coordinate external offset inputs.\n Panel LEDs are provided to show important status items.\n@@ -27133,15 +27133,15 @@\n INI file settings enable the (optional) operation of a user-provided tool database program:\n [EMCIO]\n DB_PROGRAM = db_program [args]\n \n When included, db_program specifies the path to a user-provided executable program that provides\n tooldata. Up to 10 space-separated args may be included and passed to the db_program at startup.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 564 / 1288\n \n nota\n INI file settings for [EMCIO]TOOL_TABLE are ignored when a db_program is specified.\n \n nota\n@@ -27177,15 +27177,15 @@\n tool number and pocket number.\n \u201du\u201d spindle_unload (T0M6). The tool data line includes only the T and P items identifying the relevant\n tool number and pocket number.\n nota\n When a NON_RANDOM tool changer is specified using [EMCIO]RANDOM_TOOL_CHANGER=0 (the default), the spindle_load command issued for TnM6 (or M61Qn) is: l Tn P0 (pocket 0 is the spindle).\n The spindle_unload command issued for T0M6 is u T0 P0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 565 / 1288\n \n nota\n When a RANDOM tool changer is specified using [EMCIO]RANDOM_TOOL_CHANGER=1, a pair of\n spindle_unload/spindle_load commands are issued at each tool exchange. The pair of commands\n issued for TnM6 (or M61Qn) are u Tu Pm followed by l Tn P0, where u is the current tool to be sent\n@@ -27229,15 +27229,15 @@\n Removal of a tool number should only be done if the tool number is not currently loaded in spindle.\n \n Exporting the environmental variable DB_SHOW enables LinuxCNC prints (to stdout) that show tool\n data retrieved from the db_program at startup and at subsequent reloading of tool data.\n Exporting the environmental variable DB_DEBUG enables LinuxCNC prints (to stdout) for additional\n debugging information about interface activity.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 566 / 1288\n \n 9.10.1.4. Example program\n An example db_program (implemented as a Python script) is provided with the simulation examples.\n The program demonsrates the required operations to:\n 1. acknowledge startup version\n@@ -27282,15 +27282,15 @@\n )\n tooldb_loop()\n \n nota\n Use of tooldb is not required \u2014 it is provided as a demonstration of the required interface and as a\n convenience for implementing Python-based applications that interface with an external database.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 567 / 1288\n \n 9.10.2. Simulation configs\n Simulation configs using the AXIS gui:\n 1. configs/sim/axis/db_demo/db_ran.ini (random_toolchanger)\n 2. configs/sim/axis/db_demo/db_nonran.ini (nonrandom_toolchanger)\n@@ -27310,50 +27310,50 @@\n LinuxCNC tooldata updates and the database application updates.\n 9.10.2.1. Notes\n \n When a db_program is used in conjunction with a random tool changer ([EMCIO]RANDOM_TOOLCHANGER\n LinuxCNC maintains a file (db_spindle.tbl in the configuration directory) that consists of a single tool\n table line identifying the current tool in the spindle.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 568 / 1288\n \n Parte II\n \n Usage\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 569 / 1288\n \n Cap\u00edtulo 10\n \n User Interfaces\n 10.1. AXIS GUI\n 10.1.1. Introduction\n AXIS is a graphical front-end for LinuxCNC which features a live preview and backplot. It is written\n in Python and uses Tk and OpenGL to display its user interface.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 570 / 1288\n \n Figura 10.1: The AXIS Window\n \n 10.1.2. Getting Started\n If your configuration is not currently set up to use AXIS, you can change it by editing the .ini file (INI\n file). In the section [DISPLAY] change the [DISPLAY] line to read DISPLAY = axis.\n The sample configuration sim/axis.ini is already configured to use AXIS as its front-end.\n When AXIS starts, a window like the one in the figure Figura 10.1 above opens.\n 10.1.2.1. INI settings\n For more information on INI file settings that can change how AXIS works see the Display Section of\n the INI Configuration Chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 571 / 1288\n \n CYCLE_TIME - Adjust the response rate of the GUI in milliseconds. Typical 100, useable range 50\n - 200\n (will accept time in seconds (.05 -.2) for legacy reasons - milliseconds preferred to match other\n screens).\n@@ -27387,15 +27387,15 @@\n The AXIS window contains the following elements:\n A display area that shows one of the following:\n \u2022 A preview of the loaded file (in this case, axis.ngc), as well as the current location of the CNC\n machine\u2019s controlled point. Later, this area will display the path the CNC machine has moved\n through, called the backplot.\n \u2022 A large readout showing the current position and all offsets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 572 / 1288\n \n A menu bar and toolbar that allow you to perform various actions\n Manual Control Tab - which allows you to make the machine move, turn the spindle on or off, and\n turn the coolant on or off if included in the INI file.\n MDI Tab - where G-code programs can be entered manually, one line at a time. This also shows the\n@@ -27431,15 +27431,15 @@\n Ladder editor - If you have loaded ClassicLadder you can edit it from here. See the ClassicLadder\n chapter for more information.\n Quit - Terminates the current LinuxCNC session.\n Toggle Emergency Stop F1 - Change the state of the Emergency Stop.\n Toggle Machine Power F2 - Change the state of the Machine Power if the Emergency Stop is not\n on.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 573 / 1288\n \n Run Program - Run the currently loaded program from the beginning.\n Run From Selected Line - Select the line you want to start from first. Use with caution as this will\n move the tool to the expected position before the line first then it will execute the rest of the code.\n \n@@ -27475,15 +27475,15 @@\n G10 L10 in the G-code chapter.\n \u2022 Tool touch off to fixture - When performing Touch Off, the value entered is relative to the ninth\n (G59.3) coordinate system, with the axis offset (G92) ignored. This is useful when there is a tool\n touch-off fixture at a fixed location on the machine, with the ninth (G59.3) coordinate system set\n such that the tip of a zero-length tool is at the fixture\u2019s origin when the Relative coordinates are\n 0. See G10 L11 in the G-code chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 574 / 1288\n \n Top View - The Top View (or Z view) displays the G-code looking along the Z axis from positive to\n negative. This view is best for looking at X & Y.\n Rotated Top View - The Rotated Top View (or rotated Z view) also displays the G-code looking along\n the Z axis from positive to negative. But sometimes it\u2019s convenient to display the X & Y axes rotated\n@@ -27524,15 +27524,15 @@\n Show Tool - The display of the tool cone/cylinder can be disabled if desired.\n Show Extents - The display of the extents (maximum travel in each axis direction) of the loaded\n G-code program can be disabled if desired.\n Show Offsets - The selected fixture offset (G54-G59.3) origin location can be shown as a set of three\n orthogonal lines, one each of red, blue, and green. This offset origin (or fixture zero) display can be\n disabled if desired.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 575 / 1288\n \n Show Machine Limits - The machine\u2019s maximum travel limits for each axis, as set in the INI file,\n are shown as a rectangular box drawn in red dashed lines. This is useful when loading a new Gcode program, or when checking for how much fixture offset would be needed to bring the G-code\n program within the travel limits of your machine. It can be shut off if not needed.\n Show Velocity - A display of velocity is sometimes useful to see how close your machine is running\n@@ -27564,15 +27564,15 @@\n Open G Code file [O]\n \n Reload current file [Ctrl-R]\n Begin executing the current file [R]\n Execute next line [T]\n Pause Execution [P] Resume Execution [S]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 576 / 1288\n \n Stop Program Execution [ESC]\n Toggle Skip lines with \u201d/\u201d [Alt-M-/]\n Toggle Optional Pause [Alt-M-1]\n Zoom In\n@@ -27604,15 +27604,15 @@\n commanded position due to following error, dead band, encoder resolution, or step size. For instance,\n if you command a movement to X 0.0033 on your mill, but one step of your stepper motor or one\n encoder count is 0.00125, then the Commanded position might be 0.0033, but the Actual position will\n be 0.0025 (2 steps) or 0.00375 (3 steps).\n Preview Plot When a file is loaded, a preview of it is shown in the display area. Fast moves (such as\n those produced by the G0 command) are shown as cyan lines. Moves at a feed rate (such as those\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 577 / 1288\n \n produced by the G1 command) are shown as solid white lines. Dwells (such as those produced by the\n G4 command) are shown as small pink X marks.\n G0 (Rapid) moves prior to a feed move will not show on the preview plot. Rapid moves after a T\n (Tool Change) will not show on the preview until after the first feed move. To turn either of these\n@@ -27645,15 +27645,15 @@\n By dragging with the left mouse button pressed, the preview plot will be shifted (panned).\n By dragging with shift and the left mouse button pressed, or by dragging with the mouse wheel pressed, the preview plot will be rotated. When a line is highlighted, the center of rotation is the center\n of the line. Otherwise, the center of rotation is the center of the entire program.\n By rotating the mouse wheel, or by dragging with the right mouse button pressed, or by dragging\n with control and the left mouse button pressed, the preview plot will be zoomed in or out.\n By clicking one of the Preset View icons, or by pressing V, several preset views may be selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 578 / 1288\n \n 10.1.3.4. Text Display Area\n By left-clicking a line of the program, the line will be highlighted in both the graphical and text displays.\n When the program is running, the line currently being executed is highlighted in red. If no line has\n been selected by the user, the text display will automatically scroll to show the current line.\n@@ -27673,15 +27673,15 @@\n the desired direction of motion. The first four axes can also be moved by the arrow keys (X and Y),\n PAGE UP and PAGE DOWN keys (Z), and the [ and ] keys (A).\n If Continuous is selected, the motion will continue as long as the button or key is pressed. If another\n value is selected, the machine will move exactly the displayed distance each time the button is clicked\n or the key is pressed. By default, the available values are 0.1000, 0.0100, 0.0010, 0.0001.\n See the DISPLAY Section for more information on setting the increments.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 579 / 1288\n \n Homing (Identity Kinematics) The INI file setting [KINS]JOINTS defines the total number of joints\n for the system. A joint may be configured with a home switch or for immediate homing. Joints may\n specify a home sequence that organizes the order for homing groups of joints.\n If all joints are configured for homing and have valid home sequences, the homing button will show\n@@ -27707,15 +27707,15 @@\n programs, except that variables may not be referred to. The resulting value is shown as a number.\n \n Figura 10.4: Touch Off Window\n See also the Machine menu options: Touch part and Touch part holder.\n Tool Touch Off By pressing the Tool Touch Off button the tool length and offsets of the currently\n loaded tool will be changed so that the current tool tip position matches the entered coordinate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 580 / 1288\n \n Figura 10.5: Tool Touch Off Window\n See also the Tool touch off to workpiece and Tool touch off to fixture options in the Machine menu.\n Override Limits By pressing Override Limits, the machine will temporarily be allowed to jog off of\n a physical limit switch. This check box is only available when a limit switch is tripped. The override\n@@ -27729,15 +27729,15 @@\n Pressing the spindle start button sets the S speed to 1.\n The Coolant group The two buttons allow the Mist and Flood coolants to be turned on and off.\n Depending on your machine configuration, not all the items in this group may appear.\n 10.1.3.6. MDI\n MDI allows G-code commands to be entered manually. When the machine is not turned on, or when a\n program is running, the MDI controls are unavailable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 581 / 1288\n \n Figura 10.6: The MDI tab\n History - This shows MDI commands that have been typed earlier in this session.\n MDI Command - This allows you to enter a G-code command to be executed. Execute the command\n by pressing Enter or by clicking Go.\n@@ -27751,15 +27751,15 @@\n By moving this slider, the programmed spindle speed can be modified. For instance, if a program\n requests S8000 and the slider is set to 80 %, then the resulting spindle speed will be 6400. This item\n only appears when the HAL pin spindle.0.speed-out is connected.\n 10.1.3.9. Jog Speed\n By moving this slider, the speed of jogs can be modified. For instance, if the slider is set to 1 in/min,\n then a .01 inch jog will complete in about .6 seconds, or 1/100 of a minute. Near the left side (slow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 582 / 1288\n \n jogs) the values are spaced closely together, while near the right side (fast jogs) they are spaced much\n further apart, allowing a wide range of jog speeds with fine control when it is most important.\n On machines with a rotary axis, a second jog speed slider is shown. This slider sets the jog rate for\n the rotary axes (A, B and C).\n@@ -27836,15 +27836,15 @@\n Manual\n Manual\n Manual\n Manual\n Manual\n Manual\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 583 / 1288\n \n Cuadro 10.1: (continued)\n Keystroke\n R\n P\n@@ -27887,15 +27887,15 @@\n Any\n Any\n \n 10.1.5. Show LinuxCNC Status (linuxcnctop)\n AXIS includes a program called linuxcnctop which shows some of the details of LinuxCNC\u2019s state. You\n can run this program by invoking Machine > Show LinuxCNC Status\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 584 / 1288\n \n Figura 10.7: LinuxCNC Status Window\n The name of each item is shown in the left column. The current value is shown in the right column. If\n the value has recently changed, it is shown on a red background.\n \n@@ -27912,15 +27912,15 @@\n (0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\n MDI> G1 F5 X1\n MDI>\n (0.5928500000000374, 0.0, 0.0, 0.0, 0.0, 0.0)\n MDI>\n (1.0000000000000639, 0.0, 0.0, 0.0, 0.0, 0.0)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 585 / 1288\n \n 10.1.7. axis-remote\n AXIS includes a program called axis-remote which can send certain commands to a running AXIS.\n The available commands are shown by running axis-remote --help and include checking whether AXIS\n is running (--ping), loading a file by name, reloading the currently loaded file (--reload), and making\n@@ -27950,50 +27950,50 @@\n rs274 provides additional tools for working with rs274ngc files\n hal allows the creation of non-realtime HAL components written in Python\n _togl provides an OpenGL widget that can be used in Tkinter applications\n minigl provides access to the subset of OpenGL used by AXIS\n To use these modules in your own scripts, you must ensure that the directory where they reside is on\n Python\u2019s 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.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 586 / 1288\n \n 10.1.10. Using AXIS in Lathe Mode\n By including the line LATHE = 1 in the [DISPLAY] section of the INI file, AXIS selects lathe mode. The\n Y axis is not shown in coordinate readouts, the view is changed to show the Z axis extending to the\n right and the X axis extending towards the bottom of the screen, and several controls (such as those\n for preset views) are removed. The coordinate readouts for X are replaced with diameter and radius.\n \n Figura 10.9: AXIS Lathe Mode\n Pressing V zooms out to show the entire file, if one is loaded.\n When in lathe mode, the shape of the loaded tool (if any) is shown.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 587 / 1288\n \n Figura 10.10: Lathe Tool Shape\n To change the display to a back tool lathe you need to have both LATHE = 1 and BACK_TOOL_LATHE\n = 1 in the [DISPLAY] section. This will invert the view and put the tool on the back side of the Z axis.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 588 / 1288\n \n Figura 10.11: Lathe Back Tool Shape\n \n 10.1.11. Using AXIS in Foam Cutting mode\n By including the line FOAM = 1 in the [DISPLAY] section of the INI file, AXIS selects foam-cutting\n mode. In the program preview, XY motions are displayed in one plane, and UV motions in another. In\n the live plot, lines are drawn between corresponding points on the XY plane and the UV plane. The\n special comments (XY_Z_POS) and (UV_Z_POS) set the Z coordinates of these planes, which default\n to 0 and 1.5 machine units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 589 / 1288\n \n Figura 10.12: Foam Cutting Mode\n \n 10.1.12. Advanced Configuration\n When AXIS is started it creates the HAL pins for the GUI then it executes the HAL file named in the INI\n@@ -28001,15 +28001,15 @@\n _postgui + .hal eg. lathe_postgui.hal, but can be any legal filename. These commands are executed\n after the screen is built, guaranteeing the widget\u2019s HAL pins are available. You can have multiple line\n of POSTGUI_HALFILE= in the INI. Each will be run one after the other in the order they\n appear.\n For more information on the INI file settings that can change the way AXIS works, see the Display\n Section of the INI configuration chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 590 / 1288\n \n 10.1.12.1. Program Filters\n AXIS has the ability to send loaded files through a filter program. This filter can do any desired task:\n Something as simple as making sure the file ends with M2, or something as complicated as generating\n G-code from an image.\n@@ -28031,15 +28031,15 @@\n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle.\n \n Figura 10.13: Circular Holes\n If the environment variable AXIS_PROGRESS_BAR is set, then lines written to stderr of the form\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 591 / 1288\n \n FILTER_PROGRESS= %d\n \n will set the AXIS progress bar to the given percentage. This feature should be used by any filter that\n runs for a long time.\n@@ -28075,15 +28075,15 @@\n Example of .axisrc file\n root_window.bind(\u201d\u201d, \u201ddestroy .\u201d)\n help2.append((\u201dControl-Q\u201d, \u201dQuit\u201d))\n \n The following stops the \u201dDo you really want to quit\u201d dialog.\n root_window.tk.call(\u201dwm\u201d,\u201dprotocol\u201d,\u201d.\u201d,\u201dWM_DELETE_WINDOW\u201d,\u201ddestroy .\u201d)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 592 / 1288\n \n 10.1.12.5. USER_COMMAND_FILE\n \n A configuration-specific Python file may be specified with an INI file setting [DISPLAY]USER_COMMAND_FIL\n Like a ~/.axisrc file, this file is sourced just before the AXIS GUI is displayed. This file is specific to\n@@ -28119,15 +28119,15 @@\n G-code file, one can disable the preview on certain parts that are already working OK).\n (AXIS,hide) Stops the preview (must be first)\n (AXIS,show) Resumes the preview (must follow a hide)\n (AXIS,stop) Stops the preview from here to the end of the file.\n (AXIS,notify,the_text) Displays the_text as an info display\n This display can be useful in the AXIS preview when (debug,message) comments are not displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 593 / 1288\n \n 10.1.13. Axisui\n To improve the interaction of AXIS with physical jog wheels, the axis currently selected in the GUI is\n also reported on a pin with a name like axisui.jog.x. One of these pins is TRUE at one time, and the\n rest are FALSE. These are meant to control motion\u2019s jog-enable pins.\n@@ -28210,15 +28210,15 @@\n 10.1.14. AXIS Customization Hints\n AXIS is a fairly large and difficult-to-penetrate code base, this is helpful To keep the code stable but\n makes it difficult to customize.\n Here we will show code snippets to modify behaviours or visuals of the screen. Keep in mind the\n internal code of AXIS can change from time to time.\n these snippets are not guaranteed to continue to work - they may need adjustment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 594 / 1288\n \n 10.1.14.1. The update function\n There is a function in AXIS named user_live_update that is called every time AXIS updates itself. You\n can use this to update your own functions.\n # continuous update function\n@@ -28257,15 +28257,15 @@\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(50))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(60))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(70))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(80))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(90))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(100))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n root_window.bind(\u2019\u2019,lambda event: set_feedrate(0))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(10))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(20))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(30))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(40))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(50))\n@@ -28304,15 +28304,15 @@\n # connect pins\n hal.new_sig(\u2019idle-led\u2019,hal.HAL_BIT)\n hal.connect(\u2019halui.program.is-idle\u2019,\u2019idle-led\u2019)\n hal.connect(\u2019my_component.idle-led\u2019,\u2019idle-led\u2019)\n \n 595 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 596 / 1288\n \n # set a pin\n hal.set_p(\u2019my_component.pause-led\u2019,\u20191\u2019)\n # get a pin 2,8+ branch\n value = hal.get_value(\u2019halui.program.is-idle\u2019)\n@@ -28353,15 +28353,15 @@\n root_window.tk.call(\u2019button\u2019,\u2019.pane.top.tabs.fmanual.homey\u2019,\u2019-text\u2019,\u2019Home Y\u2019,\u2019-command\u2019,\u2019 \u2190goto_home Y\u2019,\u2019-height\u2019,\u20192\u2019)\n # place the button\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.homey\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20197\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n # any function called from Tcl needs to be added to TclCommands\n TclCommands.goto_home = goto_home\n commands = TclCommands(root_window)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 597 / 1288\n \n 10.1.14.12. Add Button to manual frame\n # make a new button and put it in the manual frame\n root_window.tk.call(\u2019button\u2019,\u2019.pane.top.tabs.fmanual.mybutton\u2019,\u2019-text\u2019,\u2019My Button\u2019,\u2019- \u2190command\u2019,\u2019mybutton_clicked\u2019,\u2019-height\u2019,\u20192\u2019)\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.mybutton\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20196\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n@@ -28417,15 +28417,15 @@\n = BooleanVar\n = DoubleVar\n = IntVar\n = IntVar\n = IntVar\n = IntVar\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 598 / 1288\n \n interp_state\n = IntVar\n ja_rbutton\n = StringVar\n@@ -28522,15 +28522,15 @@\n # use \u2019grid\u2019 or \u2019pack\u2019 depending on how it was originally placed\n root_window.tk.call(\u2019grid\u2019,\u2019forget\u2019,\u2019.pane.top.tabs.fmanual.jogf.zerohome.tooltouch\u2019)\n \n 10.1.14.15. Change a label\n # change label of a widget\n root_window.tk.call(\u2019setup_widget_accel\u2019,\u2019.pane.top.tabs.fmanual.mist\u2019,\u2019Downdraft\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 599 / 1288\n \n # make sure it appears (only needed in this case if the mist button was hidden)\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.mist\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20195\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n \n 10.1.14.16. Redirect an existing command\n@@ -28560,15 +28560,15 @@\n root_window.tk.call(\u2019.toolbar.program_run\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019RUN\u2019,\u2019-width\u2019, \u2190buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_step\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019STEP\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_pause\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019PAUSE\u2019,\u2019- \u2190width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_stop\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019STOP\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_blockdelete\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Skip /\u2019 \u2190,\u2019-width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_optpause\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019M1\u2019,\u2019- \u2190width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 600 / 1288\n \n root_window.tk.call(\u2019.toolbar.view_zoomin\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Zoom+\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_zoomout\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Zoom-\u2019,\u2019-width \u2190\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_z\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Top X\u2019,\u2019-width\u2019,buW, \u2190\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_z2\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Top Y\u2019,\u2019-width\u2019,buW \u2190,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n@@ -28604,15 +28604,15 @@\n It has support for integrated virtual keyboard (onboard or matchbox-keyboard), so there is no need\n for a hardware keyboard or mouse, but it can also be used with that hardware. GMOCCAPY offers a\n separate settings page to configure most settings of the GUI without editing files.\n GMOCCAPY can be localized very easy, because the corresponding files are separated from the linuxcnc.po files, so there is no need to translate unneeded stuff. The files are placed in /src/po/gmoccapy.\n You could just copy the gmoccapy.pot file to something like it.po and translate that file with gtranslator\n or poedit. After rebuilding, you\u2019d get the GUI in your preference language. To facilitate the sharing\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 601 / 1288\n \n of the translation, GMOCCAPY is available on the Weblate web interface. GMOCCAPY is currently\n 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\u2019t hesitate to contact me on\n nieson@web.de.\n \n@@ -28626,15 +28626,15 @@\n it should fit to every standard screen. It is recommended to use screens with minimum resolution of\n 1024x748.\n \n 10.2.3. How to Get GMOCCAPY\n GMOCCAPY 3 is included in the standard distribution of LinuxCNC since release 2.7. So the easiest\n way to get GMOCCAPY on your controlling PC is just to download the ISO and install it from the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 602 / 1288\n \n CD/DVD/USB-stick. This allows you to receive updates with the regular Debian packages.\n In the release notes aka changelist you can track the latest bugfixes and features.\n You will get a similar screen to the following (the design may vary depending on your config):\n \n@@ -28645,15 +28645,15 @@\n -logo : If given, the logo will hide the jog button tab in manual mode, this is only\n useful for machines with hardware buttons for jogging and increment selection.\n There is really not to much to configure just to run GMOCCAPY, but there are some points you should\n take care off if you want to use all the features of the GUI.\n You will find a lot of simulation configurations (INI files) included, just to show the basics:\n gmoccapy.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 603 / 1288\n \n gmoccapy_4_axis.ini\n lathe_configs/gmoccapy_lathe.ini\n lathe_configs/gmoccapy_lathe_imperial.ini\n gmoccapy_left_panel.ini\n@@ -28686,15 +28686,15 @@\n PROGRAM_PREFIX = ../../nc_files/\n \n DISPLAY = gmoccapy - This tells LinuxCNC to use GMOCCAPY.\n PREFERENCE_FILE_PATH - Gives the location and name of the preferences file to be used. In most\n cases this line will not be needed, it is used by GMOCCAPY to store your settings of the GUI, like\n themes, DRO units, colors, and keyboard settings, etc., see settings page for more details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 604 / 1288\n \n nota\n If no path or file is given, GMOCCAPY will use as default .pref, if no machine\n name is given in your INI File it will use gmoccapy.pref. The file will be stored in your config directory,\n so the settings will not be mixed if you use several configs. If you only want to use one file for several\n@@ -28729,15 +28729,15 @@\n If not set, half of MAX_LINEAR_VELOCITY will be used. If that value is also not given, it will default\n to 180.\n \n MAX_LINEAR_VELOCITY = 230.0 - Sets the maximal velocity of the machine.\n nota\n Defaults to 600 if not set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 605 / 1288\n \n 10.2.4.3. Macro Buttons\n You can add macros to GMOCCAPY, similar to Touchy\u2019s way. A macro is nothing else than a NGC file.\n You are able to execute complete CNC programs in MDI mode by just pushing one button. To do so,\n you first have to specify the search path for macros:\n@@ -28777,15 +28777,15 @@\n GMOCCAPY will also accept macros asking for parameters like:\n [MACRO]\n MACRO = go_to_position X-pos Y-pos Z-pos\n \n The parameters must be separated by spaces. This example calls a file go_to_position.ngc with the\n following content:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 606 / 1288\n \n ; Test file \u201dgo to position\u201d\n ; will jog the machine to a given position\n O sub\n G17\n@@ -28805,15 +28805,15 @@\n M2\n \n After pushing the execute macro button, you will be asked to enter the values for X-pos Y-pos Z-pos\n and the macro will only run if all values have been given.\n nota\n If you would like to use a macro without any movement, see also the notes in known problems.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 607 / 1288\n \n Macro example using the \u201dgo to position\u201d-macro\n 10.2.4.4. Embedded Tabs and Panels\n You can add embedded programs to GMOCCAPY like you can do in AXIS, Touchy and Gscreen. All is\n done by GMOCCAPY automatically if you include a few lines in your INI file in the DISPLAY section.\n@@ -28827,15 +28827,15 @@\n EMBED_TAB_LOCATION = ntb_preview\n EMBED_TAB_COMMAND = gladevcp -x {XID} vcp_box.glade\n \n All you have to take care of, is that you include for every tab or side panel the mentioned three lines:\n EMBED_TAB_NAME = Representa el nombre de la pesta\u00f1a o el panel lateral. Depende de usted\n qu\u00e9 nombre usar, pero \u00a1debe estar presente!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 608 / 1288\n \n EMBED_TAB_LOCATION = The place where your program will be placed in the GUI, see figure\n Embedded tab locations. Valid values are:\n \u2022 ntb_user_tabs (as main tab, covering the complete screen)\n \u2022 ntb_preview (as tab on the preview side (1))\n@@ -28872,29 +28872,29 @@\n \n will add a the panel manual-example.ui, include a custom Python handler, hitcounter.py and make\n all connections after realizing the panel according to manual-example.hal.\n hide\n \n will hide the chosen box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 609 / 1288\n \n Figura 10.14: Embedded tab locations\n nota\n If you make any HAL connections to your custom glade panel, you need to do that in the HAL file\n specified in the EMBED_TAB_COMMAND line, otherwise you may get an error that the HAL pin does\n not exist \u2014 this is because of race conditions loading the HAL files. Connections to GMOCCAPY HAL\n pins need to be made in the postgui HAL file specified in your INI file, because these pins do not exist\n prior of realizing the GUI.\n \n Here are some examples:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ntb_preview\n \n 610 / 1288\n \n box_right - and GMOCCAPY in MDI mode\n \n@@ -28917,15 +28917,15 @@\n provide a -response HAL pin.\n For more detailed information of the pins see User Created Message HAL Pins.\n Example of User Message Configuration\n MESSAGE_TEXT = This is a info-message test\n MESSAGE_TYPE = status\n MESSAGE_PINNAME = statustest\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 611 / 1288\n \n MESSAGE_TEXT = This is a yes no dialog test\n MESSAGE_TYPE = yesnodialog\n MESSAGE_PINNAME = yesnodialog\n MESSAGE_TEXT = Text can be small, big, bolditalic,\n@@ -28966,15 +28966,15 @@\n self.widgets.rbt_auto.set_size_request(*BB_SIZE)\n self.widgets.tbtn_setup.set_size_request(*BB_SIZE)\n self.widgets.tbtn_user_tabs.set_size_request(*BB_SIZE)\n self.widgets.btn_exit.set_size_request(*BB_SIZE)\n \n The widget names can the looked up in the /usr/share/gmoccapy.glade file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 612 / 1288\n \n 10.2.4.8. User CSS File\n Similar to the User command file it\u2019s possible to influence the appearance by cascading style sheets\n (CSS). If a file ~/.gmoccapy_css exists, its contents are loaded into the stylesheet provider and are\n so being applied to the GUI.\n@@ -29018,15 +29018,15 @@\n \n You can specify where to save the log file:\n [DISPLAY]\n LOG_FILE = gmoccapy.log\n \n If LOG_FILE is not set, logging happens to $HOME/.log.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 613 / 1288\n \n 10.2.5. HAL Pins\n GMOCCAPY exports several HAL pins to be able to react to hardware devices. The goal is to get a\n GUI that may be operated in a tool shop, completely/mostly without mouse or keyboard.\n nota\n@@ -29061,15 +29061,15 @@\n For the bottom (horizontal) buttons they are:\n gmoccapy.h-button.button-0 (bit IN)\n gmoccapy.h-button.button-1 (bit IN)\n gmoccapy.h-button.button-2 (bit IN)\n gmoccapy.h-button.button-3 (bit IN)\n gmoccapy.h-button.button-4 (bit IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 614 / 1288\n \n gmoccapy.h-button.button-5 (bit IN)\n gmoccapy.h-button.button-6 (bit IN)\n gmoccapy.h-button.button-7 (bit IN)\n gmoccapy.h-button.button-8 (bit IN)\n@@ -29170,15 +29170,15 @@\n zero G92\n unhome all\n back\n \n set selected\n back\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 615 / 1288\n \n Cuadro 10.4: Functional assignment of horizontal buttons\n (3)\n Pin\n Tool Mode\n@@ -29228,15 +29228,15 @@\n \n \u00a1As\u00ed que tenemos 67 reacciones con s\u00f3lo 10 pines de HAL!\n These pins are made available to be able to use the screen without an touch panel, or protect it\n from excessive use by placing hardware buttons around the panel. They are available in a sample\n configuration like shown in the image below.\n Sample configuration \u201dgmoccapy_sim_hardware_button\u201d showing the side buttons\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 616 / 1288\n \n 10.2.5.2. Velocities and Overrides\n All sliders from GMOCCAPY can be connected to hardware encoders or hardware potentiometers.\n nota\n For GMOCCAPY 3 some HAL pin names have changed when new controls have been implemented.\n@@ -29248,15 +29248,15 @@\n gmoccapy.jog.jog-velocity.count-enable (bit IN) - Must be True, to enable counts\n gmoccapy.feed.feed-override.counts (s32 IN) - feed override\n gmoccapy.feed.feed-override.count-enable (bit IN) - Must be True, to enable counts\n gmoccapy.feed.reset-feed-override (bit IN) - reset the feed override to *0 %\n gmoccapy.spindle.spindle-override.counts (s32 IN) - spindle override\n gmoccapy.spindle.spindle-override.count-enable (bit IN) - Must be True, to enable counts\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 617 / 1288\n \n gmoccapy.spindle.reset-spindle-override (bit IN) - reset the spindle override to *0 %\n gmoccapy.rapid.rapid-override.counts (s32 IN) - Maximal Velocity of the *chine\n gmoccapy.rapid.rapid-override.count-enable (bit IN) - Must be True, to enable counts\n To connect potentiometers, use the following pins:\n@@ -29286,15 +29286,15 @@\n gmoccapy.spc_spindle.increase (bit IN) - As long as True the value of the slider will increase\n gmoccapy.spc_spindle.decrease (bit IN) - As long as True the value of the slider will decrease\n gmoccapy.spc_spindle.scale (float IN) - A value to scale the output value (handy to change units/min to units/sec)\n gmoccapy.spc_spindle.value (float OUT) - Value of the widget\n gmoccapy.spc_spindle.scaled-value (float OUT) - Scaled value of the widget .RAPIDS\n gmoccapy.spc_rapid.increase (bit IN) - As long as True the value of the slider will increase\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 618 / 1288\n \n gmoccapy.spc_rapid.decrease (bit IN) - As long as True the value of the slider will decrease\n gmoccapy.spc_rapid.scale (float IN) - A value to scale the output value (handy to change units/min\n to units/sec)\n gmoccapy.spc_rapid.value (float OUT) - Value of the widget\n@@ -29329,15 +29329,15 @@\n For the standard XYZ config following HAL pins will be available:\n gmoccapy.jog.axis.jog-x-plus (bit IN)\n gmoccapy.jog.axis.jog-x-minus (bit IN)\n gmoccapy.jog.axis.jog-y-plus (bit IN)\n gmoccapy.jog.axis.jog-y-minus (bit IN)\n gmoccapy.jog.axis.jog-z-plus (bit IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 619 / 1288\n \n gmoccapy.jog.axis.jog-z-minus (bit IN)\n If you use a 4 axes configuration, there will be two additional pins:\n gmoccapy.jog.jog--plus (bit IN)\n gmoccapy.jog.jog--minus (bit IN)\n@@ -29368,15 +29368,15 @@\n gmoccapy.jog.jog-inc-3 (bit IN)\n gmoccapy.jog.jog-inc-4 (bit IN)\n gmoccapy.jog.jog-inc-5 (bit IN)\n gmoccapy.jog.jog-inc-6 (bit IN)\n GMOCCAPY offers also a HAL pin to output the selected jog increment:\n gmoccapy.jog.jog-increment (float OUT)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 620 / 1288\n \n 10.2.5.6. Hardware Unlock Pin\n To be able to use a key switch to unlock the settings page, the following pin is exported:\n gmoccapy.unlock-settings (bit IN) - The settings page is unlocked if the pin is high. To use this\n pin, you need to activate it on the settings page.\n@@ -29410,15 +29410,15 @@\n MESSAGE_TEXT = LUBE FAULT\n MESSAGE_TYPE = okdialog\n MESSAGE_PINNAME = lube-fault\n MESSAGE_TEXT = X SHEAR PIN BROKEN\n MESSAGE_TYPE = status\n MESSAGE_PINNAME = pin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 621 / 1288\n \n To connect these new pins you need to do this in the postgui HAL file. Here are some example connections which connect the message signals to some place else in the HAL file.\n Example Connection of User Messages (HAL file)\n net gmoccapy-lube-fault gmoccapy.messages.lube-fault\n net gmoccapy-lube-fault-waiting gmoccapy.messages.lube-fault-waiting\n@@ -29438,15 +29438,15 @@\n Also loops will cause different values.\n 10.2.5.11. Tool Related Pins\n Tool Change Pins These pins are provided to use GMOCCAPY\u2019s internal tool change dialog, similar\n to the one known from AXIS, but with several modifications. So you will not only get the message to\n change to tool number 3, but also the description of that tool like 7.5 mm 3 flute cutter. The information\n is taken from the tool table, so it is up to you what to display.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 622 / 1288\n \n Figura 10.15: GMOCCAPY tool change dialog\n gmoccapy.toolchange-number (s32 IN) - The number of the tool to be changed\n gmoccapy.toolchange-change (bit IN) - Indicates that a tool has to be changed\n gmoccapy.toolchange-changed (bit OUT) - Indicates tool has been changed\n@@ -29462,15 +29462,15 @@\n \n Tool Offset Pins These pins allow you to show the active tool offset values for X and Z in the tool\n information frame. You should know that they are only active after G43 has been sent.\n \n Figura 10.16: Tool information area\n gmoccapy.tooloffset-x (float IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 623 / 1288\n \n gmoccapy.tooloffset-z (float IN)\n nota\n The tooloffset-x line is not needed on a mill, and will not be displayed on a mill with trivial kinematics.\n \n@@ -29499,15 +29499,15 @@\n 1. Touch off your workpiece in X and Y.\n 2. Measure the height of your block from the base where your tool switch is located, to the upper\n face of the block (including chuck etc.).\n 3. Push the button block height and enter the measured value.\n 4. Go to auto mode and start your program.\n Here is a small sketch:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 624 / 1288\n \n Figura 10.17: Tool measurement data\n With the first given tool change the tool will be measured and the offset will be set automatically to\n fit the block height. The advantage of the GMOCCAPY way is, that you do not need a reference tool.\n nota\n@@ -29523,15 +29523,15 @@\n gmoccapy.probeheight (float OUT) - The probe switch height\n gmoccapy.searchvel (float OUT) - The velocity to search for the tool probe switch\n gmoccapy.probevel (float OUT) - The velocity to probe tool length\n 10.2.6.2. INI File Modifications\n Modify your INI file to include the following sections.\n The RS274NGC Section\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 625 / 1288\n \n [RS274NGC]\n # is the sub, with is called when a error during tool change happens, not needed on every\n machine configuration\n ON_ABORT_COMMAND=O call\n@@ -29573,15 +29573,15 @@\n toplevel.py\n remap.py\n stdglue.py\n From /configs/sim/gmoccapy/macros copy\n on_abort.ngc\n change.ngc\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 626 / 1288\n \n to the directory specified as SUBROUTINE_PATH, see RS274NGC Section.\n Open change.ngc with a editor and uncomment the following lines (49 and 50):\n F #<_hal[gmoccapy.probevel]>\n G38.2 Z-4\n@@ -29617,15 +29617,15 @@\n \n To enter the page you will have to click on\n and give an unlock code, which is 123 by\n default. If you want to change it at this time you will have to edit the hidden preference file, see the\n display section for details.\n The page is separated in three main tabs:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 627 / 1288\n \n 10.2.7.1. Appearance\n \n Figura 10.18: GMOCCAPY settings page Appearance\n On this tab you will find the following options:\n@@ -29636,15 +29636,15 @@\n Start maximized\n Start as window - If you select start as window the spinboxes to set the position and size will get\n 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\n on the settings.\n Window decorated - Allows the title bar to be hidden. (default: title bar visible)\n hide cursor - Does allow to hide the cursor, what is very useful if you use a touch screen.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 628 / 1288\n \n hide tooltips - Hides the tool tips.\n Keyboard The checkboxes allow the user to select if he wants the on board keyboard to be shown\n immediately, when entering the MDI Mode, when entering the offset page, the tooledit widget or when\n open a program in the EDIT mode. The keyboard button on the bottom button list will not be affected\n@@ -29669,15 +29669,15 @@\n The letters \u201dde\u201d are for German, you will have to set them according to your locale settings. Just\n execute this file before starting LinuxCNC, it can be done also adding a starter to your local folder.\n ./config/autostart\n \n So that the layout is set automatically on starting.\n For matchbox-keyboard you will have to make your own layout, for a German layout ask in the forum.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 629 / 1288\n \n GMOCCAPY with Onboard keyboard in edit mode\n On Touch Off This gives the option whether to show the preview tab or the offset page tab when you\n enter the touch off mode by clicking the corresponding bottom button.\n show preview\n@@ -29688,15 +29688,15 @@\n Relative mode = black\n Absolute mode = blue\n Distance to go = yellow\n The foreground color of the DRO can be selected with:\n homed color = green\n unhomed color = red\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 630 / 1288\n \n nota\n You can change through the DRO modes (absolute, relative, distance to go) by clicking the number\n on the DRO! If you click on the left side letter of the DRO a popup window will allow you to set the\n value of the axes, making it easier to set the value, as you will not need to go over the touch off\n@@ -29734,15 +29734,15 @@\n \u2022 left zoom, middle move, right rotate\n \u2022 left move, middle rotate, right zoom\n \u2022 left zoom, middle rotate, right move\n \u2022 left move, middle zoom, right rotate\n \u2022 left rotate, middle zoom, right move\n Default is left move, middle zoom, right rotate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 631 / 1288\n \n The mouse wheel will still zoom the preview in every mode.\n sugerencia\n If you select an element in the preview, the selected element will be taken as rotation center point\n and in auto mode the corresponding code line will be highlighted.\n@@ -29759,15 +29759,15 @@\n messages sounds should be played. By default \u201dFollow System Theme\u201d is set.\n It further allows to change the icon theme. Currently there are three themes available:\n classic\n material\n material light\n To create custom icon themes, see section Icon Theme for details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 632 / 1288\n \n 10.2.7.2. Hardware\n \n Hardware MPG Scale For the different HAL pins to connect MPG wheels to, you may select individual\n scales to be applied. The main reason for this was my own test to solve this through HAL connections,\n@@ -29783,15 +29783,15 @@\n are others that will never allow this. So everybody can select whether to use them or not.\n Keyboard shortcuts are disabled by default.\n \n aviso\n It is not recommended to use keyboard jogging, as it represents a serious risk for operator and\n machine.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 633 / 1288\n \n Please take care if you use a lathe, then the shortcuts will be different, see the Lathe Specific Section.\n General\n F1 - Trigger Estop (will work even if keyboard shortcuts are disabled)\n F2 - Toggle machine on/off\n@@ -29822,15 +29822,15 @@\n Spindle\n Starting RPM - Sets the rpm to be used if the spindle is started and no S value has been set.\n nota\n This value will be presetted according to your settings in [DISPLAY] DEFAULT_SPINDLE_SPEED of\n your INI file. If you change the settings on the settings page, that value will be default from that\n moment, your INI file will not be modified.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 634 / 1288\n \n Spindle bar min and Spindle bar max - Sets the limits of the spindle bar shown in the INFO frame\n on the main screen.\n Default values are:\n MIN = 0\n@@ -29845,15 +29845,15 @@\n please take care that the \u201drabbit mode\u201d is activated, otherwise you will not be able to jog faster\n than the turtle jog velocity, which is calculated using the turtle jog factor.\n Turtle jog factor - Sets the scale to apply for turtle jog mode (button pressed, showing the turtle).\n If you set a factor of 20, the turtle max. jog velocity will be 1/20 of the max. velocity of the machine.\n nota\n This button can be controlled using the Turtle-Jog HAL Pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 635 / 1288\n \n 10.2.7.3. Advanced Settings\n \n Tool Measurement Please check Auto Tool Measurement\n nota\n@@ -29866,15 +29866,15 @@\n \u2022 X Pos. - The X position of the tool switch.\n \u2022 Y Pos. - The Y position of the tool switch.\n \u2022 Z Pos. - The Z position of the tool switch, we will go as rapid move to this coordinate.\n \u2022 Max. Probe The distance to search for contact, an error will be launched, if no contact is\n given in this range. The distance has to be given in relative coordinates, beginning the move\n from Z Pos., so you have to give a negative value to go down!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 636 / 1288\n \n \u2022 Probe Height - The height of your probe switch, you can measure it. Just touch off the base\n where the probe switch is located and set that to zero. Then make a tool change and watch\n the tool_offset_z value, that is the height you must enter here.\n Probe velocities\n@@ -29908,15 +29908,15 @@\n the 11th message will delete the first one, so you will only see the last 10.\n Font - The font and size you want to use to display the messages.\n Use frames - If you activate the checkbox, each message will be displayed in a frame, so it is much\n easier to distinguish the messages. But you will need a little bit more space.\n Launch test message-button - It will show a message, so you can see the changes of your settings\n without the need to generate an error.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 637 / 1288\n \n 10.2.8. Icon Theme\n Icon themes are used to customize the look and feel of GMOCCAPY\u2019s icons.\n GMOCCAPY ships with three different icon themes:\n classic - The classic GMOCCAPY icons.\n@@ -29953,15 +29953,15 @@\n png files). A special case is the directory called \u201dscalable/actions\u201d, this contains scalable icons not\n tied to a specific size (e.g. svg files).\n By supplying different sized versions of the icons, we can guarantee a nice looking icon if different\n sizes and we also have the ability to change the icon according to its size, for example a 64x64 px\n sized icon may contain more details than its 16x16 px version.\n For each directory we also have to write a section in the index.theme file:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 638 / 1288\n \n [16x16/actions]\n Size=16\n Type=Fixed\n Context=Actions\n@@ -30010,25 +30010,25 @@\n Warning: this color indicates \u201dwarning\u201d (usually something\n yellow/orange\u2019ish).\n Error: this color indicates \u201derror\u201d (usually something red\u2019ish).\n \n sugerencia\n Examples of symbolic icons can be found at linuxcnc/share/gmoccapy/icons/material.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 639 / 1288\n \n 10.2.9. Lathe Specific Section\n If in the INI file LATHE = 1 is given, the GUI will change its appearance to the special needs for a\n lathe. Mainly the Y axis will be hidden and the jog buttons will be arranged in a different order.\n \n Figura 10.19: Normal Lathe\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 640 / 1288\n \n Figura 10.20: Back Tool Lathe\n As you see the R DRO has a black background and the D DRO is gray. This will change according to\n the active G-code G7 or G8. The active mode is visible by the black background, meaning in the shown\n images G8 is active.\n@@ -30039,15 +30039,15 @@\n Normal Lathe:\n Arrow_Left or NumPad_Left - Jog Z minus\n Arrow_Right or NumPad_Right - Jog Z plus\n Arrow_up or NumPad_Up - Jog X minus\n Arrow_Down or NumPad_Down - Jog X plus\n Back Tool Lathe:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 641 / 1288\n \n Arrow_Left or NumPad_Left - Jog Z minus\n Arrow_Right or NumPad_Right - Jog Z plus\n Arrow_up or NumPad_Up - Jog X plus\n Arrow_Down or NumPad_Down - Jog X minus\n@@ -30059,15 +30059,15 @@\n There is a very good WIKI, which is actually growing, maintained by Marius, see Plasma wiki page.\n \n 10.2.11. Videos on YouTube\n Below is a series of videos that show GMOCCAPY in action. Unfortunately, these videos don\u2019t show\n the latest version of GMOCCAPY, but the way to use it will still be the same as in the current version.\n I will update the videos as soon as possible.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 642 / 1288\n \n 10.2.11.1. Basic Usage\n https://youtu.be/O5B-s3uiI6g\n 10.2.11.2. Simulated Jog Wheels\n https://youtu.be/ag34SGxt97o\n@@ -30087,15 +30087,15 @@\n 10.2.12.1. Strange numbers in the info area\n If you get strange numbers in the info area of GMOCCAPY like:\n \n You have made your config file using an older version of StepConfWizard. It has made a wrong\n entry in the INI file under the [TRAJ] named MAX_LINEAR_VELOCITY = xxx. Change that entry to\n MAX_VELOCITY = xxx.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 643 / 1288\n \n 10.2.12.2. Not ending macro\n If you use a macro without movement, like this one:\n o sub\n G92.1\n@@ -30122,15 +30122,15 @@\n not require keyboard or mouse.\n It is meant to be used with a touch screen, and works in combination with a wheel/MPG and a few\n buttons and switches.\n The Handwheel tab has radio buttons to select between Feed Override, Spindle Override, Maximum\n Velocity and Jogging functions for the wheel/MPG input. Radio buttons for axis selection and increment\n for jogging are also provided.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 644 / 1288\n \n 10.3.1. Panel Configuration\n 10.3.1.1. HAL connections\n Touchy looks in the INI file, under the heading [HAL] for entries of POSTGUI_HALFILE=.\n Typically would be touchy_postgui.hal, but can be any legal filename. These commands\n@@ -30143,15 +30143,15 @@\n are preferred.\n \n For more information on HAL files and the net command see the HAL Basics.\n Touchy has several output pins that are meant to be connected to the motion controller to control\n wheel jogging:\n touchy.jog.wheel.increment, which is to be connected to the axis.N.jog-scale pin of each axis N.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 645 / 1288\n \n touchy.jog.wheel.N, which is to be connected to axis.N.jog-enable for each axis N.\n nota\n N represents the axis number 0-8.\n \n@@ -30183,15 +30183,15 @@\n When you start Touchy the first time, check the Preferences tab. If using a touchscreen, choose the\n option to hide the pointer for best results.\n The Status Window is a fixed height, set by the size of a fixed font. This can be affected by the Gnome\n DPI, configured in System / Preferences / Appearance / Fonts / Details. If the bottom of the screen is\n cut off, reduce the DPI setting.\n All other font sizes can be changed on the Preferences tab.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 646 / 1288\n \n 10.3.2.3. Macros\n Touchy can invoke O-word macros using the MDI interface. To configure this, in the [TOUCHY] section\n of the INI file, add one or more MACRO lines. Each should be of the following format:\n MACRO=increment xinc yinc\n@@ -30222,39 +30222,39 @@\n from GladeVCP. GladeVCP uses the GTK widget editor GLADE to build virtual control panels (VCP) by\n point and click. Gscreen combines this with Python programming to create a GUI screen for running\n a CNC machine.\n Gscreen is customizable if you want different buttons and status LEDs. Gscreen supports GladeVCP\n which is used to add controls and indicators. To customize Gscreen you use the Glade editor. Gscreen\n is not restricted to adding a custom panel on the right or a custom tab it is fully editable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 647 / 1288\n \n Figura 10.21: Gscreen Default Screen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 10.22: Gscreen Silverdragon Screen\n \n 648 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 10.23: Gscreen Spartan Screen\n \n 649 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 650 / 1288\n \n Figura 10.24: Gscreen Gaxis Screen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 651 / 1288\n \n Figura 10.25: Gscreen Industrial Screen\n Gscreen is based on Glade (the editor), PyGTK (the widget toolkit), and GladeVCP (LinuxCNC\u2019s connection to Glade and PyGTK). GladeVCP has some special widgets and actions added just for LinuxCNC\n A widget is just the generic name used for the buttons, sliders, labels etc of the PyGTK toolkit.\n 10.4.1.1. Glade File\n@@ -30262,15 +30262,15 @@\n the screen. PyGTK uses this file to actually display and react to those widgets. The Glade editor makes\n it relatively easy to build and edit this file You must use the Glade 3.38.2 editor that uses the GTK3\n widgets.\n 10.4.1.2. PyGTK\n PyGTK is the Python binding to GTK. GTK is the toolkit of visual widgets, it is programmed in C. PyGTK\n uses Python to bind with GTK.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 652 / 1288\n \n 10.4.2. GladeVCP\n GladeVCP binds LinuxCNC, HAL, PyGTK and Glade all together. LinuxCNC requires some special widgets so GladeVCP supplies them. Many are just HAL extensions to existing PyGTK widgets. GladeVCP\n creates the HAL pins for the special widgets described in the Glade file. GladeVCP also allows one\n to add Python commands to interact with the widgets, to make them do things not available in their\n@@ -30315,15 +30315,15 @@\n named widgets. This ties the theme file to the Glade file more tightly. Some of the sample screen skins\n allow the user to select any of the themes on the system. The sample gscreen is an example. Some\n will load the theme that is the same name in the config file. The sample gscreen-gaxis is an example.\n This is done by putting the theme folder in the config folder that has the INI and HAL files and naming\n it: SCREENNAME_theme (SCREENNAME being the base name of the files eg. gaxis_theme). Inside\n this folder is another folder call gtk-2.0, inside that is the theme files. If you add this file, Gscreen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 653 / 1288\n \n will default to this theme on start up. gscreen-gaxis has a sample custom theme that looks for certain\n named widgets and changes the visual behavior of those specific widgets. The Estop and machine-on\n buttons use different colors then the rest of the buttons so that they stand out. This is done in the\n handler file by giving them specific names an by adding specific commands in the theme\u2019s gtkrc file.\n@@ -30354,15 +30354,15 @@\n about GladeVCP widgets is a prerequisite. If the existing widgets give you the function you want or\n need then no Python code needs be added, just save the Glade file in your configuration folder. If you\n need something more custom then you must do some Python programming. The name of the parent\n window needs to be window1. Gscreen assumes this name.\n Remember, if you use a custom screen option YOU are responsible for fixing it (if required) when\n updating LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 654 / 1288\n \n 10.4.3. Building a simple clean-sheet custom screen\n \n Lets build a simple usable screen. Build this in the Glade editor (if using a RIP package run it from a\n terminal after using . scripts/rip-environment ).\n@@ -30375,15 +30375,15 @@\n The sourceview widget will try to use the whole window so adding it to a scrolled window will cover\n this. (This is already done in the example.)\n The buttons will expand as the window is made larger which is ugly so we will set the box they are\n in, to not expand (see below).\n The button types to use depend on the VCP_action used -eg vcp_toggle_action usually require toggle\n buttons (Follow the example for now).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 655 / 1288\n \n The buttons in this example are regular buttons not HAL buttons. We don\u2019t need the HAL pins.\n \n In this screen we are using VCP_actions to communicate to LinuxCNC the actions we want. This allows\n us standard functions without adding Python code in the handler file. Let\u2019s link the estop toggle button\n@@ -30391,15 +30391,15 @@\n and click the button beside it. Now select the toggle estop action. Now the button will toggle estop on\n and off when clicked. Under the general tab you can change the text of the button\u2019s label to describe\n its function. Do this for all the buttons.\n Select the gremlin widget click the common tab and set the requested height to 100 and click the\n checkbox beside it.\n Click the horizontal box that holds the buttons. Click the packing tab and click expand to No.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 656 / 1288\n \n Save it as tester.glade and save it in sim/gscreen/gscreen_custom/ folder. Now launch LinuxCNC and\n click to sim/gscreen/gscreen_custom/tester and start it. If all goes well our screen will pop up and the\n buttons will do their job. This works because the tester.ini tells gscreen to look for and load tester.glade\n and tester_handler.py. The tester_handler.py file is included in that folder and is coded just show the\n@@ -30440,15 +30440,15 @@\n periodic(self): This is called every (default 100) milliseconds. Use it to update your widgets/HAL\n pins. You can call Gscreen regular periodic afterwards too, self.gscreen.update_position() or just\n add pass to not update anything. Gscreen\u2019s update_position() actually calls many separate functions.\n If you wish to incorporate some of those widgets then just call those functions directly.\n You can also add you own functions to be called in this file. Usually you would add a signal to a widget\n to call your function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 657 / 1288\n \n 10.4.4.1. Adding Keybindings Functions\n Our tester example would be more useful if it responded to keyboard commands. There is a function\n called keybindings() that tries to set this up. While you can override it completely, we didn\u2019t - but it\n assumes some things:\n@@ -30495,15 +30495,15 @@\n pressed. Then we add the function to the handle file to call a Gscreen builtin function to start halmeter.\n 10.4.4.2. Linuxcnc State Status\n The module Gstat polls LinuxCNC\u2019s state every 100ms and sends callback messages to user functions\n when state changes. You can register messages to act on specific state changes. As an example we\n will register to get file-loaded messages when LinuxCNC loads a new file. First we must import the\n module and instantiate it: In the import section of the handler file add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 658 / 1288\n \n from hal_glib import GStat\n GSTAT = GStat()\n \n In the handler file under def __init__(self): add:\n@@ -30545,15 +30545,15 @@\n 2. Gscreen sets the debug mode and set the optional skin name.\n 3. Gscreen checks to see if there are local XML, handler and/or locale files in the configuration\n folder. It will use them instead of the default ones (in share/gscreen/skins/) (There can be two\n separate screens displayed).\n 4. The main screen is loaded and translations set up. If present the second screen will be loaded\n and translations set up.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 659 / 1288\n \n 5. Optional Audio is initialized if available.\n 6. It reads some of the INI file to initialize the units, and the number/type of axes.\n 7. Initializes Python\u2019s binding to HAL to build a non-realtime component with the Gscreen name.\n 8. GladeVCP\u2019s makepins is called to parse the XML file to build HAL pins for the HAL widgets and\n@@ -30590,15 +30590,15 @@\n 29. Gscreen set up messages specified in the INI file.\n 30. Gscreen tells HAL the Gscreen HAL component is finished making pins and is ready. If there is a\n terminal widget in the screen it will print all the Gscreen pins to it.\n 31. Gscreen sets the display cycle time based on the INI file.\n 32. Gscreen checks the handler file for timer_interupt(self) function call otherwise use Gscreen\u2019s\n default function call.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 660 / 1288\n \n 10.4.6. INI Settings\n Under the [DISPLAY] heading:\n DISPLAY = gscreen -c tester\n options:\n@@ -30639,15 +30639,15 @@\n # This just shows in the status bar and desktop notify popup.\n MESSAGE_BOLDTEXT = NONE\n MESSAGE_TEXT = This is a statusbar test\n MESSAGE_DETAILS = STATUS DETAILS\n MESSAGE_TYPE = status\n MESSAGE_PINNAME = statustest\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 661 / 1288\n \n # This will pop up a dialog that asks a yes no question\n MESSAGE_BOLDTEXT = NONE\n MESSAGE_TEXT = This is a yes no dialog test\n MESSAGE_DETAILS = Y/N DETAILS\n@@ -30691,15 +30691,15 @@\n \n The line:\n **** GSCREEN INFO: handler file path: [\u2019/home/chris/emc-dev/share/gscreen/skins/industrial/ \u2190industrial_handler.py\u2019]\n \n shows where the stock file lives. Copy this file to your config folder. This works the same for the Glade\n file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 662 / 1288\n \n 10.5. QtDragon GUI\n 10.5.1. Introduction\n QtDragon and QtDragon_hd are built with the QtVCP framework. It is the creative vision of forum\n personality Persei8. Much of it is based on the excellent work of others in the LinuxCNC community.\n@@ -30713,15 +30713,15 @@\n \n 10.5.1.1. QtDragon\n \n Figura 10.26: QtDragon - 3 or 4 axis sample (1440x860) in silver theme\n QtDragon is resizable from a resolution of 1280x768 to 1680x1200. It will work in window mode on\n any monitor with higher resolution but not on monitors with lower resolution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 663 / 1288\n \n 10.5.1.2. QtDragon_hd\n \n Figura 10.27: QtDragon_hd - 3 or 4 axis sample for larger monitors (1920x1056) in dark theme\n QtDragon_hd is a similar design as QtDragon but modified to utilize the extra space of modern larger\n@@ -30736,15 +30736,15 @@\n You can only have one of each section (e.g., [HAL]) in the INI file. If you see in these docs multiple\n section options, place them all under the one appropriate section name.\n \n 10.5.2.1. Display\n In the section [DISPLAY] change the DISPLAY = assignment to read:\n qtdragon for a small version\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 664 / 1288\n \n qtdradon_hd for the large version.\n You can add -v, -d, -i, or -q for (respectably) verbose, debug, info or quiet output to the terminal.\n [DISPLAY]\n DISPLAY = qtvcp qtdragon\n@@ -30781,15 +30781,15 @@\n [DISPLAY]\n DEFAULT_SPINDLE_0_SPEED = 500\n SPINDLE_INCREMENT = 200\n MIN_SPINDLE_0_SPEED = 100\n MAX_SPINDLE_0_SPEED = 2500\n MAX_SPINDLE_POWER = 1500\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 665 / 1288\n \n 10.5.2.6. Jogging increments\n Set selectable jogging increments.\n These increments can be user changed.\n [DISPLAY]\n@@ -30836,15 +30836,15 @@\n panel.\n If using stackedWidget_mainTab, a button labelled User will appear.\n Pressing this button will cycle through displaying all available panels (specified for this location) on\n the main tab area.\n Sample adding a builtin panel to the utilities tab, i.e., a graphical animated machine using\n the vismach library.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 666 / 1288\n \n [DISPLAY]\n EMBED_TAB_NAME = Vismach demo\n EMBED_TAB_COMMAND = qtvcp vismach_mill_xyz\n EMBED_TAB_LOCATION = tabWidget_utilities\n@@ -30868,15 +30868,15 @@\n ~/linuxcnc/nc_files/examples/probe/basic_probe/macros:~/linuxcnc/nc_files/examples/remap- \u2190subroutines: \\\n ~/linuxcnc/nc_files/examples/ngcgui_lib/remap_lib\n \n QtVCP\u2019s NGCGUI program also need to know where to open for subroutine selection and pre-selection.\n NGCGUI_SUBFILE_PATH must point to an actual path on your system and also a path described in\n SUBROUTINE_PATHS.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 667 / 1288\n \n [DISPLAY]\n # NGCGUI subroutine path.\n # Thr path must also be in [RS274NGC] SUBROUTINE_PATH\n NGCGUI_SUBFILE_PATH = ~/linuxcnc/nc_files/examples/ngcgui_lib\n@@ -30918,15 +30918,15 @@\n jpg = image-to-gcode\n py = python\n \n 10.5.2.13. Probe/Touchplate/Laser Settings\n QtDragon has INI entries for two optional probing tab screens available. Comment/uncomment which\n ever you prefer.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 668 / 1288\n \n Versa probe is a QtVCP ported version of a popular GladeVCP probing panel.\n Basic Probe is a QtVCP ported version based on the third party basic probe screen.\n Both perform similar probing routines, though Versa probe optionally handles auto tool measurement.\n [PROBE]\n@@ -30967,15 +30967,15 @@\n RS274NGC_STARTUP_CODE = G17 G20 G40 G43H0 G54 G64P0.0005 G80 G90 G94 G97 M5 M9\n \n 10.5.2.16. Macro Buttons\n QtDragon has up to ten convenience buttons for calling macro actions.\n These could also call OWord routines if desired.\n In the sample configurations they are labelled for moving between current user system origin (zero\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 669 / 1288\n \n point) and Machine system origin.\n User origin is the first MDI command in the INI list, machine origin is the second.\n This example shows how to move Z axis up first. The commands are separated by the ;.\n The label is set after the comma. The symbols \\n adds a line break.\n@@ -31015,15 +31015,15 @@\n F1 - Estop on/off\n F2 - Machine on/off\n F12 - Style Editor\n Home - Home All Joint of the Machine\n Escape - Abort Movement\n Pause - Pause Machine Movement\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 670 / 1288\n \n 10.5.4. Buttons\n Buttons that are checkable will change their text colour when checked. This is controlled by the\n stylesheet/theme\n \n@@ -31073,15 +31073,15 @@\n \n This bit pin is an output to the spindle control to pause it.\n You would connect it to spindle.0.inhibit.\n qtdragon.spindle-inhibit\n \n This bit output pin can be connected to turn on a laser:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 671 / 1288\n \n qtdragon.btn-laser-on\n \n This float output pin indicates the camera rotation in degrees:\n qtdragon.cam-rotation\n@@ -31136,15 +31136,15 @@\n \n 10.5.9. Spindle\n The screen is intended to interface to a VFD, but will still work without it.\n There are a number of VFD drivers included in the LinuxCNC distribution.\n It is up to the end user to supply the appropriate driver and HAL file connections according to his own\n machine setup.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 672 / 1288\n \n 10.5.10. Auto Raise Z Axis on Spindle Pause\n QtDragon can be set up to automatically raise and lower the Z axis when the spindle is paused.\n When a program is paused, then you press the Spindle Pause button to stop the spindle and raise it\n in Z.\n@@ -31194,15 +31194,15 @@\n be called probe_points.txt. The file can be modified or updated at any time while compensation is\n disabled. When next enabled, the file will be reread and the compensation map is recalculated. This\n file is expected to be in the configuration directory.\n The probe data file is generated by a probing program, which itself is generated by an external python\n program called gcode_ripper, which can be launched from the file manager tab using the G-code\n Ripper button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 673 / 1288\n \n 10.5.11.1. Using G-code Ripper for Z level Compensation\n \n Figura 10.28: QtDragon_hd showing G-code Ripper\n nota\n@@ -31216,15 +31216,15 @@\n If necessary, make adjustments and press Recalculate.\n Press Save G-Code File - Probe Only.\n Save the generated file to the nc_files folder.\n Exit gcode_ripper.\n \n Without changing the offsets, run this program. Make sure the probe tool is installed. When complete, there will be a file in the config directory called probe_points.txt.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 674 / 1288\n \n In qtdragon_hd, press the Enable Z Comp button to enable compensation. Look at the status line\n for indication of success or failure. Active compensation will be displayed beside the label: Z Level\n Comp While jogging that display should change based on the compensation component.\n nota\n@@ -31290,15 +31290,15 @@\n scaled-s32-sums.0.in0\n net eoffset-zlevel-count\n scaled-s32-sums.0.in1\n setp scaled-s32-sums.0.scale0 1000\n net eoffset-counts\n scaled-s32-sums.0.out-s\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 675 / 1288\n \n 10.5.12. Probing\n The probe screen has been through basic testing but there could still be some minor bugs. When\n running probing routines, use extreme caution until you are familiar with how everything works.\n Probe routines run without blocking the main GUI. This gives the operator the opportunity to watch\n@@ -31313,15 +31313,15 @@\n 1. how far above the table the probe trigger point is (tool setter height) and\n 2. how far above the table the top of the workpiece is.\n This operation has to be done every time the tool is changed as the tool length is not saved.\n For touching off with a touch probe, whether you use the touchplate operation with thickness set to 0\n or use a probing routine, the height from table to top of workpiece parameter is not taken into account\n and can be ignored. It is only for the tool setter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 676 / 1288\n \n 10.5.12.1. Versa Probe\n \n Figura 10.29: QtDragon - Versa Probe Option\n Versa probe is used to semi-automatically probe work pieces to find edges, centers and angles.\n@@ -31338,15 +31338,15 @@\n SEARCH:: This is the feed rate at which the probe searches for the target workpiece in machine\n units per minute. The search speed should be slow enough to give an acceptable initial accuracy,\n but fast enough to not waste time waiting for movement. Recommendation: 200-500 mm/min.\n PROBE:: Once initial contact has been made and the probe is retracted, it will wait for 0.5 seconds\n before performing the search again at a lower speed, the probe velocity. This lower speed ensures\n the machine can stop movement as quickly as possible on contact with the workpiece.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 677 / 1288\n \n RAPID:: Axis movements not associated with searching are done at the speed defined by RAPID in\n machine units per minute.\n SIDE/EDGE LENGTH:: This is the distance the probe will move at the rapid rate to the position\n where it will begin a search. If measuring a corner, it will move EDGE LENGTH units away from\n@@ -31366,15 +31366,15 @@\n CLEARANCE to 0.\n There are three toggle buttons:\n Auto Zero This selects if after probing the relevant axis is set to zero in the current user system.\n Auto Skew This selects if after probing, the system will be rotated or just display the calculated\n rotation.\n Tool Measure This (if integrated) turns auto tool probing on and off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 678 / 1288\n \n 10.5.12.2. Basic probe\n \n Figura 10.30: QtDragon - Basic Probe Option\n Basic probe is used to semi-automatically probe work pieces to find edges, centers and angles. The\n@@ -31387,15 +31387,15 @@\n Calibration\n You must carefully set the Probing Parameters:\n Probe Tool: will only allow probing if this tool number is in the spindle\n Probe Diameter: the size of the probe tip\n Probe Rapid: the speed of rapid moves in machine units\n Probe Search: the speed of the first rough search in machine units\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 679 / 1288\n \n Probe Feed: the speed of the second fine search in machine units\n Step Off : back off and re-probe distance\n Max XY Distance: the maximum distance the probe will search for in X and Y before failing with\n error\n@@ -31426,15 +31426,15 @@\n EDGE WIDTH - distance along edge wall (away from corner) to start probing.\n nota\n These distance are always to be set in machine units (mm for metric machine, inch for imperial\n machine).\n \n Preset:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 680 / 1288\n \n manual set probe at the intersection of the edges (ie corner) of material as described by the green\n bullseye on the button. Set it Z CLEARANCE above the top of material. These can be done by eye.\n set EXTRA CLEARANCE to a value that you want the probe to go below the top of material. (So the\n probe will move from its start position down Z Clearance + Extra Clearance distance.)\n@@ -31450,15 +31450,15 @@\n 3. probe wall twice (rough and fine),\n 4. move diagonally to the other wall as set by EDGE WIDTH and XY CLEARANCE,\n 5. probe wall twice,\n 6. raise probe up by Z CLEARANCE + EXTRA DEPTH 9returns to starting height),\n 7. rapid back to starting corner (now calculated using the probed walls),\n 8. if auto zero button is enabled, set X and Y of the current user system to zero.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 681 / 1288\n \n 10.5.13. Touch plate\n \n Figura 10.31: QtDragon - Touch Plate\n You can use a conductive touch plate or equivalent to auto touch off (zero the user coordinate) for the\n@@ -31477,15 +31477,15 @@\n calculation from the touchplate height setting.\n \n 10.5.14. Auto Tool Measurement\n QtDragon can be setup to do integrated auto tool measurement using the Versa Probe widget and\n remap code. To use this feature, you will need to do some additional settings and you may want to use\n the offered HAL pin to get values in your own ngc remap procedure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 682 / 1288\n \n importante\n Before starting the first test, do not forget to enter the probe height and probe velocities on\n the versa probe settings page.\n \n@@ -31500,15 +31500,15 @@\n When fist setting up auto tool measurement, please use caution until you confirm tool change and\n probe locations - it is easy to break a tool/probe. Abort will be honoured while the probe is in motion.\n \n Figura 10.32: Auto tool measurement\n With the first given tool change the tool will be measured and the offset will be set automatically to\n fit the block height. The advantage of this way is, that you do not need a reference tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 683 / 1288\n \n nota\n Your program must contain a tool change at the beginning. The tool will be measured, even it has\n been used before, so there is no danger if the block height has changed. There are several videos\n on you tube that demonstrate the technique using GMOCCAPY. The GMOCCAPY screen pioneered the\n@@ -31523,15 +31523,15 @@\n Probe down in Z to maximum defined in the INI\u2019s [VERSA_TOOLSETTER] MAXPROBE\n Return Z to position defined in the INI\u2019s [TOOL_CHANGE] Z\n nota\n The [TOOL_CHANGE] Z position should be high enough so the tool will not hit the tool probe when\n moving to the [VERSA_TOOLSETTER] X and Y position. MAXPROBE distance needs to be high enough\n for the tool to touch the probe.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 684 / 1288\n \n 10.5.14.1. Work Piece Height Probing\n \n Figura 10.33: QtDragon_hd - Work piece Height probing\n This program probes 2 user specified locations in the Z axis and calculates the difference in heights.\n@@ -31544,15 +31544,15 @@\n displayed on the DROs.\n Autofill Workpiece Height on Main Screen\n When checked, the calculated height is automatically transferred to the Workpiece Height field in\n the main screen.\n Otherwise, the main screen is not affected.\n Workpiece Probe At\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 685 / 1288\n \n the X, Y and Z coordinates specify where the first probing routine should start, in current WCS\n Machine Probe At\n the X, Y and Z coordinates specify where the second probing routine should start, in current WCS\n Z Safe Travel Height\n@@ -31587,15 +31587,15 @@\n Reflects screen entry.\n qtversaprobe.probeheight (HAL_FLOAT) the toolsetter probe switch height. Reflects screen entry.\n qtversaprobe.searchvel (HAL_FLOAT) the velocity to search for the tool probe switch\n qtversaprobe.probevel (HAL_FLOAT) the velocity to probe tool length. Reflects screen entry.\n qtversaprobe.backoffdist (HAL_FLOAT) the distance the probe backs off after triggering. Reflects\n screen entry.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 686 / 1288\n \n 10.5.14.3. Tool Measurement INI File Modifications\n Modify your INI file to include the following:\n QtDragon allows you to select one of two styles of touch probe routines. Versa probe works with a M6\n remap to add auto tool probing.\n@@ -31635,15 +31635,15 @@\n wait for manual tool change acknowledgement\n go to VERSA_TOOLSETTER XY position\n go to VERSA_TOOLSETTER Z position\n fast probe\n slow probe\n go to TOOLCHANGE Z position\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 687 / 1288\n \n Z_MAX_CLEAR is the Z position to go to before moving to the tool setter when using the Travel to\n Toolsetter button.\n Travel to Toolsetter Action sequence:\n \n@@ -31687,15 +31687,15 @@\n mode. A dialog will be shown allowing the spindle direction and speed to be preset. The start line is\n indicated in the box labelled LINE, next to the CYCLE START button. The run from line feature can\n be disabled in the settings page.\n nota\n LinuxCNC\u2019s run-from-line is not very user friendly. E.g., it does not start the spindle or confirm the\n proper tool. Also, it does not handle subroutines well. If used it is best to start on a rapid move.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 688 / 1288\n \n 10.5.16. Laser buttons\n The LASER ON/OFF button in intended to turn an output on or off which is connected to a small laser\n crosshair projector. When the crosshair is positioned over a desired reference point on the workpiece,\n the REF LASER button can be pushed, which then sets the X and Y offsets to the values indicated by\n@@ -31727,15 +31727,15 @@\n You can monitor/modify tool offsets from this tab. Adding and deleting tools from the tool file can also\n be done from this tab. When this tab is selected the individual home buttons in the DRO area will\n change to tool offset setting buttons. They will return to home buttons when you select another tab.\n Pressing this tool button will drop down a when menu of options:\n Set Current Tool Position\n Adjust Current Tool Position\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 689 / 1288\n \n Zero Current Tool Position\n Set Tool Offset Directly\n Reset To Last\n 10.5.17.5. Status Tab\n@@ -31762,15 +31762,15 @@\n PDF - any loaded PDF setup pages are displayed here\n PROPERTIES - when a program is loaded its gcode properties are displayed here.\n There are navigation buttons for HTML page:\n The up arrow returns you to the default HTML page\n The left arrow moves backward one HTML page\n The right arrow moves forward one HTML page\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 690 / 1288\n \n If you wish to include a custom default HTML page, name it default_setup.html and place it in your\n configuration folder.\n Custom QtVCP panels can be displayed in this tab by setting the EMBED_TAB_LOCATION option to\n tabWidget_setup.\n@@ -31784,15 +31784,15 @@\n Facing: allows quick face milling of a definable area at angles of 0,45 and 90 degrees\n Hole Circle: allows quick setting of a program to drill a bolt circle of definable diameter and number\n of holes.\n NGCGUI: is a QtVCP version of the popular G-code subroutine builder/selector, see Widgets-NGCGUI.\n \n Custom QtVCP panels can be displayed here by setting the EMBED_TAB_LOCATION option to tabWidget_uti\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 691 / 1288\n \n 10.5.17.12. User Tab\n \n This tab will only be displayed if an embedded panel has been designated for the location stackedWidget_mai\n If more then one embedded tab has been designated, then pressing the user tab will cycle through\n@@ -31822,15 +31822,15 @@\n }\n \n To change the DRO display font and display format:\n DROLabel {\n font: 25pt \u201dLato Heavy\u201d;\n qproperty-imperial_template: \u2019 %9.5f\u2019;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n qproperty-metric_template: \u2019 %10.4f\u2019;\n qproperty-angular_template: \u2019 %11.2f\u2019;\n }\n \n To change the text of the mist button to air (add these lines)\n #action_mist{\n@@ -31882,15 +31882,15 @@\n \n To have the manual spindle buttons also incrementally increase/decrease speed:\n #action_spindle_fwd{\n qproperty-spindle_up_action: true;\n \n 692 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 693 / 1288\n \n }\n #action_spindle_rev{\n qproperty-spindle_down_action: true;\n }\n@@ -31906,15 +31906,15 @@\n [DISPLAY]\n USER_COMMAND_FILE = CONFIGFOLDER/qtdragonrc.py\n \n See Modifying Screens for more information about customization.\n \n Figura 10.36: QtDragon - Customized QtDragon\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 694 / 1288\n \n 10.6. NGCGUI\n \n Figura 10.37: NGCGUI embedded into AXIS\n \n@@ -31924,15 +31924,15 @@\n NGCGUI can run as a standalone application or can be embedded in multiple tab pages in the AXIS\n GUI.\n PyNGCGUI is an alternate, Python implementation of NGCGUI.\n PyNGCGUI can run as a standalone application or can be embedded as a tab page (with its own set\n of multiple subroutine tabs) in any GUI that supports embedding of GladeVCP applications AXIS,\n Touchy, Gscreen and GMOCCAPY.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 695 / 1288\n \n Using NGCGUI or PyNGCGUI:\n Tab pages are provided for each subroutine specified in the INI file.\n New subroutines tab pages can be added on the fly using the custom tab.\n Each subroutine tab page provides entry boxes for all subroutine parameters.\n@@ -31964,15 +31964,15 @@\n (.ngc) files and G-code-meta-compiler (.gcmc) files:\n nc_files/ngcgui_lib\n \u2022 ngcgui.ngc - An easy to understand example using subroutines\n \u2022 arc1.ngc - basic arc using cutter radius compensation\n \u2022 arc2.ngc - arc speced by center, offset, width, angle (calls arc1)\n \u2022 backlash.ngc - routine to measure an axis backlash with dial indicator\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 696 / 1288\n \n \u2022 db25.ngc - creates a DB25 plug cutout\n \u2022 gosper.ngc - a recursion demo (flowsnake)\n \u2022 helix.ngc - helix or D-hole cutting\n \u2022 helix_rtheta.ngc - helix or D-hole positioned by radius and angle\n@@ -32012,15 +32012,15 @@\n the Run\n different tab pages.\n To create several subroutines concatenated into a single file, go to each tab fill in the blanks, press\n Create Feature then using the arrow keys move any tabs needed to put them in order. Now press\n Finalize and answer the prompt to create\n Other GUIs will have similar functionality but the buttons and names may be different.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 697 / 1288\n \n nota\n The demonstration configs create tab pages for just a few of the provided examples. Any GUI with a\n custom tab can open any of the library example subroutines or any user file if it is in the LinuxCNC\n subroutine path.\n@@ -32057,15 +32057,15 @@\n And then create or copy system-provided files to these user-writable directories. For instance, a user\n might create a NGCGUI-compatible subfile named:\n /home/myusername/mysubs/example.ngc\n \n To use files in new directories, the INI file must be edited to include the new subfiles and to augment\n the search path(s). For this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 698 / 1288\n \n [RS274NGC]\n ...\n SUBROUTINE_PATH = /home/myusername/mysubs:../../nc_files/ngcgui_lib:../../nc_files/gcmc_lib \u2190:../../nc_files/ngcgui_lib/utilitysubs\n USER_M_PATH\n@@ -32118,15 +32118,15 @@\n \n 10.6.4.2. Standalone PyNGCGUI\n For usage, type in a terminal:\n pyngcgui --help\n Usage:\n pyngcgui [Options] []\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 699 / 1288\n \n Options requiring values:\n [-d | --demo] [0|1|2] (0: DEMO standalone toplevel)\n (1: DEMO embed new notebook)\n (2: DEMO embed within existing notebook)\n@@ -32178,15 +32178,15 @@\n NGCGUI_SUBFILE = simp.ngc - Creates a tab from the named subroutine.\n NGCGUI_SUBFILE = \u201d\u201d - Creates a custom tab\n #NGCGUI_OPTIONS = opt1 opt2 \u2026 - NGCGUI options:\n \u2022 nonew \u2014 Prohibits creation of new custom tab\n \u2022 noremove \u2014 Prohibits deleting a tab page\n \u2022 noauto \u2014 Do not run automatically (makeFile, then manual run)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 700 / 1288\n \n \u2022 noiframe \u2014 No internal image, image on separate top level\n TTT = truetype-tracer - name of the truetype tracer program (it must be in user PATH)\n TTT_PREAMBLE = in_std.ngc - Optional, specifies filename for preamble used for ttt created subfiles. (alternate: mm_std.ngc)\n nota\n@@ -32217,15 +32217,15 @@\n concatenating several common subroutine invocations, this preamble is only added once. For mmbased machines, use mm_std.ngc\n NGCGUI_SUBFILE = filename1.ngc - creates a tab from the filename1 subroutine\n NGCGUI_SUBFILE = filename2.ngc - creates a tab from the filename2 subroutine\n \u2026 etc.\n NGCGUI_SUBFILE = gcmcname1.gcmc - creates a tab from the gcmcname1 file\n NGCGUI_SUBFILE = gcmcname2.gcmc - creates a tab from the gcmcname2 file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 701 / 1288\n \n \u2026 etc.\n NGCGUI_SUBFILE = \u201d\u201d - creates a custom tab that can open any subroutine in the search path\n NGCGUI_OPTIONS = opt1 opt2 \u2026 - NGCGUI options\n \u2022 nonew - disallow making a new custom tab\n@@ -32299,15 +32299,15 @@\n #\n noauto\n -- no auto send (makeFile, then manually send)\n #\n noiframe\n -- no internal image, image on separate top level\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 702 / 1288\n \n GCMC_INCLUDE_PATH = /home/myname/gcmc_includes\n TTT\n TTT_PREAMBLE\n \n@@ -32353,15 +32353,15 @@\n [RS274NGC]SUBROUTINE_PATH = directory1_name:directory1_name:directory3_name ...\n \n Directories Directories may be specified as absolute paths or relative paths.\n Example: [DISPLAY]PROGRAM_PREFIX = /home/myname/linuxcnc/nc_files\n Example: [DISPLAY]PROGRAM_PREFIX = ~/linuxcnc/nc_files\n Example: [DISPLAY]PROGRAM_PREFIX = ../../nc_files\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 703 / 1288\n \n Absolute Paths An absolute path beginning with a \u201d/\u201d specifies a complete filesystem location. A path\n beginning with a \u201d~/\u201d specifies a path starting from the user\u2019s home directory. A path beginning with\n \u201d~username/\u201d specifies a path starting in username\u2019s home directory.\n Relative Paths Relative paths are based on the startup directory which is the directory containing\n@@ -32399,15 +32399,15 @@\n comment: \u201d(not_a_subfile)\u201d so that NGCGUI will reject them automatically with a relevant message.\n 10.6.5.6. Summary of INI File item details for NGCGUI usage\n \n [RS274NGC]SUBROUTINE_PATH = dirname1:dirname2:dirname3 \u2026\n Example: [RS274NGC]SUBROUTINE_PATH = ../../nc_files/ngcgui_lib:../../nc_files/ngcgui_li\n Note: Optional, but very useful to organize subfiles and utility files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 704 / 1288\n \n [RS274NGC]USER_M_PATH = dirname1:dirname2:dirname3 \u2026\n Example: [RS274NGC]USER_M_PATH = ../../nc_files/ngcgui_lib/mfiles\n Note: Optional, needed to locate custom user M-files.\n [DISPLAY]EMBED_TAB_NAME = name to display on embedded tab page\n@@ -32453,15 +32453,15 @@\n Note: Optional, when specified, the file is appended to a subfiles.\n Files created with \u201dCustom\u201d tab pages use the postamble specified with the page.\n [DISPLAY]NGCGUI_OPTIONS = opt1 opt2 \u2026\n Example: [DISPLAY]NGCGUI_OPTIONS = nonew noremove\n Note: Multiple options are separated by blanks.\n By default, NGCGUI configures tab pages so that:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 705 / 1288\n \n 1) a user can make new tabs;\n 2) a user can remove tabs (except for the last remaining one);\n 3) finalized files are automatically sent to LinuxCNC;\n 4) an image frame (iframe) is made available to display an image for the subfile (if an image is\n@@ -32505,15 +32505,15 @@\n \n The body of the subroutine should begin with a set of statements that define local named parameters\n for each positional parameter expected for the subroutine call. These definitions must be consecutive\n beginning with #1 and ending with the last used parameter number. Definitions must be provided for\n each of these parameters (no omissions).\n Parameter Numbering\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 706 / 1288\n \n # = #1\n # = #2\n # = #3\n \n@@ -32562,15 +32562,15 @@\n o call [#] [#] (call a subroutine)\n # = #<_helper:answer> (immediately localize the helper global result)\n #<_helper:answer> = 0.0\n (nullify global named parameter used by subroutine)\n ...\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 707 / 1288\n \n In the above example, the utility subroutine will be found in a separate file named helper.ngc. The\n helper routine returns a result in a global named parameter named #<_helper:answer.\n For good practice, the calling subfile immediately localizes the result for use elsewhere in the subfile\n and the global named parameter used for returning the result is nullified in an attempt to mitigate its\n@@ -32612,15 +32612,15 @@\n //ngcgui: varname3 = value3, label3;\n \n Variable Tags Examples\n //ngcgui: zsafe =\n //ngcgui: feedrate = 10\n //ngcgui: xl = 0, x limit\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 708 / 1288\n \n For these examples, the entry box for varname1 will have no default, the entry box for varname2 will\n have a default of value2, and the entry box for varname 3 will have a default of value 3 and a label\n label3 (instead of varname3). The default values must be numbers.\n To make it easier to modify valid lines in a gcmc file, alternate tag line formats accepted. The alternate\n@@ -32662,28 +32662,28 @@\n [DISPLAY]\n GCMC_INCLUDE_PATH = ../../nc_files/gcmc_lib\n \n 10.6.7. DB25 Example\n The following shows the DB25 subroutine. In the first photo you see where you fill in the blanks for\n each variable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n This photo shows the backplot of the DB25 subroutine.\n \n 709 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 710 / 1288\n \n This photo shows the use of the new button and the custom tab to create three DB25 cutouts in one\n program.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 711 / 1288\n \n 10.6.8. Creating a subroutine\n For creating a subroutine for use with NGCGUI, the filename and the subroutine name must be the\n same.\n The file must be placed in the subdirectory pointed to in the INI file.\n@@ -32701,15 +32701,15 @@\n # = #3 (Feedrate)\n ;Example de param\u00e8tre sans preset\n g0x0y0z1\n g3 i# f#\n g3 i[0-#]\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 712 / 1288\n \n 10.7. TkLinuxCNC GUI\n 10.7.1. Introduction\n TkLinuxCNC is one of the first graphical front-ends for LinuxCNC. It is written in Tcl and uses the Tk\n toolkit for the display. Being written in Tcl makes it very portable (it runs on a multitude of platforms).\n@@ -32725,15 +32725,15 @@\n Then, start LinuxCNC and select that INI file. The sample configuration sim/tklinuxcnc/tklinuxcnc.ini\n is already configured to use TkLinuxCNC as its front-end.\n When LinuxCNC is launched the TKLinuxCNC window is opened.\n 10.7.2.1. A typical session with TkLinuxCNC\n 1. Start LinuxCNC and select a configuration file.\n 2. Clear the E-STOP condition and turn the machine on (by pressing F1 then F2).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 713 / 1288\n \n 3. Home each axis.\n 4. Load the file to be milled.\n 5. Put the stock to be milled on the table.\n 6. Set the proper offsets for each axis by jogging and either homing again or right-clicking an axis\n@@ -32765,15 +32765,15 @@\n Abort\n then on the second line:\n Operation mode: MANUAL > MDI > AUTO\n Toggle flood coolant\n Toggle spindle brake control\n 1 For some of these actions it might be necessary to change the mode LinuxCNC is currently running in.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 714 / 1288\n \n 10.7.3.2. Offset display status bar\n The Offset display status bar displays the currently selected tool (selected with Txx M6), the tool\n length offset (if active), and the work offsets (set by right-clicking the coordinates).\n 10.7.3.3. Coordinate Display Area\n@@ -32805,15 +32805,15 @@\n execution will be stopped on any M1 encountered).\n Text Program Display Area When the program is running, the line currently being executed is\n highlighted in white. The text display will automatically scroll to show the current line.\n 10.7.3.5. Manual Control\n Implicit keys TkLinuxCNC allows you to manually move the machine. This action is known as jogging.\n First, select the axis to be moved by clicking it. Then, click and hold the + or - button depending on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 715 / 1288\n \n the desired direction of motion. The first four axes can also be moved by the keyboard arrow keys (X\n and Y), the PAGE UP and PAGE DOWN keys (Z) and the [ and ] keys (A/4th).\n + If Continuous is selected, the motion will continue as long as the button or key is pressed. If another\n value is selected, the machine will move exactly the displayed distance each time the button is clicked\n@@ -32836,15 +32836,15 @@\n The Coolant groupCoolant The two buttons allow the Mist and Flood coolants to be turned on and\n off. Depending on your machine configuration, not all the items in this group may appear.\n 10.7.3.6. Code Entry\n Manual Data Input (also called MDI), allows G-code programs to be entered manually, one line at\n a time. When the machine is not turned on, and not set to MDI mode, the code entry controls are\n unavailable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 716 / 1288\n \n This allows you to enter a G-code command to be executed. Execute the command by pressing Enter.\n Active G-Codes This shows the modal codes that are active in the interpreter. For instance, G54\n indicates that the G54 offset is applied to all coordinates that are entered.\n 10.7.3.7. Jog Speed\n@@ -32893,15 +32893,15 @@\n Send active axis Home\n Jog first axis\n Jog second axis\n Jog third axis\n Jog fourth axis\n Stop execution\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 717 / 1288\n \n 10.8. QtPlasmaC\n 10.8.1. Preamble\n Except where noted, this guide assumes the user is using the latest version of QtPlasmaC. Version\n history can be seen by visiting this link which will show the latest available version. The installed\n@@ -32921,25 +32921,25 @@\n there are enough hardware I/O pins to fulfill the requirements of a plasma configuration.\n There are three available formats:\n 16:9 with a minimum resolution of 1366 x 768\n 9:16 with a minimum resolution of 768 x 1366\n 4:3 with a minimum resolution of 1024 x 768\n Screenshot examples of QtPlasmaC are below:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 718 / 1288\n \n Figura 10.40: 16:9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 719 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 720 / 1288\n \n Figura 10.42: 4:3\n \n 10.8.4. Installing LinuxCNC\n The preferred method for installing LinuxCNC is via an ISO image as described below.\n@@ -32947,15 +32947,15 @@\n It is possible to install and run LinuxCNC on a variety of Linux distributions however that is beyond\n the scope of this User Guide. If the user wishes to install a Linux distribution other than those recommended, they will first need to install their preferred Linux distribution and then install LinuxCNC\n v2.9 or later along with any required dependencies.\n \n 10.8.4.1. If The User Does Not Have Linux Installed\n Installation instructions are available from here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 721 / 1288\n \n Following these instructions will yield a machine with the current stable branch (v2.8) of LinuxCNC\n on Debian Buster.\n 10.8.4.2. Package Installation (Buildbot) If The User Has Linux with LinuxCNC v2.8\n A package installation (Buildbot) uses prebuilt packages from the LinuxCNC Buildbot, instructions for\n@@ -32996,15 +32996,15 @@\n to use a reed relay as an alternative method to establish an Arc OK signal when the power\n source does not provide one.\n \n nota\n For fine tuning of Mode 0 Ark OK see Tuning Mode 0 Arc OK in the Advanced Topics section of the\n manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 722 / 1288\n \n 10.8.5.2. Available I/Os\n nota\n This section only touches on the hardware I/O\u2019s required for QtPlasmaC. Base machine requirements\n such as limit switches, home switches, etc. are in addition to these.\n@@ -33085,15 +33085,15 @@\n This signal senses if the torch has broken away from its cradle.\n Digital output; required.\n HAL pin name plasmac.torch-on\n Connected from a breakout board output to the torch-on input\n of the plasma power supply. This signal is used to control the\n plasma power supply and start the arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Name\n Move Up\n \n Modes\n 2\n \n@@ -33159,15 +33159,15 @@\n then set the Z minimum to 5 mm (0.2\u201d) plus an allowance for overrun (either calculated using the\n equation below or allow 5 mm (0.2\u201d) below the lowest slat).\n [AXIS_Z] MAX_LIMIT should be the highest the user wants the Z axis to travel (it must not be\n lower than Z HOME_OFFSET).\n [AXIS_Z] HOME should be set to be approximately 5 mm-10 mm (0.2\u201d-0.4\u201d) below the maximum\n limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 724 / 1288\n \n Floating Head - it is recommended that a floating head be used and that it has enough movement\n to allow for overrun during probing. Overrun can be calculated using the following formula:\n o = 0.5 * a * (v / a)^2\n \n@@ -33199,47 +33199,47 @@\n Fill in the required entries to suit the machine wiring/breakout board configuration.\n QtPlasmaC adds two pages to the LinuxCNC configuration wizards for QtPlasmaC specific parameters,\n the two pages are QtPlasmaC options and User Buttons. Complete each of the wizards QtPlasmaC page\n to suit the machine that is being configured and the user button requirements.\n Note that PnCconf options allow user selection of Feed Override, Linear Velocity, and Jog Increments,\n whereas in StepConf these are automatically calculated and set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 10.43: PnCConf QtPlasmaC Options\n \n 725 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 10.44: StepConf QtPlasmaC Options\n \n 726 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 10.45: QtPlasmaC User Buttons\n \n 727 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 728 / 1288\n \n Figura 10.46: QtPlasmaC THCAD\n The THCAD screen will only appear if a Plasma Encoder is selected in the card screen. The the dedicated section on Mesa THCAD for more information.\n When the configuration is complete, the wizard will save a copy of the configuration that may be\n loaded and edited at a later time, a working QtPlasmaC configuration will be created in the following\n directory: ~/linuxcnc/configs/.\n The way the newly created QtPlasmaC configuration can be run from the terminal command line\n slightly differs depending the way LinuxCNC was installed:\n For a package installation (Buildbot):\n linuxcnc ~/linuxcnc/configs/__/__.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 729 / 1288\n \n For a run in place installation:\n ~/linuxcnc-dev/scripts/linuxcnc ~/linuxcnc/configs/__/__.ini\n \n After running the above command LinuxCNC should be running with the QtPlasmaC GUI visible.\n@@ -33262,25 +33262,25 @@\n For a run in place installation enter the following command in a terminal window:\n ~/linuxcnc-dev/lib/python/qtvcp/designer/install_script\n \n 10.8.5.6. Initial Setup\n The following heights diagram will help the user visualize the different heights involved in plasma\n cutting and how they are measured:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 730 / 1288\n \n Click on the Parameters Tab to view the CONFIGURATION section which shows the user settable\n parameters. It is necessary to ensure every one of these settings is tailored to the machine.\n To set the Z axis DRO relative to the Z axis MINIMUM_LIMIT, the user should perform the following\n steps. It is important to understand that in QtPlasmaC, touching off the Z axis DRO has no effect on\n the Z axis position while running a G-code program. These steps simply allow the user to more easily\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 731 / 1288\n \n set the probe height as after performing the steps, the displayed Z axis DRO value will be relative to\n Z axis MINIMUM_LIMIT.\n nota\n The user should be familiar with the recommended Z Axis Settings.\n@@ -33317,15 +33317,15 @@\n 9. If the table has a laser or camera for sheet alignment, a scribe, or uses offset probing then the\n required offsets need to be applied by following the procedure described in Peripheral Offsets.\n 10. CONGRATULATIONS! The user should now have a working QtPlasmaC Configuration.\n nota\n If the amount of time between the torch contacting the material and when the torch moves up and\n comes to rest at the Pierce Height seems excessive, see the probing section for a possible solution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 732 / 1288\n \n importante\n IF USING A Mesa Electronics THCAD THEN THE Voltage Scale VALUE WAS OBTAINED\n MATHEMATICALLY. IF THE USER INTENDS TO USE CUT VOLTAGES FROM A MANUFACTURE\u2019S\n CUT CHART THEN IT WOULD BE ADVISABLE TO DO MEASUREMENTS OF ACTUAL VOLTAGES\n@@ -33353,15 +33353,15 @@\n \n For a run in place installation enter the following lines in terminal window:\n source ~/linuxcnc-dev/scripts/rip-environment\n qtplasmac-plasmac2qt\n \n The following screen will be displayed:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 733 / 1288\n \n Cuadro 10.6: Mandatory Settings\n Field\n INI FILE IN\n EXISTING\n@@ -33389,15 +33389,15 @@\n 2 - Estop is a button.\n \n ESTOP:1\n \n Optional Setting - This setting is not required unless the machine has a laser for sheet\n alignment. Leave this blank if it is not used/required. Leave this blank if it is not used/required.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Field\n Laser On HAL Pin\n \n Description\n Power on a laser crosshair for sheet\n alignment.\n@@ -33439,15 +33439,15 @@\n For a package installation (Buildbot) enter the following line in a terminal window:\n qtplasmac-cfg2prefs\n \n For a run in place installation enter the following lines in terminal window:\n source ~/linuxcnc-dev/scripts/rip-environment\n qtplasmac-cfg2prefs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 735 / 1288\n \n Figura 10.47: qtplasmac-cfg2prefs\n Select the INI file of the old PlasmaC configuration, select the INI file of the new QtPlasmaC configuration, then press CONVERT.\n \n 10.8.7. Other QtPlasmaC Setup Considerations\n@@ -33461,15 +33461,15 @@\n file in the machine\u2019s configuration directory to add the appropriate cutoff frequency as measured in\n Hertz (Hz).\n For example:\n setp plasmac.lowpass-frequency 100\n \n The above example would give a cutoff frequency of 100Hz.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 736 / 1288\n \n 10.8.7.2. Contact Bounce\n Contact bounce from mechanical relays, switches, or external interference may cause some inconsistent behavior of the following switches:\n Float Switch\n Ohmic Probe\n@@ -33505,15 +33505,15 @@\n Depending on the specified minimum contact current and the current drawn by the input device there\n may be a need to provide a method to increase the current through the contacts.\n Most relays using gold contacts will not require any additional current for reliable operation.\n There are two different methods available to provide this minimum current if it is required:\n 1. A 0.1 \u03bcF film capacitor placed across the contacts.\n 2. A 1200 \u03a9 1 W resistor across the load (see calculations below).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 737 / 1288\n \n Schematics are shown at contact load schematics.\n More information on contact switching load can be seen on page VI of the finder General Technical\n Information document.\n Calculations:\n@@ -33550,15 +33550,15 @@\n Terminal=false\n Name=LinuxCNC\n Exec=sh -c \u201dlinuxcnc $HOME/linuxcnc/configs//.ini\u201d\n Type=Application\n Icon=/usr/share/pixmaps/linuxcncicon.png\n 2 In the US, the letter V is commonly used as a symbol (Voltage) and as a unit (Volt).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 738 / 1288\n \n If the user would like a terminal window to open behind the GUI window then change the Terminal\n line to:\n Terminal=true\n \n@@ -33611,15 +33611,15 @@\n nota\n The configuration files (.ini and .hal) that are created by configuration wizard are notated to explain the requirements to aid in manual manipulation of these\n configurations. They may be edited with any text editor.\n \n nota\n The .prefs file is plain text and may be edited with any text editor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 739 / 1288\n \n 10.8.7.6. INI File\n QtPlasmaC has some specific .ini file variables as follows:\n [FILTER] Section These variables are mandatory.\n PROGRAM_EXTENSION = .ngc,.nc,.tap G-code File (*.ngc, *.nc, *.tap)\n@@ -33668,15 +33668,15 @@\n [DISPLAY] Section\n This variable is mandatory.\n DISPLAY = qtvcp qtplasmac\n (use 16:9 resolution)\n = qtvcp qtplasmac_9x16 (use 9:16 resolution)\n = qtvcp qtplasmac_4x3 (use 4:3 resolution)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 740 / 1288\n \n There are multiple QtVCP options that are described here: QtVCP INI Settings\n For example the following would start a 16:9 resolution QtPlasmaC screen in full screen mode:\n DISPLAY = qtvcp -f qtplasmac\n \n@@ -33717,15 +33717,15 @@\n 10.8.8.1. Exiting QtPlasmaC\n Exiting or shutting down QtPlasmaC is done by either:\n 1. Click the window shutdown button on the window title bar\n 2. Long press the POWER button on the MAIN Tab.\n A shutdown warning can be displayed on every shutdown by checking the Exit Warning checkbox on\n the SETTINGS Tab.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 741 / 1288\n \n 10.8.8.2. MAIN Tab\n Screenshot example of the QtPlasmaC MAIN Tab in 16:9 aspect ratio:\n \n Some functions/features are only used for particular modes and are not displayed if they are not\n@@ -33742,15 +33742,15 @@\n used to manually select the current material cut parameters. If there are\n no materials in the material file then only the default material will be\n displayed.\n This displays the actual cut feed rate the table is moving at.\n If \u201dView Material\u201d is selected on the SETTINGS Tab, this displays the\n currently selected material\u2019s Feed Rate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 742 / 1288\n \n Cuadro 10.7: (continued)\n Name\n PH:\n PD:\n@@ -33823,15 +33823,15 @@\n - G-code Programs\n - Torch pulse if the pulse was started during CYCLE PAUSE (this will\n cancel the paused G-code program execution as well)\n - Probe Test\n - Framing\n - Manual Cut\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 743 / 1288\n \n Cuadro 10.8: (continued)\n Name\n FEED\n \n@@ -33908,15 +33908,15 @@\n the THC Threshold voltage (The distance changed will be\n Height Per Volt * THC Threshold voltage).\n Each press of this button will lower the target voltage by\n the THC Threshold voltage (The distance changed will be\n Height Per Volt * THC Threshold voltage).\n Clicking this label will return any voltage override to 0.00.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 744 / 1288\n \n Cuadro 10.10: CONTROL\n Name\n TORCH ON\n TORCH ON ENABLE\n@@ -34008,15 +34008,15 @@\n LED will still show the status of the probe input, but the\n Ohmic Probe results will be ignored.\n This box will enable or disable the communications to a\n PowerMax. This button is only visible if a PM_PORT\n option is configured in the [POWERMAX] section of the\n .prefs file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 745 / 1288\n \n Cuadro 10.10: (continued)\n Name\n Status\n \n@@ -34084,15 +34084,15 @@\n This button moves the Z axis in the negative direction.\n \n nota\n During Paused Motion, this section will be shown on top of the JOGGING panel. The following section\n will cover each button encountered in this panel. Please see CUT RECOVERY for a detailed description\n of the cut recovery functionality.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Name\n PAUSED MOTION\n FEED SLIDER\n \n FEED\n REV\n@@ -34172,15 +34172,15 @@\n This drop down button will display the following options:\n Zero - zeros the axis.\n Set - launches a dialog box to manually input the axis\u2019 coordinate.\n Divide By 2 - divides the currently displayed coordinate in the DRO by\n two.\n Set To Last - sets the axis to the previously set coordinate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 747 / 1288\n \n 10.8.8.3. Preview Views\n The QtPlasmaC preview screen has the ability to be switched between different views and displays,\n as well as zooming in and out, and panning horizontally and vertically.\n When QtPlasmaC is first started, the Z (top down) view will be selected as the default view for a loaded\n@@ -34193,30 +34193,30 @@\n orientation, then pressing either Z or P will change the display to the newly selected view. If the user\n then wishes to display the full table while maintaining the currently selected view as the default view\n for a loaded G-code file, then pressing CLEAR will achieve this and allow the selected view orientation\n to prevail the next time a G-code file is loaded.\n 10.8.8.4. CONVERSATIONAL Tab\n Screenshot example of the QtPlasmaC CONVERSATIONAL Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 748 / 1288\n \n The CONVERSATIONAL Tab enables the user to quickly program various simple shapes for quick\n cutting without the need for CAM software.\n See Conversational Shape Library for detailed information on the Conversational feature.\n It is possible to hide this tab so the conversational feature cannot be used by an operator. This may\n be achieved either by wiring the pin to a physical key-switch or similar or it may also be set in a HAL\n file using the following command:\n setp qtplasmac.conv_disable 1\n \n 10.8.8.5. PARAMETERS Tab\n Screenshot example of the QtPlasmaC PARAMETERS Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 749 / 1288\n \n Some functions/features are only used for particular modes and are not displayed if they are not\n required by the chosen QtPlasmaC mode.\n This tab is used to display configuration parameters that are modified infrequently.\n It is possible to hide this tab so machine settings cannot be modified by unauthorized personnel. This\n@@ -34238,15 +34238,15 @@\n Description\n This sets the amount of time (in seconds) QtPlasmaC will wait\n between commanding a \u201dTorch On\u201d and receiving an Arc OK\n signal before timing out and displaying an error message.\n This sets the number of times QtPlasmaC will attempt to start\n the arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 750 / 1288\n \n Cuadro 10.15: (continued)\n Name\n Retry Delay\n \n@@ -34323,15 +34323,15 @@\n This sets the distance threshold used to determine if an Initial Height\n Sense (probe) can be skipped for the current cut, see IHS Skip.\n \n nota\n If the amount of time between the torch contacting the material and when the torch moves up and\n comes to rest at the Pierce Height seems excessive, see the probing section for a possible solution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 751 / 1288\n \n Cuadro 10.17: CONFIGURATION - SAFETY\n Name\n Safe Height\n \n@@ -34382,15 +34382,15 @@\n \n CONFIGURATION - THC Two methods of THC activation are available and are selected with the\n Auto Activation checkbutton. Both methods begin their calculations when the current velocity of the\n torch matches the cut feed rate specified for the selected material:\n 1. Delay Activation (the default) is selected when Auto Activation is unchecked. This method uses\n a time delay set with the Delay parameter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 752 / 1288\n \n 2. Auto Activation is selected when Auto Activation is checked. This method determines that the\n arc voltage is stable by using the Sample Counts and Sample Threshold parameters.\n Name\n Delay\n@@ -34478,15 +34478,15 @@\n Description\n The top drop down menu is used to manually select the current material\n cut parameters. If there are no materials in the material file then only the\n default material will be displayed.\n This sets the kerf width for the currently selected material. Refer to the\n Heights Diagram diagram for a visual representation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 753 / 1288\n \n Cuadro 10.21: (continued)\n Name\n Pierce Height\n Pierce Delay\n@@ -34548,15 +34548,15 @@\n The Cut Parameters for the new material will then need to be adjusted and saved.\n The DELETE this button is used to delete a material. After pressing it, the user will be prompted for\n a material number to be deleted, and prompted again to ensure the user is sure. After deletion, the\n material file will be reloaded and the drop down list will display the default material.\n 10.8.8.6. SETTINGS Tab\n Screenshot example of the QtPlasmaC SETTINGS Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 754 / 1288\n \n This tab is used to display GUI configuration parameters, button text, and shutdown text that are\n modified infrequently as well as some utility buttons.\n It is possible to hide this tab so machine settings cannot be modified by unauthorized personnel. This\n may be achieved either by wiring the pin to a physical key-switch or similar or it may also be set in a\n@@ -34572,15 +34572,15 @@\n Foreground\n Highlight\n \n Description\n This button allows the user to change the color of the GUI Foreground.\n This button allows the user to change the color of the GUI Highlight.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 755 / 1288\n \n Cuadro 10.22: (continued)\n Name\n LED\n Background\n@@ -34658,15 +34658,15 @@\n current tool) in the Preview Window on the MAIN Tab.\n This allows a user to change the default zoom level for the top down full\n table view in the Preview Window on the MAIN Tab.\n \n USER BUTTON ENTRIES USERBUTTON\n This section shows the text that appears on the Custom User Buttons as well as the code associated\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 756 / 1288\n \n with the user button. User buttons may be changed and the new settings used without restarting\n LinuxCNC.\n The text and/or code may be edited at any time and will be loaded ready for use if the SAVE button is\n clicked.\n@@ -34704,15 +34704,15 @@\n where is the machine name entered in the configuration wizard, is the\n current QtPlasmaC version the user is on, is the current date (YY-MM-DD), and

refer to\n the same parameter. Named parameters must be enclosed with < > marks.\n@@ -39177,15 +39177,15 @@\n #<_motion_mode> - Return the interpreter\u2019s current motion mode:\n Motion return\n mode\n value\n G1\n 10\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 860 / 1288\n \n Motion return\n mode\n value\n G2\n@@ -39267,15 +39267,15 @@\n #<_metric> - Return 1 if G21 is on, else 0.\n #<_imperial> - Return 1 if G20 is on, else 0.\n #<_absolute> - Return 1 if G90 is on, else 0.\n #<_incremental> - Return 1 if G91 is on, else 0.\n #<_inverse_time> - Return 1 if inverse feed mode (G93) is on, else 0.\n #<_units_per_minute> - Return 1 if Units/minute feed mode (G94) is on, else 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 861 / 1288\n \n #<_units_per_rev> - Return 1 if Units/revolution mode (G95) is on, else 0.\n #<_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\n value is 591.000000.\n Mode\n@@ -39320,15 +39320,15 @@\n #<_feed_override> - Return 1 if feed override (M48 or M51 P1) is on, else 0.\n #<_adaptive_feed> - Return 1 if adaptive feed (M52 or M52 P1) is on, else 0.\n #<_feed_hold> - Return 1 if feed hold switch is enabled (M53 P1), else 0.\n #<_feed> - Return the current value of F, not the actual feed rate.\n #<_rpm> - Return the current value of S, not the actual spindle speed.\n #<_x> - Return current relative X coordinate including all offsets. Same as #5420. In a lathe configuration, it always returns radius.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 862 / 1288\n \n #<_y> - Return current relative Y coordinate including all offsets. Same as #5421.\n #<_z> - Return current relative Z coordinate including all offsets. Same as #5422.\n #<_a> - Return current relative A coordinate including all offsets. Same as #5423.\n #<_b> - Return current relative B coordinate including all offsets. Same as #5424.\n@@ -39363,15 +39363,15 @@\n If enabled in the INI file G-code has access to the values of INI file entries and HAL pins.\n #<_ini[section]name> Returns the value of the corresponding item in the INI file.\n For example, if the INI file looks like so:\n [SETUP]\n XPOS = 3.145\n YPOS = 2.718\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 863 / 1288\n \n you may refer to the named parameters #<_ini[setup]xpos> and #<_ini[setup]ypos> within Gcode.\n EXISTS can be used to test for presence of a given INI file variable:\n o100 if [EXISTS[#<_ini[setup]xpos>]]\n (debug, [setup]xpos exists: #<_ini[setup]xpos>)\n@@ -39413,15 +39413,15 @@\n 11.4.6. Binary Operators\n Binary operators only appear inside expressions. There are four basic mathematical operations: addition (+), subtraction (-), multiplication (*), and division (/). There are three logical operations: nonexclusive or (OR), exclusive or (XOR), and logical and (AND). The eighth operation is the modulus\n operation (MOD). The ninth operation is the power operation (**) of raising the number on the left of\n the operation to the power on the right. The relational operators are equality (EQ), inequality (NE),\n strictly greater than (GT), greater than or equal to (GE), strictly less than (LT), and less than or equal\n to (LE).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 864 / 1288\n \n The binary operations are divided into several groups according to their precedence. If operations\n in different precedence groups are strung together (for example in the expression [2.0 / 3 * 1.5 - 5.5\n / 11.0]), operations in a higher group are to be performed before operations in a lower group. If an\n expression contains more than one operation from the same group (such as the first / and * in the\n@@ -39478,15 +39478,15 @@\n Round to nearest integer\n Base-e logarithm\n Sine\n Square Root\n Tangent\n Check named Parameter\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 865 / 1288\n \n The FIX function rounds towards the left (less positive or more negative) on a number line, so that\n FIX[2.8] =2 and FIX[-2.8] = -3.\n The FUP operation rounds towards the right (more positive or less negative) on a number line;\n FUP[2.8] = 3 and FUP[-2.8] = -2.\n@@ -39531,15 +39531,15 @@\n If the third group (the comments) contains more than one comment and is reordered, only the last\n comment will be used.\n If each group is kept in order or reordered without changing the meaning of the line, then the three\n groups may be interleaved in any way without changing the meaning of the line. For example, the\n line g40 g1 #3=15 (foo) #4=-7.0 has five items and means exactly the same thing in any of the 120\n possible orders (such as #4=-7.0 g1 #3=15 g40 (foo)) for the five items.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 866 / 1288\n \n 11.4.11. Commands and Machine Modes\n Many commands cause the controller to change from one mode to another, and the mode stays active\n until some other command changes it implicitly or explicitly. Such commands are called modal. For\n example, if coolant is turned on, it stays on until it is explicitly turned off. The G-codes for motion are\n@@ -39566,15 +39566,15 @@\n @.5 ^90\n @.5 ^90\n G90 G0 X0 Y0 M2\n \n You can see from the following figure that the output is not what you might expect. Because we added\n 0.5 to the distance each time the distance from the XY zero position increased with each line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 867 / 1288\n \n Figura 11.10: Polar Spiral\n The following code will produce our square pattern:\n F100 G1 @.5 ^90\n G91 ^90\n@@ -39582,15 +39582,15 @@\n ^90\n ^90\n G90 G0 X0 Y0 M2\n \n As you can see by only adding to the angle by 90 degrees each time the end point distance is the same\n for each line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 868 / 1288\n \n Figura 11.11: Polar Square\n It is an error if:\n An incremental move is started at the origin\n A mix of Polar and X or Y words are used\n@@ -39614,15 +39614,15 @@\n G92.2, G92.3,\n G0, G1, G2, G3, G33, G38.n, G73, G76, G80,\n G81\n G82, G83, G84, G85, G86, G87, G88, G89\n G17, G18, G19, G17.1, G18.1, G19.1\n G90, G91\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 869 / 1288\n \n Cuadro 11.7: (continued)\n Modal Group Meaning\n Arc IJK Distance Mode\n (Group 4)\n@@ -39687,15 +39687,15 @@\n \n 11.4.14. Comments\n Comments are purely informative and have no influence on machine behaviour.\n Comments can be added to lines of G-code to help clear up the intention of the programmer. Comments\n can be embedded in a line using parentheses () or for the remainder of a line using a semi-colon. The\n semi-colon is not treated as the start of a comment when enclosed in parentheses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 870 / 1288\n \n Comments may appear between words, but not between words and their corresponding parameter.\n So, S100(set speed)F200(feed) is OK while S(speed)100F(feed) is not.\n Here is an example of a commented program:\n G0 (Rapid to start) X1 Y1\n@@ -39730,15 +39730,15 @@\n (LOGAPPEND,filename) - opens the named log file. If the file already exists, the data is appended.\n (LOGCLOSE) - closes an open log file.\n (LOG,) - everything past the , is written to the log file if it is open. Supports expansion of parameters\n as described below.\n Examples of logging are in nc_files/examples/smartprobe.ngc and in nc_files/ngcgui_lib/rectange_probe.ngc\n sample G-code files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 871 / 1288\n \n 11.4.18. Debug Messages\n (DEBUG,) - displays a message like (MSG,) with the addition of special handling for comment parameters as described below.\n \n 11.4.19. Print Messages\n@@ -39772,15 +39772,15 @@\n 11.4.21. File Requirements\n A G-code file must contain one or more lines of G-code and be terminated with a Program End. Any\n G-code past the program end is not evaluated.\n If a program end code is not used a pair of percent signs % with the first percent sign on the first\n line of the file followed by one or more lines of G-code and a second percent sign. Any code past the\n second percent sign is not evaluated.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 872 / 1288\n \n aviso\n Using % to wrap a G-code file will not do the same thing as using a program end. The machine\n will be in what ever state the program left it in using %, the spindle and coolant may still be on\n and things like G90/91 are left as the last program set them. If you don\u2019t use a proper preamble\n@@ -39815,15 +39815,15 @@\n Enable or disable overrides (M48, M49,M50,M51,M52,M53).\n User-defined Commands (M100-M199).\n Dwell (G4).\n Set active plane (G17, G18, G19).\n Set length units (G20, G21).\n Cutter radius compensation on or off (G40, G41, G42)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 873 / 1288\n \n Cutter length compensation on or off (G43, G49)\n Coordinate system selection (G54, G55, G56, G57, G58, G59, G59.1, G59.2, G59.3).\n Set path control mode (G61, G61.1, G64)\n Set distance mode (G90, G91).\n@@ -39859,15 +39859,15 @@\n Don\u2019t use line numbers Line numbers offer no benefits. When line numbers are reported in error\n messages, the numbers refer to the line number in the file, not the N-word value.\n When several coordinate systems are moved Consider using the inverse time speed mode.\n Because the meaning of an F word in meters per minute varies depending on the type of axis to be\n moved and because the amount of removed material does not depend only on the feed rate, it can be\n simpler to use G93, inverse speed of time, to achieve the removal of desired material.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 874 / 1288\n \n 11.4.25. Linear and Rotary Axis\n Because the meaning of an F-word in feed-per-minute mode varies depending on which axes are commanded to move, and because the amount of material removed does not depend only on the feed rate,\n it may be easier to use G93 inverse time feed mode to achieve the desired material removal rate.\n \n@@ -39901,15 +39901,15 @@\n Any items in the G-code prototypes not explicitly described as optional are required.\n The values following letters are often given as explicit numbers. Unless stated otherwise, the explicit\n numbers can be real values. For example, G10 L2 could equally well be written G[2*5] L[1+1]. If the\n value of parameter 100 were 2, G10 L#100 would also mean the same.\n If L- is written in a prototype the - will often be referred to as the L number, and so on for any other\n letter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 875 / 1288\n \n 11.5.2. G-Code Quick Reference Table\n Code\n G0\n G1\n@@ -40015,15 +40015,15 @@\n Back-boring Cycle (not yet implemented)\n Boring Cycle, Stop, Manual Out (not yet\n implemented)\n Boring Cycle, Dwell, Feed Out\n Distance Mode\n Arc Distance Mode\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Code\n G92\n G92.1 G92.2\n G92.3\n G93 G94 G95\n G96 G97\n@@ -40070,15 +40070,15 @@\n G1 axes\n \n For linear (straight line) motion at programmed feed rate (for cutting or not), program G1 \u2019axes\u2019,\n where all the axis words are optional. The G1 is optional if the current motion mode is G1. This will\n produce coordinated motion to the destination point at the current feed rate (or slower).\n G1 Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 877 / 1288\n \n G90 (set absolute distance mode)\n G1 X1.2 Y-3 F10 (linear move at a feed rate of 10 from current position to X1.2 Y-3)\n Z-2.3 (linear move at same feed rate from current position to Z-2.3)\n Z1 F25 (linear move at a feed rate of 25 from current position to Z1)\n@@ -40119,15 +40119,15 @@\n If the pitch of the helix is very small (less than the naive CAM tolerance) then the helix might\n be converted into a straight line. Bug #222\n \n If a line of code makes an arc and includes rotary axis motion, the rotary axes turn at a constant rate\n so that the rotary motion starts and finishes when the XYZ motion starts and finishes. Lines of this\n sort are hardly ever programmed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 878 / 1288\n \n If cutter compensation is active, the motion will differ from the above; see the Cutter Compensation\n section.\n The arc center is absolute or relative as set by G90.1 or G91.1 respectively.\n Two formats are allowed for specifying an arc: Center Format and Radius Format.\n@@ -40162,15 +40162,15 @@\n Z - helix\n I - X offset\n J - Y offset\n P - number of turns\n XZ-plane (G18)\n G2 or G3 \n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 879 / 1288\n \n Y - helix\n I - X offset\n K - Z offset\n P - number of turns\n@@ -40202,28 +40202,28 @@\n In the following figure you can see the start position is X0 Y0, the end position is X1 Y1. The arc center\n position is at X1 Y0. This gives us an offset from the start position of 1 in the X axis and 0 in the Y axis.\n In this case only an I offset is needed.\n G2 Example Line\n G0 X0 Y0\n G2 X1 Y1 I1 F10 (clockwise arc in the XY plane)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 880 / 1288\n \n Figura 11.12: G2 Example\n In the next example we see the difference between the offsets for Y if we are doing a G2 or a G3 move.\n For the G2 move the start position is X0 Y0, for the G3 move it is X0 Y1. The arc center is at X1 Y0.5\n for both moves. The G2 move the J offset is 0.5 and the G3 move the J offset is -0.5.\n G2-G3 Example Line\n G0 X0 Y0\n G2 X0 Y1 I1 J0.5 F25 (clockwise arc in the XY plane)\n G3 X0 Y0 I1 J-0.5 F25 (counterclockwise arc in the XY plane)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 881 / 1288\n \n Figura 11.13: G2-G3 Example\n In the next example we show how the arc can make a helix in the Z axis by adding the Z word.\n G2 Example Helix\n G0 X0 Y0 Z0\n@@ -40242,15 +40242,15 @@\n R - radius from current position\n It is not good practice to program radius format arcs that are nearly full circles or nearly semicircles\n because a small change in the location of the end point will produce a much larger change in the\n location of the center of the circle (and, hence, the middle of the arc). The magnification effect is\n large enough that rounding error in a number can produce out-of-tolerance cuts. For instance, a 1 %\n displacement of the endpoint of a 180 degree arc produced a 7 % displacement of the point 90 degrees\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 882 / 1288\n \n along the arc. Nearly full circles are even worse. Other size arcs (in the range tiny to 165 degrees or\n 195 to 345 degrees) are OK.\n In the radius format, the coordinates of the end point of the arc in the selected plane are specified\n along with the radius of the arc. Program G2 axes R- (or use G3 instead of G2 ). R is the radius. The\n@@ -40285,15 +40285,15 @@\n G5 X- Y- P- Q-\n \n I - X incremental offset from start point to first control point\n J - Y incremental offset from start point to first control point\n P - X incremental offset from end point to second control point\n Q - Y incremental offset from end point to second control point\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 883 / 1288\n \n G5 creates a cubic B-spline in the XY plane with the X and Y axes only. P and Q must both be specified\n for every G5 command.\n For the first G5 command in a series of G5 commands, I and J must both be specified. For subsequent\n G5 commands, either both I and J must be specified, or neither. If I and J are unspecified, the starting\n@@ -40330,15 +40330,15 @@\n G5.1 X2 I2 J-8\n \n It is an error if:\n both I and J offset are unspecified or zero\n An axis other than X or Y is specified\n The active plane is not G17\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 884 / 1288\n \n 11.5.9. G5.2 G5.3 NURBS Block\n G5.2 \n X- Y- \n ...\n@@ -40365,15 +40365,15 @@\n ; The rapid moves show the same path without the NURBS Block\n G0 X0 Y1\n X2 Y2\n X2 Y0\n X0 Y0\n M2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 885 / 1288\n \n Sample NURBS Output\n More information on NURBS can be found here:\n https://wiki.linuxcnc.org/cgi-bin/wiki.pl?NURBS\n \n@@ -40383,15 +40383,15 @@\n Program G7 to enter the diameter mode for axis X on a lathe. When in the diameter mode the X axis\n moves on a lathe will be 1/2 the distance to the center of the lathe. For example X1 would move the\n cutter to 0.500\u201d from the center of the lathe thus giving a 1\u201d diameter part.\n \n 11.5.11. G8 Lathe Radius Mode\n G8\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 886 / 1288\n \n Program G8 to enter the radius mode for axis X on a lathe. When in Radius mode the X axis moves\n on a lathe will be the distance from the center. Thus a cut at X1 would result in a part that is 2\u201d in\n diameter. G8 is default at power up.\n \n@@ -40421,15 +40421,15 @@\n It is an error if:\n Cutter Compensation is on\n The P number is unspecified\n The P number is not a valid tool number from the tool table\n The P number is 0\n For more information on cutter orientation used by the Q word, see the Lathe Tool Orientation diagram.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 887 / 1288\n \n 11.5.14. G10 L2 Set Coordinate System\n G10 L2 P- \n \n P - coordinate system (0-9)\n@@ -40489,15 +40489,15 @@\n afterwards.\n When programming a coordinate system with R, any G52 or G92 will be applied after the rotation.\n The coordinate system whose origin is set by a G10 command may be active or inactive at the time\n the G10 is executed. If it is currently active, the new coordinates take effect immediately.\n It is an error if:\n The P number does not evaluate to an integer in the range 0 to 9.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 888 / 1288\n \n An axis is programmed that is not defined in the configuration.\n G10 L2 Example Line\n G10 L2 P1 X3.5 Y17.2\n \n@@ -40531,15 +40531,15 @@\n See T & M6, and G43/G43.1 sections for more information.\n It is an error if:\n Cutter Compensation is on\n The P number is unspecified\n The P number is not a valid tool number from the tool table\n The P number is 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 889 / 1288\n \n 11.5.16. G10 L11 Set Tool Table\n G10 L11 P- axes \n \n P - tool number\n@@ -40567,15 +40567,15 @@\n G10 L20 Example Line\n G10 L20 P1 X1.5 (set the X axis current location in coordinate system 1 to 1.5)\n \n It is an error if:\n The P number does not evaluate to an integer in the range 0 to 9.\n An axis is programmed that is not defined in the configuration.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 890 / 1288\n \n 11.5.18. G17 - G19.1 Plane Select\n These codes set the current plane as follows:\n G17 - XY (default)\n G18 - ZX\n@@ -40609,15 +40609,15 @@\n G28.1 - stores the current absolute position into parameters 5161-5166.\n G28 Example Line\n G28 Z2.5 (rapid to Z2.5 then to Z location specified in #5163)\n \n It is an error if :\n Cutter Compensation is turned on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 891 / 1288\n \n 11.5.21. G30, G30.1 Go/Set Predefined Position\n \n aviso\n Only use G30 when your machine is homed to a repeatable position and the desired G30\n@@ -40654,15 +40654,15 @@\n The (optional) $ argument sets which spindle the motion is synchronised to (default is zero). For\n example G33 Z10 K1 $1 will move the spindle in synchrony with the spindle.N.revs HAL pin value.\n Spindle-synchronized motion waits for the spindle index and spindle at speed pins, so multiple passes\n line up. G33 moves end at the programmed endpoint. G33 could be used to cut tapered threads or a\n fusee.\n All the axis words are optional, except that at least one must be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 892 / 1288\n \n nota\n 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\n for example when cutting tapered threads.\n \n@@ -40699,15 +40699,15 @@\n $ - optional spindle selector\n aviso\n For Z only tapping preposition the XY location prior to calling G33.1 and only use a Z word in\n the G33.1. If the coordinates specified are not the current coordinates when calling G33.1 for\n tapping the move will not be along the Z axis but will be a coordinated, spindle-synchronized\n move from the current location to the location specified and back.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 893 / 1288\n \n For rigid tapping (spindle synchronized motion with return), code G33.1 X- Y- Z- K- where K- gives the\n distance moved for each revolution of the spindle.\n A rigid tapping move consists of the following sequence:\n A move from the current coordinate to the specified coordinate, synchronized with the selected\n@@ -40742,15 +40742,15 @@\n G38.n axes\n \n G38.2 - probe toward workpiece, stop on contact, signal error if failure\n G38.3 - probe toward workpiece, stop on contact\n G38.4 - probe away from workpiece, stop on loss of contact, signal error if failure\n G38.5 - probe away from workpiece, stop on loss of contact\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 894 / 1288\n \n importante\n You will not be able to use a probe move until your machine has been set up to provide a probe\n input signal. The probe input signal must be connected to motion.probe-input in a .hal file.\n G38.n uses motion.probe-input to determine when the probe has made (or lost) contact. TRUE\n@@ -40805,15 +40805,15 @@\n It is an error if:\n the current point is the same as the programmed point.\n no axis word is used\n cutter compensation is enabled\n the feed rate is zero\n the probe is already in the target state\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 895 / 1288\n \n 11.5.25. G40 Compensation Off\n G40 - turn cutter compensation off. If tool compensation was on the next move must be a linear\n move and longer than the tool diameter. It is OK to turn compensation off when it is already off.\n G40 Example\n@@ -40852,15 +40852,15 @@\n The lead in move must be at least as long as the tool radius. The lead in move can be a rapid move.\n Cutter compensation may be performed if the XY-plane or XZ-plane is active.\n User M100-M199 commands are allowed when Cutter Compensation is on.\n The behavior of the machining center when cutter compensation is on is described in the Cutter\n Compensation section along with code examples.\n It is an error if:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 896 / 1288\n \n The D number is not a valid tool number or 0.\n The YZ plane is active.\n Cutter compensation is commanded to turn on when it is already on.\n \n@@ -40898,15 +40898,15 @@\n \n It is an error if:\n the H number is not an integer, or\n the H number is negative, or\n the H number is not a valid tool number (though note that 0 is a valid tool number on nonrandom\n tool changer machines, it means \u201dthe tool currently in the spindle\u201d)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 897 / 1288\n \n 11.5.29. G43.1 Dynamic Tool Length Offset\n G43.1 axes\n \n G43.1 axes - change subsequent motions by replacing the current offset(s) of axes. G43.1 does not\n@@ -40942,15 +40942,15 @@\n It is an error if:\n H is unspecified and no axis offsets are specified.\n H is specified and the given tool number does not exist in the tool table.\n H is specified and axes are also specified.\n nota\n G43.2 does not write to the tool table.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 898 / 1288\n \n 11.5.31. G49 Cancel Tool Length Compensation\n G49 - cancels tool length compensation\n It is OK to program using the same offset already in use. It is also OK to program using no tool length\n offset if none is currently being used.\n@@ -40985,15 +40985,15 @@\n G57 - select coordinate system 4\n G58 - select coordinate system 5\n G59 - select coordinate system 6\n G59.1 - select coordinate system 7\n G59.2 - select coordinate system 8\n G59.3 - select coordinate system 9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 899 / 1288\n \n The coordinate systems store the axis values and the XY rotation angle around the Z axis in the parameters shown in the following table.\n Cuadro 11.11: Coordinate System Parameters\n Select CS\n G54\n@@ -41143,15 +41143,15 @@\n from the programmed point you end up.\n G64 P- - Blend between best speed and deviation tolerance\n G64 P- blending with tolerance. It is a way to fine tune your system for best compromise\n between speed and accuracy. The P- tolerance means that the actual path will be no more than Paway from the programmed endpoint. The velocity will be reduced if needed to maintain the path.\n If you set Q to a non-zero value it turns on the Naive CAM Detector: when there are a series of\n linear XYZ feed moves at the same feed rate that are less than Q- away from being collinear, they\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 900 / 1288\n \n are collapsed into a single linear move. On G2/G3 moves in the G17 (XY) plane when the maximum\n deviation of an arc from a straight line is less than the G64 P- tolerance the arc is broken into two\n lines (from start of arc to midpoint, and from midpoint to end). those lines are then subject to the\n naive cam algorithm for lines. Thus, line-arc, arc-arc, and arc-line cases as well as line-line benefit\n@@ -41189,15 +41189,15 @@\n this point.\n Fillet and chamfers in the profile. It is possible to add fillets or chamfers in the profile, see Secci\u00f3n 11.5.39 for more details.\n It is an error if:\n There is no subroutine defined with the number given in Q.\n The path given in the profile is not monotonic in Z or X.\n Secci\u00f3n 11.5.18 has not been used to select the ZX plane.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 901 / 1288\n \n 11.5.39. G71 G72 Lathe roughing cycles\n nota\n The G71 and G72 cycles are currently somewhat fragile. See issues #707 and #1146\n \n@@ -41238,15 +41238,15 @@\n If Z or X are used a rapid move to that position is done.\n After the profile has been cut, the tool stops at the end of the profile, including the distance\n specified in D.\n 2. The D number is used to keep a distance from the final profile, to allow material to remain for\n finishing.\n It is an error if:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 902 / 1288\n \n There is no subroutine defined with the number given in Q.\n The path given in the profile is not monotonic in Z or X.\n Secci\u00f3n 11.5.18 has not been used to select the ZX plane.\n Secci\u00f3n 11.5.26 is active.\n@@ -41276,15 +41276,15 @@\n \n R- - Retract position along the Z axis.\n L- - Used in incremental mode; number of times to repeat the cycle. See G81 for examples.\n P- - Dwell time (seconds).\n $- - Selected spindle.\n F- - Feed rate (spindle speed multiplied by distance traveled per revolution (thread pitch)).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 903 / 1288\n \n aviso\n G74 does not use synchronized motion.\n \n The G74 cycle is intended for tapping with floating chuck and dwell at the bottom of the hole.\n@@ -41301,15 +41301,15 @@\n thread pitch gives a feed of F125.\n \n 11.5.42. G76 Threading Cycle\n G76 P- Z- I- J- R- K- Q- H- E- L- $-\n \n Figura 11.14: G76 Threading\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 904 / 1288\n \n Drive Line - A line through the initial X position parallel to the Z.\n P- - The thread pitch in distance per revolution.\n Z- - The final position of threads. At the end of the cycle the tool will be at this Z position.\n nota\n@@ -41347,15 +41347,15 @@\n the last pass tapers to the thread crest over the distance specified with E. E0.2 will give a taper for\n the first/last 0.2 length units along the thread. For a 45 degree taper program E the same as K.\n L- - Specifies which ends of the thread get the taper. Program L0 for no taper (the default), L1 for\n entry taper, L2 for exit taper, or L3 for both entry and exit tapers. Entry tapers will pause at the\n drive line to synchronize with the index pulse then move at the feed rate in to the beginning of the\n taper. No entry taper and the tool will rapid to the cut depth then synchronize and begin the cut.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 905 / 1288\n \n The tool is moved to the initial X and Z positions prior to issuing the G76. The X position is the drive\n line and the Z position is the start of the threads.\n The tool will pause briefly for synchronization before each threading pass, so a relief groove will be\n required at the entry unless the beginning of the thread is past the end of the material or an entry\n@@ -41385,15 +41385,15 @@\n G0 Z-0.5 X0.2\n G76 P0.05 Z-1 I-.075 J0.008 K0.045 Q29.5 L2 E0.045\n \n In the figure the tool is in the final position after the G76 cycle is completed. You can see the entry\n path on the right from the Q29.5 and the exit path on the left from the L2 E0.045. The white lines are\n the cutting moves.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 906 / 1288\n \n Figura 11.15: G76 Example\n \n 11.5.43. G80-G89 Canned Cycles\n The canned cycles G81 through G89 and the canned cycle stop G80 are described in this section.\n@@ -41414,15 +41414,15 @@\n code in a row, the number must be used the first time, but is optional on the rest of the lines. Sticky\n numbers keep their value on the rest of the lines if they are not explicitly programmed to be different.\n The R number is always sticky.\n In incremental distance mode X, Y, and R numbers are treated as increments from the current position\n and Z as an increment from the Z-axis position before the move involving Z takes place. In absolute\n distance mode, the X, Y, R, and Z numbers are absolute positions in the current coordinate system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 907 / 1288\n \n 11.5.43.3. Repeat Cycle\n The L number is optional and represents the number of repeats. L=0 is not allowed. If the repeat\n feature is used, it is normally used in incremental distance mode, so that the same sequence of motions is repeated in several equally spaced places along a straight line. When L- is greater than 1 in\n incremental mode with the XY-plane selected, the X and Y positions are determined by adding the\n@@ -41455,15 +41455,15 @@\n once, regardless of the value of L.\n In addition, at the beginning of the first cycle and each repeat, the following one or two moves are\n made:\n A rapid move parallel to the XY-plane to the given XY-position.\n The Z-axis make a rapid move to the R position, if it is not already at the R position.\n If another plane is active, the preliminary and in-between motions are analogous.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 908 / 1288\n \n 11.5.43.7. Why use a canned cycle?\n There are at least two reasons for using canned cycles. The first is the economy of code. A single bore\n would take several lines of code to execute.\n The G81 Example 1 demonstrates how a canned cycle could be used to produce 8 holes with ten lines\n@@ -41487,15 +41487,15 @@\n The G98 on the second line above means that the return move will be to the Z value on the first line\n since it is higher than the specified R value.\n \n Twelve Holes in a Square This example demonstrates the use of the L word to repeat a set of\n incremental drill cycles for successive blocks of code within the same G81 motion mode. Here we\n produce 12 holes using five lines of code in the canned motion mode.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 909 / 1288\n \n N1000 G90 G0 X0 Y0 Z0 (move coordinate home)\n N1010 G1 F50 X0 G4 P0.1\n N1020 G91 G81 X1 Y0 Z-0.5 R1 L4 (canned drill cycle)\n N1030 X0 Y1 R0 L3 (repeat)\n@@ -41516,15 +41516,15 @@\n It is an error if:\n Axis words are programmed when G80 is active.\n G80 Example\n G90 G81 X1 Y1 Z1.5 R2.8 (absolute distance canned cycle)\n G80 (turn off canned cycle motion)\n G0 X0 Y0 Z0 (rapid move to coordinate home)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 910 / 1288\n \n The following code produces the same final position and machine state as the previous code.\n G0 Example\n G90 G81 X1 Y1 Z1.5 R2.8 (absolute distance canned cycle)\n G0 X0 Y0 Z0 (rapid move to coordinate home)\n@@ -41565,15 +41565,15 @@\n \n The G81 cycle is intended for drilling.\n The cycle functions as follows:\n Preliminary motion, as described in the Preliminary and In-Between Motion section.\n Move the Z-axis at the current feed rate to the Z position.\n The Z-axis does a rapid move to clear Z.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 911 / 1288\n \n Figura 11.16: G81 Cycle\n Example 1 - Absolute Position G81\n G90 G98 G81 X4 Y5 Z1.5 R2.8\n \n@@ -41586,15 +41586,15 @@\n The R value and clear Z are 2.8. OLD_Z is 3.\n The following moves take place:\n A rapid move parallel to the XY plane to (X4, Y5)\n A rapid move move parallel to the Z-axis to (Z2.8).\n Move parallel to the Z-axis at the feed rate to (Z1.5)\n A rapid move parallel to the Z-axis to (Z3)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 912 / 1288\n \n Example 2 - Relative Position G81\n G91 G98 G81 X4 Y5 Z-0.6 R1.8 L3\n \n Suppose the current position is (X1, Y2, Z3) and the preceding line of NC code is interpreted.\n@@ -41615,27 +41615,27 @@\n A rapid move parallel to the Z-axis to (X9, Y12, Z4.8)\n The third repeat consists of 3 moves. The X position is reset to 13 (=9+4) and the Y position to 17\n (=12+5).\n A rapid move parallel to the XY-plane to (X13, Y17, Z4.8)\n Move parallel to the Z-axis at the feed rate to (X13, Y17, Z4.2)\n A rapid move parallel to the Z-axis to (X13, Y17, Z4.8)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 913 / 1288\n \n Example 3 - Relative Position G81\n G90 G98 G81 X4 Y5 Z1.5 R2.8\n \n Now suppose that you execute the first G81 block of code but from (X0, Y0, Z0) rather than from (X1,\n Y2, Z3).\n Since OLD_Z is below the R value, it adds nothing for the motion but since the initial value of Z is less\n than the value specified in R, there will be an initial Z move during the preliminary moves.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 914 / 1288\n \n Example 4 - Absolute G81 R > Z This is a plot of the path of motion for the second g81 block of\n code.\n G91 G98 G81 X4 Y5 Z-0.6 R1.8 L3\n \n@@ -41645,15 +41645,15 @@\n \n Example 5 - Relative position R > Z\n G90 G98 G81 X4 Y5 Z-0.6 R1.8\n \n Since this plot starts with (X0, Y0, Z0), the interpreter adds the initial Z0 and R1.8 and rapid moves\n to that location as in Example 4. After that initial Z move, the rapid move to X4 Y5 is done. Then the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 915 / 1288\n \n final Z depth being 0.6 below the R value. The repeat function would make the Z move in the same\n location again.\n \n 11.5.46. G82 Drilling Cycle, Dwell\n@@ -41686,15 +41686,15 @@\n Rapid move back out to the retract plane specified by the R word.\n Rapid move back down to the current hole bottom, less .010 of an inch or 0.254 mm.\n Repeat steps 2, 3, and 4 until the Z position is reached at step 2.\n The Z-axis does a rapid move to clear Z.\n It is an error if:\n the Q number is negative or zero.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 916 / 1288\n \n 11.5.48. G84 Right-hand Tapping Cycle, Dwell\n G84 (X- Y- Z-) or (U- V- W-) R- L- P- $- F-\n \n R- - Retract position along the Z axis.\n@@ -41724,15 +41724,15 @@\n \n The G85 cycle is intended for boring or reaming, but could be used for drilling or milling.\n Preliminary motion, as described in the Preliminary and In-Between Motion section.\n Move the Z-axis only at the current feed rate to the Z position.\n Retract the Z-axis at the current feed rate to the R plane if it is lower than the initial Z.\n Retract at the traverse rate to clear Z.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 917 / 1288\n \n 11.5.50. G86 Boring Cycle, Spindle Stop, Rapid Move Out\n G86 (X- Y- Z-) or (U- V- W-) R- L- P- $-\n \n The G86 cycle is intended for boring. This cycle uses a P number for the number of seconds to dwell.\n@@ -41764,15 +41764,15 @@\n 11.5.54. G90, G91 Distance Mode\n G90 - absolute distance mode In absolute distance mode, axis numbers (X, Y, Z, A, B, C, U, V, W)\n usually represent positions in terms of the currently active coordinate system. Any exceptions to\n that rule are described explicitly in the G80 G89 section.\n G91 - incremental distance mode In incremental distance mode, axis numbers usually represent\n increments from the current coordinate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 918 / 1288\n \n G90 Example\n G90 (set absolute distance mode)\n G0 X2.5 (rapid move to coordinate X2.5 including any offsets in effect)\n \n@@ -41810,15 +41810,15 @@\n Being in incremental distance mode (G91 instead of G90) has no effect on the action of G92.\n G92 offsets may be already be in effect when the G92 is called. If this is the case, the offset is replaced\n with a new offset that makes the current point become the specified value.\n It is an error if all axis words are omitted.\n LinuxCNC stores the G92 offsets and reuses them on the next run of a program. To prevent this, one\n can program a G92.1 (to erase them), or program a G92.2 (to remove them - they are still stored).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 919 / 1288\n \n nota\n The G52 command can also be used to change this offset; see the Offsets section for more details\n about G92 and G52 and how they interact.\n See the Coordinate System section for an overview of coordinate systems.\n@@ -41856,15 +41856,15 @@\n threading, for threading use G33 or G76. G95 requires that spindle.N.speed-in to be connected.\n The actual spindle to which the feed is synchronised is chosen by the $ parameter.\n It is an error if:\n Inverse time feed mode is active and a line with G1, G2, or G3 (explicitly or implicitly) does not have\n an F-word.\n A new feed rate is not specified after switching to G94 or G95\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 920 / 1288\n \n 11.5.60. G96, G97 Spindle Control Mode\n G96 S- <$-> (Constant Surface Speed Mode)\n G97 S- <$-> (RPM Mode)\n \n@@ -41902,15 +41902,15 @@\n \n The G98 to the second line above means that the return move will be to the value of Z in the first line\n since it is higher that the R value specified.\n The initial (G98) plane is reset any time cycle motion mode is abandoned, whether explicitly (G80) or\n implicitly (any motion code that is not a cycle). Switching among cycle modes (say G81 to G83) does\n NOT reset the initial plane. It is possible to switch between G98 and G99 during a series of cycles.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 921 / 1288\n \n 11.6. M-Codes\n 11.6.1. M-Code Quick Reference Table\n Code\n M0 M1\n@@ -41976,15 +41976,15 @@\n \n 11.6.3. M2, M30 Program End\n M2 - end the program. Pressing Cycle Start (\u201dR\u201d in the Axis GUI) will restart the program at the\n beginning of the file.\n M30 - exchange pallet shuttles and end the program. Pressing Cycle Start will start the program\n at the beginning of the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 922 / 1288\n \n Both of these commands have the following effects:\n Change from Auto mode to MDI mode.\n Origin offsets are set to the default (like G54).\n Selected plane is set to XY plane (like G17).\n@@ -42018,15 +42018,15 @@\n S100 $0\n S200 $1\n S300 $2\n M3 $-1\n \n This example will then reverse spindle 1 but leave the other spindles rotating forwards:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 923 / 1288\n \n M4 $1\n \n And this will stop spindle 2 and leave the other spindles rotating:\n M5 $2\n@@ -42063,15 +42063,15 @@\n \n The tool change may include axis motion. It is OK (but not useful) to program a change to the tool\n already in the spindle. It is OK if there is no tool in the selected slot; in that case, the spindle will\n be empty after the tool change. If slot zero was last selected, there will definitely be no tool in the\n spindle after a tool change. The tool changer will have to be setup to perform the tool change in HAL\n and possibly ClassicLadder.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 924 / 1288\n \n 11.6.7. M7, M8, M9 Coolant Control\n M7 - turn mist coolant on. M7 controls iocontrol.0.coolant-mist pin.\n M8 - turn flood coolant on. M8 controls iocontrol.0.coolant-flood pin.\n M9 - turn both M7 and M8 off.\n@@ -42105,15 +42105,15 @@\n with an error message.\n \u2022 spindle.N.is-oriented (in bit) Acknowledge pin for spindle-orient. Completes orient cycle. If spindleorient was true when spindle-is-oriented was asserted, the spindle-orient pin is cleared and the\n spindle-locked pin is asserted. Also, the spindle-brake pin is asserted.\n \u2022 spindle.N.orient-fault (in s32) Fault code input for orient cycle. Any value other than zero will\n cause the orient cycle to abort.\n \u2022 spindle.N.locked (out bit) Spindle orient complete pin. Cleared by any of M3,M4,M5.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 925 / 1288\n \n 11.6.9. M48, M49 Speed and Feed Override Control\n M48 - enable the spindle speed and feed rate override controls.\n M49 - disable both controls.\n These commands also take an optional $ parameter to determine which spindle they operate on.\n@@ -42146,15 +42146,15 @@\n \n 11.6.13. M53 Feed Stop Control\n M53 - enable the feed stop switch. The P1 is optional. Enabling the feed stop switch will allow\n motion to be interrupted by means of the feed stop control. In LinuxCNC, the HAL pin motion.feedhold is used for this purpose. A true value will cause the motion to stop when M53 is active.\n M53 P0 - disable the feed stop switch. The state of motion.feed-hold will have no effect on feed when\n M53 is not active.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 926 / 1288\n \n 11.6.14. M61 Set Current Tool\n M61 Q- - change the current tool number while in MDI or Manual mode without a tool change.\n One use is when you power up LinuxCNC with a tool currently in the spindle you can set that tool\n number without doing a tool change.\n@@ -42188,15 +42188,15 @@\n 11.6.16. M66 Wait on Input\n M66 P- | E- \n \n P- - specifies the digital input number from 0 to 3. (Adjustable from motmod argument num_dio)\n E- - specifies the analog input number from 0 to 3. (Adjustable from motmod argument num_aio)\n L- - specifies the wait mode type.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 927 / 1288\n \n \u2022 Mode 0: IMMEDIATE - no waiting, returns immediately. The current value of the input is stored\n in parameter #5399\n \u2022 Mode 1: RISE - waits for the selected input to perform a rise event.\n \u2022 Mode 2: FALL - waits for the selected input to perform a fall event.\n@@ -42233,15 +42233,15 @@\n program a motion G-code (G0, G1, etc) right after the M67. M67 functions the same as M62-63.\n The number of I/O can be increased by using the num_dio or num_aio parameter when loading the\n motion controller. See the Motion section for more information.\n nota\n M67 will not function unless the appropriate motion.analog-out-nn pins are connected in your HAL\n file to outputs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 928 / 1288\n \n 11.6.18. M68 Analog Output, Immediate\n M68 E- Q-\n \n M68 - set an analog output immediately.\n@@ -42273,15 +42273,15 @@\n arc distance mode (G90.1, G91.1)\n lathe radius/diameter mode (G7,G8)\n path control mode (G61, G61.1, G64)\n current feed and speed (F and S values)\n spindle status (M3,M4,M5) - on/off and direction\n mist (M7) and flood (M8) status\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 929 / 1288\n \n speed override (M51) and feed override (M50) settings\n adaptive feed setting (M52)\n feed hold setting (M53)\n Note that in particular, the motion mode (G1 etc) is NOT restored.\n@@ -42319,15 +42319,15 @@\n g91 (relative mode)\n F5 (low feed)\n S300 (low rpm)\n (debug, in subroutine, state now:)\n o call\n O endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 930 / 1288\n \n ; main program\n g21 (metric)\n g90 (absolute)\n f200 (fast speed)\n@@ -42372,15 +42372,15 @@\n (debug, in main, state now:)\n o call\n o call\n (debug, back in main, state now:)\n o call\n m2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 931 / 1288\n \n 11.6.23. M98 and M99\n The interpreter supports Fanuc-style main- and sub-programs with the M98 and M99 M-codes. See\n Fanuc-Style Programs.\n 11.6.23.1. Selectively Restoring Modal State\n@@ -42421,15 +42421,15 @@\n values as its two arguments.\n Execution of the G-code file pauses until the external program exits. Any valid executable file can be\n used. The file must be located in the search path specified in the INI file configuration. See the Display\n section for more information on search paths.\n After creating a new M1nn program, the GUI should be restarted so that the new program is taken\n into account, otherwise a Unknown M-code error will occur.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 932 / 1288\n \n aviso\n Do not use a word processor to create or edit the files. A word processor will leave unseen\n codes that will cause problems and may prevent a bash or python file from working. Use a\n text editor like Geany in Debian or Notepad++ in other operating systems to create or edit the\n@@ -42471,15 +42471,15 @@\n To display a graphic message and stop until the message window is closed use a graphic display\n program like Eye of Gnome to display the graphic file. When you close it the program will resume.\n M110 Example file\n #!/bin/bash\n eog /home/john/linuxcnc/nc_files/message.png\n exit 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 933 / 1288\n \n To display a graphic message and continue processing the G-code file suffix an ampersand to the\n command.\n M110 Example display and keep going\n #!/bin/bash\n@@ -42513,15 +42513,15 @@\n The same number is used for more than one block.\n Other words are used on a line with an O- word.\n Comments are used on a line with an O-word.\n nota\n Using the lower case o makes it easier to distinguish from a 0 that might have been mistyped. For\n example o100 is easier to see than O100 that it is not a 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 934 / 1288\n \n 11.7.4. Subroutines\n Subroutines starts at Onnn sub and ends at Onnn endsub. The lines between Onnn sub and Onnn\n endsub are not executed until the subroutine is called with Onnn call. Each subroutine must use a\n unique number.\n@@ -42570,15 +42570,15 @@\n Subroutine bodies may not be nested. They may only be called after they are defined. They may\n be called from other functions, and may call themselves recursively if it makes sense to do so. The\n maximum subroutine nesting level is 10.\n Subroutines can change the value of parameters above #30 and those changes will be visible to the\n calling code. Subroutines may also change the value of global named parameters (i.e. parameters\n whose names begin with the underscore character \u201d_\u201d).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 935 / 1288\n \n 11.7.4.1. Fanuc-Style Numbered Programs\n Numbered programs (both main and subprograms), the M98 call and M99 return M-codes, and their\n respective semantic differences are an alternative to the rs274ngc subroutines described above, provided for compatibility with Fanuc and other machine controllers.\n Numbered programs are enabled by default, and may be disabled by placing DISABLE_FANUC_STYLE_SUB\n@@ -42624,15 +42624,15 @@\n M98 subprogram call blocks may contain an optional L-word specifying a loop repeat count. Without\n the L-word, the subprogram will execute once only (equivalent to M98 L1). An M98 L0 block will not\n execute the subprogram.\n In rare cases, the M99 M-code may be used to terminate the main program, where it indicates an\n endless program. When the interpreter reaches an M99 in the main program, it will skip back to the\n beginning of the file and resume execution at the first line. An example use of an endless program is\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 936 / 1288\n \n in a machine warm-up cycle; a block delete program end /M30 block might be used to stop the cycle\n at a tidy point when the operator is ready.\n Numbered Subprogram Full Example\n O1\n@@ -42698,15 +42698,15 @@\n #1 = 3 (assign the value of 3 to parameter #1)\n (msg, #1 has been assigned the value of 3)\n o100 continue (skip to start of loop)\n o110 endif\n (some code here)\n #1 = [#1 + 1] (increment the test counter)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 937 / 1288\n \n o100 while [#1 LT 3]\n (msg, Loop Done!)\n M2\n \n@@ -42752,15 +42752,15 @@\n O102 elseif [#2 LT 2]\n F20\n (parameter #2 is between 2 and 5)\n O102 else\n F200\n O102 endif\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 938 / 1288\n \n 11.7.7. Repeat\n The repeat will execute the statements inside of the repeat/endrepeat the specified number of times.\n The example shows how you might mill a diagonal series of shapes starting at the present position.\n Example with repeat\n@@ -42802,15 +42802,15 @@\n M2\n \n nota\n The file names are lowercase letters only so o is converted to o by the interpreter.\n More information about the search path and options for the search path are in the INI configuration\n section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 939 / 1288\n \n 11.7.10. Subroutine return values\n Subroutines may optionally return a value by an optional expression at an endsub or return statement.\n Return value example\n o123 return [#2 *5]\n@@ -42845,15 +42845,15 @@\n spindle speed for a specific spindle. Without the $ the command will default to spindle.0.\n The spindle(s) or selected spindle will turn at that speed when a M3 or M4 is in effect. It is OK to\n program an S word whether the spindle is turning or not. If the speed override switch is enabled and\n not set at 100 %, the speed will be different from what is programmed.\n It is OK to program S0, the spindle will not turn if that is done.\n It is an error if:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 940 / 1288\n \n the S number is negative.\n As described in the section Right-hand Tapping Cycle with Dwell, if a G84 (tapping) drilling cycle is\n active and the speed and feed potentiometers are enabled, the one with the lowest setting will be\n used. The rotational speed and feed rate will remain synchronized. In this case, the speed may differ\n@@ -42890,37 +42890,37 @@\n file is appropriate for your machine before running.\n \n 11.9.1. Mill Examples\n 11.9.1.1. Helical Hole Milling\n File Name: useful-subroutines.ngc\n Description: Subroutine for milling a hole using parameters.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 941 / 1288\n \n 11.9.1.2. Slotting\n File Name: useful-subroutines.ngc\n Description: Subroutine for milling a slot using parameters.\n \n 11.9.1.3. Grid Probe\n File Name: gridprobe.ngc\n Description: Rectangular Probing\n This program repeatedly probes in a regular XY grid and writes the probed location to the file proberesults.txt in the same directory as the .ini file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 942 / 1288\n \n 11.9.1.4. Smart Probe\n File Name: smartprobe.ngc\n Description: Rectangular Probing\n This program repeatedly probes in a regular XY grid and writes the probed location to the file proberesults.txt in the same directory as the .ini file. This is improved from the grid probe file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 943 / 1288\n \n 11.9.1.5. Tool Length Probe\n File Name: tool-length-probe.ngc\n Description: Tool Length Probing\n This program shows an example of how to measure tool lengths automatically using a switch hooked\n@@ -42930,15 +42930,15 @@\n File Name: probe-hole.ngc\n Description: Finding the Center and Diameter of a hole.\n The program demonstrates how to find the center of a hole, measure the hole diameter and record\n the results.\n 11.9.1.7. Cutter Compensation\n File Name: comp-g1.ngc\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 944 / 1288\n \n Description: Entry and exit movements with compensation of tool radius.\n This program demonstrates the peculiarity of the toolpath without and with tool radius compensation.\n The tool radius is taken from the tool table.\n \n@@ -42950,15 +42950,15 @@\n \n 11.10. Image to G-Code\n \n 11.10.1. What is a depth map?\n A depth map is a greyscale image where the brightness of each pixel corresponds to the depth (or\n height) of the object at each point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 945 / 1288\n \n 11.10.2. Integrating image-to-gcode with the AXIS user interface\n Add the following lines to the [FILTER] section of your INI file to make AXIS automatically invoke\n image-to-gcode when you open a PNG, GIF, or JPEG image:\n PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image\n@@ -42992,15 +42992,15 @@\n cut off. If White or Black, then a border of pixels equal to the tool diameter is added on all sides, and\n details which are at the very edges of the images will not be cut off.\n 11.10.4.5. Tolerance (units)\n When a series of points are within tolerance of being a straight line, they are output as a straight line.\n Increasing tolerance can lead to better contouring performance in LinuxCNC, but can also remove or\n blur small details in the image.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 946 / 1288\n \n 11.10.4.6. Pixel Size (units)\n One pixel in the input image will be this many units\u2014usually this number is much smaller than 1.0. For\n instance, to mill a 2.5x2.5-inch object from a 400x400 image file, use a pixel size of .00625, because\n 2.5 / 400 = .00625.\n@@ -43027,15 +43027,15 @@\n 11.10.4.12. Depth (units)\n The top of material is always at Z = 0. The deepest cut into the material is at Z = -depth.\n 11.10.4.13. Step Over (pixels)\n The distance between adjacent rows or columns. To find the number of pixels for a given units distance,\n compute distance/pixel size and round to the nearest whole number. For example, if pixel size=.006\n and the desired step over distance=.015, then use a Step Over of 2 or 3 pixels, because .015/.006=2.5.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 947 / 1288\n \n 11.10.4.14. Tool Diameter\n The diameter of the cutting part of the tool.\n 11.10.4.15. Safety Height\n The height to move to for traverse movements. image-to-gcode always assumes the top of material is\n@@ -43061,15 +43061,15 @@\n Image-to-gcode can optionally perform roughing passes. The depth of successive roughing passes is\n given by Roughing depth per pass. For instance, entering 0.2 will perform the first roughing pass with\n a depth of 0.2, the second roughing pass with a depth of 0.4, and so on until the full Depth of the image\n is reached. No part of any roughing pass will cut closer than Roughing Offset to the final part. The\n following figure shows a tall vertical feature being milled. In this image, Roughing depth per pass is\n 0.2 inches and roughing offset is 0.1 inches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 948 / 1288\n \n Figura 11.17: Roughing passes and final pass\n \n 11.11. RS274/NGC Differences\n 11.11.1. Changes from RS274/NGC\n@@ -43091,15 +43091,15 @@\n and well-formed (starting with G20 or G21, and didn\u2019t change units throughout the program),\n without changing the tool table.\n G84, G87 not implemented\n G84 and G87 are not currently implemented, but may be added to a future release of LinuxCNC.\n G28, G30 with axis words\n When G28 or G30 is programmed with only some axis words present, LinuxCNC only moves the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 949 / 1288\n \n named axes. This is common on other machine controls. To move some axes to an intermediate\n point and then move all axes to the predefined point, write two lines of G code:\n G0 X- Y- (axes to move to intermediate point)\n G28 (move all axes to predefined point)\n@@ -43136,15 +43136,15 @@\n tool is currently loaded, it is an error. This change was made so the user doesn\u2019t have to specify\n the tool number in two places for each tool change, and because it\u2019s consistent with the way\n G41/G42 work when the D word is not specified.\n U, V, and W axes\n LinuxCNC allows machines with up to 9 axes by defining an additional set of 3 linear axes known\n as U, V and W\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 950 / 1288\n \n Cap\u00edtulo 12\n \n Virtual Control Panels\n 12.1. PyVCP\n@@ -43154,15 +43154,15 @@\n Hardware machine control panels can use up a lot of I/O pins and can be expensive. That is where\n Virtual Control Panels have the advantage as well as it cost nothing to build a PyVCP.\n Virtual Control Panels can be used for testing or monitoring things to temporarily replace real I/O\n devices while debugging ladder logic, or to simulate a physical panel before you build it and wire it\n to an I/O board.\n The following graphic displays many of the PyVCP widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 951 / 1288\n \n Figura 12.1: PyVCP Widgets Showcase\n \n 12.1.2. Panel Construction\n The layout of a PyVCP panel is specified with an XML file that contains widget tags between \n@@ -43170,15 +43170,15 @@\n \n \n \n Figura 12.2: Simple PyVCP LED Panel Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 952 / 1288\n \n If you place this text in a file called tiny.xml, and run\n halcmd loadusr pyvcp -c mypanel tiny.xml\n \n PyVCP will create the panel for you, which includes two widgets, a Label with the text This is a LED\n@@ -43223,15 +43223,15 @@\n \n \n Here we\u2019ve made a panel with a Label and a Bar widget, specified that the HAL pin connected to\n the Bar should be named spindle-speed, and set the maximum value of the bar to 5000 (see widget\n reference below for all options). To make AXIS aware of this file, and call it at start up, we need to\n specify the following in the [DISPLAY] section of the INI file:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 953 / 1288\n \n PYVCP = spindle.xml\n \n If the panel should appear at the bottom of the AXIS user interface then we need to specify the\n following in the [DISPLAY] section of the INI file:\n@@ -43250,15 +43250,15 @@\n assuming that a signal called spindle-rpm-filtered already exists. Note that when running together\n with AXIS, all PyVCP panel widget HAL pins have names that start with pyvcp., all PyVCP embedded\n tab widget HAL pins start with the name specified as EMBED_TAB_NAME converted to lower case.\n \n This is what the newly created PyVCP panel should look like in AXIS. The sim/lathe configuration is\n already configured this way.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 954 / 1288\n \n 12.1.5. Stand Alone\n This section describes how PyVCP panels can be displayed on their own with or without LinuxCNC\u2019s\n machine controller.\n To load a stand alone PyVCP panel with LinuxCNC use these commands:\n@@ -43296,15 +43296,15 @@\n An optional command to use if you want the panel to stop HAL from continuing commands / shutting\n down. After loading any other components you want the last HAL command to be:\n waitusr panelname\n \n This tells HAL to wait for component panelname to close before continuing HAL commands. This is\n usually set as the last command so that HAL shuts down when the panel is closed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 955 / 1288\n \n 12.1.6. Widgets\n HAL signals come in two variants, bits and numbers. Bits are off/on signals. Numbers can be float,\n s32 or u32. For more information on HAL data types see the HAL Data section. The PyVCP widget\n can either display the value of the signal with an indicator widget, or modify the signal value with a\n@@ -43341,15 +43341,15 @@\n Editing the XML file Edit the XML file with a text editor. In most cases you can right click on the file\n and select open with text editor or similar.\n Colors\n Colors can be specified using the X11 rgb colors by name gray75 or hex #0000ff. A complete list is\n located here https://sedition.com/perl/rgb.html.\n Common Colors (colors with numbers indicate shades of that color)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 956 / 1288\n \n white\n black\n blue and blue1 - 4\n cyan and cyan1 - 4\n@@ -43378,15 +43378,15 @@\n (\u201dHelvetica\u201d,20)\n \n \n The above code produced this example:\n \n Figura 12.3: Simple Label Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 957 / 1288\n \n 12.1.6.4. Multi_Label\n An extension of the text label.\n Selectable text label, can display up to 6 label legends when associated bit pin is activated.\n Attach each legend pin to a signal and get a descriptive label when the signal is TRUE.\n@@ -43423,15 +43423,15 @@\n red.\n n - sets the height of the LED in pixels.\n n - sets the width of the LED in pixels.\n false - when true adds a disable pin to the led.\n color - sets the color of the LED to color when the pin is disabled.\n Round LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 958 / 1288\n \n \n \u201dmy-led\u201d\n 50\n \u201dgreen\u201d\n@@ -43460,15 +43460,15 @@\n \n 12.1.6.6. Buttons\n A button is used to control a BIT pin. The pin will be set True when the button is pressed and held\n down, and will be set False when the button is released. Buttons can use the following optional options.\n n - where n is the amount of extra horizontal extra space.\n n - where n is the amount of extra vertical extra space.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 959 / 1288\n \n \u201dcolor\u201d - the cursor over color set to color.\n \u201dcolor\u201d - the foreground color set to color.\n \u201dcolor\u201d - the background color set to color.\n True - disable pin.\n@@ -43496,15 +43496,15 @@\n \n Figura 12.8: Checked button\n Checkbutton Code Example\n \n \u201dcoolant-chkbtn\u201d\n \u201dCoolant\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 960 / 1288\n \n 1\n \n \n \u201dchip-chkbtn\u201d\n@@ -43532,15 +43532,15 @@\n Figura 12.10: Simple Radiobutton Example\n Note that the HAL pins in the example above will be named my-radio.one, my-radio.two, and myradio.three. In the image above, one is the selected value. Use the tag HORIZONTAL\n to display horizontally.\n 12.1.6.7. Number Displays\n Number displays can use the following formatting options\n (\u201dFont Name\u201d,n), where n is the font size.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 961 / 1288\n \n _n_, where n is the overall width of the space used.\n _pos_, where pos is LEFT, CENTER, or RIGHT (doesn\u2019t work).\n _n_, where n is the amount of extra horizontal extra space.\n _n_, where n is the amount of extra vertical extra space.\n@@ -43569,15 +43569,15 @@\n 6\n \n \n The above code produced this example:\n \n Figura 12.12: Simple s32 Number Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 962 / 1288\n \n u32 Number The u32 number widget displays the value of a u32 number. The syntax is the same as\n number except the name which is .\n Bar A bar widget displays the value of a FLOAT signal both graphically using a bar display and numerically. The color of the bar can be set as one color throughout its range (default using fillcolor) or\n set to change color, dependent upon the value of the halpin (range1, range2 range3 must all be set,\n@@ -43612,15 +43612,15 @@\n \n \n The above code produced this example:\n \n Figura 12.13: Simple Bar Example\n Meter Meter displays the value of a FLOAT signal using a traditional dial indicator.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 963 / 1288\n \n \n \u201dmymeter\u201d\n \u201dBattery\u201d\n \u201dVolts\u201d\n@@ -43646,15 +43646,15 @@\n \n \u201dmy-spinbox\u201d\n -12\n 33\n 0\n 0.1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 964 / 1288\n \n \u201d2.3f\u201d\n (\u201dArial\u201d,30)\n 1\n \n@@ -43688,15 +43688,15 @@\n 100\n 0\n 1\n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 965 / 1288\n \n Figura 12.16: Simple Scale Example\n nota\n Note that by default it is \u201dmin\u201d which is displayed even if it is greater than \u201dmax\u201d, unless \u201dmin\u201d is\n negative.\n@@ -43719,15 +43719,15 @@\n \u201dgreen\u201d\n \u201dblack\u201d\n 1\n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 966 / 1288\n \n Figura 12.17: Simple Dial Example\n Jogwheel Jogwheel mimics a real jogwheel by outputting a FLOAT pin which counts up or down as\n the wheel is turned, either by dragging in a circular motion, or by rolling the mouse-wheel.\n \n@@ -43739,15 +43739,15 @@\n \u201dmy-wheel\u201d\n 45\n 250\n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 967 / 1288\n \n Figura 12.18: Simple Jogwheel Example\n \n 12.1.6.9. Images\n Image displays use only .gif image format. All of the images must be the same size. The images must\n@@ -43761,15 +43761,15 @@\n \n \n This example was produced from the above code. Using the two image files fwd.gif and rev.gif. FWD\n is displayed when selectimage is false and REV is displayed when selectimage is true.\n \n Figura 12.19: Selectimage False Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 968 / 1288\n \n Figura 12.20: Selectimage True Example\n Image u32 The image_u32 is the same as image_bit, except you have essentially an unlimited number\n of images and you select the image by setting the halpin to a integer value with 0 for the first image\n in the images list and 1 for the second image, etc.\n@@ -43782,15 +43782,15 @@\n \n The above code produced the following example by adding the stb.gif image.\n \n Figura 12.21: Simple image_u32 Example with halpin=0\n \n Figura 12.22: Simple image_u32 Example withhalpin=1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 969 / 1288\n \n Figura 12.23: Simple image_u32 Example withhalpin=2\n Notice that the default is the min even though it is set higher than max unless there is a negative min.\n 12.1.6.10. Containers\n Containers are widgets that contain other widgets. Containers are used to group other widgets.\n@@ -43826,15 +43826,15 @@\n \u201dRIDGE\u201d\n 3\n \n \n \n The above code produced this example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 970 / 1288\n \n Figura 12.24: Containers Borders Showcase\n Fill Container fill are specified with the tag. Valid entries are none, x, y and both.\n The x fill is a horizontal fill and the y fill is a vertical fill\n \n@@ -43861,15 +43861,15 @@\n The above code produced this example:\n \n Figura 12.25: Simple hbox Example\n Inside an Hbox, you can use the , , and tags to choose how items in the box behave when the window is re-sized. The default is\n fill=\u201dy\u201d, anchor=\u201dcenter\u201d, expand=\u201dyes\u201d for an Hbox.\n Vbox Use a Vbox when you want to stack widgets vertically on top of each other.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 971 / 1288\n \n \n RIDGE\n 6\n \n@@ -43895,15 +43895,15 @@\n \n The above code produced this example:\n \n Figura 12.27: Simple labelframe Example\n Table A table is a container that allows layout in a grid of rows and columns. Each row is started by\n 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 \u201dstick\u201d may be set through\n the use of the tag. A table expands on its flexible rows and columns.\n Table Code Example\n

\n@@ -43947,15 +43947,15 @@\n \n \u201dspindle-speed\u201d\n 5000\n \n \n \n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \n \n \n \n \n \n The above code produced this example showing each tab selected.\n \n 973 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 974 / 1288\n \n Figura 12.29: Simple Tabs Example\n \n 12.2. PyVCP Examples\n 12.2.1. AXIS\n@@ -43993,15 +43993,15 @@\n Add the links to HAL pins for your panel in the postgui.hal file to connect your PyVCP panel to\n LinuxCNC.\n The following is an example of a loadusr command to load two PyVCP panels and name each one so\n the connection names in HAL will be known.\n loadusr -Wn btnpanel pyvcp -c btnpanel panel1.xml\n loadusr -Wn sppanel pyvcp -c sppanel panel2.xml\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 975 / 1288\n \n The -Wn makes HAL Wait for name to be loaded before proceeding.\n The pyvcp -c makes PyVCP name the panel.\n The HAL pins from panel1.xml will be named btnpanel.<_pin name_>.\n The HAL pins from panel2.xml will be named sppanel.<_pin name_>.\n@@ -44010,27 +44010,27 @@\n 12.2.3. Jog Buttons Example\n In this example we will create a PyVCP panel with jog buttons for X, Y, and Z. This configuration will be\n built upon a Stepconf Wizard generated configuration. First we run the Stepconf Wizard and configure\n our machine, then on the Advanced Configuration Options page we make a couple of selections to add\n a blank PyVCP panel as shown in the following figure. For this example we named the configuration\n pyvcp_xyz on the Basic Machine Information page of the Stepconf Wizard.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 976 / 1288\n \n Figura 12.30: XYZ Wizard Configuration\n The Stepconf Wizard will create several files and place them in the linuxcnc/configs/pyvcp_xyz directory. If you left the create link checked you will have a link to those files on your desktop.\n 12.2.3.1. Create the Widgets\n Open up the custompanel.xml file by right clicking on it and selecting open with text editor. Between\n the tags we will add the widgets for our panel.\n Look in the PyVCP Widgets Reference section of the manual for more detailed information on each\n widget documentation des widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n In your custompanel.xml file we will add the description of the widgets.\n \n \n (\u201dHelvetica\u201d,16)\n \n \n@@ -44084,15 +44084,15 @@\n \n \n \n \n \n 977 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 978 / 1288\n \n RAISED\n 3\n \n \n The above gives us a PyVCP panel that looks like the following.\n \n 983 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 984 / 1288\n \n 12.2.5.2. The Connections\n To make it work we add the following code to the custom_postgui.hal file.\n # display the rpm based on freq * rpm per hz\n loadrt mult2\n@@ -44444,15 +44444,15 @@\n custom.hal file whereas the rev led needs to use the spindle-rev bit. You can\u2019t link the spindle-fwd bit\n twice so you use the signal that it was linked to.\n \n 12.2.6. Rapid to Home Button\n This example creates a button on the PyVCP side panel when pressed will send all the axis back to\n the home position. This example assumes you don\u2019t have a PyVCP panel.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 985 / 1288\n \n In your configuration directory create the XML file. In this example it\u2019s named rth.xml. In the rth.xml\n file add the following code to create the button.\n \n \n@@ -44468,15 +44468,15 @@\n \n If you don\u2019t have a [HALUI] section in the INI file create it and add the following MDI command.\n MDI_COMMAND = G53 G0 X0 Y0 Z0\n \n nota\n Information about G53 and G0 G-codes.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 986 / 1288\n \n In the [HAL] section if you don\u2019t have a post gui file add the following and create a file called postgui.hal.\n POSTGUI_HALFILE = postgui.hal\n \n In the postgui.hal file add the following code to link the PyVCP button to the MDI command.\n@@ -44507,15 +44507,15 @@\n Widget set: uses TkInter widgets.\n User interface creation: \u201dedit XML file / run result / evaluate looks\u201d cycle.\n No support for embedding user-defined event handling.\n No LinuxCNC interaction beyond HAL pin I/O supported.\n GladeVCP:\n Widget set: relies on the GTK3 widget set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 987 / 1288\n \n User interface creation: uses the Glade WYSIWYG user interface editor.\n Any HAL pin change may be directed to call back into a user-defined Python event handler.\n Any GTK signal (key/button press, window, I/O, timer, network events) may be associated with userdefined handlers in Python.\n Direct LinuxCNC interaction: arbitrary command execution, like initiating MDI commands to call a\n@@ -44539,31 +44539,31 @@\n make setuid then run . ./scripts/rip-environment. More information about a git checkout is on the\n LinuxCNC wiki page.\n \n Run the sample GladeVCP panel integrated into AXIS like PyVCP as follows:\n $ cd configs/sim/axis/gladevcp\n $ linuxcnc gladevcp_panel.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Run the same panel, but as a tab inside AXIS:\n $ cd configs/sim/axis/gladevcp\n $ linuxcnc gladevcp_tab.ini\n \n 988 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n To run this panel inside Touchy:\n $ cd configs/sim/touchy/gladevcp\n $ linuxcnc gladevcp_touchy.ini\n \n 989 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 990 / 1288\n \n 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\n names), mixed setups are possible as well - for instance a panel on the right hand side, and one or\n more tabs for less-frequently used parts of the interface.\n 12.3.2.1. Exploring the example panel\n@@ -44577,15 +44577,15 @@\n and M6 commands in the MDI window will change the current and prepared tool number fields.\n The buttons in the Commands frame are MDI Action widgets - pressing them will execute an MDI\n command in the interpreter. The third button Execute Oword subroutine is an advanced example - it\n takes several HAL pin values from the Settings frame, and passes them as parameters to the Oword\n subroutine. The actual parameters received by the routine are displayed by (DEBUG, ) commands see ../../nc_files/oword.ngc for the subroutine body.\n 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.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 991 / 1288\n \n 12.3.2.2. Exploring the User Interface description\n The user interface is created with the Glade UI editor - to explore it, you need to have Glade installed.\n To edit the user interface, run the command\n $ glade configs/axis/gladevcp/manual-example.ui\n@@ -44620,15 +44620,15 @@\n Glade contains an internal Python interpreter, and only Python 3 is supported. This is true for Debian\n Bullseye, Ubuntu 21 and Mint 21 or later. Older versions will not work, you will get a Python error.\n 12.3.3.2. Running Glade to create a new user interface\n This section just outlines the initial LinuxCNC-specific steps. For more information and a tutorial on\n Glade, see http://glade.gnome.org. Some Glade tips & tricks may also be found on youtube.\n Either modify an existing UI component by running glade .ui or start a new one by just running the glade command from the shell.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 992 / 1288\n \n If LinuxCNC was not installed from a package, the LinuxCNC shell environment needs to be set up\n with source /scripts/rip-environment, otherwise Glade won\u2019t find the LinuxCNCspecific widgets.\n When asked for unsaved preferences, just accept the defaults and hit Close.\n From Toplevels (toolbar), pick GtkWindow (first entry) as top level window. Set window1 as ID in\n@@ -44646,15 +44646,15 @@\n You\u2019re now ready to give it a try (while LinuxCNC, e.g. AXIS is running) it with:\n gladevcp myui.ui\n \n GladeVCP creates a HAL component named like the basename of the UI file - myui in this case - unless\n overridden by the -c option. If running AXIS, just try Show HAL configuration and\n inspect its pins.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 993 / 1288\n \n You might wonder why widgets contained a HAL_Hbox or HAL_Table appear greyed out (inactive).\n 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\n halui.machine.is-on or one of the halui.mode signals, to assure some widgets appear active only\n in a certain state.\n@@ -44690,15 +44690,15 @@\n [DISPLAY]\n # add GladeVCP panel where PyVCP used to live:\n GLADEVCP= -c example -u ./hitcounter.py ./manual-example.ui\n \n The command line actually run by AXIS for the above is:\n halcmd loadusr -Wn example gladevcp -c example -x {XID} -u ./hitcounter.py ./manual-example \u2190.ui\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 994 / 1288\n \n nota\n The file specifiers like ./hitcounter.py, ./manual-example.ui, etc. indicate that the files are located in\n the same directory as the INI file. You might have to copy them to you directory (alternatively, specify\n a correct absolute or relative path to the file(s)).\n@@ -44736,15 +44736,15 @@\n 12.3.3.7. Integrating into Touchy\n To do add a GladeVCP tab to Touchy, edit your INI file as follows:\n [DISPLAY]\n # add GladeVCP panel as a tab\n EMBED_TAB_NAME=GladeVCP demo\n EMBED_TAB_COMMAND=gladevcp -c gladevcp -x {XID} -u ./hitcounter.py -H ./gladevcp-touchy.hal \u2190./manual-example.ui\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 995 / 1288\n \n [RS274NGC]\n # gladevcp Demo specific Oword subs live here\n SUBROUTINE_PATH = ../../nc_files/gladevcp_lib\n \n@@ -44790,15 +44790,15 @@\n Re-parent GladeVCP into an existing window XID instead of creating a new top level\n window\n \n \u2190-\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 996 / 1288\n \n -u FILE::\n Use File\u2019s as additional user defined modules with handlers\n -U USEROPT::\n pass USEROPTs to Python modules\n@@ -44831,15 +44831,15 @@\n So, in case you run GladeVCP from a separate shell window (i.e., not started by the GUI in an embedded\n fashion):\n You cannot rely on the POSTGUI_HALFILE INI option causing the HAL commands being run at the\n right point in time, so comment that out in the INI file.\n Explicitly pass the HAL command file which refers to GladeVCP pins to GladeVCP with the -H\n option (see previous section).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 997 / 1288\n \n 12.3.6. HAL Widget reference\n GladeVCP includes a collection of Gtk widgets with attached HAL pins called HAL Widgets, intended\n to control, display or otherwise interact with the LinuxCNC HAL layer. They are intended to be used\n with the Glade user interface editor. With proper installation, the HAL Widgets should show up in\n@@ -44869,15 +44869,15 @@\n General\u2192Name).\n Exceptions to this rule currently are:\n \n HAL_Spinbutton and HAL_ComboBox, which have two pins: a -f (float) and a (s32) pin\n HAL_ProgressBar, which has a -value input pin, and a -scale input\n pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 998 / 1288\n \n 12.3.6.2. Python attributes and methods of HAL Widgets\n HAL widgets are instances of GtKWidgets and hence inherit the methods, properties and signals of the\n applicable GtkWidget class. For instance, to figure out which GtkWidget-related methods, properties\n and signals a HAL_Button has, lookup the description of GtkButton in the PyGObject API Reference.\n@@ -44915,15 +44915,15 @@\n doesn\u2019t make sense. You might use setp _pinname_ _value_ in the associated HAL file for testing\n though.\n \n It is perfectly OK to set an output HAL pin\u2019s value with halcomp[pinname] = value provided this HAL\n pin is not associated with a widget, that is, has been created by the hal_glib.GPin(halcomp.newpin(\n method (see GladeVCP Programming for an example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 999 / 1288\n \n 12.3.6.4. The hal-pin-changed signal\n Event-driven programming means that the UI tells your code when \u201dsomething happens\u201d - through\n a callback, like when a button was pressed. The output HAL widgets (those which display a HAL\n pin\u2019s value) like LED, Bar, VBar, Meter, etc., support the hal-pin-changed signal, which may cause a\n@@ -44941,15 +44941,15 @@\n HAL_ToggleButton, HAL_CheckButton: retains on/off state. Important signal: toggled\n HAL_RadioButton: a one-of-many group. Important signal: toggled (per button).\n Important common methods: set_active(), get_active()\n Important properties: label, image\n \n Figura 12.31: Check button\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1000 / 1288\n \n Figura 12.32: Radio buttons\n \n Figura 12.33: Toggle button\n sugerencia\n@@ -44967,15 +44967,15 @@\n -s\n out s32 pin\n To make a scale useful in Glade, add an Adjustment (General \u2192 Adjustment \u2192 New or existing adjustment) and edit the adjustment object. It defines the default/min/max/increment values. Also, set\n adjustment Page size and Page increment to zero to avoid warnings.\n \n Figura 12.34: Example HAL_HScale\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1001 / 1288\n \n 12.3.6.7. SpinButton\n HAL SpinButton is derived from GtkSpinButton and holds two pins:\n -f\n out FLOAT pin\n@@ -45005,15 +45005,15 @@\n -delta-scaled\n out FLOAT pin\n hal_dial has the following properties:\n cpr\n Sets the Counts per Revolution, allowed values are in the range from 25 to 360\n default = 100\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1002 / 1288\n \n show_counts\n Set this to False, if you want to hide the counts display in the middle of the widget.\n default = True\n label\n@@ -45058,15 +45058,15 @@\n [widget name].get_scaled_value()\n Will return the counts value as a float\n [widget name].get_delta_scaled_value()\n Will return the counts value as a float\n [widget name].set_label(\u201dstring\u201d)\n Sets the label content with \u201dstring\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1003 / 1288\n \n There are two GObject signals emitted:\n count_changed\n Emitted when the widget\u2019s count changes eg. from being wheel scrolled.\n scale_changed\n@@ -45091,15 +45091,15 @@\n Wheel up = increase counts\n Wheel down = reduce counts\n As moving the mouse the drag and drop way may be faster than the widget can update itself, you\n may loose counts turning to fast. It is recommended to use the mouse wheel, and only for very rough\n movements the drag and drop way.\n jogwheel exports its count value as HAL pin:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1004 / 1288\n \n -s\n out s32 pin\n jogwheel has the following properties:\n size\n@@ -45122,15 +45122,15 @@\n [widget name].get_value()\n Will return the counts value as integer\n [widget name].set_label(\u201dstring\u201d)\n Sets the label content with \u201dstring\u201d\n \n Figura 12.37: Example JogWheel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1005 / 1288\n \n 12.3.6.10. Speed Control\n 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.\n The value is controlled with two button to increase or decrease the value. The increment will change\n as long a button is pressed. The value of each increment as well as the time between two changes can\n@@ -45170,15 +45170,15 @@\n Float\n The min allowed value.\n Allowed values are 0.0 to 99999.0.\n Default is 0.0.\n If you change this value, the increment will be reset to default, so it might be necessary to set\n afterwards a new increment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1006 / 1288\n \n max\n Float\n The max allowed value.\n Allowed values are 0.001 to 99999.0.\n@@ -45225,15 +45225,15 @@\n There are also Python methods to modify the widget:\n [widget name].set_adjustment(gtk-adjustment)\n \n You can assign a existing adjustment to the control, that way it is easy to replace existing sliders\n without many code changes. Be aware, that after changing the adjustment you may need to set a new\n increment, as it will be reset to its default (100 steps from MIN to MAX):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1007 / 1288\n \n [widget name].get_value()\n Will return the counts value as float\n [widget name].set_value(float(value))\n Sets the widget to the commanded value\n@@ -45262,15 +45262,15 @@\n State_Sensitive_Table\n HAL_HBox (deprecated)\n These containers are meant to be used to insensitize (grey out) or hide their children.\n Insensitized children will not respond to input.\n HAL_HideTable\n Has one HAL BIT input pin which controls if its child widgets are hidden or not.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1008 / 1288\n \n Pin: , .\n in bit pin\n If the pin is low then child widgets are visible which is the default state.\n HAL_Table and HAL_Hbox\n@@ -45310,15 +45310,15 @@\n pick_color_on, pick_color_off\n Colors for ON and OFF states.\n These may be represented as #RRRRGGGGBBBB strings and are optional properties which have\n precedence over on_color and off_color.\n led_size\n LED radius (for square - half of LED\u2019s side)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1009 / 1288\n \n led_shape\n LED Shape.\n Valid values are 0 for round, 1 for oval and 2 for square shapes.\n led_blink_rate\n@@ -45352,15 +45352,15 @@\n scale\n Value scale.\n Sets the maximum absolute value of input. Same as setting the .scale pin.\n A float, range from -224 to +2 24.\n green_limit\n Green zone lower limit\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1010 / 1288\n \n yellow_limit\n Yellow zone lower limit\n red_limit\n Red zone lower limit\n@@ -45392,15 +45392,15 @@\n a float value from the ListStore.\n If you\u2019re confused like me about how to edit ComboBox ListStores and CellRenderer, see https://youtu.be/Z5_F-rW2cL8.\n 12.3.6.16. Bars\n HAL_Bar and HAL_VBar widgets for horizontal and vertical bars representing float values.\n HAL_Bar and HAL_VBar each have one input FLOAT HAL pin.\n HAL_Bar and HAL_VBar both bars have the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1011 / 1288\n \n invert\n Swap min and max direction.\n An inverted HBar grows from right to left, an inverted VBar from top to bottom.\n min, max\n@@ -45442,15 +45442,15 @@\n Define up bounds of color zones.\n By default only one zone is enabled. If you want more then one zone set z0_border and z1_border\n to desired values so zone 0 will fill from 0 to first border, zone 1 will fill from first to second border\n and zone 2 from last border to 1.\n Borders are set as fractions.\n Valid values range from 0 to 1.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1012 / 1288\n \n Figura 12.41: Horizontal bar\n \n Figura 12.42: Vertical bar\n \n@@ -45475,15 +45475,15 @@\n bg_color\n Background color of meter.\n z0_color, z1_color, z2_color\n Colors of different value zones.\n Defaults are green, yellow and red.\n For description of zones see z*_border properties.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1013 / 1288\n \n z0_border, z1_border\n Define up bounds of color zones.\n By default only one zone is enabled. If you want more then one zone set z0_border and z1_border\n to desired values so zone 0 will fill from min to first border, zone 1 will fill from first to second\n@@ -45509,15 +45509,15 @@\n show_velocity\n This displays the tool speed.\n Default = true.\n use_commanded\n This selects the DRO to use: commanded or actual values.\n Default = true.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1014 / 1288\n \n metric_units\n This selects the DRO to use: metric or imperial units.\n Default = true.\n show_rapids\n@@ -45563,15 +45563,15 @@\n May be any of x, y, y2 , z, z2 , p (perspective).\n Defaults to z view.\n enable_dro\n Type = boolean.\n Whether to draw a DRO on the plot or not.\n Default = true.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1015 / 1288\n \n mouse_btn_mode\n Type = integer.\n Mouse button handling: leads to different functions of the button:\n 0 = default: left rotate, middle move, right zoom\n@@ -45617,15 +45617,15 @@\n If you set all the plotting options false but show_offsets true you get an offsets page instead of\n a graphics plot.\n If you get the zoom distance before changing the view then reset the zoom distance, it is much\n more user friendly.\n if you select an element in the preview, the selected element will be used as rotation center\n point\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1016 / 1288\n \n Figura 12.44: Gremlin Example\n \n 12.3.6.20. HAL_Offset\n The HAL_Offset widget is used to display the offset of a single axis.\n@@ -45643,15 +45643,15 @@\n reference_type\n 0:G5x 1:tool 2:G92 3:Rotation around Z\n \n 12.3.6.21. DRO widget\n The DRO widget is used to display the current axis position.\n It has the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1017 / 1288\n \n display_units_mm\n Used to toggle the display units between metric and imperial. Default is False.\n actual\n Select actual (feedback) position or commanded position. Default is True.\n@@ -45690,15 +45690,15 @@\n The DRO widget is a modified gtk label widget. As such, much of what can be done to a gtk\n label can be done to the DRO widget.\n The font properties may also be set from a css stylesheet which has the highest priority and\n will override values set by GObject properties.\n There a couple ways to directly control the widget using Python.\n Using GObject to set the above listed properties\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1018 / 1288\n \n [widget name].set_property(\u201ddisplay_units_mm\u201d, True)\n [widget name].set_property(\u201dactual\u201d, True)\n [widget name].set_property(\u201ddiameter\u201d, True)\n [widget name].set_property(\u201dmm_text_template\u201d, \u201d %10.3f\u201d)\n@@ -45742,15 +45742,15 @@\n 12.3.6.22. Combi_DRO widget\n The Combi_DRO widget is used to display the current, the relative axis position and the distance to go\n in one DRO.\n By clicking on the DRO the Order of the DRO will toggle around.\n In Relative Mode the actual coordinate system will be displayed.\n Combi_DRO has the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1019 / 1288\n \n joint_number\n Used to select which axis (technically which joint) is displayed.\n On a trivialkins machine (mill, lathe, router) axis/joint numbers are:\n 0:X 1:Y 2:Z etc.\n@@ -45792,15 +45792,15 @@\n toggle_readout\n A left mouse click will toggle the DRO readout through the different modes [\u201dRel\u201d, \u201dAbs\u201d, \u201dDTG\u201d].\n By unchecking the box you can disable that behavior. The toggling can still be done with [widget\n name].toggle_readout().\n Value must be boolean.\n Default is TRUE.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1020 / 1288\n \n cycle_time\n The time the DRO waits between two polls.\n This setting should only be changed if you use more than 5 DRO at the same time, i.e. on a 6 axis\n config, to avoid that the DRO slows down the main application too much.\n@@ -45841,15 +45841,15 @@\n \u2022 [\u201dAbs\u201d, \u201dDTG\u201d, \u201dRel\u201d]\n [widget name].get_position()\n Returns the position of the DRO as a list of floats.\n The order is independent of the order shown on the DRO and will be given as [Absolute , relative\n , DTG].\n \u2022 Absolute = the machine coordinates, depends on the actual property will give actual or commanded position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1021 / 1288\n \n \u2022 Relative = will be the coordinates of the actual coordinate system.\n \u2022 DTG = the distance to go.\n Will mostly be 0, as this function should not be used while the machine is moving, because of time\n delays.\n@@ -45884,15 +45884,15 @@\n [widget name].system\n The actual system, as mentioned in the system_changed signal.\n [widget name].homed\n True if the joint is homed.\n [widget name].machine_units\n 0 if Imperial, 1 if Metric.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1022 / 1288\n \n Figura 12.45: Example: Three Combi_DRO in a window\n X = Relative Mode\n Y = Absolute Mode\n Z = DTG Mode\n@@ -45917,15 +45917,15 @@\n Sets the file filter for the objects to be shown.\n Must be a string containing a comma separated list of extensions to be shown.\n Default is \u201dngc,py\u201d.\n sortorder\n Sets the sorting order of the displayed icon.\n Must be an integer value from 0 to 3, where:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1023 / 1288\n \n 0 = ASCENDING (sorted according to file names)\n 1 = DESCENDING (sorted according to file names)\n 2 = FOLDERFIRST (show the folders first, then the files), default\n 3 = FILEFIRST (show the files first, then the folders)\n@@ -45969,15 +45969,15 @@\n [widget name].btn_sel_next.emit(\u201dclicked\u201d)\n [widget name].btn_get_selected.emit(\u201dclicked\u201d)\n [widget name].btn_dir_up.emit(\u201dclicked\u201d)\n [widget name].btn_exit.emit(\u201dclicked\u201d)\n \n The widget will emit the following signals:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1024 / 1288\n \n selected\n This signal is emitted when the user selects an icon.\n It will return a string containing a file path if a file has been selected, or None if a directory has been\n selected.\n@@ -45992,15 +45992,15 @@\n \u2022 state is a boolean and will be True or False.\n exit\n This signal is emitted when the exit button has been pressed to close the IconView.\n Mostly needed if the application is started as stand alone.\n \n Figura 12.46: Iconview Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1025 / 1288\n \n 12.3.6.24. Calculator widget\n This is a simple calculator widget, that can be used for numerical input.\n You can preset the display and retrieve the result or that preset value.\n calculator has the following properties:\n@@ -46035,15 +46035,15 @@\n font\n Display font to use\n hide_columns\n This will hide the given columns.\n The columns are designated (in order) as such: s,t,p,x,y,z,a,b,c,u,v,w,d,i,j,q.\n You can hide any number of columns including the select and comments.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1026 / 1288\n \n lathe_display_type\n Show lathe format\n There a couple ways to directly control the widget using Python.\n Using goobject to set the above listed properties:\n@@ -46084,15 +46084,15 @@\n Convenience method to hide buttons.\n You must call this after show_all().\n [widget name].get_selected_tool()\n Return the user selected (highlighted) tool number.\n [widget name].set_selected_tool(toolnumber)\n Selects (highlights) the requested tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1027 / 1288\n \n Figura 12.47: Tooleditor Example\n \n 12.3.6.26. Offsetpage\n The Offsetpage widget is used to display/edit the offsets of all the axes.\n@@ -46119,15 +46119,15 @@\n mm_text_template\n You can use Python formatting to display the position with different precision.\n imperial_text_template\n You can use Python formatting to display the position with different precision.\n There a couple ways to directly control the widget using Python.\n Using goobject to set the above listed properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1028 / 1288\n \n [widget name].set_property(\u201dhighlight_color\u201d,gdk.Color(\u2019blue\u2019))\n [widget name].set_property(\u201dforeground_color\u201d,gdk.Color(\u2019black\u2019))\n [widget name].set_property(\u201dhide_columns\u201d,\u201dxyzabcuvwt\u201d)\n [widget name].set_property(\u201dhide_rows\u201d,\u201d123456789abc\u201d)\n@@ -46153,15 +46153,15 @@\n This is a list of a list of offset-name/user-name pairs.\n The default text is the same as the offset name.\n [widget name].get_names()\n This returns a list of a list of row-keyword/user-name pairs.\n The user name column is editable, so saving this list is user friendly.\n See set_names above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1029 / 1288\n \n Figura 12.48: Offsetpage Example\n \n 12.3.6.27. HAL_sourceview widget\n \n@@ -46182,15 +46182,15 @@\n Sets the line to highlight.\n Uses the sourceview line numbers.\n [widget name].get_line_number()\n Returns the currently highlighted line.\n [widget name].line_up()\n Moves the highlighted line up one line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1030 / 1288\n \n [widget name].line_down()\n Moves the highlighted line down one line.\n [widget name].load_file(\u2019filename\u2019)\n Loads a file.\n@@ -46212,15 +46212,15 @@\n use_double_click\n Boolean, True enables the mouse double click feature and a double click on an entry will submit\n that command.\n It is not recommended to use this feature on real machines, as a double click on a wrong entry\n may cause dangerous situations.\n Using goobject to set the above listed properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1031 / 1288\n \n [widget name].set_property(\u201dfont_size_tree\u201d,10)\n [widget name].set_property(\u201dfont_size_entry\u201d,20)\n [widget name].set_property(\u201duse_double_click\u201d,False)\n \n@@ -46233,15 +46233,15 @@\n \n Figura 12.50: HAL widgets in a bitmap Example\n \n 12.3.7. Action Widgets Reference\n GladeVCP includes a collection of \u201dcanned actions\u201d called VCP Action Widgets for the Glade user\n interface editor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1032 / 1288\n \n nota\n Other than HAL widgets, which interact with HAL pins, VCP Actions interact with LinuxCNC and the\n G-code interpreter.\n \n@@ -46265,15 +46265,15 @@\n The command string may use special keywords to access important functions.\n ACTION for access to the ACTION command library.\n GSTAT for access to the Gstat status message library.\n INFO for access to collected data from the INI file.\n HAL for access to the HAL linuxcnc Python module\n STAT for access to LinuxCNC\u2019s raw status via the LinuxCNC Python module.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1033 / 1288\n \n CMD for access to LinuxCNC\u2019s commands via the LinuxCNC Python module.\n EXT for access to the handler file functions if available.\n linuxcnc for access to the LinuxCNC Python module.\n self for access to the widget instance.\n@@ -46307,15 +46307,15 @@\n that the requested operation is running:\n The Run toggle sends an AUTO_RUN command and waits in the pressed state until the interpreter is\n idle again.\n The Stop toggle is inactive until the interpreter enters the active state (is running G-code) and then\n allows user to send AUTO_ABORT command.\n The MDI toggle sends given MDI command and waits for its completion in pressed inactive state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1034 / 1288\n \n 12.3.7.4. The Action_MDI Toggle and Action_MDI widgets\n These widgets provide a means to execute arbitrary MDI commands.\n The Action_MDI widget does not wait for command completion as the Action_MDI Toggle does, which\n remains disabled until command complete.\n@@ -46335,15 +46335,15 @@\n 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\n it works:\n assume you have a HAL SpinBox named speed, and you want to pass its current value as a parameter\n in an MDI command.\n The HAL SpinBox will have a float-type HAL pin named speed-f (see HalWidgets description).\n To substitute this value in the MDI command, insert the HAL pin name enclosed like so: ${pin-name}\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1035 / 1288\n \n for the above HAL SpinBox, we could use (MSG, \u201dThe speed is: ${speed-f}\u201d) just to show what\u2019s\n happening.\n The example UI file is configs/apps/gladevcp/mdi-command-example/speed.ui. Here\u2019s what you\n get when running it:\n@@ -46360,15 +46360,15 @@\n \n 12.3.7.8. Preparing for an MDI Action, and cleaning up afterwards\n 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\n might get changed by the command or subroutine - for example, a probing subroutine will very likely\n set the feed value quite low. With no further precautions, your previous feed setting will be overwritten\n by the probing subroutine\u2019s value.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1036 / 1288\n \n 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\n handlers with a given LinuxCNC ToggleAction_MDI. These handlers are optional and provide a way to\n save any state before executing the MDI Action, and to restore it to previous values afterwards. The\n signal names are mdi-command-start and mdi-command-stop; the handler names can be set in Glade\n@@ -46406,15 +46406,15 @@\n mode-related:\n \u2022 mode-manual: emitted when LinuxCNC enters manual mode,\n \u2022 mode-mdi: emitted when LinuxCNC enters MDI mode,\n \u2022 mode-auto: emitted when LinuxCNC enters automatic mode,\n interpreter-related: emitted when the G-code interpreter changes into that mode\n \u2022 interp-run\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1037 / 1288\n \n \u2022 interp-idle\n \u2022 interp-paused\n \u2022 interp-reading\n \u2022 interp-waiting\n@@ -46455,15 +46455,15 @@\n print(INFO.MACHINE_IS_METRIC)\n ACTION.SET_ERROR_MESSAGE(\u2019Something went wrong\u2019)\n \n More information can be found here: GladeVCP Libraries modules. There is a sample configuration\n that demonstrates using the core library with GladeVCP\u2019s action Python widgets and with a Python\n handler file. Try loading sim/axis/gladevcp/gladevcp_panel_tester.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1038 / 1288\n \n 12.3.8.3. An example: adding custom user callbacks in Python\n This is just a minimal example to convey the idea - details are laid out in the rest of this section.\n GladeVCP can not only manipulate or display HAL pins, you can also write regular event handlers in\n Python. This could be used, among others, to execute MDI commands. Here\u2019s how you do it:\n@@ -46498,15 +46498,15 @@\n The overall approach is as follows:\n Design your UI with Glade, and set signal handlers where you want actions associated with a widget.\n Write a Python module which contains callable objects (see handler models below).\n Pass your module\u2019s path name to GladeVCP with the -u option.\n GladeVCP imports the module, inspects it for signal handlers and connects them to the widget tree.\n The main event loop is run.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1039 / 1288\n \n For simple tasks it is sufficient to define functions named after the Glade signal handlers. These will be\n called when the corresponding event happens in the widget tree. Here\u2019s a trivial example - it assumes\n that the pressed signal of a Gtk Button or HAL Button is linked to a callback called on_button_press:\n nhits = 0\n@@ -46552,15 +46552,15 @@\n self.active = False\n # connect to client-events from the host GUI\n def on_map_event(self, widget, data=None):\n top = widget.get_toplevel()\n print(\u201dmap event\u201d)\n top.connect(\u2019client-event\u2019, self.event)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1040 / 1288\n \n If during module inspection GladeVCP finds a function get_handlers, it calls it as follows:\n get_handlers(halcomp,builder,useropts)\n \n The arguments are:\n@@ -46595,15 +46595,15 @@\n on screen). And the HAL component isn\u2019t ready as well, so its unsafe to access pins values in your\n __init__() method.\n If you want to have a callback to execute at program start after it is safe to access HAL pins, then a\n connect a handler to the realize signal of the top level window1 (which might be its only real purpose).\n At this point GladeVCP is done with all setup tasks, the HAL file has been run, and GladeVCP is about\n to enter the Gtk main loop.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1041 / 1288\n \n 12.3.8.7. Multiple callbacks with the same name\n Within a class, method names must be unique. However, it is OK to have multiple class instances\n passed to GladeVCP by get_handlers() with identically named methods. When the corresponding signal\n occurs, these methods will be called in definition order - module by module, and within a module, in\n@@ -46643,15 +46643,15 @@\n are saved and to be restored. In the case of signature mismatch, a new INI file with default settings\n is generated.\n 12.3.8.10. Using persistent variables\n If you want any of Gtk widget state, HAL widgets output pin\u2019s values and/or class attributes of your\n handler class to be retained across invocations, proceed as follows:\n Import the gladevcp.persistence module.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1042 / 1288\n \n Decide which instance attributes, and their default values you want to have retained, if any.\n Decide which widgets should have their state retained.\n Describe these decisions in your handler class\u2019 \\__init()__ method through a nested dictionary\n as follows:\n@@ -46692,15 +46692,15 @@\n ini.restore_state(obj)\n Restore HAL out pins and obj\u2019s attributes as saved/initialized to default as above.\n 12.3.8.11. Saving the state on GladeVCP shutdown\n To save the widget and/or variable state on exit, proceed as follows:\n Select some interior widget (type is not important, for instance a table).\n In the Signals tab, select GtkObject. It should show a destroy signal in the first column.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1043 / 1288\n \n Add the handler name, e.g. on_destroy, to the second column.\n Add a Python handler like below:\n import gtk\n ...\n@@ -46737,15 +46737,15 @@\n 12.3.8.14. Adding HAL pins\n If you need HAL pins which are not associated with a specific HAL widget, add them as follows:\n import hal_glib\n ...\n # in your handler class __init__():\n self.example_trigger = hal_glib.GPin(halcomp.newpin(\u2019example-trigger\u2019, hal.HAL_BIT, hal. \u2190HAL_IN))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1044 / 1288\n \n To get a callback when this pin\u2019s value changes, associate a value-change callback with this pin, add:\n self.example_trigger.connect(\u2019value-changed\u2019, self._on_example_trigger_change)\n \n and define a callback method (or function, in this case leave out the self parameter):\n@@ -46786,15 +46786,15 @@\n self.max_value = hal_glib.GPin(halcomp.newpin(\u2019max-value\u2019, hal.HAL_FLOAT, hal. \u2190HAL_IN))\n self.max_value.connect(\u2019value-changed\u2019, self._on_max_value_change)\n inifile = linuxcnc.ini(os.getenv(\u201dINI_FILE_NAME\u201d))\n mmin = float(inifile.find(\u201dMETER\u201d, \u201dMIN\u201d) or 0.0)\n self.meter = self.builder.get_object(\u2019meter\u2019)\n self.meter.min = mmin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1045 / 1288\n \n def get_handlers(halcomp,builder,useropts):\n return [HandlerClass(halcomp,builder,useropts)]\n \n 12.3.8.17. Value-changed callback with hal_glib\n@@ -46833,15 +46833,15 @@\n window1.visible to False, and ignore an initial unmap event.\n 2. My GladeVCP program starts, but no window appears where I expect it to be?\n The window AXIS allocates for GladeVCP will obtain the natural size of all its child widgets\n combined. It is the child widget\u2019s job to request a size (width and/or height). However, not all\n widgets do request a width greater than 0, for instance the Graph widget in its current form. If\n there\u2019s such a widget in your Glade file and it is the one which defines the layout you might want\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1046 / 1288\n \n to set its width explicitly. Note that setting the window1 width and height properties in Glade\n does not make sense because this window will be orphaned during re-parenting and hence its\n geometry will have no impact on layout (see above). The general rule is: if you manually run a UI\n file with gladevcp and its window has reasonable geometry, it should come up in AXIS\n@@ -46880,15 +46880,15 @@\n If you\u2019re using HAL_table or HAL_HBox widgets, be aware they have an HAL pin associated with it\n which is off by default. This pin controls whether these container\u2019s children are active or not.\n \n 12.3.11. Implementation note: Key handling in AXIS\n We believe key handling works OK, but since it is new code, we\u2019re telling about it you so you can\n watch out for problems; please let us know of errors or odd behavior. This is the story:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1047 / 1288\n \n AXIS uses the TkInter widget set. GladeVCP applications use Gtk widgets and run in a separate process\n context. They are hooked into AXIS with the Xembed protocol. This allows a child application like\n GladeVCP to properly fit in a parent\u2019s window, and - in theory - have integrated event handling.\n However, this assumes that both parent and child application properly support the Xembed protocol,\n@@ -46924,15 +46924,15 @@\n identically-named files within subdirectories of the system directory specified by LINUXNC_AUX_GLADEVCP\n (e.g., /usr/share/linuxcnc/aux_gladevcp). This provision allows a developer to test an application by\n exporting GLADEVCP_EXTRAS to specify a private application directory without removing a systeminstalled application directory. Messages indicating rejected duplicates are printed to stdout.\n nota\n Support for auxiliary GladeVCP applications requires a Python module named importlib. This module\n may not be available in older installations like Ubuntu-Lucid.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1048 / 1288\n \n 12.4. GladeVCP Library modules\n Libraries are prebuilt Python modules that give added features to GladeVCP. In this way you can select\n what features you want - yet don\u2019t have to build common ones yourself.\n \n@@ -46979,15 +46979,15 @@\n MAX_LINEAR_JOG_VEL = 300 units per minute\n DEFAULT_ANGULAR_JOG_VEL =\n MIN_ANGULAR_JOG_VEL =\n MAX_ANGULAR_JOG_VEL =\n MAX_FEED_OVERRIDE =\n MAX_TRAJ_VELOCITY =\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1049 / 1288\n \n AVAILABLE_SPINDLES = int(self.INI.find(\u201dTRAJ\u201d, \u201dSPINDLES\u201d) or 1)\n DEFAULT_SPINDLE_0_SPEED = 200\n MAX_SPINDLE_0_SPEED = 2500\n MAX_SPINDLE_0_OVERRIDE = 100\n@@ -47037,15 +47037,15 @@\n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n INFO = Info()\n \n To access INFO data use this general syntax:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1050 / 1288\n \n home_state = INFO.NO_HOME_REQUIRED\n if INFO.MACHINE_IS_METRIC is True:\n print(\u2019Metric based\u2019)\n \n@@ -47084,15 +47084,15 @@\n ACTION.SET_TOOL_OFFSET(axis,value,fixture = False)\n ACTION.RUN()\n ACTION.ABORT()\n ACTION.PAUSE()\n ACTION.SET_MAX_VELOCITY_RATE(rate)\n ACTION.SET_RAPID_RATE(rate)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ACTION.SET_FEED_RATE(rate)\n ACTION.SET_SPINDLE_RATE(rate)\n ACTION.SET_JOG_RATE(rate)\n ACTION.SET_JOG_INCR(incr)\n ACTION.SET_JOG_RATE_ANGULAR(rate)\n ACTION.SET_JOG_INCR_ANGULAR(incr, text)\n@@ -47133,15 +47133,15 @@\n get_jog_info (num)\n jnum_check(num)\n ensure_mode(modes)\n open_filter_program(filename, filter)\n \n 1051 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1052 / 1288\n \n 12.5. QtVCP\n QtVCP is an infrastructure to build custom CNC screens or control panels for LinuxCNC.\n It displays a .ui file built with Qt Designer screen editor and combines this with Python programming\n to create a GUI screen for running a CNC machine.\n@@ -47149,54 +47149,54 @@\n code for even finer grain customization.\n \n 12.5.1. Showcase\n Few examples of QtVCP built screens and virtual control panels:\n \n Figura 12.55: QtDragon - 3/4-Axis Sample\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.56: QtDefault - 3-Axis Sample\n \n 1053 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.57: QtAxis - Self Adjusting Axis Sample\n \n 1054 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.58: Blender - 4-Axis Sample\n \n 1055 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1056 / 1288\n \n Figura 12.59: X1mill - 4-Axis Sample\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.60: cam_align - Camera Alignment VCP\n \n 1057 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.61: test_panel - Test Panel VCP\n \n 12.5.2. Overview\n Two files are used, individually or in combination, to add customizations:\n \n 1058 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1059 / 1288\n \n A UI file that is a XML file made with Qt Designer graphical editor.\n A handler file which is a Python code text file.\n Normally QtVCP uses the stock UI and handler file, but you can specify QtVCP to use local UI and\n handler files.\n@@ -47229,15 +47229,15 @@\n \n Options\n -d Debugging on.\n -i Enable info output.\n -v Enable verbose debug output.\n -q Enable only error debug output.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1060 / 1288\n \n -a Set window always on top.\n -c NAME HAL component name. Default is to use the UI file name.\n -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\n -g +XOFFSET+YOFFSET for just position. Example: -g 200x400+0+100\n@@ -47271,15 +47271,15 @@\n The Qt Designer editor makes it relatively easy to build and edit this file.\n 12.5.2.4. Handler Files\n A handler file is a file containing Python code, which adds to QtVCP default routines.\n A handler file allows one to modify defaults, or add logic to a QtVCP screen without having to modify\n QtVCP\u2019s core code. In this way you can have custom behaviors.\n If present a handler file will be loaded. Only one file is allowed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1061 / 1288\n \n 12.5.2.5. Libraries Modules\n QtVCP, as built, does little more than display the screen and react to widgets. For more prebuilt\n behaviors there are available libraries (found in lib/python/qtvcp/lib in RIP LinuxCNC install).\n Libraries are prebuilt Python modules that add features to QtVCP. In this way you can select what\n@@ -47309,15 +47309,15 @@\n QtVCP will look for a folder named (in the launched configuration folder that holds\n the INI file).\n In that folder, QtVCP will load any of the available following files:\n .ui,\n _handler.py, and\n .qss.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1062 / 1288\n \n 12.5.2.8. Modifying Stock Screens\n There are three ways to customize a screen/panel.\n Stylesheets can be used to set Qt properties. If a widget uses properties then they usually can be\n modified by stylesheets.\n@@ -47361,15 +47361,15 @@\n # You call this function without the usual preceding \u2019self.\u2019\n # This is because will will not be patching it into the original handler class instance\n # It will only be called from code in this file.\n def test_function(obj):\n print(dir(obj))\n # This is a new function we will added to the existing handler class instance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1063 / 1288\n \n # Notice it calls the unbounded function with \u2019self\u2019 as an parameter \u2019self\u2019 is the only\n global reference available.\n # It references the window instance.\n def on_keycall_F10(self,event,state,shift,cntrl):\n@@ -47421,15 +47421,15 @@\n # function that calls our new function (of the same name)\n # defined in this file\n self.after_override__ = types.MethodType(after_override__, self)\n \n If you wish to modify a stock screen with full control, copy its UI and handler file to your configuration folder.\n There is a QtVCP panel to help with this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1064 / 1288\n \n Open a terminal and run the following command:\n qtvcp copy_dialog\n \n Select the screen and destination folder in the dialog\n@@ -47445,40 +47445,40 @@\n QtVCP can be used to create control panels that interface with HAL.\n 12.5.3.1. Builtin Panels\n There are several builtin HAL panels available.\n In a terminal type qtvcp to see a list:\n test_panel\n Collection of useful widgets for testing HAL components, including speech of LED state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.62: QtVCP HAL Test Builtin Panel\n cam_align\n A camera display widget for rotational alignment.\n \n 1065 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.63: cam_align - Camera Alignment VCP\n sim_panel\n A small control panel to simulate MPG jogging controls etc.\n For simulated configurations.\n \n 1066 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.64: QtVCP Sim Builtin Panel\n vismach_mill_xyz\n 3D OpenGL view of a 3-axis milling machine.\n \n 1067 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1068 / 1288\n \n Figura 12.65: QtVismach - 3-Axis Mill Builtin Panel\n You can load these from the terminal or from a HAL file with this basic command:\n loadusr qtvcp test_panel\n \n@@ -47487,15 +47487,15 @@\n \n In this way HAL will wait till the HAL pins are made before continuing on.\n 12.5.3.2. Custom Panels\n You can of course make your own panel and load it.\n If you made a UI file named my_panel.ui and a HAL file named my_panel.hal, you would then load\n this from a terminal with:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1069 / 1288\n \n halrun -I -f my_panel.hal\n \n Example HAL file loading a QtVCP panel\n # load realtime components\n@@ -47544,15 +47544,15 @@\n 1\n \n In this case we load qtvcp using -Wn which waits for the panel to finish loading before continuing\n to run the next HAL command.\n This is to ensure that the panel created HAL pins are actually done in case they are used in the\n rest of the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1070 / 1288\n \n 12.5.4. Build A Simple Clean-sheet Custom Screen\n \n Figura 12.66: QtVCP Ugly custom screen\n 12.5.4.1. Overview\n@@ -47568,15 +47568,15 @@\n \n Add qtvcp_plugin.py link to the Qt Designer Search Path Then you must add a link to the\n qtvcp_plugin.py in one of the folders that Qt Designer will search into.\n In a RIP version of LinuxCNC qtvcp_plugin.py will be:\n \u2019~/LINUXCNC_PROJECT_NAME/lib/python/qtvcp/plugins/qtvcp_plugin.py\u2019\n For a Package installed version it should be:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1071 / 1288\n \n \u2019usr/lib/python2.7/qtvcp/plugins/qtvcp_plugin.py\u2019 or\n \u2019usr/lib/python2.7/dist-packages/qtvcp/plugins/qtvcp_plugin.py\u2019\n Make a symbolic link to the above file and move it to one of the places Qt Designer searches in.\n Qt Designer searches in these two place for links (pick one):\n@@ -47613,15 +47613,15 @@\n This widget doesn\u2019t add anything visually but sets up some common options.\n It\u2019s recommended to always add this widget before any other.\n Right click on the main window, not the ScreenOptions widget, and set the layout as vertical to make\n the ScreenOptions fullsized.\n Add Panel Content On the right hand side there is a panel with tabs for a Property editor and an\n Object inspector.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1072 / 1288\n \n On the Object inspector click on the ScreenOptions.\n Then switch to the Property Editor and, under the ScreenOptions heading, toggle filedialog_option.\n Drag and drop a GCodeGraphics widget and a GcodeEditor widget.\n Place and resize them as you see fit leaving some room for buttons.\n@@ -47648,21 +47648,21 @@\n Do the same for all the other button with the addition of:\n With the Home button we must also change the joint_number property to -1.\n This tells the controller to home all the axes rather then a specific axis.\n With the Pause button:\n \u2022 Under the Indicated_PushButton heading check the indicator_option.\n \u2022 Under the QAbstactButton heading check checkable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.67: Qt Designer: Selecting Pause Button\u2019s Properties\n \n 1073 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1074 / 1288\n \n Save The .ui File We then need to save this design as tester.ui in the sim/qtvcp folder.\n We are saving it as tester as that is a file name that QtVCP recognizes and will use a built in handler\n file to display it.\n 12.5.4.4. Handler file\n@@ -47695,15 +47695,15 @@\n after the screen is built,\n after all the POSTGUI_HALFILEs are run.\n In our example there are no HAL pins to connect.\n \n 12.5.5. Handler File In Detail\n Handler files are used to create custom controls using Python.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.5.5.1. Overview\n Here is a sample handler file.\n It\u2019s broken up in sections for ease of discussion.\n ############################\n # **** IMPORT SECTION **** #\n ############################\n@@ -47750,15 +47750,15 @@\n def initialized__(self):\n pass\n def processed_key_event__(self,receiver,event,is_pressed,key,code,shift,cntrl):\n # when typing in MDI, we don\u2019t want keybinding to call functions\n \n 1075 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1076 / 1288\n \n # so we catch and process the events directly.\n # We do want ESC, F1 and F2 to call keybinding functions though\n if code not in(QtCore.Qt.Key_Escape,QtCore.Qt.Key_F1 ,QtCore.Qt.Key_F2,\n QtCore.Qt.Key_F3,QtCore.Qt.Key_F5,QtCore.Qt.Key_F5):\n@@ -47809,15 +47809,15 @@\n #######################\n # CALLBACKS FROM FORM #\n #######################\n #####################\n # GENERAL FUNCTIONS #\n #####################\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n # keyboard jogging from key binding calls\n # double the rate if fast is true\n def kb_jog(self, state, joint, direction, fast = False, linear = True):\n if not STATUS.is_man_mode() or not STATUS.machine_is_on():\n return\n if linear:\n@@ -47866,15 +47866,15 @@\n def on_keycall_ZPOS(self,event,state,shift,cntrl):\n self.kb_jog(state, 2, 1, shift)\n def on_keycall_ZNEG(self,event,state,shift,cntrl):\n self.kb_jog(state, 2, -1, shift)\n \n 1077 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1078 / 1288\n \n def on_keycall_APOS(self,event,state,shift,cntrl):\n pass\n #self.kb_jog(state, 3, 1, shift, False)\n def on_keycall_ANEG(self,event,state,shift,cntrl):\n@@ -47909,15 +47909,15 @@\n 12.5.5.5. INITIALIZE Section\n Like all Python libraries the +__init__+ function is called when the library is first instantiated.\n This is where you would set up defaults, as well as reference variables and global variables.\n The widget references are not available at this point.\n The variables halcomp, widgets and paths give access to QtVCP\u2019s HAL component, widgets, and path\n info respectively.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1079 / 1288\n \n 12.5.5.6. SPECIAL FUNCTIONS Section\n There are several special functions that QtVCP looks for in the handler file.\n If QtVCP finds these it will call them, if not it will silently ignore them.\n class_patch__(self):\n@@ -47955,15 +47955,15 @@\n The Linux system will not shutdown if using this function, you will have to do that yourself.\n QtVCP/LinuxCNC will terminate without a prompt once this function returns.\n closing_cleanup__(self):\n This function is called just before the screen closes. It can be used to do cleanup before closing.\n 12.5.5.7. STATUS CALLBACKS Section\n By convention this is where you would put functions that are callbacks from STATUS definitions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1080 / 1288\n \n 12.5.5.8. CALLBACKS FROM FORM Section\n By convention this is where you would put functions that are callbacks from the widgets connected\n to the MainWindow in the Qt Designer editor.\n 12.5.5.9. GENERAL FUNCTIONS Section\n@@ -47994,15 +47994,15 @@\n 12.5.6.1. Overview\n In the Qt Designer editor:\n You create user function slots\n You connect the slots to widgets using signals.\n In the handler file:\n You create the slot\u2019s functions defined in Qt Designer.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1081 / 1288\n \n 12.5.6.2. Using Qt Designer to add Slots\n When you have loaded your screen into Qt Designer, add a plain PushButton to the screen.\n You could change the name of the button to something interesting like test_button.\n There are two ways to edit connections - This is the graphical way.\n@@ -48018,15 +48018,15 @@\n You can now edit a new slot name.\n Erase the default name slot() and change it to test_button()\n Press the OK button.\n You\u2019ll be back to the Configure Connections dialog.\n Now you can select your new slot in the slot list.\n Then press OK and save the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1082 / 1288\n \n Figura 12.68: Qt Designer Signal/Slot Selection\n \n 12.5.6.3. Python Handler Changes\n Now you must add the function to the handler file.\n@@ -48043,15 +48043,15 @@\n \n In fact it doesn\u2019t matter where in the handler class you put the commands but by convention this is\n where to put it.\n Save the handler file.\n Now when you load your screen and press the button it should print the name of the button in the\n terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1083 / 1288\n \n 12.5.7. More Information\n QtVCP Builtin Virtual Control Panels\n QtVCP Widgets\n QtVCP Libraries\n@@ -48068,25 +48068,25 @@\n In a terminal type qtvcp list to see a list.\n 12.6.1.1. copy\n Used for copying QtVCP\u2019s builtin Screens/VCP Panels/QtVismach code to a folder so one can\n customize it.\n In a terminal run:\n qtvcp copy\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1084 / 1288\n \n Figura 12.69: QtVCP copy Dialog - Screen, VCP Panel or QtVismach Code Copy Panel\n \n 12.6.1.2. spindle_belts\n This panel is designed to display additional RS485 VFD data and also to configure a 4 sheave, 2 belt\n spindle drive via a series of buttons.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1085 / 1288\n \n In addition, it is also a useful template to use for your custom panel because it includes:\n Display of additional HAL data\n Buttons and button groups\n Dynamic changes to button enabled/disabled state based on the state of other buttons\n@@ -48099,15 +48099,15 @@\n A custom component that scales the VFD frequency to obtain the desired spindle speed.\n A belt driven spindle that uses two belts and an intermediate idler pulley much like a drill press.\n Connect the input pins qtdragon.belts. in your postgui HAL file.\n The belts are broken into two button groups, the front belts and the rear belts. These are numbered as\n per the plate on the machine. Buttons in a group are mutually exclusive, i.e., only one can be selected\n in the group.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1086 / 1288\n \n Additionally, it\u2019s not possible to have both belts on the same level with this kind of mechanism because\n you cannot fit two belts to the one idler pulley sheave. So if a belt is selected, its opposite button is\n disabled. E.g., if belt 3 is selected, belt 7 is disabled.\n Add these lines to the [DISPLAY] section in your .ini file\n@@ -48134,15 +48134,15 @@\n The dial\u2019s range can be adjusted from a drop down menu.\n The output can be scaled with the spinbox.\n A combobox can be used to automatically select and connect to a signal.\n loadusr qtvcp test_dial\n \n Figura 12.70: QtVCP test_dial Panel - Test Dial VCP\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.6.1.4. test_button\n This panel has a button that will set a HAL pin.\n The button can be selected as a momentary or a toggle button.\n The button\u2019s indicator color can be adjusted from a drop down menu.\n You can add more buttons from the drop down menu.\n You can load a Halmeter from the drop down menu.\n@@ -48164,15 +48164,15 @@\n A combobox can be used to automatically select and connect to a pin/signal.\n You can add more LEDs from the drop down menu.\n The LED can be detached from the main windows.\n Here is how to load test_led from a HAL script:\n \n 1087 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1088 / 1288\n \n loadusr qtvcp test_led\n loadusr qtvcp -o 4 test_led\n \n The -o switch sets how many LEDs the panel starts with.\n@@ -48180,24 +48180,24 @@\n \n Figura 12.72: QtVCP test_dial Panel - Test LED VCP\n \n 12.6.1.6. test_panel\n Collection of useful widgets for testing HAL component, including speech of LED state.\n loadusr qtvcp test_panel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.73: QtVCP test_panel - HAL Component Testing Panel\n \n 12.6.1.7. cam_align\n A camera display widget for rotational alignment.\n \n 1089 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1090 / 1288\n \n Figura 12.74: QtVCP cam_align Panel - Camera Based Alignment Panel\n Usage Add these lines to the INI file:\n [DISPLAY]\n EMBED_TAB_NAME = cam_align\n@@ -48211,15 +48211,15 @@\n You can add window width and height size, rotation increment, and camera number from the INI with\n -o options.\n EMBED_TAB_COMMAND = halcmd loadusr -Wn qtvcp_embed qtvcp -d -c qtvcp_embed -x {XID} -o size \u2190=400,400 -o rotincr=.2 -o camnumber=0 cam_align\n \n Mouse controls:\n left mouse single click - increase cross hair rotation one increment\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1091 / 1288\n \n right mouse single click - decrease cross hair rotation one increment\n middle mouse single click - cycle through rotation increments\n left mouse hold and scroll - scroll camera zoom\n right mouse hold and scroll - scroll cross hair rotation angle\n@@ -48244,95 +48244,95 @@\n If you want to hide both, use a comma between them with no spaces.\n The -a option will make the panel always-on-top of all windows.\n loadusr qtvcp sim_panel\n \n Here we load the panel with no MPG selection buttons and the always-on-top option.\n loadusr qtvcp -a -o hide=groupBoxSelection sim_panel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1092 / 1288\n \n Figura 12.75: QtVCP sim_panel - Simulated Controls Panel For Screen Testing.\n \n 12.6.1.9. tool_dialog\n Manual tool change dialog that gives tool description.\n loadusr -Wn tool_dialog qtvcp -o speak_on -o audio_on tool_dialog\n \n Options:\n -o notify_on - use desktop notify dialogs instead of QtVCP native ones.\n -o audio_on - play sound on tool change\n -o speak_on - speak announcement of tool change\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.76: QtVCP tool_dialog - Manual Tool Change Dialog\n \n 12.6.2. vismach 3D Simulation Panels\n These panels are prebuilt simulation of common machine types.\n These are also embed-able in other screens such as AXIS or GMOCCAPY.\n 12.6.2.1. QtVCP vismach_mill_xyz\n 3D OpenGL view of a 3-Axis milling machine.\n loadusr qtvcp vismach_mill_xyz\n \n 1093 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1094 / 1288\n \n Figura 12.77: QtVCP vismach_mill_xyz - 3-Axis Mill 3D View Panel\n \n 12.6.2.2. QtVCP vismach_router_atc\n 3D OpenGL view of a 3-Axis router style, gantry bed milling machine.\n This particular panel shows how to define and connect the model parts in the handler file, rather then\n importing the pre-built model from QtVCP\u2019s vismach library.\n loadusr qtvcp vismach_router_atc\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1095 / 1288\n \n Figura 12.78: QtVCP vismach_router_atc - 3-Axis Gantry Bed Mill 3D View Panel\n \n 12.6.2.3. QtVCP vismach_scara\n 3D OpenGL view of a SCARA based milling machine.\n loadusr qtvcp vismach_scara\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.79: QtVCP vismach_scara - SCARA Mill 3D View Panel\n \n 12.6.2.4. QtVCP vismach_millturn\n 3D OpenGL view of a 3-Axis milling machine with an A axis/spindle.\n loadusr qtvcp vismach_millturn\n \n 1096 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.80: QtVCP vismach_millturn - 4 Axis MillTurn 3D View Panel\n \n 12.6.2.5. QtVCP vismach_mill_5axis_gantry\n 3D OpenGL view of a 5-Axis gantry type milling machine.\n loadusr qtvcp vismach_mill_5axis_gantry\n \n 1097 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1098 / 1288\n \n Figura 12.81: QtVCP vismach_mill_5axis_gantry - 5-AxIs Gantry Mill 3D View Panel\n \n 12.6.2.6. QtVCP vismach_fanuc_200f\n 3D openGL view of a 6 joint robotic arm.\n loadusr qtvcp vismach_fanuc_200f\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1099 / 1288\n \n Figura 12.82: QtVCP vismach_fanuc_200f - 6 Joint Robotic Arm\n \n 12.6.3. Custom Virtual Control Panels\n You can of course make your own panel and load it.\n@@ -48360,15 +48360,15 @@\n # connect pins\n net bit-input1\n \n test_panel.checkbox_1\n \n classicladder.0.in-00\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1100 / 1288\n \n net bit-hide\n \n test_panel.checkbox_4\n \n@@ -48420,15 +48420,15 @@\n There are panels available that are included with LinuxCNC. To see a list open a terminal and type\n qtvcp and press return.\n You will get a help printout and a list of builtin screen and panels.\n Pick any of the names from the panel list and add that to the COMMAND entry after qtvcp.\n The builtin panel search path is share/qtvcp/panels/PANELNAME.\n Run-In-Place and installed versions of LinuxCNC have these in different locations on the system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1101 / 1288\n \n 12.6.4.3. Location of Custom Panels\n Custom panels can be embedded too -either a modified builtin panel or a new user-built one.\n When loading panels, QtVCP looks in the configuration folders path for qtvcp/panels/PANELNAME/PANELNAME.ui.\n PANNELNAME being any valid string with no spaces. If no path is found there, then looks in the builtin file path.\n@@ -48463,15 +48463,15 @@\n 12.7. QtVCP Widgets\n Qtscreen uses QtVCP widgets for LinuxCNC integration.\n Widget is the general name for the UI objects such as buttons and labels in PyQt.\n You are free to use any available default widgets in the Qt Designer editor.\n There are also special widgets made for LinuxCNC that make integration easier. These are split in\n two, heading on the right side of the editor:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1102 / 1288\n \n One is for HAL only widgets.\n The other is for CNC control widgets.\n You are free to mix them in any way on your panel.\n nota\n@@ -48495,15 +48495,15 @@\n Figura 12.83: QtVCP LED: LED Indicator Widget\n A LED like indicator that optionally follows a HAL pin\u2019s logic.\n halpin_option\n Selects if the LED follows an input HAL pin or program state.\n diameter\n Diameter of the LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1103 / 1288\n \n color\n Color of the LED when on.\n off_color\n Color of the LED when off.\n@@ -48527,15 +48527,15 @@\n This widget allows the user to check a box to set a HAL pin true or false.\n It is based on PyQt\u2019s QCheckButton.\n 12.7.1.5. RadioButton Widget\n This widget allows a user to set HAL pins true or false. Only one RadioButton widget of a group\n can be true at a time.\n It is based on PyQt\u2019s QRadioButton.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1104 / 1288\n \n 12.7.1.6. Gauge - Round Dial Gauge Widget\n \n Figura 12.84: QtVCP Gauge: Round Dial Gauge Widget\n Round Gauge can be used in a LinuxCNC GUI to display an input parameter on the dial face.\n@@ -48557,15 +48557,15 @@\n This is the number of ticks/gauge readings on the gauge face.\n It should be set to a number that ensures the text readings around the gauge face are readable.\n The minimum allowed value is 2.\n zone1_color\n Zone1 extends from the maximum reading to the threshold point.\n It can be set to any RGB color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1105 / 1288\n \n zone2_color\n Zone2 extends from the threshold point to the minimum reading, which is 0.\n It can be set to any RGB color.\n bezel_color\n@@ -48592,15 +48592,15 @@\n This widget is used to indicate level or value, usually of a HAL s32/float pin.\n you can also disable the HAL pin and use Qt signals or python commands to change the level.\n HalBar is a subclass of the Bar widget, so it inherits these properties\n \n stepColorList: a list of color strings, the number of colors defines the number of bars.\n backgroundColor: a QColor definition of the background color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1106 / 1288\n \n setMaximum: an integer that defines the maximum level of indication.\n setMinimum: an integer that defines the lowest level of indication.\n pinType: to select HAL pins type:\n \u2022 NONE no HAL pin will be added\n@@ -48617,15 +48617,15 @@\n qproperty-stepColorList: \u2019green,green,#00b600,#00b600,#00d600,#00d600,yellow,yellow,red \u2190,red\u2019;\n }\n \n 12.7.1.8. HALPad - HAL Buttons Joypad\n \n Figura 12.86: QtVCP HALPad: HAL Buttons Joypad\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1107 / 1288\n \n This widget looks and acts like a 5 buttons D-pad, with an LED ring.\n Each button has an selectable type (Bit, S32 or Float) output HAL pin.\n The LED center ring has selectable colors for off and on and is controlled by a bit HAL pin.\n HALPad ENUMS There are enumerated constants used:\n@@ -48662,15 +48662,15 @@\n File or resource path to an image to display in the described button location.\n If the reset button is pressed in the Qt Designer editor property, the image will not be displayed\n (allowing optional text).\n left_text , right_text , center_text , top_text , bottom_text\n A text string to be displayed in the described button location.\n If left blank an image can be designated to be displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1108 / 1288\n \n true_color , false_color\n Color selection for the center LED ring to be displayed when the .light.center HAL\n pin is True or False.\n text_color\n@@ -48688,15 +48688,15 @@\n As an option it can be a toggle button.\n For a LED Indicator Option, see Secci\u00f3n 12.7.5.1[IndicatedPushButton] below for more info.\n It also has other options.\n It is based on PyQt\u2019s QPushButton.\n 12.7.1.10. focusOverlay - Focus Overlay Widget\n This widget places a colored overlay over the screen, usually while a dialog is showing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figura 12.87: Focus overlay example for confirm close prompt\n Used to create a focused feel and to draw attention to critical information.\n It can also show a translucent image.\n It can also display message text and buttons.\n This widget can be controlled with STATUS messages.\n 12.7.1.11. gridLayout - Grid Layout Widget\n@@ -48704,15 +48704,15 @@\n Disabled widgets typically have a different color and do not respond to actions.\n It is based on PyQt\u2019s QGridLayout.\n 12.7.1.12. hal_label - HAL Label Widget\n This widget displays values sent to it.\n \n 1109 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1110 / 1288\n \n Values can be sent from:\n HAL pins\n The input pin can be selected as Bit, S32, Float or no pin selected\n Programmatically\n@@ -48747,15 +48747,15 @@\n When using floats you can set a formatting string.\n You must set the digitCount property to an appropriate setting to display the largest number.\n Properties\n pin_name\n Option string to be used as the HAL pin name.\n If set to an empty string the widget name will be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1111 / 1288\n \n bit_pin_type\n Selects the input pin as type BIT.\n s32_pin_type\n Selects the input pin as type S32.\n@@ -48786,15 +48786,15 @@\n a large view of a widget and a smaller multi widget view.\n It is different from a stacked widget as it can pull a widget from anywhere in the screen and place it\n in its page with a different layout than it originally had.\n The original widget must be in a layout for switcher to put it back.\n In Qt Designer you will:\n Add the WidgetSwitcher widget on screen.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1112 / 1288\n \n Right click the WidgetSwitcher and add a page.\n Populate it with the widgets/layouts you wish to see in a default form.\n Add as many pages as there are views to switch to.\n On each page, add a layout widget.\n@@ -48827,15 +48827,15 @@\n Estop , Machine On , Auto , mdi , manual , run , run_from_line status\n Gets line number from STATUS message gcode-line-selected.\n run_from_line slot\n Gets line number from Qt Designer int/str slot setRunFromLine.\n abort , pause , load dialog\n Requires a dialog widget present.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1113 / 1288\n \n Camview dialog\n Requires camview dialog widget present.\n origin offset dialog\n Requires origin offset dialog widget present.\n@@ -48876,15 +48876,15 @@\n spindle fwd , spindle backward , spindle stop , spindle up , spindle down , view change\n Set view_type_string.\n limits override , flood , mist , block delete , optional stop , mdi command\n Set command_string, i.e.,calls a hard coded MDI command\n INI mdi number\n Set ini_mdi_number, i.e., calls an INI based MDI command\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1114 / 1288\n \n dro absolute , dro relative , dro dtg , exit screen\n Closes down LinuxCNC\n Override limits\n Temporarily override hard limits\n@@ -48923,15 +48923,15 @@\n Then in the INI file, under the heading [MDI_COMMAND_LIST] add appropriate lines.\n The commands are separated by the ;.\n The label is set after the comma, and \\n symbol adds a line break.\n [MDI_COMMAND_LIST]\n MDI_COMMAND = G0 Z25;X0 Y0;Z0, Goto\\nUser\\nZero\n MDI_COMMAND = G53 G0 Z0;G53 G0 X0 Y0, Goto\\nMachn\\nZero\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1115 / 1288\n \n Action buttons are subclassed from Secci\u00f3n 12.7.5.1[IndicatedPushButton]. See the following sections for more information about:\n LED Indicator option\n Enabled on State\n Text Changes On State\n@@ -48961,15 +48961,15 @@\n If the button is set checkable, it will indicate which axis is selected.\n If you press and hold the button a pop up menu will show allowing one to:\n Zero the axis\n Divide the axis by 2\n Set the axis arbitrarily\n Reset the axis to the last number recorded\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1116 / 1288\n \n You must have selected an entry dialog that corresponds to the dialog_code_string, usually this is\n selected from the screenOptions widget.\n You can select the property halpin_option, it will then set a HAL pin true when the axis is selected. The\n property joint_number should be set to the appropriate joint number. The property axis_letter should\n@@ -49004,15 +49004,15 @@\n DROLabel {\n font: 25pt \u201dLato Heavy\u201d;\n qproperty-imperial_template: \u2019 %9.4f\u2019;\n qproperty-metric_template: \u2019 %10.3f\u2019;\n qproperty-angular_template: \u2019 %11.2f\u2019;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1117 / 1288\n \n DROLabel[isHomed=false] {\n color: red;\n }\n DROLabel[isHomed=true] {\n@@ -49058,15 +49058,15 @@\n qproperty-styleFont4: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont5: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont6: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont7: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFontMargin: \u201dTimes,14,-1,0,90,0,0,0,0,0\u201d;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1118 / 1288\n \n For GcodeDisplay widget\u2019s default G-code lexer:\n styleColor0 = Default: Everything not part of the groups below\n styleColor1 = LineNo and Comments: Nxxx and comments (characters inside of and including\n () or anything after ; (when used outside of parenthesis) with the exception of the note below)\n@@ -49087,15 +49087,15 @@\n \u201dstyle name, size, -1, 0, bold setting (0-99), italics (0-1),\n underline (0-1),0,0,0\u201d\n It is based on PyQt\u2019s QsciScintilla.\n 12.7.2.8. GcodeEditor - G-code Program Editor Widget\n This is an extension of the GcodeDisplay widget that adds editing convenience.\n It is based on PyQt\u2019s QWidget which incorporates GcodeDisplay widget.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1119 / 1288\n \n 12.7.2.9. GCodeGraphics - G-code Graphic Backplot Widget\n \n Figura 12.88: QtVCP GcodeGraphics: G-code Graphic Backplot Widget\n This displays the current G-code in a graphical form.\n@@ -49112,15 +49112,15 @@\n \n _view (string)\n Sets the default view orientation on GUI load.\n Valid choices for a lathe are p, y, y2. For other screens, valid choices are p, x, y, z, z2.\n The following shows an example of how to set this property (referenced using the widget user\n selected name):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n #gcodegraphics{\n qproperty-_view: z;\n }\n \n _dro (bool)\n Determines whether or not to show the DRO.\n@@ -49169,15 +49169,15 @@\n The following shows an example of how to set this property:\n #gcodegraphics{\n qproperty-overlay_color: blue;\n }\n \n 1120 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n background_color (primary, secondary, or RGBA formatted color)\n Sets the default background color.\n The following shows an example of how to set this property:\n #gcodegraphics{\n qproperty-background_color: blue;\n }\n@@ -49224,15 +49224,15 @@\n qproperty-MouseButtonMode: 1;\n }\n \n There are 12 valid modes:\n \n 1121 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Mode\n 0\n 1\n 2\n 3\n 4\n@@ -49314,15 +49314,15 @@\n rotate-up\n rotate-down\n overlay-dro-on\n overlay-dro-off\n overlay-offsets-on\n overlay-offsets-off\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n alpha-mode-on\n alpha-mode-off\n inhibit-selection-on\n inhibit-selection-off\n dimensions-on\n dimensions-off\n@@ -49363,15 +49363,15 @@\n This will be the text set when the option is False.\n You can use Qt rich text code for different fonts/colors etc.\n Typical template for metric mode in false state, might be: Imperial Mode.\n It is based on PyQt\u2019s QLabel.\n \n 1123 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1124 / 1288\n \n 12.7.2.11. StatusLabel - Controller Variables State Label Display Widget\n This will display a label based on selectable status of the machine controller.\n You can change how the status will be displayed by substituting python formatting code in the text\n template. You can also use rich text for different fonts/colors etc.\n@@ -49410,15 +49410,15 @@\n jograte_angular_status\n Shows the current QtVCP based Angular Jog Rate.\n jogincr_status\n Shows the current QtVCP based Jog increment.\n jogincr_angular_status\n Shows the current QtVCP based Angular Jog increment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1125 / 1288\n \n machine_state_status\n Shows the current machine interpreter state using the text described from the machine_state_list.\n The interpreter states are:\n Estopped\n@@ -49457,15 +49457,15 @@\n tool_number_status\n Returns the tool number of the current loaded tool.\n tool_offset_status\n Returns the offset of the current loaded tool, indexed by index_number to select axis (0=x,1=y,etc.).\n user_system_status\n Shows the active user coordinate system (G5x setting).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1126 / 1288\n \n Other Properties\n index_number\n Integer that specifies the tool status index to display.\n state_label_list\n@@ -49494,15 +49494,15 @@\n Toggles between 2 images: axis not homed, axis homed.\n *watch_all_homed\n Would toggle between 2 images: not all homed, all homed.\n *watch_hard_limits\n Would toggle between 2 images or one per joint.\n Here is an example of using it to display an icon of Z axis homing state:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1127 / 1288\n \n Figura 12.89: QtVCP StatusImageSwitcher: Controller Status Image Switcher\n In the properties section notice that:\n watch_axis_homed is checked\n axis_letter is set to Z\n@@ -49515,15 +49515,15 @@\n \n Right click the image name and you should see Copy path.\n Click Copy path.\n Now double click the image list property so the dialog shows.\n Click the New button.\n Paste the image path in the entry box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1128 / 1288\n \n Do that again for the next image.\n Use a clear image to represent a hidden icon.\n You can test the images display from the image list by changing the image number. In this case 0 is\n unhomed and 1 would be homed.\n@@ -49557,15 +49557,15 @@\n notify_option\n Hooking into the desktop notification bubbles for error and messages.\n notify_max_messages\n Number of messages shown on screen at one time.\n catch_close_option\n Catching the close event to pop up a \u2019are you sure\u2019 prompt.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1129 / 1288\n \n close_overlay_color\n Color of transparent layer shown when quitting.\n catch_error_option\n Monitoring of the LinuxCNC error channel.\n@@ -49606,15 +49606,15 @@\n tool_overlay_color\n Color of transparent layer shown when the tool dialog is shown.\n ToolUseDesktopNotify\n Option to use desktop notify dialogs for manual tool change dialog.\n ToolFrameless\n Frameless dialogs can not be easily moved by users.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1130 / 1288\n \n fileDialog_option\n Sets up the file choosing dialog.\n file_overlay_color\n Color of transparent layer shown when the file dialog is shown.\n@@ -49652,15 +49652,15 @@\n Color of transparent layer shown when the machineLog dialog is shown.\n runFromLineDialog_option\n Sets up a dialog to display starting options when starting machine execution from a arbitrary\n line.\n runFromLine_overlay_color\n Color of transparent layer shown when the runFromLine dialog is shown.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1131 / 1288\n \n Setting Properties Programmatically The screen designer chooses the default settings of the\n screenOptions widget.\n Once chosen, most won\u2019t ever need to be changed. But if needed, some can be changed in the handler\n file or in stylesheets.\n@@ -49703,15 +49703,15 @@\n Turns all sounds on or off.\n [MCH_MSG_OPTIONS]\n mchnMsg_play_sound (bool)\n To play alert sound when dialog pops.\n mchnMsg_speak_errors (bool)\n To use Espeak to speak error messages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1132 / 1288\n \n mchnMsg_speak_text (bool)\n To use Espeak to speak all other messages.\n mchnMsg_sound_type (str)\n Sound to play when messages displayed. See notes below.\n@@ -49751,15 +49751,15 @@\n \u2022 DONE\n \u2022 ATTENTION\n \u2022 RING\n \u2022 LOGIN\n \u2022 LOGOUT\n \u2022 BELL\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1133 / 1288\n \n These Sound options require python3-gst1.0 installed.\n Audio Files\n You can also specify a file path to an arbitrary audio file.\n You can use ~ in path to substitute for the user home file path.\n@@ -49793,15 +49793,15 @@\n jograte_angular_rate\n Selects a angular jograte slider.\n max_velocity_rate\n Selects a maximum velocity rate slider.\n alertState\n String to define style change: read-only, under, over and normal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1134 / 1288\n \n alertUnder\n Sets the float value that signals the stylesheet for under warning.\n alertOver\n Sets the float value that signals the stylesheet for over warning.\n@@ -49837,15 +49837,15 @@\n diameter\n Diameter of the LED.\n color\n Color of the LED when on.\n off_color\n Color of the LED when off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1135 / 1288\n \n alignment\n Qt Alignment hint.\n state\n Current state of LED (for testing in Qt Designer).\n@@ -49882,15 +49882,15 @@\n Rapid override rate\n It is based on PyQt\u2019s QProgressBar.\n 12.7.2.19. SystemToolButton - User System Selection Widget\n This widget allows you to manually select a G5x user system by pressing and holding.\n If you don\u2019t set the button text it will automatically update to the current system.\n It is based on PyQt\u2019s QToolButton.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1136 / 1288\n \n 12.7.2.20. MacroTab - Special Macros Widget\n \n Figura 12.90: QtVCP MacroTab: Special Macros Widget\n This widget allows a user to select and adjust special macro programs for doing small jobs.\n@@ -49908,15 +49908,15 @@\n ; MACROOPTIONS = load:yes,save:yes,default:default.txt,path:~/macros\n \n MACROCOMMAND This is the first line in the O-word file.\n It is a comma separated list of text to display above an entry.\n There will be one for every variable required in the O-word function.\n If the macro does not require variables, leave it empty:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1137 / 1288\n \n ; MACROCOMMAND=\n \n MACRODEFAULTS This must be the second line in the O-word file.\n It is a comma separated list of the default values for each variable in the O-word function.\n@@ -49953,15 +49953,15 @@\n MACROOPTIONS This optional line must be the fourth line in the O-word file.\n It is a comma separated list of keyword and data:\n LOAD:yes\n Shows a load button.\n SAVE:yes\n Shows a save button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1138 / 1288\n \n 12.7.2.21. MDILine - MDI Commands Line Entry Widget\n One can enter MDI commands here.\n A popup keyboard is available.\n Embedded Commands There are also embedded commands available from this widget.\n@@ -49998,15 +49998,15 @@\n Disconnects a pin from a signal.\n An error will result if the pin does not exist.\n Running LinuxCNC from terminal may help determine the root cause as error messages from\n hal_lib.c will be displayed there.\n Syntax: unlinkp \n Example: unlinkp motion.jog-stop\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1139 / 1288\n \n nota\n The MDILine function spindle_inhibit can be used by a GUI\u2019s handler file to inhibit M3, M4, and M5\n spindle commands if necessary.\n \n@@ -50018,15 +50018,15 @@\n default):\n MDI_HISTORY_FILE = \u2019~/.axis_mdi_history\u2019\n \n 12.7.2.23. MDITouchy - Touch Screen MDI Entry Widget\n \n Figura 12.91: QtVCP MDITouchy: Touch Screen MDI Entry Widget\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1140 / 1288\n \n This widget displays buttons and entry lines to use for entering MDI commands.\n Based on LinuxCNC\u2019s Touchy screen\u2019s MDI entry process, its large buttons are most useful for touch\n screens.\n To use MDITouchy:\n@@ -50065,15 +50065,15 @@\n G90\n O endsub\n \n Notice the name of the sub matches the file name and macro name exactly, including case.\n When you invoke the macro by pressing the Macro button you can enter values for parameters (xinc\n and yinc in our example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1141 / 1288\n \n These are passed to the macro as positional parameters: #1, #2\u2026 #N respectively.\n Parameters you leave empty are passed as value 0.\n If there are several different macros, press the Macro button repeatedly to cycle through them.\n In this simple example, if you enter -1 for xinc and invoke the running of the MDI cycle, a rapid G0\n@@ -50086,15 +50086,15 @@\n Figura 12.92: QtVCP OriginOffsetsView: Origins View and Setting Widget\n This widget allows one to visualize and modify User System Origin offsets directly.\n It will update LinuxCNC\u2019s Parameter file for changes made or found.\n The settings can only be changed in LinuxCNC after homing and when the motion controller is idle.\n The display and entry will change between metric and imperial, based on LinuxCNC\u2019s current G20 /\n G21 setting.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1142 / 1288\n \n The current in-use user system will be highlighted.\n Extra actions can be integrated to manipulate settings.\n These actions depend on extra code added either to a combined widget, like originoffsetview dialog,\n or the screens handler code.\n@@ -50133,15 +50133,15 @@\n It can selectably react to:\n Machine on\n Interpreter idle\n E-stop off\n All-homed\n It is based on PyQt\u2019s QGridLayout.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.7.2.26. MachineLog - Machine Events Journal Display Widget\n FIXME MachineLog documentation\n 12.7.2.27. JointEnableWidget - FIXME\n FIXME JointEnableWidget documentation\n 12.7.2.28. StatusImageSwitcher - Controller Status Image Switching Widget\n This widget will display images based on LinuxCNC status.\n@@ -50150,15 +50150,15 @@\n the state of all homed,\n the state of a certain axis homed,\n the state of hard limits.\n It is based on PyQt\u2019s FIXME\n \n 1143 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1144 / 1288\n \n 12.7.2.29. FileManager - File Loading Selector Widget\n \n Figura 12.93: QtVCP FileManager: File Loading Selector Widget\n This widget is used to select files to load.\n@@ -50173,15 +50173,15 @@\n \n Stylesheets Properties\n doubleClickSelection (bool)\n Determines whether or not to require double clicking on a folder.\n Single clicking a folder (False) is enabled by default and is intended for touch screen users.\n The following shows an example of how to set this property:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1145 / 1288\n \n #filemanager {\n qproperty-doubleClickSelection: True;\n }\n \n@@ -50204,15 +50204,15 @@\n The tool settings can only be changed in LinuxCNC after homing and when the motion controller is\n idle.\n The display and entry will change between metric and imperial based on LinuxCNC\u2019s current G20/G21\n setting.\n The current in-use tool will be highlighted, and the current selected tool will be highlighted in a\n different color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1146 / 1288\n \n The checkbox beside each tool can be used to select too for an action that depends on extra code\n added either to a combined widget, like the toolOffsetView dialog or the screens handler code.\n Typical actions are load selected tool, delete selected tools, etc.\n Clicking on the columns and rows allows one to adjust the settings.\n@@ -50252,30 +50252,30 @@\n delete_tools()\n Deletes the currently checkbox selected tools.\n get_checked_list()\n Returns a list of tools selected by checkboxs.\n set_all_unchecked()\n Uncheck all selected tools.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Example for handler file executing aforementioned functions.\n self.w.tooloffsetview.add_tool()\n self.w.tooloffsetview.delete_tools()\n toolList = self.w.tooloffsetview.get_checked_list()\n self.w.tooloffsetview.set_all_unchecked()\n \n 12.7.2.32. BasicProbe - Simple Mill Probing Widget\n \n Figura 12.95: QtVCP BasicProbe: Simple Mill Probing Widget\n Widget for probing on a mill. Used by the QtDragon screen.\n \n 1147 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1148 / 1288\n \n 12.7.2.33. VersaProbe - Mill Probing Widget\n \n Figura 12.96: QtVCP VersaProbe: Mill Probing Widget\n Widget for probing on a mill. Used by the QtDragon screen.\n@@ -50293,15 +50293,15 @@\n \n Add a function to call a dialog:\n This function must build a message dict to send to the dialog.\n This message will be passed back in the general message with the addition of the return variable.\n It is possible to add extra user information to the message. The dialog will ignore these and pass\n them back.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1149 / 1288\n \n NAME\n Launches code name of dialog to show.\n ID\n A unique id so we process only a dialog that we requested.\n@@ -50342,15 +50342,15 @@\n TYPE (OK|YESNO|OKCANCEL) , ICON (QUESTION|INFO|CRITICAL|WARNING) , PINNAME\n Not implemented yet.\n FOCUSTEXT (overlay text|None)\n Text to display if focus overlay is used. Use None for no text.\n FOCUSCOLOR (QColor(_R, G, B, A_))\n Color to use if focus overlay is used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1150 / 1288\n \n PLAYALERT\n Sound to play if sound is available, i.e., SPEAK .\n When using STATUS \u2019s request-dialog function, the default launch name is MESSAGE.\n It is based on PyQt\u2019s QMessagebox.\n@@ -50360,15 +50360,15 @@\n This is used as a manual tool change prompt.\n It has HAL pins to connect to the machine controller. The pins are named the same as the original\n AXIS manual tool prompt and works the same.\n The tool change dialog can only be launched by HAL pins.\n If there is a Focus Overlay widget present, it will signal it to display.\n It is based on PyQt\u2019s QMessagebox.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1151 / 1288\n \n 12.7.3.3. FileDialog - Load and Save File Chooser Dialog Widget\n \n Figura 12.98: QtVCP FileDialog: Load and Save File Chooser Widget\n This is used to load G-code files.\n@@ -50384,15 +50384,15 @@\n \u2019FILENAME\u2019:\u2019~/linuxcnc/nc_files/someprogram.txt\u2019,\n \u2019EXTENSIONS\u2019:\u2019Text Files (*.txt);;ALL Files (*.*)\u2019\n }\n ACTION.CALL_DIALOG(mess)\n \n And for a save dialog\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1152 / 1288\n \n mess = {\u2019NAME\u2019:\u2019SAVE\u2019,\u2019ID\u2019:\u2019_MY_DIALOG_\u2019,\n \u2019TITLE\u2019:\u2019Save Some text File\u2019,\n \u2019FILENAME\u2019:\u2019~/linuxcnc/nc_files/someprogram.txt\u2019,\n \u2019EXTENSIONS\u2019:\u2019Text Files (*.txt);;ALL Files (*.*)\u2019\n@@ -50404,15 +50404,15 @@\n \n Figura 12.99: QtVCP OriginOffsetDialog: Origin Offset Setting Widget\n This widget allows one to modify User System origin offsets directly in a dialog form.\n If there is an Focus Overlay widget present, it will signal it to display.\n When using STATUS \u2019s request-dialog function, the default launch name is ORIGINOFFSET.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1153 / 1288\n \n 12.7.3.5. ToolOffsetDialog - Tool Offset Setting Dialog Widget\n \n Figura 12.100: QtVCP ToolOffsetDialog: Tool Offset Setting Dialog Widget\n This widget allows one to modify Tool offsets directly in a dialog form.\n@@ -50432,61 +50432,61 @@\n 12.7.3.8. EntryDialog - Edit Line Dialog Widget\n This is a dialog to display an edit line for information entry, such as origin offset.\n It returns the entry via STATUS messages using a Python DICT.\n The DICT contains at minimum, the name of the dialog requested and an ID code.\n When using \u0300 \u0300STATUS \u0300 \u0300\u2019s request-dialog function, the default launch name is ENTRY.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1154 / 1288\n \n 12.7.3.9. CalculatorDialog - Calculator Dialog Widget\n \n Figura 12.101: QtVCP CalculatorDialog: Calculator Dialog Widget\n This is a dialog to display a calculator for numeric entry, such as origin offset.\n It returns the entry via STATUS messages using a Python DICT.\n The DICT contains at minimum, the name of the dialog requested and an ID code.\n When using \u0300 \u0300STATUS \u0300 \u0300\u2019s request-dialog function, the default launch name is CALCULATOR.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.7.3.10. RunFromLine - Run-From-Line Dialog Widget\n \n Figura 12.102: QtVCP RunFromLine: Run-From-Line Dialog Widget\n Dialog to preset spindle settings before running a program from a specific line.\n It is based on PyQt\u2019s QDialog.\n \n 1155 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1156 / 1288\n \n 12.7.3.11. VersaProbeDialog - Part Touch Probing Dialog Widget\n \n Figura 12.103: QtVCP VersaProbeDialog: Part Touch Probing Dialog Widget\n This is a dialog to display a part probing screen based on Verser Probe v2.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1157 / 1288\n \n 12.7.3.12. MachineLogDialog - Machine and Debugging Logs Dialog Widget\n \n Figura 12.104: QtVCP MachineLogDialog: Machine and Debugging Logs Dialog Widget\n This is a dialog to display the machine log and QtVCP\u2019s debugging log.\n It is based on PyQt\u2019s QDialog.\n \n 12.7.4. Other Widgets\n Other available widgets:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1158 / 1288\n \n 12.7.4.1. NurbsEditor - NURBS Editing Widget\n \n Figura 12.105: QtVCP NurbsEditor: NURBS Editing Widget\n The Nurbs editor allows you to manipulate a NURBS based geometry on screen and then convert\n@@ -50495,15 +50495,15 @@\n It is based on PyQt\u2019s QDialog.\n 12.7.4.2. JoyPad - 5 button D-pad Widget\n It is the base class for the HALPad widget.\n This widget looks and acts like a 5 button D-pad, with a LED like indicators in a ring.\n You can put text or icons in each of the button positions.\n You can connect to output signals when the buttons are pressed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1159 / 1288\n \n There are also input slots to change the color of the indicator(s).\n ENUMS There are enumerated constants used to reference indicator positions.\n They are used in Qt Designer editor\u2019s property editor or in Python code.\n NONE , LEFT, L , RIGHT, R , CENTER, C , TOP, T , BOTTOM, B , LEFTRIGHT, X , TOPBOTTOM, A\n@@ -50540,15 +50540,15 @@\n The set_highlight() function must be used prior to set the indicator to use.\n Signals These signals will be sent when buttons are pressed.\n They can be connected to in Qt Designer editor or Python code.\n The first two output a string that indicates the button pressed:\n \n joy_btn_pressed (string) , joy_btn_released (string) , joy_l_pressed (bool) , joy_l_released (boo\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1160 / 1288\n \n They are based on PyQt\u2019s Signal (QtCore.pyqtSignal())\n Slots Slots can be connected to in Qt Designer editor or Python code:\n set_colorStateTrue() , set_colorStateFalse() , set_colorState(_bool_) , set_true_color(_str_)\n \n@@ -50586,15 +50586,15 @@\n \n 12.7.4.3. WebWidget\n This widget will create a html/pdf viewing page using the QtWebKit or QtWebEngine libraries. The\n newer QtWebEngine is preferred if both are on the system.\n If the QtWebEngine library is used with the QtDesigner editor, a placeholder QWidget will show in\n Qesigner. This will be replaced with thw QtWebEngine widget at run time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1161 / 1288\n \n 12.7.5. BaseClass/Mixin Widgets\n These widgets are used to combine different properties and behaviours into other widgets.\n You will see them as a collapsible header in the Qt Designer properties column.\n 12.7.5.1. IndicatedPushButtons\n@@ -50623,15 +50623,15 @@\n Indicated_PushButton #button_estop{\n qproperty-on_color: black;\n qproperty-off_color: yellow;\n }\n \n Options IndicatedPushButton have exclusive options:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1162 / 1288\n \n indicator_HAL_pin_option\n Adds a halpin, named -led that controls the button indicator state.\n indicator_status_option\n Makes the LED indicate the state of these selectable LinuxCNC status:\n@@ -50673,15 +50673,15 @@\n }\n \n Here is how you specify a particular widget by its objectName in Qt Designer:\n ActionButton #estop button [isEstopped=false] {\n color: yellow;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1163 / 1288\n \n Often, having the button disabled and enabled based on the state of LinuxCNC\u2019s motion controller is\n necessary.\n There are several properties that can be selected to aid with this:\n \n@@ -50721,15 +50721,15 @@\n \n 12.7.6. Import-Only Widgets\n These widgets are usually the base class widget for other QtVCP widgets.\n They are not available directly from the Qt Designer editor but could be imported and manually\n inserted.\n They could also be subclassed to make a similar widget with new features.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1164 / 1288\n \n 12.7.6.1. Auto Height\n Widget for measuring two heights with a probe.\n For setup.\n 12.7.6.2. G-code Utility\n@@ -50750,15 +50750,15 @@\n You can also specify subroutines to be pre-opened in tabs.\n [DISPLAY]\n # NGCGUI subroutine path.\n # This path must also be in [RS274NGC] SUBROUTINE_PATH\n NGCGUI_SUBFILE_PATH = ~/linuxcnc/nc_files/examples/ngcgui_lib\n # pre selected programs tabs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1165 / 1288\n \n # specify filenames only, files must be in the NGCGUI_SUBFILE_PATH\n NGCGUI_SUBFILE = slot.ngc\n NGCGUI_SUBFILE = qpocket.ngc\n \n@@ -50782,15 +50782,15 @@\n (info: feedrate -- simple example for setting feedrate)\n o sub\n #\n = #1 (= 6 Feed Rate) ; comments in brackets will be shown in ngcui\n f#\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1166 / 1288\n \n 12.7.6.6. Qt PDF\n Allows adding loadable PDFs to a screen.\n 12.7.6.7. Qt Vismach\n Use this to build/add OpenGl simulated machines.\n@@ -50823,15 +50823,15 @@\n For example, you can catch machine on and off messages.\n nota\n The example below shows the two common ways of connecting signals, one of them using lambda.\n lambda is used to strip off or manipulate arguments from the status message before calling the\n function. You can see the difference in the called function signature: The one that uses lambda does\n not accept the status object - lambda did not pass it to the function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1167 / 1288\n \n Place these commands into the [INITIALIZE] section of the Python handler file:\n STATUS.connect(\u2019state-on\u2019, self.on_state_on)\n STATUS.connect(\u2019state-off\u2019, lambda: w, self.on_state_off())\n \n@@ -50876,15 +50876,15 @@\n GET_JOG_FROM_NAME = {\u2019X\u2019:0,\u2019Y\u2019:1,\u2019Z\u2019:2}\n NO_HOME_REQUIRED = False\n HOME_ALL_FLAG\n JOINT_TYPE = self.INI.find(section, \u201dTYPE\u201d) or \u201dLINEAR\u201d\n JOINT_SEQUENCE_LIST\n JOINT_SYNC_LIST\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1168 / 1288\n \n JOG_INCREMENTS = None\n ANGULAR_INCREMENTS = None\n GRID_INCREMENTS\n DEFAULT_LINEAR_JOG_VEL = 15 units per minute\n@@ -50928,15 +50928,15 @@\n \n 12.8.2.4. Helpers\n There are some helper functions - mostly used for widget support:\n \n get_error_safe_setting(_self_, _heading_, _detail_, default=_None_) , convert_metric_to_mac\n Get filter extensions in Qt format.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1169 / 1288\n \n 12.8.2.5. Usage\n Import Info module\n Add this Python code to your import section:\n ############################\n@@ -50971,15 +50971,15 @@\n # **** IMPORT SECTION **** #\n ############################\n from qtvcp.core import Action\n \n Instantiate Action module\n Add this Python code to your instantiate section:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n ACTION = Action()\n \n Access ACTION commands\n@@ -51020,15 +51020,15 @@\n ACTION.ZERO_G92_OFFSET()\n ACTION.ZERO_ROTATIONAL_OFFSET()\n ACTION.ZERO_G5X_OFFSET(num)\n ACTION.RECORD_CURRENT_MODE()\n \n 1170 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ACTION.RESTORE_RECORDED_MODE()\n ACTION.SET_SELECTED_AXIS(jointnum)\n ACTION.DO_JOG(jointnum, direction)\n ACTION.JOG(jointnum, direction, rate, distance=0)\n ACTION.TOGGLE_FLOOD()\n ACTION.SET_FLOOD_ON()\n@@ -51067,15 +51067,15 @@\n This library handles tool offset file changes.\n \n aviso\n LinuxCNC doesn\u2019t handle third party manipulation of the tool file well.\n \n 1171 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1172 / 1288\n \n 12.8.4.1. Helpers\n \n GET_TOOL_INFO(_toolnumber_)\n This will return a Python list of information on the requested tool number.\n@@ -51111,15 +51111,15 @@\n LinuxCNC supports tool wear by adding tool wear information into tool entries above 10000.\n nota\n This also requires remap code to add the wear offsets t tool change time.\n \n 12.8.5. Path\n Path module gives reference to important files paths.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.8.5.1. Referenced Paths\n \n PATH.PREFS_FILENAME\n The preference file path.\n PATH.WORKINGDIR\n The directory QtVCP was launched from.\n@@ -51158,15 +51158,15 @@\n PATH.PLUGIN\n The QtVCP widget plugin folder.\n PATH.VISMACHDIR\n Directory where prebuilt Vismach files are found.\n \n 1173 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1174 / 1288\n \n Not currently used:\n PATH.LOCALEDIR\n Locale translation folder.\n PATH.DOMAIN\n@@ -51200,15 +51200,15 @@\n Import VCPWindow module\n Add this Python code to your import section:\n ############################\n # **** IMPORT SECTION **** #\n ############################\n from qtvcp.qt_makegui import VCPWindow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1175 / 1288\n \n Instantiate VCPWindow module+ Add this Python code to your instantiate section:\n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n@@ -51247,15 +51247,15 @@\n Load Calibration program:\n AUX_PRGM.load_calibration()\n \n keyboard_onboard()\n Load onboard/Matchbox keyboard\n AUX_PRGM.keyboard_onboard()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1176 / 1288\n \n 12.8.7.2. Usage\n Import Aux_program_loader module\n Add this Python code to your import section:\n ############################\n@@ -51290,15 +51290,15 @@\n nota\n Keylookup requires code under the processed_key_event function to call KEYBIND.call().\n Most handler files already have this code.\n \n In the handler file, under the initialized function use this general syntax to create keybindings:\n KEYBIND.add_call(\u201dDEFINED_KEY\u201d,\u201dFUNCTION TO CALL\u201d, USER DATA)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Here we add a keybinding for F10, F11 and F12:\n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # at this point:\n # the widgets are instantiated.\n@@ -51348,15 +51348,15 @@\n Qt.Key_Shift: \u201dKey_Shift\u201d,\n Qt.Key_Control: \u201dKey_Control\u201d,\n Qt.Key_Meta: \u201dKey_Meta\u201d,\n # Qt.Key_Alt: \u201dKey_Alt\u201d,\n \n 1177 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Qt.Key_AltGr: \u201dKey_AltGr\u201d,\n Qt.Key_CapsLock: \u201dKey_CapsLock\u201d,\n Qt.Key_NumLock: \u201dKey_NumLock\u201d,\n Qt.Key_ScrollLock: \u201dKey_ScrollLock\u201d,\n Qt.Key_F1: \u201dKey_F1\u201d,\n Qt.Key_F2: \u201dKey_F2\u201d,\n@@ -51415,15 +51415,15 @@\n Qt.Key_Asterisk: \u201dKey_Asterisk\u201d,\n Qt.Key_Plus: \u201dKey_Plus\u201d,\n Qt.Key_Comma: \u201dKey_Comma\u201d,\n Qt.Key_Minus: \u201dKey_Minus\u201d,\n \n 1178 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Qt.Key_Period: \u201dKey_Period\u201d,\n Qt.Key_Slash: \u201dKey_Slash\u201d,\n Qt.Key_0: \u201dKey_0\u201d,\n Qt.Key_1: \u201dKey_1\u201d,\n Qt.Key_2: \u201dKey_2\u201d,\n Qt.Key_3: \u201dKey_3\u201d,\n@@ -51466,15 +51466,15 @@\n _DETAIL\n Text hidden unless clicked on.\n _PINNAME\n Basename of the HAL pin(s).\n \n 1179 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1180 / 1288\n \n _TYPE\n Specifies whether it is a: Status message - shown in the status bar and the notify dialog.\n Requires no user intervention. OK message - requiring the user to click OK to close the dialog.\n OK messages have two HAL pins:\n@@ -51517,15 +51517,15 @@\n 12.8.10. Notify\n Notify module is used to send messages that are integrated into the desktop.\n It uses the pynotify library.\n Ubuntu/Mint does not follow the standard so you can\u2019t set how long the message stays up for.\n I suggest fixing this with the notify-osd package available from this PPA (DISCONTINUED due to\n move of Ubuntu to Gnome).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1181 / 1288\n \n Notify keeps a list of all the alarm messages since starting in self.alarmpage.\n If you click \u2019Show all messages\u2019 in the notify popup, it will print them to the terminal.\n The ScreenOptions widget can automatically set up the notify system.\n Typically STATUS messages are used to sent notify messages.\n@@ -51558,15 +51558,15 @@\n play sounds using the beep library (currently blocks while beeping),\n speak words using the espeak library (non blocking while speaking).\n There are default alert sounds using Mint or FreeDesktop default sounds.\n You can play arbitrary sounds or even songs by specifying the path.\n STATUS has messages to control Player module.\n The ScreenOptions widget can automatically set up the audio system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1182 / 1288\n \n 12.8.12.1. Sounds\n Alerts There are default alerts to choose from:\n ERROR\n READY\n@@ -51600,15 +51600,15 @@\n 12.8.12.3. Example\n To play sounds upon STATUS messages, use these general syntaxes:\n STATUS.emit(\u2019play-alert\u2019,\u2019LOGOUT\u2019)\n STATUS.emit(\u2019play-alert\u2019,\u2019BEEP\u2019)\n STATUS.emit(\u2019play-alert\u2019,\u2019SPEAK This is a test screen for Q t V C P\u2019)\n STATUS.emit(\u2019play-sound\u2019, \u2019PATH TO SOUND\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1183 / 1288\n \n 12.8.13. Virtual Keyboard\n This library allows you to use STATUS messages to launch a virtual keyboard.\n It uses Onboard or Matchbox libraries for the keyboard.\n \n@@ -51635,15 +51635,15 @@\n # **** instantiate libraries section **** #\n ###########################################\n TOOLBAR = ToolBarActions()\n \n 12.8.14.4. Examples\n Assigning Tool Actions To Toolbar Buttons\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1184 / 1288\n \n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # At this point:\n@@ -51684,15 +51684,15 @@\n Some require HAL pins to be connected for movement.\n From a terminal (pick one):\n qtvcp vismach_mill_xyz\n qtvcp vismach_scara\n qtvcp vismach_millturn\n qtvcp vismach_5axis_gantry\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1185 / 1288\n \n 12.8.15.2. Primitives Library\n Provides the basic building blocks of a simulated machine.\n Collection\n A collection is an object of individual machine parts.\n@@ -51732,15 +51732,15 @@\n \n Track\n Move and rotate an object to point from one capture() \u2019d coordinate system to another.\n Base object to hold coordinates for primitive shapes.\n CylinderX, CylinderY, CylinderZ\n Build a cylinder on the X, Y or Z axis by giving endpoint (X, Y, or Z) and radii coordinates.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1186 / 1288\n \n Sphere\n Build a sphere from center and radius coordinates.\n \n TriangleXY, TriangleXZ, TriangleYZ\n@@ -51779,15 +51779,15 @@\n # **** IMPORT SECTION **** #\n ############################\n import mill_xyz as MILL\n \n Instantiate and use the simulation widget Instantiate the simulation widget and add it to the\n screen\u2019s main layout:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1187 / 1288\n \n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # At this point:\n@@ -51806,30 +51806,30 @@\n Vismach is a set of Python functions that can be used to create and animate models of machines.\n This chapter is about the Qt embedded version of Vismach, also see: https://sa-cnc.com/linuxcncvismach/ .\n \n 12.9.1. Introduction\n Vismach displays the model in a 3D viewport and the model parts are animated as the values of\n associated HAL pins change.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1188 / 1288\n \n Figura 12.107: QtVismach 3D Viewport\n The Vismach 3D viewport view can be manipulated as follows:\n zoom by scroll wheel\n pan by middle button drag\n rotate by right-button drag\n tilt by left button drag\n A Vismach model takes the form of a Python script and can use standard Python syntax.\n This means that there is more than one way to lay out the script, but in the examples given in this\n document the simplest and most basic of them will be used.\n The basic sequence in creating the Vismach model is:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1189 / 1288\n \n 1. Create the parts\n 2. Define how they move\n 3. Assemble into movement groups\n \n@@ -51898,15 +51898,15 @@\n |\n |---tool\n |\n |---tooltip\n |\n |---(tool cylinder function)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1190 / 1288\n \n As you can see, the lowest parts must exist first before those can be grouped with others into an\n assembly. So you build upwards from lowest point in tree and assemble them together.\n The same is applicable for any design of machine: look at the machine arm example and you will see\n that it starts with the tip and adds to the larger part of the arm, then it finally groups with the base.\n@@ -51943,15 +51943,15 @@\n part = AsciiOBJ(data=\u201dv 0.123 0.234 0.345 1.0 ...\u201d)\n \n STL model parts are added to the Vismach space in the same locations as they were created in the\n STL or OBJ space, i.e. ideally with a rotational point at their origin.\n nota\n It is much easier to move while building if the origin of the model is at a rotational pivot point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1191 / 1288\n \n 12.9.5.2. Build from Geometric Primitives\n Alternatively parts can be created inside the model script from a range of shape primitives.\n Many shapes are created at the origin and need to be moved to the required location after creation.\n \n@@ -51987,15 +51987,15 @@\n 12.9.6.1. Translating Model parts\n part1 = Translate([part1], x, y, z)\n Move part1 the specified distances in x, y and z.\n 12.9.6.2. Rotating Model Parts\n part1 = Rotate([part1], theta, x, y, z)\n Rotate the part by angle theta [degrees] about an axis between the origin and x, y, z.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1192 / 1288\n \n 12.9.7. Animating Parts\n To animate the model controlled by the values of HAL pins there are four functions: HalTranslate,\n HalRotate, HalToolCylinder and HalToolTriangle.\n For parts to move inside an assembly they need to have their HAL motions defined before being\n@@ -52034,15 +52034,15 @@\n Defines the axis of rotation from the origin the point of coordinates (x,y,z).\n When the part is moved back away from the origin to its correct location, the axis of rotation\n can be considered to remain \u201dembedded\u201d in the part.\n angle_scale\n Rotation angles are in degrees, so for a rotary joint with a 0-1 scaling you would need to use\n an angle scale of 360.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1193 / 1288\n \n 12.9.7.3. HalToolCylinder\n \n tool = HalToolCylinder()\n Make a cylinder to represent a cylindrical mill tool, based on the tool table and current loaded\n@@ -52073,15 +52073,15 @@\n Move the head to the spindle or spindle to the head.\n Create the draw bar.\n Define the motion of the draw bar.\n Assemble the three parts into a head assembly.\n Define the motion of the head assembly.\n In this example the spindle rotation is indicated by rotation of a set of drive dogs:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1194 / 1288\n \n #Drive dogs\n dogs = Box(-6,-3,94,6,3,100)\n dogs = Color([1,1,1,1],[dogs])\n dogs = HalRotate([dogs],c,\u201dspindle\u201d,360,0,0,1)\n@@ -52123,15 +52123,15 @@\n For example [1,0,0,0.5] for a 50 % opacity red.\n myhud = Hud()\n Creates a heads-up display in the Vismach GUI to display items such as axis positions, titles, or\n messages.\n myhud = Hud()\n myhud.show(\u201dMill_XYZ\u201d)\u2018\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1195 / 1288\n \n myhud = HalHud()\n A more advanced version of the Hud that allows HAL pins to be displayed:\n myhud = HalHud()\n myhud.set_background_color(0,.1,.2,0)\n@@ -52173,15 +52173,15 @@\n \n Add it to the Window class Collection so it is never moved from the origin.\n v.model = Collection([origin, model, world])\n \n Start from the cutting tip and work your way back. Add each collection to the model at the origin and\n run the script to confirm the location, then rotate/translate and run the script to confirm again.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.9.11. Basic structure of a QtVismach script\n # imports\n import hal\n from qtvcp.lib.qt_vismach.qt_vismach import *\n # create HAL pins here if needed\n #c = hal.component(\u201dsamplegui\u201d)\n@@ -52224,15 +52224,15 @@\n # if you call this file directly from python3, it will display a PyQt5 window\n # good for confirming the parts of the assembly.\n if __name__ == \u2019__main__\u2019:\n main(model, tooltip, work, size=600, hud=None, lat=-75, lon=215)\n \n 1196 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1197 / 1288\n \n 12.9.12. Builtin Vismach Sample Panels\n QtVCP builtin Vismach Panels\n \n 12.10. QtVCP: Building Custom Widgets\n@@ -52260,15 +52260,15 @@\n Injecting important variables,\n Calling an extra setup function\n Calling a closing cleanup function at shutdown.\n These functions are not called when the Qt Designer editor displays the widgets.\n When QtVCP builds a screen from the .ui file:\n 1. It searches for all the HAL-ified widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1198 / 1288\n \n 2. It finds the ScreenOptions widget, to collect information it needs to inject into the other widgets\n 3. It instantiates each widget and if it is a HAL-ified widget, calls the hal_init() function.\n hal_init() is defined in the base class and it:\n a. Adds variables such as the preference file to every HAL-ified widget.\n@@ -52321,15 +52321,15 @@\n #\n \n 2\n \n y\n 3y\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1199 / 1288\n \n In this case we need access to:\n y\n \n PyQt\u2019s QtWidgets library,\n@@ -52401,15 +52401,15 @@\n #!/usr/bin/env python3\n ###############################\n # Imports\n ###############################\n from PyQt5.QtCore import pyqtProperty\n from qtvcp.widgets.led_widget import LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n from qtvcp.core import Status\n ###########################################\n # **** instantiate libraries section **** #\n ###########################################\n STATUS = Status()\n ##########################################\n@@ -52459,15 +52459,15 @@\n def reset_is_on(self):\n self.is_on = False\n #######################################\n # Qt Designer properties\n \n 1200 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1201 / 1288\n \n #######################################\n invert_state_status = pyqtProperty(bool, get_invert_state, set_invert_state, \u2190reset_invert_state)\n is_estopped_status = pyqtProperty(bool, get_is_estopped, set_is_estopped, \u2190reset_is_estopped)\n is_on_status = pyqtProperty(bool, get_is_on, set_is_on, reset_is_on)\n@@ -52537,15 +52537,15 @@\n self.setState(False)\n self.is_estopped = False\n self.is_on = False\n self.invert_state = False\n \n #\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n y\n \n 1\n \n Defines the name of our custom widget and what other class it inherits from.\n In this case we inherit LED - a QtVCP widget that represents a status light.\n@@ -52606,15 +52606,15 @@\n self.PREFS_\n the instance of an optional preference file\n self.SETTINGS_\n the Qsettings object\n We could use this information to create HAL pins or look up image paths etc.\n STATUS.connect(\u2019state-estop\u2019, lambda w:self._flip_state(True))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1203 / 1288\n \n Lets look at this line more closely:\n STATUS is very common theme is widget building.\n STATUS uses GObject message system to send messages to widgets that register to it.\n This line is the registering process.\n@@ -52661,15 +52661,15 @@\n return self.is_on\n def reset_is_on(self):\n self.is_on = False\n \n This is how Qt Designer sets the attributes of the widget.\n This can also be called directly in the widget.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1204 / 1288\n \n #######################################\n # Qt Designer properties\n #######################################\n invert_state_status = pyqtProperty(bool, get_invert_state, set_invert_state, \u2190reset_invert_state)\n@@ -52709,15 +52709,15 @@\n self._last = 0\n self._block_signal = False\n self._auto_label_flag = True\n SettingMenu = QMenu()\n for system in(\u2019G54\u2019, \u2019G55\u2019, \u2019G56\u2019, \u2019G57\u2019, \u2019G58\u2019, \u2019G59\u2019, \u2019G59.1\u2019, \u2019G59.2\u2019, \u2019G59.3\u2019):\n Button = QAction(QIcon(\u2019exit24.png\u2019), system, self)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1205 / 1288\n \n Button.triggered.connect(self[system.replace(\u2019.\u2019,\u2019_\u2019)])\n SettingMenu.addAction(Button)\n self.setMenu(SettingMenu)\n self.dialog = EntryDialog()\n@@ -52760,15 +52760,15 @@\n def ChangeState(self, joint):\n if int(joint) != self._joint:\n self._block_signal = True\n self.setChecked(False)\n self._block_signal = False\n self.hal_pin.set(False)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1206 / 1288\n \n ##############################\n # required class boiler code #\n ##############################\n def __getitem__(self, item):\n@@ -52815,15 +52815,15 @@\n HomeLabel[homed=true] {\n color: green;\n }\n HomeLabel[homed=false] {\n color: red;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.10.6. Use Stylesheets To Change Custom Widget Properties\n class Label(QLabel):\n def __init__(self, parent=None):\n super(Label, self).__init__(parent)\n alternateFont0 = self.font\n # Qproperty getter and setter\n@@ -52868,15 +52868,15 @@\n return Lcnc_GridLayout(parent)\n def name(self):\n return \u201dLcnc_GridLayout\u201d\n def group(self):\n \n 1207 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n return \u201dLinuxCNC - HAL\u201d\n def icon(self):\n return QtGui.QIcon(QtGui.QPixmap(ICON.get_path(\u2019lcnc_gridlayout\u2019)))\n def toolTip(self):\n return \u201dHAL enable/disable GridLayout widget\u201d\n def whatsThis(self):\n@@ -52925,15 +52925,15 @@\n def domXml(self):\n return \u2019\\n\u2019\n def includeFile(self):\n return \u201dqtvcp.widgets.system_tool_button\u201d\n \n 1208 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1209 / 1288\n \n 12.10.7.3. Making a plugin with a MenuEntry dialog box\n It possible to add an entry to the dialog that pops up when you right click the widget in the layout.\n This can do things such as selecting options in a more convenient way.\n This is the plugin used for action buttons.\n@@ -52979,15 +52979,15 @@\n def createWidget(self, parent):\n return ActionButton(parent)\n # This method returns the name of the custom widget class\n def name(self):\n return \u201dActionButton\u201d\n # Returns the name of the group in Qt Designer\u2019s widget box\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n def group(self):\n return \u201dLinuxCNC - Controller\u201d\n # Returns the icon\n def icon(self):\n return QtGui.QIcon(QtGui.QPixmap(ICON.get_path(\u2019actionbutton\u2019)))\n # Returns a tool tip short description\n@@ -53028,15 +53028,15 @@\n self.setWindowTitle(self.tr(\u201dSet Options\u201d))\n def updateWidget(self):\n formWindow = QDesignerFormWindowInterface.findFormWindow(self.widget)\n if formWindow:\n \n 1210 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1211 / 1288\n \n formWindow.cursor().setProperty(\u201destop_action\u201d,\n QtCore.QVariant(self.c_estop.isChecked()))\n self.accept()\n class ActionButtonMenuEntry(QPyDesignerTaskMenuExtension):\n@@ -53075,15 +53075,15 @@\n if self.w.PREFS_:\n # variable name (entry name, default value, type, section name)\n self.int_value = self.w.PREFS_.getpref(\u2019Integer_value\u2019, 75, int, \u2019CUSTOM_FORM_ENTRIES\u2019)\n self.string_value = self.w.PREFS_.getpref(\u2019String_value\u2019, \u2019on\u2019, str, \u2019 \u2190CUSTOM_FORM_ENTRIES\u2019)\n \n Writing preferences at close time In the closing_cleanup__() function, add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1212 / 1288\n \n if self.w.PREFS_:\n # variable name (entry name, variable name, type, section name)\n self.w.PREFS_.putpref(\u2019Integer_value\u2019, self.integer_value, int, \u2019CUSTOM_FORM_ENTRIES\u2019)\n self.w.PREFS_.putpref(\u2019String_value\u2019, self.string_value, str, \u2019CUSTOM_FORM_ENTRIES\u2019)\n@@ -53118,15 +53118,15 @@\n Being able to edit a style on a running screen is convenient.\n Import StyleSheetEditor module in the IMPORT SECTION:\n from qtvcp.widgets.stylesheeteditor import StyleSheetEditor as SSE\n \n Instantiate StyleSheetEditor module in the INSTANTIATE SECTION:\n STYLEEDITOR = SSE()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1213 / 1288\n \n Create a keybinding in the INITIALIZE SECTION: Under the +__init__.(self, halcomp, widgets,\n paths):+ function add:\n KEYBIND.add_call(\u2019Key_F12\u2019,\u2019on_keycall_F12\u2019)\n \n@@ -53170,15 +53170,15 @@\n def return_value(self, w, message):\n num = message.get(\u2019RETURN\u2019)\n id_code = bool(message.get(\u2019ID\u2019) == \u2019FORM__NUMBER\u2019)\n name = bool(message.get(\u2019NAME\u2019) == \u2019ENTRY\u2019)\n if id_code and name and num is not None:\n print(\u2019The {} number from {} was: {}\u2019.format(name, id_code, num))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1214 / 1288\n \n This catches all general messages so it must check the dialog type and id code to confirm it\u2019s our\n dialog. In this case we had requested an ENTRY dialog and our unique id was FORM_NUMBER, so now we\n know the message is for us. ENTRY or CALCULATOR dialogs return a float number.\n \n@@ -53213,15 +53213,15 @@\n Edit the object name, text, and button type for an appropriate action.\n In this example the:\n submenu name must be menuRecent,\n actions names must be actionAbout, actionQuit, actionMyFunction\n Loads the toolbar_actions library in the IMPORT SECTION\n from qtvcp.lib.toolbar_actions import ToolBarActions\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1215 / 1288\n \n Instantiate ToolBarActions module in the INSTANTIATE LIBRARY SECTION\n TOOLBAR = ToolBarActions()\n \n Configure submenus and actions in the SPECIAL FUNCTIONS SECTION Under the def initialized_\n@@ -53268,15 +53268,15 @@\n if tab in( self.w.tab_auto, self.w.tab_graphics):\n ACTION.RUN(line=0)\n elif tab == self.w.tab_files:\n self.w.filemanager.load()\n elif tab == self.w.tab_mdi:\n self.w.mditouchy.run_command()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1216 / 1288\n \n This function assumes there is a Tab widget, named mainTab, that has tabs with the names tab_auto,\n tab_graphics, tab_filemanager and tab_mdi.\n In this way the cycle start button works differently depending on what tab is shown.\n This is simplified - checking state and error trapping might be helpful.\n@@ -53315,15 +53315,15 @@\n Call it btn_toggle_continuous.\n Set the AbstractButton property checkable to True.\n Set the ActionButton properties incr_imperial_number and incr_mm_number to 0.\n Use Qt Designer\u2019s slot editor to use the button signal clicked(bool) to call form\u2019s handler function\n toggle_continuous_clicked().\n See Using Qt Designer To Add Slots section for more information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1217 / 1288\n \n Then add this code snippets to the handler file under the initialized__ function:\n # at this point:\n # the widgets are instantiated.\n # the HAL pins are built but HAL is not set ready\n@@ -53368,15 +53368,15 @@\n We can \u201dclass patch\u201d the library to redirect the function call. In the IMPORT SECTION add:\n from qtvcp.widgets.file_manager import FileManager as FM\n \n Here we are going to:\n 1. Keep a reference to the original function (1) so we can still call it\n 2. Redirect the class to call our custom function (2) in the handler file instead.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1218 / 1288\n \n ##########################################\n # Special Functions called from QtVCP\n #\n ##########################################\n@@ -53422,15 +53422,15 @@\n #####################\n # GENERAL FUNCTIONS #\n #####################\n def our_load(self,fname):\n print(fname)\n self.w.filemanager.super__load(fname)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1219 / 1288\n \n 12.11.11. Adding Widgets Programmatically\n In some situation it is only possible to add widgets with Python code rather then using the Qt\n Designer editor.\n When adding QtVCP widgets programmatically, sometimes there are extra steps to be taken.\n@@ -53472,15 +53472,15 @@\n def __init__(self,halcomp,widgets,paths):\n self.hal = halcomp\n self.w = widgets\n self.PATHS = paths\n STATUS.connect(\u2019actual-spindle-speed-changed\u2019, \\\n lambda w,speed: self.update_spindle(speed))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1220 / 1288\n \n Add the widgets to the tab We need to make sure the Qt Designer widgets are already built before\n we try to add to them. For this, we add a call to self.make_corner_widgets() function to build our\n extra widgets at the right time, i.e. under the initialized__() function:\n ##########################################\n@@ -53585,15 +53585,15 @@\n 4\n \n This sets it as green when on.\n This is the extra function call required with some QtVCP widgets.\n If HAL_NAME is omitted it will use the widget\u2019s objectName if there is one.\n It gives the special widgets reference to:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1221 / 1288\n \n self.HAL_GCOMP\n the HAL component instance\n self.HAL_NAME\n This widget\u2019s name as a string\n@@ -53686,15 +53686,15 @@\n 12.11.12. Update/Read Objects Periodically\n Sometimes you need to update a widget or read a value regularly that isn\u2019t covered by normal\n libraries.\n Here we update an LED based on a watched HAL pin every 100 ms.\n We assume there is an LED named led in the Qt Designer UI file.\n Load the Qhal library for access to QtVCP\u2019s HAL component In the IMPORT SECTION add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1222 / 1288\n \n from qtvcp.core import Qhal\n \n Instantiate Qhal In the INSTANTIATE LIBRARY SECTION add:\n QHAL = Qhal()\n@@ -53736,15 +53736,15 @@\n ########################\n # widgets allows access to widgets from the QtVCP files\n # at this point the widgets and hal pins are not instantiated\n def __init__(self,halcomp,widgets,paths):\n # directly select ZMQ message receiving\n self.w.screen_options.setProperty(\u2019use_receive_zmq_option\u2019,True)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1223 / 1288\n \n This allows an external program to call functions in the handler file.\n Add a function to be called on ZMQ message reception Let\u2019s add a specific function for testing.\n You will need to run LinuxCNC from a terminal to see the printed text.\n #####################\n@@ -53803,15 +53803,15 @@\n \n 1\n \n You will need to know the signature of the function you wish to call. Also note that the message\n is converted to a JSON object. This is because ZMQ sends byte messages not Python objects. json\n converts Python objects to bytes and will be converted back when received.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1224 / 1288\n \n 12.11.13.2. ZMQ Messages Writing\n You may also want to communicate with an external program from the screen.\n In the ScreenOptions widget, you can select the property use_send_zmq_message. You can also set\n this property directly in the handler file, as in this sample.\n@@ -53855,15 +53855,15 @@\n topic, message = sock.recv_multipart()\n print(\u2019{} sent message:{}\u2019.format(topic,json.loads(message)))\n \n 12.11.14. Sending Messages To Status Bar Or Desktop Notify Dialogs\n There are several ways to report information to the user.\n A status bar is used for short information to show the user.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1225 / 1288\n \n nota\n Not all screens have a status bar.\n \n Status bar usage example\n@@ -53904,15 +53904,15 @@\n #####################\n # general functions #\n #####################\n def focusInChanged(self, widget):\n if isinstance(widget.parent(),type(self.w.gcode_editor.editor)):\n print(\u2019G-code Editor\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1226 / 1288\n \n elif isinstance(widget,type(self.w.gcodegraphics)):\n print(\u2019G-code Display\u2019)\n elif isinstance(widget.parent(),type(self.w.mdihistory) ):\n print(\u2019MDI History\u2019)\n@@ -53955,15 +53955,15 @@\n # if the -o option has \u2019camnumber=\u2019 in it, assume it\u2019s the camera number \u2190to use\n elif \u2019camnumber=\u2019 in self.w.USEROPTIONS_[num]:\n try:\n number = int(self.w.USEROPTIONS_[num].strip(\u2019camnumber=\u2019))\n except Exception as e:\n #\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1227 / 1288\n \n print(\u2019Error with cam_align camera selection - not a number - using \u21900\u2019)\n # set the camera number either as default or if -o option changed the \u2019number\u2019\n variable, to that number.\n self.w.camview._camNum = number\n@@ -53995,15 +53995,15 @@\n the .ui file,\n the handler file, and\n possibly the .qss theme file.\n \n 12.12.3. QtVCP Startup To Shutdown\n QtVCP source is located in +src/emc/usr_intf/qtvcp+ folder of LinuxCNC source tree.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1228 / 1288\n \n 12.12.3.1. QtVCP Startup\n When QtVCP first starts:\n 1. It must decide if this object is a screen or a panel.\n 2. It searches for and collects information about paths of required files and useful folders.\n@@ -54037,15 +54037,15 @@\n CONFIGPATH\n Path of the launched configuration\n BASEDIR\n General path, used to derive all paths\n BASENAME\n Generic name used to derive all paths\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1229 / 1288\n \n LIBDIR\n Path of QtVCP\u2019s Python library\n HANDLER\n Path of handler file\n@@ -54082,15 +54082,15 @@\n aviso\n Keybinding is always a difficult-to-get-right-in-all-cases affair.\n \n Custom keybinding functions are to be defined in the handler file.\n Most importantly widgets that require regular key input and not jogging, should be checked for in the\n processed_key_event__ function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1230 / 1288\n \n 12.12.5.4. Preference File\n Some QtVCP widgets use the preference file to record important information.\n This requires the preference file to be set up early in the widget initialization process.\n The easiest way to do this is to use the ScreenOptions widget.\n@@ -54121,15 +54121,15 @@\n By default, if there is a preference file, the dialogs will remember their last size/placement.\n It is possible to override this so they open in the same location each time.\n 12.12.5.7. Styles (Themes)\n While it is possible to set styles in Qt Designer, it is more convenient to change them later if they are\n all set in a separate .qss file.\n The file should be put in the same location as the handler file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1231 / 1288\n \n Cap\u00edtulo 13\n \n User Interface Programming\n 13.1. Panelui\n@@ -54159,15 +54159,15 @@\n loadrt sampler cfg=u depth=1025\n #uncomment to validate the panelui INI file\n #loadusr pyui\n # -d = debug, -v = verbose debug\n # -d will show you keypress identification and commands called\n # -v is for develeper info\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1232 / 1288\n \n loadusr -W panelui -d\n # using simulated buttons instead of the MESA 7I73 card\n # so we load the sim_matrix_kb component to convert HAL pins to keyscan codes\n loadrt sim_matrix_kb\n@@ -54208,15 +54208,15 @@\n This allows one to change the prefix of the HAL pins from panelui to an arbitrary name.\n ZMQ Messaging Setup\n [ZMQ_SETUP]\n TOPIC = \u2019QTVCP\u2019\n SOCKET = \u2019tcp://127.0.0.1:5690\u2019\n ENABLE = True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1233 / 1288\n \n This sets up and enables ZMQ based messaging. TOPIC and SOCKET must match the listening program.\n Radio Buttons Radiobutons allow only one button in the group to be active at a time. Each group\n has its own output pin, separate from each button in the group. Radio button definitions start with\n the text RADIO_BUTTON inside single brackets.\n@@ -54270,15 +54270,15 @@\n \n Toggle Buttons Togglebuttons only change state on each press of the button. Toggle button definitions start with the text TOGGLE_BUTTON inside single brackets.\n [TOGGLE_BUTTONS]\n # Each button name inside double brackets, must be unique and is case sensitive.\n # This button, named \u2019tool_change\u2019is controller by the row 2 column 5 key.\n # It has a BIT output, will output 1 on true state and 0 on false state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1234 / 1288\n \n # It also has a status pin which will follow its current state.\n # DEFAULT sets this to true when first initialized.\n # The _COMMAND are not used since OUTPUT is not set to COMMAND but validation will\n # add the lines regardless\n@@ -54323,15 +54323,15 @@\n required argument: axis number (int)\n spindle_forward_adjust\n optional argument: starting RPM (int) - default 100\n Description: If the spindle is stopped it will start in the forward direction. If it is already running it\n will increase or decrease the rpm depending on what direction the spindle is running in.\n spindle_forward\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1235 / 1288\n \n optional argument: starting RPM (int) - default 100\n spindle_reverse\n optional argument: starting RPM (int) - default 100\n spindle_reverse_adjust\n@@ -54357,15 +54357,15 @@\n Description: Move Z axis to the given machine position\n feed_hold\n required argument: state (bool 0 or 1)\n feed_override\n required argument: rate (float)\n rapid_override\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n required argument: rate (float 0-1)\n spindle_override\n required argument: rate (float)\n max_velocity\n required argument: rate (float)\n optional_stop\n@@ -54397,15 +54397,15 @@\n STATUS_PIN = False\n DEFAULT = FALSE\n TRUE_STATE = 1\n FALSE_STATE = 0\n \n 1236 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1237 / 1288\n \n Here is a sample program that will receive the message and print it to the terminal.\n import zmq\n import json\n # ZeroMQ Context\n@@ -54449,15 +54449,15 @@\n print(wname.metadata)\n # Print the calling widgets internal metadata (from config \u2190file)\n # Call a mdi command to print a msg in LinuxCNC.\n # This requires LinuxCNC to be homed, but does not check for that.\n # parent commands expect a widget_instance - None is substituted\n self.parent.mdi(None,\u2019(MSG, Hello Linuxcnc World!)\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1238 / 1288\n \n # Each call to this function will cycle the mode of LinuxCNC.\n def cycle_mode(self, wname, m):\n if self.current_mode == 0:\n self.current_mode = 1\n@@ -54494,15 +54494,15 @@\n establish connections to the command, status and error NML channels as needed\n poll the status channel, either periodically or as needed\n before sending a command, determine from status whether it is in fact OK to do so (for instance,\n there is no point in sending a Run command if task is in the ESTOP state, or the interpreter is not\n idle)\n send the command by using one of the linuxcnc command channel methods\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1239 / 1288\n \n To retrieve messages from the error channel, poll the error channel periodically, and process any\n messages retrieved.\n poll the status channel, either periodically or as needed\n print any error message and explore the exception code\n@@ -54541,15 +54541,15 @@\n angular_units\n (returns float) - machine angular units per deg, reflects [TRAJ]ANGULAR_UNITS INI value.\n aout\n (returns tuple of floats) - current value of the analog output pins.\n axes\n (returns integer) - number of axes. Derived from [TRAJ]COORDINATES INI value.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1240 / 1288\n \n axis\n (returns tuple of dicts) - reflecting current axis values. See The axis dictionary.\n axis_mask\n (returns integer) - mask of axis available as defined by [TRAJ]COORDINATES in the INI file.\n@@ -54591,15 +54591,15 @@\n exec_state\n (returns integer) - task execution state. One of EXEC_ERROR, EXEC_DONE, EXEC_WAITING_FOR_MOT\n EXEC_WAITING_FOR_MOTION_QUEUE, EXEC_WAITING_FOR_IO, EXEC_WAITING_FOR_MOTION_A\n EXEC_WAITING_FOR_DELAY, EXEC_WAITING_FOR_SYSTEM_CMD, EXEC_WAITING_FOR_SPINDLE_\n feed_hold_enabled\n (returns boolean) - enable flag for feed hold.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1241 / 1288\n \n feed_override_enabled\n (returns boolean) - enable flag for feed override.\n feedrate\n (returns float) - current feedrate override, 1.0 = 100 %.\n@@ -54641,15 +54641,15 @@\n joint\n (returns tuple of dicts) - reflecting current joint values. See The joint dictionary.\n joint_actual_position\n (returns tuple of floats) - actual joint positions.\n joint_position\n (returns tuple of floats) - Desired joint positions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1242 / 1288\n \n joints\n (returns integer) - number of joints. Reflects [KINS]JOINTS INI value.\n kinematics_type\n (returns integer) - The type of kinematics. One of:\n@@ -54688,15 +54688,15 @@\n MOTION_TYPE_TOOLCHANGE\n MOTION_TYPE_PROBING\n MOTION_TYPE_INDEXROTARY\n Or 0 if no motion is currently taking place.\n optional_stop\n (returns integer) - option stop flag.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1243 / 1288\n \n paused\n (returns boolean) - motion paused flag.\n pocket_prepped\n (returns integer) - A Tx command completed, and this pocket is prepared. -1 if no prepared pocket.\n@@ -54739,15 +54739,15 @@\n (returns integer) - current task mode. one of MODE_MDI, MODE_AUTO, MODE_MANUAL.\n task_paused\n (returns integer) - task paused flag.\n task_state\n (returns integer) - current task state. one of STATE_ESTOP, STATE_ESTOP_RESET, STATE_ON,\n STATE_OFF.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1244 / 1288\n \n tool_in_spindle\n (returns integer) - current tool number.\n tool_from_pocket\n (returns integer) - pocket number for the currently loaded tool (0 if no tool loaded).\n@@ -54783,15 +54783,15 @@\n 13.2.3.3. The joint dictionary\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*import linuxcnc\n s = linuxcnc.stat()\n s.poll()\n print(\u201dJoint 1 homed: \u201d, s.joint[1][\u201dhomed\u201d])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1245 / 1288\n \n For each joint, the following dictionary keys are available:\n backlash\n (returns float) - Backlash in machine units. configuration parameter, reflects [JOINT_n]BACKLASH.\n enabled\n@@ -54827,15 +54827,15 @@\n min_position_limit\n (returns float) - minimum limit (soft limit) for joint motion, in machine units. configuration parameter, reflects [JOINT_n]MIN_LIMIT.\n min_soft_limit\n (returns integer) - non-zero means min_position_limit was exceeded.\n output\n (returns float) - commanded output position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1246 / 1288\n \n override_limits\n (returns integer) - non-zero means limits are overridden.\n units\n (returns float) - joint units per mm, or per degree for angular joints.\n@@ -54873,15 +54873,15 @@\n Other commands may be sent only in appropriate state, and those tests can be a bit tricky. For instance,\n an MDI command can be sent only if:\n ESTOP has not been triggered, and\n the machine is turned on and\n the axes are homed and\n the interpreter is not running and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1247 / 1288\n \n the mode is set to MDI mode\n so an appropriate test before sending an MDI command through linuxcnc.command.mdi() could be:\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*import linuxcnc\n@@ -54922,15 +54922,15 @@\n c.mode(linuxcnc.MODE_MDI)\n c.mode(linuxcnc.MODE_AUTO)\n \n jjogmode, joint_num_or_axis_index)\n jjogmode, joint_num_or_axis_index, velocity)\n jjogmode, joint_num_or_axis_index, velocity, increment)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1248 / 1288\n \n c.mode(linuxcnc.MODE_MANUAL)\n c.override_limits()\n c.program_open(\u201dfoo.ngc\u201d)\n c.reset_interpreter()\n@@ -54967,15 +54967,15 @@\n Constants\n FLOOD_ON\n FLOOD_OFF\n home(int)\n home a given joint.\n jog(command-constant, bool, int[, float[, float]])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1249 / 1288\n \n Syntax\n jog(command, jjogmode, joint_num_or_axis_index, velocity[, distance])\n jog(linuxcnc.JOG_STOP, jjogmode, joint_num_or_axis_index)\n jog(linuxcnc.JOG_CONTINUOUS, jjogmode, joint_num_or_axis_index, velocity)\n@@ -55018,15 +55018,15 @@\n program_open(string)\n open an NGC file.\n rapidrate()\n set rapid override factor\n reset_interpreter()\n reset the RS274NGC interpreter\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1250 / 1288\n \n set_adaptive_feed(int)\n set adaptive feed flag\n set_analog_output(int, float)\n set analog output pin to value\n@@ -55064,15 +55064,15 @@\n # Increase speed of spindle 0 by 100rpm. Spindle must be on first.\n c.spindle(linuxcnc.INCREASE)\n # Increase speed of spindle 2 by 100rpm. Spindle must be on first.\n c.spindle(linuxcnc.SPINDLE_INCREASE, 2)\n # Set speed of spindle 0 to 1024 rpm.\n c.spindle.(linuxcnc.SPINDLE_FORWARD, 1024)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1251 / 1288\n \n # Set speed of spindle 1 to -666 rpm.\n c.spindle.(linuxcnc.SPINDLE_REVERSE, 666, 1)\n # Stop spindle 0.\n c.spindle.(linuxcnc.SPINDLE_OFF)\n@@ -55112,15 +55112,15 @@\n kind, text = error\n if kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR):\n typus = \u201derror\u201d\n else:\n typus = \u201dinfo\u201d\n print(typus, text)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 13.2.7. Reading INI file values\n Here\u2019s an example for reading values from an INI file through the linuxcnc.ini object:\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*# run as:\n # python3 ini-example.py ~/emc2-dev/configs/sim/axis/axis_mm.ini\n import sys\n@@ -55154,15 +55154,15 @@\n 13.2.8.1. members\n \n npts\n number of points.\n \n 1252 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1253 / 1288\n \n 13.2.8.2. methods\n \n start(float)\n start the position logger and run every ARG seconds\n@@ -55199,15 +55199,15 @@\n +\n Create new pin.\n Arguments: pin name suffix, pin type, and pin direction. For parameters, the arguments are:\n parameter name suffix, parameter type, and parameter direction.\n .Example:\n h.newpin(\u201din\u201d, hal.HAL_FLOAT, hal.HAL_IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1254 / 1288\n \n ready\n Tells the HAL system the component is initialized. Locks out adding pins.\n unready\n Allows a component to add pins after ready() has been called. One should call ready() on the\n@@ -55240,15 +55240,15 @@\n Read a pin, param, or signal directly.\n Example\n value = hal.get_value(\u201diocontrol.0.emc-enable-in\u201d)\n \n get_info_pins()\n Returns a list of dicts of all system pins.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n listOfDicts = hal.get_info_pins()\n pinName1 = listOfDicts[0].get(\u2019NAME\u2019)\n pinValue1 = listOfDicts[0].get(\u2019VALUE\u2019)\n pinType1 = listOfDicts[0].get(\u2019TYPE\u2019)\n pinDirection1 = listOfDicts[0].get(\u2019DIRECTION\u2019)\n \n@@ -55284,15 +55284,15 @@\n get_type\n Get the HAL object\u2019s type.\n Returns an integer.\n h.in.get_type()\n \n 1255 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1256 / 1288\n \n get_dir\n Get the HAL object direction type.\n Returns an integer.\n h.in.get_dir()\n@@ -55326,15 +55326,15 @@\n GStat is a Python class used to send messages from LinuxCNC to other Python programs. It uses\n GObject to deliver messages, making it easy to listen for specific information. This is referred to\n as event-driven programming, which is more efficient then every program polling LinuxCNC at the\n same time. GladeVCP, Gscreen, Gmoccapy and QtVCP use GStat extensively. GStat is in the hal_glib\n module.\n Overview\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1257 / 1288\n \n First, a program imports the hal_glib module and instantiates GStat.\n Then it connects to the messages it wishes to monitor.\n GStat checks LinuxCNC\u2019s status every 100 ms and if there are differences from the last check, it\n will send a callback message to all the connected programs with the current status.\n@@ -55372,15 +55372,15 @@\n h.newpin(\u201dg21\u201d, hal.HAL_BIT, hal.HAL_OUT)\n h.ready()\n # connect a GSTAT message to a callback function\n GSTAT.connect(\u201dmetric-mode-changed\u201d,mode_changed)\n # force GSTAT to initialize states\n GSTAT.forced_update()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1258 / 1288\n \n # loop till exit\n try:\n GLib.MainLoop().run()\n except KeyboardInterrupt:\n@@ -55417,15 +55417,15 @@\n def get_handlers(halcomp,builder,useropts):\n return [HandlerClass(halcomp,builder,useropts)]\n \n 13.4.2.3. QtVCP Python extension code pattern\n QtVCP extends GStat, so must be loaded differently but all the messages are available in QtVCP.\n This handler file assumes there are three QLabels named:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1259 / 1288\n \n state_label\n e_state_label\n interp_state_label\n #!/usr/bin/env python3\n@@ -55462,15 +55462,15 @@\n state-off\n (returns nothing) - Sent when LinuxCNC is in machine off state.\n homed\n (returns string) - Sent as each joint is homed.\n all-homed\n (returns nothing) - Sent when all defined joints are homed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1260 / 1288\n \n not-all-homed\n (returns string) - Sends a list of joints not currently homed.\n override_limits_changed\n (returns string) - Sent if LinuxCNC has been directed to override its limits.\n@@ -55511,15 +55511,15 @@\n It is expected to be in the machine\u2019s native units regardless of the current unit mode .\n jogincrement-changed\n (returns float, text) - Sent when jog increment has changed.\n LinuxCNC does not have an internal jog increment.\n This is GStat\u2019s internal jog increment.\n It is expected to be in the machine\u2019s native units regardless of the current unit mode .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1261 / 1288\n \n jogincrement-angular-changed\n (returns float, text) - Sent when angular jog increment has changed.\n LinuxCNC does not have an internal angular jog increment.\n This is GStat\u2019s internal angular jog increment.\n@@ -55560,15 +55560,15 @@\n current-z-rotation\n (returns float) - Sent as the current rotatated angle around the Z axis changes\n requested-spindle-speed-changed\n (returns float) - Sent when the current requested RPM changes\n actual-spindle-speed-changed\n (returns float) - Sent when the actual RPM changes based on the HAL pin spindle.0.speed-in.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n spindle-override-changed\n (returns float) - Sent when the spindle override value changes\n in percent\n feed-override-changed\n (returns float) - Sent when the feed override value changes\n in percent\n@@ -55610,15 +55610,15 @@\n g-code-changed\n (returns string) - Sent when active G-code change\n metric-mode-changed\n (returns bool) - Sent when G21 status changes\n \n 1262 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1263 / 1288\n \n user-system-changed\n (returns string) - Sent when the reference coordinate system (G5x) changes\n mdi-line-selected\n (returns string, string) - intended to be sent when an MDI line is selected by user.\n@@ -55663,15 +55663,15 @@\n This depends on the widget/libraries used.\n mdi-history-changed\n (returns None) - intended to be sent when an MDI history needs to be reloaded.\n This depends on the widget/libraries used.\n \n for a\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1264 / 1288\n \n machine-log-changed\n (returns None) - intended to be sent when machine log has changed.\n This depends on the widget/libraries used.\n update-machine-log\n@@ -55715,15 +55715,15 @@\n integer represents the kind of error. ERROR, TEXT or DISPLAY\n string is the actual error message.\n This depends on the widget/libraries used.\n general\n (returns Python dict) - intended to be sent when message must be sent that is not covered by a\n more specific message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1265 / 1288\n \n General message should be used a sparsely as reasonable because all object connected to it will\n have to parse it.\n It uses a Python dict for communication.\n The dict should include and be checked for a unique id keyname pair:\n@@ -55757,15 +55757,15 @@\n (None) set_jog_increments\n (float, string) get_jog_increments\n (None) is_all_homed\n (nothing) - This will return the current state of all_homed (BOOL).\n machine_is_on\n (nothing) - This will return the current state of machine (BOOL).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1266 / 1288\n \n estop_is_clear\n (nothing) - This will return the state of Estop (BOOL)\n set_tool_touchoff\n (tool,axis,value) - This command will\n@@ -55804,15 +55804,15 @@\n joint-selection-changed message.\n get_selected_joint\n (None) - returns integer representing the internal selected joint number.\n set_selected_axis\n (string) - records the selected axis letter internally.\n Requests the axis to be selected by emitting the axis-selection-changed message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1267 / 1288\n \n get_selected_axis\n (None) - returns string representing the internal selected axis letter.\n is_man_mode\n (None) is_mdi_mode\n@@ -55832,30 +55832,30 @@\n state-tags branch.\n \n 13.5. Vismach\n Vismach is a set of Python functions that can be used to create and animate models of machines.\n Vismach displays the model in a 3D viewport and the model parts are animated as the values of\n associated HAL pins change.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1268 / 1288\n \n The Vismach viewport view can be manipulated as follows:\n zoom by scroll wheel or right button drag,\n pan by left button drag,\n rotate by middle-button drag or shift-drag.\n A Vismach model takes the form of a Python script and can use standard Python syntax. This means\n that there is more than one way to lay out the script, but in the examples given in this document I will\n use the simplest and most basic of them.\n The basic sequence in creating the Vismach model is\n Create the HAL pins that control the motion.\n Create the parts.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1269 / 1288\n \n Define how they move.\n Assemble into movement groups.\n \n 13.5.1. Start the script\n@@ -55895,15 +55895,15 @@\n cylinder = CylinderX(x1, r1, x2, r2) + cylinder = CylinderY(y1, r1, y2, r2) + cylinder\n = CylinderZ(z1, r1, z2, r2)\n Creates a (optionally tapered) cylinder on the given axis with the given radii at the given points on\n the axis.\n sphere = Sphere(x, y, z, r)\n Creates a sphere of radius r at (x,y,z)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1270 / 1288\n \n triangle = TriangleXY(x1, y1, x2, y2, x3, y3, z1, z2) + triangle = TriangleXZ(x1, z1,\n x2, z2, x3, z3, y1, y2) + triangle = TriangleYZ(y1, z1, y2, z2, y3, z3, x1, x2)\n Creates a triangular plate between planes defined by the last two values parallel to the specified\n plane, with vertices given by the three coordinate pairs.\n@@ -55941,15 +55941,15 @@\n The function arguments are:\n \u2022 first a collection/part which can be pre-created earlier in the script, or could be created at this\n point if preferred eg part1 = HalTranslate([Box(....)], ...).\n \u2022 The HAL component is the next argument, ie the object returned by the comp = hal.component(...)\n command. After that is the name of the HAL in that will animate the motion, this needs to match\n an existing HAL pin that is part of the HAL component created earlier in the script.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1271 / 1288\n \n \u2022 Then follow the X, Y, Z scales.\n For a Cartesian machine created at 1:1 scale this would typically be 1,0,0 for a motion in the\n positive X direction.\n However if the STL file happened to be in cm and the machine was in inches, this could be fixed\n@@ -55990,15 +55990,15 @@\n head = AsciiSTL(filename=\u201d./head.stl\u201d)\n head = Color([0.3,0.3,0.3,1],[head])\n head = Translate([head],0,0,4)\n head = Collection([head, tool, dogs, draw])\n head = HalTranslate([head],c,\u201dZ\u201d,0,0,0.1)\n # base\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1272 / 1288\n \n base = AsciiSTL(filename=\u201d./base.stl\u201d)\n base = Color([0.5,0.5,0.5,1],[base])\n # mount head on it\n base = Collection([head, base])\n@@ -56039,15 +56039,15 @@\n import hal\n #create the HAL component and pins\n comp = hal.component(\u201dcompname\u201d)\n comp.newpin(\u201dpin_name\u201d, hal.HAL_FLOAT, hal.HAL_IN)\n ...\n #create the floor, tool and work\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n floor = Box(-50, -50, -3, 50, 50, 0)\n work = Capture()\n tooltip = Capture()\n ...\n #Build and assemble the model\n part1 = Collection([Box(-6,-3,94,6,3,100)])\n@@ -56058,23 +56058,23 @@\n #create a top-level model\n model = Collection([base, saddle, head, carousel])\n #Start the visualization\n main(model, tooltip, work, 100, lat=-75, lon=215)\n \n 1273 / 1288\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1274 / 1288\n \n Parte III\n \n Glossary, Copyright & History\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1275 / 1288\n \n Cap\u00edtulo 14\n \n Overleaf\n \n@@ -56094,15 +56094,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1276 / 1288\n \n Cap\u00edtulo 15\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -56136,15 +56136,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1277 / 1288\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -56187,15 +56187,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1278 / 1288\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -56238,15 +56238,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1279 / 1288\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -56291,15 +56291,15 @@\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum\n speed of the machine. It is often desirable to limit the rapid rate when testing a G-code program\n for the first time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1280 / 1288\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -56341,28 +56341,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1281 / 1288\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1282 / 1288\n \n Cap\u00edtulo 16\n \n Copyright\n 16.1. Legal Section\n@@ -56389,15 +56389,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1283 / 1288\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any such\n manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -56446,15 +56446,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover\n must present the full title with all words of the title equally prominent and visible. You may add other\n material on the covers in addition. Copying with changes limited to the covers, as long as they preserve\n the title of the Document and satisfy these conditions, can be treated as verbatim copying in other\n respects.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1284 / 1288\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must\n either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n@@ -56501,15 +56501,15 @@\n N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any Invariant\n Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1285 / 1288\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -56550,15 +56550,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of this\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1286 / 1288\n \n License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English\n version will prevail.\n 9. TERMINATION\n You may not copy, modify, sublicense, or distribute the Document except as expressly provided for\n@@ -56585,15 +56585,15 @@\n is included in the section entitled \u201dGNU Free Documentation License\u201d.\n If you have no Invariant Sections, write \u201dwith no Invariant Sections\u201d instead of saying which ones\n are invariant. If you have no Front-Cover Texts, write \u201dno Front-Cover Texts\u201d instead of \u201dFront-Cover\n Texts being LIST\u201d; likewise for Back-Cover Texts.\n If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License,\n to permit their use in free software.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1287 / 1288\n \n Cap\u00edtulo 17\n \n Historia de LinuxCNC\n 17.1. Origin\n@@ -56625,15 +56625,15 @@\n interested in improving EMC. Many people requested or coded small improvements to the code. Ray\n Henry wanted to refine the user interface. Since Ray was reluctant to try tampering with the C code\n in which the user interface was written, a simpler method was sought. Fred Proctor of NIST suggested a scripting language and wrote code to interface the Tcl/Tk scripting language to the internal\n NML communications of EMC. With this tool Ray went on to write a Tcl/Tk program that became the\n predominant user interface for EMC at the time.\n For NIST\u2019s perspective, see this paper written by William Shackleford and Frederick Proctor, describing the history of EMC and its transition to open source.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1288 / 1288\n \n By this time interest in EMC as beginning to pick up substantially. As more and more people attempted\n installation of EMC, the difficulty of patching a Linux kernel with the real time extensions and of\n compiling the EMC code became glaringly obvious. Many attempts to document the process and write\n scripts were attempted, some with moderate success. The problem of matching the correct version of\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_es.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_es.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_es.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_es.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Getting Started V2.9.1, 04 Nov 2023'\n+Title: 'Getting Started V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Getting Started V2.9.1, 04 Nov 2023\n+Getting Started V2.9.1, 06 Nov 2023\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n ii\n \n \u00cdndice general\n 1. About LinuxCNC\n \n 1\n@@ -113,15 +113,15 @@\n \n 10\n \n 3.7. Review Latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 10\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n iii\n \n 3.8. Set fixed ip address - only for mesa card.\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -251,15 +251,15 @@\n 7.2. GNU Free Documentation License\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 31\n 31\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n iv\n \n The LinuxCNC Team\n \n This handbook is a work in progress. If you are able to help with writing, editing, or graphic preparation please contact any member of the writing team or join and send an email to emc-users@lists.sourceforge\n Copyright \u00a9 2000-2020 LinuxCNC.org\n@@ -277,15 +277,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 1 / 35\n \n Cap\u00edtulo 1\n \n About LinuxCNC\n 1.1. The Software\n@@ -312,15 +312,15 @@\n It can simultaneously move up to 9 axes and supports a variety of interfaces.\n The control can operate true servos (analog or PWM) with the feedback loop closed by the LinuxCNC\n software at the computer, or open loop with step-servos or stepper motors.\n Motion control features include: cutter radius and length compensation, path deviation limited to\n a specified tolerance, lathe threading, synchronized axis motion, adaptive feedrate, operator feed\n override, and constant velocity control.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 2 / 35\n \n Support for non-Cartesian motion systems is provided via custom kinematics modules. Available\n architectures include hexapods (Stewart platforms and similar concepts) and systems with rotary\n joints to provide motion such as PUMA or SCARA robots.\n LinuxCNC runs on Linux using real time extensions.\n@@ -353,15 +353,15 @@\n 1.3.2. Mailing List\n An Internet Mailing List is a way to put questions out for everyone on that list to see and answer at\n their convenience. You get better exposure to your questions on a mailing list than on the IRC but\n answers take longer. In a nutshell you e-mail a message to the list and either get daily digests or\n individual replies back depending on how you set up your account.\n You can subscribe to the emc-users mailing list at: https://lists.sourceforge.net/lists/listinfo/emc-users\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 3 / 35\n \n 1.3.3. Web Forum\n A web forum can be found at https://forum.linuxcnc.org or by following the link at the top of the\n linuxcnc.org home page.\n This is quite active but the demographic is more user-biased than the mailing list. If you want to be\n@@ -371,15 +371,15 @@\n A Wiki site is a user maintained web site that anyone can add to or edit.\n \n The user maintained LinuxCNC Wiki site contains a wealth of information and tips at: https://wiki.linuxcnc.or\n \n 1.3.5. Bug Reports\n Report bugs to the LinuxCNC github bug tracker.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 4 / 35\n \n Cap\u00edtulo 2\n \n System Requirements\n 2.1. Minimum Requirements\n@@ -406,15 +406,15 @@\n 2.2. Kernel and Version requirements\n LinuxCNC requires a kernel modified for realtime use to control real machine hardware. It can, however run on a standard kernel in simulation mode for purposes such as checking G-code, testing config\n files and learning the system. To work with these kernel versions there are two versions of LinuxCNC\n distributed. The package names are \u201dlinuxcnc\u201d and \u201dlinuxcnc-uspace\u201d.\n The realtime kernel options are preempt-rt, RTAI and Xenomai.\n You can discover the kernel version of your system with the command:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 5 / 35\n \n uname -a\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n@@ -450,15 +450,15 @@\n an extended time will give you the info you need to determine suitability.\n \n 2.3.2. Video Cards\n If your installation pops up with 800 x 600 screen resolution then most likely Debian does not recognize\n your video card or monitor. This can sometimes be worked-around by installing drivers or creating /\n editing Xorg.conf files.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 6 / 35\n \n Cap\u00edtulo 3\n \n Getting LinuxCNC\n This section describes how to install LinuxCNC version 2.9 on a PC already running Debian Bookworm (Debian 12). LinuxCNC requires the PREEMPT_RT real time kernel to ensure the strict timing\n@@ -486,15 +486,15 @@\n sudo apt install linuxcnc-uspace linuxcnc-uspace-dev\n \n Optionally you can install mesaflash if you are using a Mesa card:\n sudo apt install mesaflash\n \n Reboot and log in again as the same user. Open a terminal window and check PREEMPT_RT is installed:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 7 / 35\n \n uname -v\n \n PREEMPT_RT should be displayed in the results.\n That\u2019s it! You are done! You will find LinuxCNC under the CNC menu.\n@@ -525,15 +525,15 @@\n nota\n Raspberry Pis (and most other Single Board Computers, or SBUs) are ARM64 machines. These instructions will feature arm64 kernel and can\u2019t be used for AMD64 machines (which is what many PCs\n are, including all Intel based machines).\n \n 1. Download a Debian Bookworm image from https://raspi.debian.net/daily-images/ and burn to an\n SD card and install in the usual way.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 8 / 35\n \n nota\n There have been reported black screen lockout with the \u201dtested\u201d images on some Pis. It may be\n that removing dtoverlay=vc4-fkms-v3d-pi4 from /boot/config.txt resolves that problem. These\n instructions were tested using the 2023/05/15 daily build.\n@@ -574,15 +574,15 @@\n disable_overscan=1\n dtparam=audio=off\n \n Save and exit nano NOTE: These commands (a) use video graphics resources for 3D acceleration\n (increases performance considerably), (b) don\u2019t overscan (fixes some black border issues), and (c)\n don\u2019t use audio (unknown performance enhancement)\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 9 / 35\n \n aviso\n The first command is only tested on RasPi 4 models, and it specifically references pi4. We have\n commented it out as on one test it seems to cause the Pi to hang. Experiment at your own\n risk.\n@@ -619,15 +619,15 @@\n 3.5. Bookworm Tweaks\n 3.5.1. Basic Tweaks\n To make life easy, there are some standard tweaks you can make to Bookworm which should work on\n both X86 and the pi.\n From the menu settings/Power manager set the power settings to suit your needs. You can turn off\n screen saver and screen lock here Install geany and grub-customizer (x86/AMD64 only):\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 10 / 35\n \n sudo apt install geany grub-customizer\n \n Finally now geany is installed, enable auto login\n sudo geany /etc/lightdm/lightdm.conf\n@@ -660,15 +660,15 @@\n latency-histogram --nobase --sbins 1000\n \n How to evaluate latency is covered in the LinuxCNC documents Among other things, latency is affected\n by: BIOS settings; Isolcpus and other boot time settings; Kernel version used\n nota\n Optimal latency settings are still subject to review following recent changes to the Linux kernel.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 11 / 35\n \n 3.8. Set fixed ip address - only for mesa card.\n Usually we set up the mesa card to have the ip address 10.10.10.10. We need to set a fixed ip address\n of 10.10.10.1 to the network interface that connects to it. Type:\n ip a\n@@ -708,15 +708,15 @@\n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-de\n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-es\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 12 / 35\n \n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-fr\n pin: release o=http://buildbot2.highlab.com/debian/\n@@ -758,15 +758,15 @@\n Similar results were reported on other affected hardware.\n The r8168-dkms and r8125-dkms drivers are in the non-free packages which are not included in sources.list by default.\n You can see your driver if you type the following to identify your NIC name:\n ip a\n \n Now display the NIC info eg:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 13 / 35\n \n sudo apt install ethtool\n ethtool -i enps02\n \n If it seems you could benefit from this driver, continue Type:\n@@ -803,15 +803,15 @@\n sudo apt purge r8168-dkms\n \n 3.11. Installing a later kernel\n Since the release of Debian Bullseye (Linux kernel 5.10), real time performance has been disappointing. In particular, network latency when communicating with a Mesa ethernet card has been generating Error Finishing Read Errors. This means that the network latency left insufficient time for the\n servo thread cycle to complete in time.\n This appears to have been more prevalent with Realtek Network interfaces. Fortunately, each iteration of the Linux kernel has improved results, particularly since the release of 6.x kernels. Debian\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 14 / 35\n \n Bookworm (Debian 12) is using the 6.1 kernel which is quite good. In our testing, we found that latency improved by 265 % if we used the 6.3 kernel. We have compiled this version of the kernel for\n your convenience. This image was updated to the final 6.3 kernel on 1 May 2023 and may be updated\n form time to time.\n Only try installing it if you have exhausted all options by following the steps below:\n@@ -905,22 +905,22 @@\n simulation only\n machine control\n & simulation\n machine control\n & simulation\n simulation only\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n nota\n LinuxCNC v2.8 and above is not supported on Ubuntu Lucid or older.\n \n 15 / 35\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 16 / 35\n \n Cap\u00edtulo 4\n \n Running LinuxCNC\n 4.1. Invoking LinuxCNC\n@@ -947,15 +947,15 @@\n applications like PyVCP or GladeVCP.\n \u2022 attic - Obsolete or historical configurations.\n The sim configurations are often the most useful starting point for new users and are organized around\n supported GUIs:\n axis - Keyboard and Mouse GUI\n craftsman - Touch Screen GUI (no longer maintained ???)\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 17 / 35\n \n gmoccapy - Touch Screen GUI\n gscreen - Touch Screen GUI\n pyvcp_demo - Python Virtual Control Panel\n qtaxis - Touch Screen GUI, axis lookalike\n@@ -986,15 +986,15 @@\n tormach\n A complete system may be required to use these configurations.\n The apps items are typically either:\n 1. utilities that don\u2019t require starting linuxcnc\n 2. demonstrations of applications that can be used with linuxcnc\n info - creates a file with system information that may be useful for problem diagnosis.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 18 / 35\n \n gladevcp - Example GladeVCP applications.\n halrun - Starts halrun in an terminal.\n latency - Applications to investigate latency\n \u2022 latency-histogram-1 - histogram for single servo thread\n@@ -1011,15 +1011,15 @@\n Figura 4.1: Selector de Configuraci\u00f3n de LinuxCNC\n Click any of the listed configurations to display specific information about it. Double-click a configuration or click OK to start the configuration.\n Select Create Desktop Shortcut and then click OK to add an icon on the Ubuntu desktop to directly\n launch this configuration without showing the Configuration Selector screen.\n When you select a configuration from the Sample Configurations section, it will automatically place a\n copy of that config in the ~/linuxcnc/configs directory.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 19 / 35\n \n 4.3. Next steps in configuration\n After finding the sample configuration that uses the same interface hardware as your machine (or a\n simulator configuration), and saving a copy to your home directory, you can customize it according to\n the details of your machine. Refer to the Integrator Manual for topics on configuration.\n@@ -1046,15 +1046,15 @@\n HAL files, local modifications will then prevail.\n The Configuration selector makes a symbolic link in the user configuration directory (named hallib)\n that points to the system HAL file library. This link simplifies copying a library file. For example, to\n copy the library core_sim.hal file in order to make local modifications:\n cd ~/linuxcnc/configs/name_of_configuration\n cp hallib/core_sim.hal core_sim.hal\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 20 / 35\n \n Cap\u00edtulo 5\n \n Updating LinuxCNC\n Updating LinuxCNC to a new minor release (ie to a new version in the same stable series, for example\n@@ -1086,15 +1086,15 @@\n \n You should be running on Debian Buster, Bullseye or Bookworm or Ubuntu 20.04 \u201dFocal Fossa\u201d or\n newer. LinuxCNC will not run on older distributions than these.\n You will also need to check which realtime kernel is being used:\n uname -r\n 6.1.0-10-rt-amd64\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 21 / 35\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n If you see -rtai- in the kernel name then you are running RTAI realtime. See below for the LinuxCNC\n version to install. At this moment there are (tmporariliy) no RTAI packages for LinuxCNC 2.9.0 but it\n@@ -1126,15 +1126,15 @@\n deb https://linuxcnc.org buster base\n 2.9-rtpreempt\n deb https://linuxcnc.org bullseye base\n 2.9-uspace\n deb https://linuxcnc.org bookworm base\n 2.9-uspace\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 22 / 35\n \n Click Add Source, then Close in the Software Sources window. If it pops up a window informing\n you that the information about available software is out-of-date, click the Reload button.\n \n 5.1.2. Upgrading to the new version\n@@ -1154,15 +1154,15 @@\n \n 5.1.3. Ubuntu\n Click on the Dash Home icon in the top left.\n In the Search field, type \u201dupdate\u201d, then click on the Update Manager icon.\n Click the Check button to fetch the list of packages available.\n Click the Install Updates button to install the new versions of all packages.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 23 / 35\n \n 5.2. Updating without Network\n To update without a network connection you need to download the .deb then install it with dpkg. The\n .debs can be found in https://linuxcnc.org/dists/ .\n You have to drill down from the above link to find the correct deb for your installation. Open a terminal\n@@ -1198,15 +1198,15 @@\n In the extremely unlikely event that you are using canterp, know that the module has moved from\n /usr/lib/libcanterp.so to /usr/lib/linuxcnc/canterp.so, and the [TASK]INTERPRETER setting\n correspondingly needs to change from libcanterp.so to canterp.so.\n \n 5.4. Updating Configuration Files (for 2.9.x)\n No changes should be necessary to configuration files when moving from 2.8 to 2.9\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 24 / 35\n \n 5.4.1. Spindle limits in the INI\n It is now possible to add settings to the [SPINDLE] section of the INI file\n MAX_FORWARD_VELOCITY = 20000 The maximum spindle speed (in rpm)\n MIN_FORWARD_VELOCITY = 3000 The minimum spindle speed (in rpm)\n@@ -1229,15 +1229,15 @@\n anglejog div2 enum filter_kalman flipflop hal_parport homecomp limit_axis mesa_uart millturn scaled_s32_sums tof ton\n \n 5.6. New Drivers\n A framework for controlling ModBus devices using the serial ports on many Mesa cards has been\n introduced. http://linuxcnc.org/docs/2.9/html/drivers/mesa_modbus.html\n A new GPIO driver for any GPIO which is supported by the gpiod library is now included: http://linuxcnc.org/docs/2.9/html/drivers/hal_gpio.html\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 25 / 35\n \n Cap\u00edtulo 6\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -1271,15 +1271,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 26 / 35\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -1322,15 +1322,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 27 / 35\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -1373,15 +1373,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 28 / 35\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -1426,15 +1426,15 @@\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum\n speed of the machine. It is often desirable to limit the rapid rate when testing a G-code program\n for the first time.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 29 / 35\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -1476,28 +1476,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 30 / 35\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 31 / 35\n \n Cap\u00edtulo 7\n \n Legal Section\n Translations of this file provided in the source tree are not legally binding.\n@@ -1523,15 +1523,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 32 / 35\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any such\n manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -1580,15 +1580,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover\n must present the full title with all words of the title equally prominent and visible. You may add other\n material on the covers in addition. Copying with changes limited to the covers, as long as they preserve\n the title of the Document and satisfy these conditions, can be treated as verbatim copying in other\n respects.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 33 / 35\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must\n either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n@@ -1635,15 +1635,15 @@\n N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any Invariant\n Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 34 / 35\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -1684,15 +1684,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of this\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 35 / 35\n \n License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English\n version will prevail.\n 9. TERMINATION\n You may not copy, modify, sublicense, or distribute the Document except as expressly provided for\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_es.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_es.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_es.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_es.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Integrator Information V2.9.1, 04 Nov 2023'\n+Title: 'Integrator Information V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Integrator Information V2.9.1, 04 Nov 2023\n+Integrator Information V2.9.1, 06 Nov 2023\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n ii\n \n \u00cdndice general\n 1. Stepper Information\n \n 1\n@@ -125,15 +125,15 @@\n \n 17\n \n 3.12.3.Wiring Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 18\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 1 / 18\n \n Cap\u00edtulo 1\n \n Stepper Information\n 1.1. Stepper Motor Operation\n@@ -152,15 +152,15 @@\n time that each coil can exert its full magnetic attraction on the rotor reduces, thereby reducing the\n overall torque. This relationship between speed and torque is largely inversely proportional.\n In the below example, the charging time for three coils is shown when the applied voltage is stepped\n from 0 V to 40 V. While all three coils can easily reach the full current limit of 5 amps (A), the time\n taken varies for each coil. The 4 milli-Henry (mH) coil (blue trace) takes twice as long to reach full\n current than the 2 mH coil (green trace), and the 8 mH (red trace) coil takes twice as long again:\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 2 / 18\n \n If the rate at which step changes are applied to the coils is significantly shorter than the rise time,\n it\u2019s easy to see that the winding has less time to attain full magnetic attraction on the rotor, and thus\n maximum torque is curtailed. In the below example the 2 mH coil can achieve the full 5 A limit before\n the step voltage is removed, but the 4 mH and 8 mH coils cannot:\n@@ -179,15 +179,15 @@\n In most stepper-based CNC systems the voltage of the supply feeding the stepper driver is several\n orders of magnitude greater than the voltage of the motor itself. A typical NEMA23 stepper motor\n may have a rating of only a handful of volts, yet the power supply and driver could be operating at\n 48 VDC or more.\n Nearly all modern stepper motor drivers on the market today are constant-current types. That is,\n the current being applied to each winding is fixed irrespective of how much voltage is being applied.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 3 / 18\n \n Most drivers accomplish this by monitoring the current being drawn through the motor windings and\n rapidly switching the outputs on and off at a very high frequency to maintain this current. Depending\n on the drivers being used, it may even be possible to hear this high frequency whistling in the motors\n themselves when stationary. Because the voltage is rapidly switched on and off to maintain the winding\n@@ -232,15 +232,15 @@\n introduced.\n Several methods exist to help control the effects of resonance, all with varying degrees of complexity,\n effectiveness and side effects:\n Microstepping can help reduce resonance by using smaller step changes in current between each\n step. These smaller step changes cause less ringing in the motor and windings and thus cause less\n excitation at the point of resonance.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 4 / 18\n \n Ensuring the motor is never operated at a particular frequency for a sustained period is a very basic\n method of reducing resonance, always accelerating or decelerating through the resonant peak.\n 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.\n More advanced stepper motor drives may have the ability to switch between stepping modes such\n@@ -277,15 +277,15 @@\n in leadscrews, flex in gantries, runout in the spindle and cutting tool, static friction in the stepper\n motor itself, stepper detent error , etc.) that will render such small amounts of resolution completely\n meaningless. In practice, microstepping at rates in excess of 4x or 8x on a CNC machine fitted with\n leadscrews serves little purpose. In some cases it may even be more beneficial to run at lower degrees\n of microstepping or even full steps, and operate the stepper motor through a gear reduction to obtain\n the necessary resolution and torque gains.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 5 / 18\n \n 1.5. Open and Closed Loop\n In the simplest CNC systems employing stepper motors, the host computer and/or stepper driver\n receives no feedback from the motor that it has achieved the desired outcome when commanded\n to begin stepping. The assumption by the software, driver and end user is that the motor operated\n@@ -305,15 +305,15 @@\n to the downstream driver as it would normally when running in open loop. In these situations the\n drivers usually include an alarm output which signals the software to halt when the load placed on\n the stepper becomes too great for the driver to compensate without losing steps.\n More advanced implementations of closed loop operation bring the encoder signal all the way back\n to the host computer, but require that a much higher hardware and software overhead be installed to\n manage the encoder feedback and calculation and delivery of drive compensation.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 6 / 18\n \n Cap\u00edtulo 2\n \n Stepper Timing\n This page is for step and direction timing of stepper drives.\n@@ -376,15 +376,15 @@\n support/motorcontrolmanuals/stepperdrives/g201rev16.html\n \n 1000\n \n Falling\n Edge\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 7 / 18\n \n Gecko\n@@ -477,15 +477,15 @@\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g201rev16.html\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g212rev15.html\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g213vrev7.html\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 8 / 18\n \n Gecko\n@@ -623,15 +623,15 @@\n http://granitedevices.fi/assets/files/vsde_160_manual.pdf\n http://granitedevices.fi/assets/files/vsde_160_dualdc_manual.pdf\n http://www.jvl.dk/files/pdf/lb043gb.pdf\n http://www.jvl.dk/files/pdf/lb043gb.pdf\n http://www.piclist.com/techref/io/stepper/linistep/index.htm\n http://www.piclist.com/techref/io/stepper/THB6064/index.htm\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 9 / 18\n \n *Motion\n@@ -856,15 +856,15 @@\n http://www.kelinginc.net/kL6852.pdf\n https://www.sherline.com/-\n \n http://www.lewetz.de/download/ibstep3se.pdf\n http://www.compumotor.com\n manuals/ZETA/ZETA_Rev_A_Entire.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n www.cncdrive.com\n Dugong\n \n Step\n@@ -1103,15 +1103,15 @@\n http://leadshine.com/UploadFile/Down/EM503d_P.pdf\n http://leadshine.com/UploadFile/Down/EM705d_P.pdf\n http://leadshine.com/UploadFile/Down/EM806d_P.pdf\n http://leadshineusa.com/UploadFile/Down/M415Bm.pdf\n http://leadshineusa.com/UploadFile/Down/M542V2m.pdf\n http://leadshineusa.com/UploadFile/Down/M752m.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n Step\n Time\n 1500\n@@ -1290,15 +1290,15 @@\n 5000\n \n Rising\n Edge\n \n http://cnc4you.co.uk/resources/CW5045.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 12 / 18\n \n Cap\u00edtulo 3\n \n Best Wiring Practices\n 3.1. Electrical Noise\n@@ -1326,15 +1326,15 @@\n this discussion the terms earth and common must be made distinct from each other to avoid confusion.\n \n 3.3. Wire Selection and Use\n Wire comes in many types, sizes and configurations. Wading through all the wire available is a monumental task of its own, but for the purposes of this article it is only necessary to consider the types of\n wires typically used when wiring a CNC controller. Additionally, how the wire is to be used can have\n some effect on the overall system. What follows are some tips that may prove helpful.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 13 / 18\n \n 3.3.1. Single Conductor Wire\n Wire comes in two forms: solid conductor and stranded. Solid core wire is generally cheaper than\n stranded, but more likely to break if used in applications where repeated bending is expected. Fortunately, the prevalence of stranded wire on the market means that its use should be encouraged\n wherever possible.\n@@ -1377,15 +1377,15 @@\n 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\n cable may also be shielded along with an overall shield being applied to the entire cable jacket.\n \n 3.4. AC Line Voltage\n The incoming mains AC that powers the CNC system can pick up and carry noise into the power\n supplies and other equipment. For example, if the incoming supply is also used to feed large motors,\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 14 / 18\n \n electrical noise may be generated on the line feeding the CNC components. Although most modern\n electronic devices feature built-in mains filtering to help minimise the susceptibility to mains-borne\n interference, the custom and modularised nature of a CNC system can mean that components used\n come from a wide variety of sources with differing degrees of inherent noise immunity.\n@@ -1424,15 +1424,15 @@\n In general it makes most sense to keep the commons of the various DC PSUs used in the CNC system\n separate from each other, and separate from the AC mains earth unless there is a specific requirement\n to tie them together. In most cases the common points of the heavy-duty power sections of the CNC\n system (eg, stepper motor or servo motor drivers, spindle motors etc) will be segregated from common\n points of the electrically-sensitive sections of the CNC (control interface boards, limit switches, tool\n probe circuitry etc) to prevent cross-contamination of the two systems.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 15 / 18\n \n Should it be necessary to connect several common points of different PSUs together, or to connect\n a common of a PSU to AC main earth, it should be done at a single point only and as close to the\n common terminal of the PSUs as possible.\n In CNC machines where the hardware drivers and interfacing circuitry are pre-assembled, the decision as to which DC commons are tied where is usually taken out of the hands of the end user.\n@@ -1473,15 +1473,15 @@\n issues with a limit switch operating with a 24V signal.\n \n 3.8. Stepper or Servo Motor Drivers\n The metal housing of the driver should be connected to the local mains earth in the CNC system. Some\n driver enclosures will indicate a specific terminal as being the earthing point, in which case this point\n must be connected to earth via a dedicated wire.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 16 / 18\n \n Control and power wiring should be segregated as much as possible. Route signal input wires well\n away from power supply and motor drive output lines.\n It is recommended to run both driver input and motor output wiring in shielded cable with the shield\n terminated to mains earth. The shield on the input lines helps reduce the amount of interference they\n@@ -1517,15 +1517,15 @@\n against this surface as much as possible while wiring between two points.\n \n 3.11. Mechanical Noise\n Very few mechanical switches (eg, an axis limit switch or tool probe input) will close or open perfectly\n when operated. More often than not the switch contacts will physically bounce against each other\n several times within a very short space of time when operated. This may be interpreted by the machine\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 17 / 18\n \n controller as multiple operations of the same signal when in reality only one clean state change was\n expected. Sometimes it doesn\u2019t matter, but in many circumstances it is desirable to ensure that any\n state change is as clean as possible and does not interfere with the operation of the machine. This is\n accomplished by debouncing.\n@@ -1563,15 +1563,15 @@\n 3.12.2. Wiring Schematics\n As the CNC machine is wired, make sure to draw up a schematic that can be referenced to later. The\n schematic does not have to be all that neat, but it should be understandable in such a way that it\n could be easily interpreted at a later date, ideally by anyone who may need to service the equipment.\n Include details such as wire colours used, pin numbers, part numbers and any other notes that will\n help explain particular details not immediately apparent from first glance at the schematic.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 18 / 18\n \n 3.12.3. Wiring Identification\n Take the time to identify each wire in the system. When a bundle of wires has been cable-tied in place\n it can be very difficult to look at them and know for sure which wire goes where. Label the motor wires\n with the joint or axis they are associated with, or identify each signal wire so that it is easy to identify\n"}]}]}]}]}, {"source1": "linuxcnc-doc-fr_2.9.1-2_all.deb", "source2": "linuxcnc-doc-fr_2.9.1-2_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2023-11-05 11:59:16.000000 debian-binary\n -rw-r--r-- 0 0 0 1124 2023-11-05 11:59:16.000000 control.tar.xz\n--rw-r--r-- 0 0 0 26171188 2023-11-05 11:59:16.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 26170068 2023-11-05 11:59:16.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -4,18 +4,18 @@\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/applications/\n -rw-r--r-- 0 root (0) root (0) 331 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-documentation_fr.desktop\n -rw-r--r-- 0 root (0) root (0) 357 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-gcoderef_fr.desktop\n -rw-r--r-- 0 root (0) root (0) 372 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-gettingstarted_fr.desktop\n -rw-r--r-- 0 root (0) root (0) 361 2023-10-08 12:02:22.000000 ./usr/share/applications/linuxcnc-integratorinfo_fr.desktop\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/\n--rw-r--r-- 0 root (0) root (0) 824053 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Developer_fr.pdf\n--rw-r--r-- 0 root (0) root (0) 26079188 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Documentation_fr.pdf\n--rw-r--r-- 0 root (0) root (0) 403612 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_fr.pdf\n--rw-r--r-- 0 root (0) root (0) 150470 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Integrator_fr.pdf\n+-rw-r--r-- 0 root (0) root (0) 824010 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Developer_fr.pdf\n+-rw-r--r-- 0 root (0) root (0) 26078521 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Documentation_fr.pdf\n+-rw-r--r-- 0 root (0) root (0) 403597 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_fr.pdf\n+-rw-r--r-- 0 root (0) root (0) 150448 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/LinuxCNC_Integrator_fr.pdf\n -rw-r--r-- 0 root (0) root (0) 14667 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc/gcode_fr.html\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc-doc-fr/\n -rw-r--r-- 0 root (0) root (0) 10750 2023-11-05 11:59:16.000000 ./usr/share/doc/linuxcnc-doc-fr/changelog.Debian.gz\n -rw-r--r-- 0 root (0) root (0) 42238 2023-10-08 12:02:22.000000 ./usr/share/doc/linuxcnc-doc-fr/copyright\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/doc-base/\n -rw-r--r-- 0 root (0) root (0) 277 2023-10-08 12:02:22.000000 ./usr/share/doc-base/linuxcnc-doc-fr.linuxcnc-doc-fr\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/lintian/\n"}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_fr.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_fr.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_fr.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Developer_fr.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Manuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023'\n+Title: 'Manuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,11 +1,11 @@\n-Manuel du d\u00e9veloppeur V2.9.1, 04 Nov\n+Manuel du d\u00e9veloppeur V2.9.1, 06 Nov\n 2023\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n ii\n \n Table des mati\u00e8res\n 1 Introduction\n \n 1\n@@ -118,15 +118,15 @@\n \n 15\n \n 3.8.3.1 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 16\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n iii\n \n 3.8.3.2 Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 16\n \n@@ -282,15 +282,15 @@\n \n 19\n \n 3.8.16.1Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 20\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n iv\n \n 3.8.16.2Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 20\n \n@@ -450,15 +450,15 @@\n \n 3.21.3Process line\n \n 27\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n v\n \n 3.21.4Configuration Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 27\n \n@@ -624,15 +624,15 @@\n \n 40\n \n 4.14Others . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 40\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n vi\n \n 5 Coding Style\n \n 41\n \n@@ -778,15 +778,15 @@\n \n 53\n \n 8.4.1 Repo Git officiel de LinuxCNC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 53\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n vii\n \n 8.4.2 Use of Git in the LinuxCNC project . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 54\n \n@@ -873,15 +873,15 @@\n 10.2GNU Free Documentation License\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 63\n 63\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 1 / 67\n \n Chapitre 1\n \n Introduction\n \n@@ -901,15 +901,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 2 / 67\n \n Chapitre 2\n \n HAL General Reference\n 2.1 HAL Entity Names\n@@ -939,15 +939,15 @@\n This results in a structure that resembles a directory tree. Even though halcmd doesn\u2019t recognize the\n tree structure, proper choice of naming conventions will let it group related items together (since it\n sorts the names). In addition, higher level tools can be designed to recognize such structure, if the\n names provide the necessary information. To do that, all HAL components should follow these rules:\n \u2014 Dots (\u201c.\u201d) separate levels of the hierarchy. This is analogous to the slash (\u201c/\u201d) in a filename.\n \u2014 Hyphens (\u201c-\u201d) separate words or fields in the same level of the hierarchy.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 3 / 67\n \n \u2014 HAL components should not use underscores or \u201cMixedCase\u201d. 1\n \u2014 Use only lowercase letters and numbers in names.\n \n 2.3 Hardware Driver Naming Conventions\n@@ -987,15 +987,15 @@\n number.\n 1. Underlined characters have been removed, but there are still a few cases of broken mixture, for example pid.0.Pgain in\n place of pid.0.p-gain.\n 2. One exception to the \u201dchannel numbers start at zero\u201d rule is the parallel port. Its HAL pins are numbered with the\n corresponding pin number on the DB-25 connector. This is convenient for wiring, but inconsistent with other drivers. There is\n some debate over whether this is a bug or a feature.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 4 / 67\n \n \n An individual I/O channel might have just a single HAL pin associated with it, but most have more\n than one. For example, a digital input has two pins, one is the state of the physical pin, the other\n is the same thing inverted. That allows the configurator to choose between active high and active\n@@ -1038,15 +1038,15 @@\n Writes all outputs (step generators, pwm, DACs, and digital) on the first Pico Systems ppmc\n board.\n \n 3. Note to driver programmers: Do NOT implement separate functions for different I/O types unless they are interruptible\n and can work in independent threads. If interrupting an encoder read, reading digital inputs, and then resuming the encoder\n read will cause problems, then implement a single function that does everything.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 5 / 67\n \n Chapitre 3\n \n Code Notes\n 3.1 Intended audience\n@@ -1077,15 +1077,15 @@\n \u2014 JOINT - A joint is one of the movable parts of the machine. Joints are distinct from axes, although\n 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\n table of a Bridgeport mill are all joints. The shoulder, elbow, and wrist of a robot arm are joints, as\n are the linear actuators of a hexapod. Every joint has a motor or actuator of some type associated\n with it. Joints do not necessarily correspond to the X, Y, and Z axes, although for machines with\n trivial kinematics that may be the case. Even on those machines, joint position and axis position\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 6 / 67\n \n are fundamentally different things. In this document, the terms joint and axis are used carefully\n to respect their distinct meanings. Unfortunately that isn\u2019t necessarily true everywhere else. In\n 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\n more accurately be described as joint data, such as input and output scaling, etc.\n@@ -1113,19 +1113,19 @@\n 3.4 Architecture overview\n There are four components contained in the LinuxCNC Architecture: a motion controller (EMCMOT),\n a discrete IO controller (EMCIO), a task executor which coordinates them (EMCTASK) and several\n text-mode and graphical User Interfaces. Each of them will be described in the current document,\n both from the design point of view and from the developers point of view (where to find needed data,\n how to easily extend/modify things, etc.).\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 7 / 67\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 8 / 67\n \n 3.4.1 LinuxCNC software architecture\n At the coarsest level, LinuxCNC is a hierarchy of three controllers: the task level command handler and program interpreter, the motion controller, and the discrete I/O controller. The discrete I/O\n controller is implemented as a hierarchy of controllers, in this case for spindle, coolant, and auxiliary\n (e.g., estop, lube) subsystems. The task controller coordinates the actions of the motion and discrete\n@@ -1156,19 +1156,19 @@\n processes. For realtime motion control, the script first loads the default tpmod and homemod modules\n and then loads the kinematics and motion modules according to settings in halfiles specified by the\n INI file.\n Custom (user-built) homing or trajectory-planning modules can be used in place of the default modules\n via INI file settings or command line options. Custom modules must implement all functions used by\n the default modules. The halcompile utility can be used to create a custom module.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 9 / 67\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 10 / 67\n \n 3.6 Block diagrams and Data Flow\n The following figure is a block diagram of a joint controller. There is one joint controller per joint.\n The joint controllers work at a lower level than the kinematics, a level where all joints are completely\n independent. All the data for a joint is in a single joint structure. Some members of that structure are\n@@ -1184,15 +1184,15 @@\n \u2014 emcmotStatus->joints[n].coarse_pos - This is the desired position, in joint coordinates, but before\n interpolation. It is updated at the traj rate, not the servo rate. In coord mode, it is generated by\n applying inverse kins to (1) In teleop mode, it is generated by applying inverse kins to (1) In free\n mode, it is copied from (3), I think.\n \u2014 \u2019emcmotStatus->joints[n].pos_cmd - This is the desired position, in joint coords, after interpolation.\n A new set of these coords is generated every servo period. In coord mode, it is generated from (2)\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 11 / 67\n \n by the interpolator. In teleop mode, it is generated from (2) by the interpolator. In free mode, it is\n generated by the free mode traj planner.\n \u2014 emcmotStatus->joints[n].motor_pos_cmd - This is the desired position, in motor coords. Motor coords are generated by adding backlash compensation, lead screw error compensation, and offset\n (for homing) to (3). It is generated the same way regardless of the mode, and is the output to the\n@@ -1209,26 +1209,26 @@\n because one or more axes aren\u2019t homed. In that case, the options are: A) fake it by copying (1), or\n B) admit that we don\u2019t really know the Cartesian coordinates, and simply don\u2019t update actualPos.\n Whatever approach is used, I can see no reason not to do it the same way regardless of the operating\n mode. I would propose the following: If there are forward kins, use them, unless they don\u2019t work\n because of unhomed axes or other problems, in which case do (B). If no forward kins, do (A), since\n otherwise actualPos would never get updated.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 12 / 67\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 3.7 Homing\n 3.7.1 Homing state diagram\n \n 13 / 67\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 14 / 67\n \n 3.7.2 Another homing diagram\n \n 3.8 Commands\n The commands are implemented by a large switch statement in the function emcmotCommandHandler(), which is called at the servo rate. More on that function later.\n@@ -1244,15 +1244,15 @@\n It does not disable the motion controller or change any state information, it simply cancels any motion\n that is currently in progress. 1\n 1. It seems that the higher level code (TASK and above) also use ABORT to clear faults. Whenever there is a persistent fault\n (such as being outside the hardware limit switches), the higher level code sends a constant stream of ABORTs to the motion\n controller trying to make the fault go away. Thousands of them\u2026. That means that the motion controller should avoid persistent\n faults. This needs to be looked into.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 15 / 67\n \n 3.8.1.1 Requirements\n None. The command is always accepted and acted on immediately.\n 3.8.1.2 Results\n In free mode, the free mode trajectory planners are disabled. That results in each joint stopping as fast\n@@ -1284,15 +1284,15 @@\n free mode. However the trajectory planner per se is not used, instead movement is controlled by a\n velocity vector. Movement in teleop mode is much like jogging, except that it is done in Cartesian space\n instead of joint space. On a machine with trivial kinematics, there is little difference between teleop\n mode and free mode, and GUIs for those machines might never even issue this command. However\n for non-trivial machines like robots and hexapods, teleop mode is used for most user commanded jog\n type movements.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 16 / 67\n \n 3.8.3.1 Requirements\n The command handler will reject the TELEOP command with an error message if the kinematics\n cannot be activated because the one or more joints have not been homed. In addition, if any joint is in\n motion (GET_MOTION_INPOS_FLAG() == FALSE), then the command will be ignored (with no error\n@@ -1327,15 +1327,15 @@\n None. The command can be issued at any time, and will always be accepted.\n 3.8.5.2 Results\n If the controller is already enabled, nothing. If not, the controller is enabled. Queues and interpolators\n are flushed. Any movement or homing operations are terminated. The amp-enable outputs associated\n with active joints are turned on. If forward kinematics are not available, the machine is switched to\n free mode.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 17 / 67\n \n 3.8.6 DISABLE\n The DISABLE command disables the motion controller.\n 3.8.6.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n@@ -1363,15 +1363,15 @@\n Currently, nothing. (A call to the old extAmpEnable function is currently commented out.) Eventually\n it will set the amp enable HAL pin false.\n \n 3.8.9 ACTIVATE_JOINT\n The ACTIVATE_JOINT command turns on all the calculations associated with a single joint, but does\n not change the joint\u2019s amp enable output pin.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 18 / 67\n \n 3.8.9.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.9.2 Results\n Calculations for the specified joint are enabled. The amp enable pin is not changed, however, any\n@@ -1398,15 +1398,15 @@\n The DISABLE_WATCHDOG command disables a hardware based watchdog (if present).\n 3.8.12.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.12.2 Results\n Currently nothing. The old watchdog was a strange thing that used a specific sound card. A new\n watchdog interface may be designed in the future.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 19 / 67\n \n 3.8.13 PAUSE\n The PAUSE command stops the trajectory planner. It has no effect in free or teleop mode. At this point\n I don\u2019t know if it pauses all motion immediately, or if it completes the current move and then pauses\n before pulling another move from the queue.\n@@ -1434,15 +1434,15 @@\n \n 3.8.16 SCALE\n The SCALE command scales all velocity limits and commands by a specified amount. It is used to\n implement feed rate override and other similar functions. The scaling works in free, teleop, and coord\n modes, and affects everything, including homing velocities, etc. However, individual joint velocity\n limits are unaffected.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 20 / 67\n \n 3.8.16.1 Requirements\n None. The command can be issued at any time, and will always be accepted.\n 3.8.16.2 Results\n All velocity commands are scaled by the specified constant.\n@@ -1472,15 +1472,15 @@\n 3.8.19 JOG_CONT\n The JOG_CONT command initiates a continuous jog on a single joint. A continuous jog is generated\n by setting the free mode trajectory planner\u2019s target position to a point beyond the end of the joint\u2019s\n range of travel. This ensures that the planner will move constantly until it is stopped by either the joint\n limits or an ABORT command. Normally, a GUI sends a JOG_CONT command when the user presses\n a jog button, and ABORT when the button is released.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 21 / 67\n \n 3.8.19.1 Requirements\n The command handler will reject the JOG_CONT command with an error message if machine is not in\n free mode, or if any joint is in motion (GET_MOTION_INPOS_FLAG() == FALSE), or if motion is not\n enabled. It will also silently ignore the command if the joint is already at or beyond its limit and the\n@@ -1517,15 +1517,15 @@\n location, however they also stop when they hit a limit, or on an ABORT command.\n 3.8.21.1 Requirements\n The command handler will silently reject the JOG_ABS command if machine is not in free mode, or if\n any joint is in motion (GET_MOTION_INPOS_FLAG() == FALSE), or if motion is not enabled. It will\n also silently ignore the command if the joint is already at or beyond its limit and the commanded jog\n would make it worse.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 22 / 67\n \n 3.8.21.2 Results\n The free mode trajectory planner for the joint identified by emcmotCommand->axis is activated, the\n target position is set to emcmotCommand->offset, and the velocity limit is set to emcmotCommand>vel. The free mode trajectory planner will generate a smooth trapezoidal move from the present\n position to the target position. The planner can correctly handle changes in the target position that\n@@ -1558,15 +1558,15 @@\n (More later)\n \n 3.8.27 SET_xix\n There are approximately 15 SET_xxx commands, where xxx is the name of some configuration parameter. It is anticipated that there will be several more SET commands as more parameters are added.\n I would like to find a cleaner way of setting and reading configuration parameters. The existing methods require many lines of code to be added to multiple files each time a parameter is added. Much\n of that code is identical or nearly identical for every parameter.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 23 / 67\n \n 3.9 Backlash and Screw Error Compensation\n + FIXME Backlash and Screw Error Compensation\n \n 3.10 Task controller (EMCTASK)\n@@ -1584,15 +1584,15 @@\n iocontrol main loop process:\n \u2014 registers for SIGTERM and SIGINT signals from the OS.\n \u2014 checks to see it HAL inputs have changed\n \u2014 checks if read_tool_inputs() indicates the tool change is finished and set emcioStatus.status\n \u2014 checks for I/O related NML messages\n nml message numbers: from emc.hh:\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 24 / 67\n \n #define EMC_IO_INIT_TYPE\n ((NMLTYPE) 1601)\n #define EMC_TOOL_STAT_TYPE\n ((NMLTYPE) 1199)\n@@ -1640,15 +1640,15 @@\n to the data, and the size of the data.\n No memory for data storage is allocated.\n \n 3.16 SharedMemory\n Provides a block of shared memory along with a semaphore (inherited from the Semaphore class).\n Creation and destruction of the semaphore is handled by the SharedMemory constructor and destructor.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 25 / 67\n \n 3.17 ShmBuffer\n Class for passing NML messages between local processes using a shared memory buffer. Much of\n internal workings are inherited from the CMS class.\n \n@@ -1682,15 +1682,15 @@\n message buffer or just buffer). This buffer may exist as a shared memory block accessed by other\n CMS/NML processes, or a local and private buffer for data being transferred by network or serial\n interfaces.\n The buffer is dynamically allocated at run time to allow for greater flexibility of the CMS/NML subsystem. The buffer size must be large enough to accommodate the largest message, a small amount\n for internal use and allow for the message to be encoded if this option is chosen (encoded data will\n be covered later). The following figure is an internal view of the buffer space.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 26 / 67\n \n CMS buffer The CMS base class is primarily responsible for creating the communications pathways\n and interfacing to the operating system.\n \n 3.21 Configuration file format\n@@ -1708,15 +1708,15 @@\n \u2014 neut - a boolean to indicate if the data in the buffer is encoded in a machine independent format,\n or raw.\n \u2014 RPC# - Obsolete - Place holder retained for backward compatibility only.\n \u2014 buffer# - A unique ID number used if a server controls multiple buffers.\n \u2014 max_procs - is the maximum processes allowed to connect to this buffer.\n \u2014 key - is a numerical identifier for a shared memory buffer\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 27 / 67\n \n 3.21.2 Type specific configs\n The buffer type implies additional configuration options whilst the host operating system precludes\n certain combinations. In an attempt to distill published documentation in to a coherent format, only\n the SHMEM buffer type will be covered.\n@@ -1759,15 +1759,15 @@\n Linux system, GLOBMEM is obsolete, whilst PHANTOM is only really useful in the testing stage of an\n application, likewise for FILEMEM. LOCMEM is of little use for a multi-process application, and only\n offers limited performance advantages over SHMEM. This leaves SHMEM as the only buffer type to\n use with LinuxCNC.\n The neut option is only of use in a multi-processor system where different (and incompatible) architectures are sharing a block of memory. The likelihood of seeing a system of this type outside of a\n museum or research establishment is remote and is only relevant to GLOBMEM buffers.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 28 / 67\n \n The RPC number is documented as being obsolete and is retained only for compatibility reasons.\n With a unique buffer name, having a numerical identity seems to be pointless. Need to review the code\n to identify the logic. Likewise, the key field at first appears to be redundant, and it could be derived\n from the buffer name.\n@@ -1811,15 +1811,15 @@\n \n 3.22.1 NML internals\n 3.22.1.1 NML constructor\n NML::NML() parses the config file and stores it in a linked list to be passed to cms constructors in\n single lines. It is the function of the NML constructor to call the relevant cms constructor for each\n buffer and maintain a list of the cms objects and the processes associated with each buffer.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 29 / 67\n \n It is from the pointers stored in the lists that NML can interact with cms and why Doxygen fails to\n show the real relationships involved.\n Note\n The config is stored in memory before passing a pointer to a specific line to the cms constructor. The\n@@ -1854,15 +1854,15 @@\n \n a. (I chose 1605, because it was available) to emc2/src/emc/nml_intf/emc.hh\n 3. add case EMC_IO_GENERIC_TYPE to emcFormat in emc2/src/emc/nml_intf/emc.cc\n 4. add case EMC_IO_GENERIC_TYPE to emc_symbol_lookup in emc2/src/emc/nml_intf/emc.cc\n 5. add EMC_IO_GENERIC::update function to emc2/src/emc/nml_intf/emc.cc\n 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.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 30 / 67\n \n 3.24 The Tool Table and Toolchanger\n LinuxCNC interfaces with toolchanger hardware, and has an internal toolchanger abstraction. LinuxCNC manages tool information in a tool table file.\n \n 3.24.1 Toolchanger abstraction in LinuxCNC\n@@ -1896,15 +1896,15 @@\n exactly like any other tool in the tool table. It is customary to use T0 to represent \u201dno tool\u201d (i.e., a\n tool with zero TLO), so that the spindle can be conveniently emptied when needed.\n \n 3.24.2 The Tool Table\n LinuxCNC keeps track of tools in a file called the tool table. The tool table records the following\n information for each tool:\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 31 / 67\n \n num\u00e9ro d\u2019outil\n An integer that uniquely identifies this tool. Tool numbers are handled differently by LinuxCNC\n when configured for random and nonrandom toolchangers:\n \u2014 When LinuxCNC is configured for a nonrandom toolchanger this number must be positive. T0\n@@ -1944,15 +1944,15 @@\n emcioStatus.tool.pocketPrepped to the requested tool\u2019s pocket number.\n 2. Back in interp, settings->selected_pocket is assigned the tooldata index of the requested tool\n xxx.\n Note\n The legacy names selected_pocket and current_pocket actually reference a sequential tooldata\n index for tool items loaded from a tool table ([EMCIO]TOOL_TABLE) or via a tooldata database ([EMCIO]DB_PROGRAM).\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 32 / 67\n \n 3.24.3.2 M6\n Tells the toolchanger to switch to the currently selected tool (selected by the previous Txxx command).\n Handled by Interp::convert_tool_change().\n 1. The machine is asked to change to the selected tool by calling the Canon function CHANGE_TOOL()\n@@ -1990,15 +1990,15 @@\n via an EMCMOT_SET_OFFSET command. Motion copies the offsets to emcmotStatus->tool_offset,\n where it gets used to offset future motions.\n 3. 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.\n 3.24.3.4 G10 L1/L10/L11\n Modifie le tableau d\u2019outils.\n Handled by Interp::convert_setup_tool().\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 33 / 67\n \n 1. Picks the tool number out of the P-word in the block and finds the pocket for that tool:\n a. With a nonrandom toolchanger config this is always the pocket number in the toolchanger\n (even when the tool is in the spindle).\n b. With a random toolchanger config, if the tool is currently loaded it uses pocket 0 (pocket\n@@ -2036,15 +2036,15 @@\n 3.24.3.6 G41/G41.1/G42/G42.1\n Enable cutter radius compensation (usually called cutter comp).\n Handled by Interp::convert_cutter_compensation_on().\n No Canon call, cutter comp happens in the interpreter. Uses the tool table in the expected way: if\n a D-word tool number is supplied it looks up the pocket number of the specified tool number in the\n table, and if no D-word is supplied it uses pocket 0 (the spindle).\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 34 / 67\n \n 3.24.3.7 G40\n Annuler la compensation du rayon de l\u2019outil.\n Handled by Interp::convert_cutter_compensation_off().\n No Canon call, cutter comp happens in the interpreter. Does not use the tool table.\n@@ -2085,15 +2085,15 @@\n to decide which tooldata index to use for G43 (with no H-word): settings->current_pocket if\n the tool change is still in progress, tooldata index 0 (the spindle) if the tool change is complete.\n settings.random_toolchanger\n Set from the INI variable [EMCIO]RANDOM_TOOLCHANGER at startup. Controls various tool table\n handling logic. (IO also reads this INI variable and changes its behavior based on it. For example,\n when saving the tool table, random toolchanger save the tool in the spindle (pocket 0), but nonrandom toolchanger save each tool in its \u201dhome pocket\u201d.)\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 35 / 67\n \n settings.tool_offset\n This is an EmcPose variable.\n \u2014 Used to compute position in various places.\n \u2014 Sent to Motion via the EMCMOT_SET_OFFSET message. All motion does with the offsets is export\n@@ -2135,26 +2135,26 @@\n must be ignored.\n status.motion.joint[EMCMOT_MAX_JOINTS]\n An array of EMCMOT_MAX_JOINTS joint structures. joint[0] through joint[joints-1] are valid,\n the others do not exist on this machine and must be ignored.\n Things are not this way currently in the joints-axes branch, but deviations from this design are considered bugs. For an example of such a bug, see the treatment of axes in src/emc/ini/initraj.cc:loadTraj().\n There are undoubtedly more, and I need your help to find them and fix them.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 36 / 67\n \n 3.25.2 En mouvement\n The Motion controller realtime component first gets the number of joints from the num_joints loadtime parameter. This determines how many joints worth of HAL pins are created at startup.\n Motion\u2019s number of joints can be changed at runtime using the EMCMOT_SET_NUM_JOINTS command\n from Task.\n The Motion controller always operates on EMCMOT_MAX_AXIS axes. It always creates nine sets of axis.*.*\n pins.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n Chapitre 4\n \n NML Messages\n List of NML messages.\n For details see src/emc/nml_intf/emc.hh.\n \n@@ -2186,15 +2186,15 @@\n EMC_JOINT_UNHOME_TYPE\n EMC_JOINT_STAT_TYPE\n \n 4.3 AXIS\n \n 37 / 67\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n EMC_AXIS_STAT_TYPE\n \n 4.4 JOG\n EMC_JOG_CONT_TYPE\n EMC_JOG_INCR_TYPE\n EMC_JOG_ABS_TYPE\n@@ -2240,15 +2240,15 @@\n EMC_TRAJ_RIGID_TAP_TYPE\n EMC_TRAJ_STAT_TYPE\n \n 4.6 MOTION\n \n 38 / 67\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n EMC_MOTION_INIT_TYPE\n EMC_MOTION_HALT_TYPE\n EMC_MOTION_ABORT_TYPE\n EMC_MOTION_SET_AOUT_TYPE\n EMC_MOTION_SET_DOUT_TYPE\n EMC_MOTION_ADAPTIVE_TYPE\n@@ -2294,15 +2294,15 @@\n EMC_AUX_ESTOP_OFF_TYPE\n EMC_AUX_ESTOP_RESET_TYPE\n EMC_AUX_INPUT_WAIT_TYPE\n EMC_AUX_STAT_TYPE\n \n 39 / 67\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 4.10 SPINDLE\n EMC_SPINDLE_ON_TYPE\n EMC_SPINDLE_OFF_TYPE\n EMC_SPINDLE_INCREASE_TYPE\n EMC_SPINDLE_DECREASE_TYPE\n EMC_SPINDLE_CONSTANT_TYPE\n@@ -2341,15 +2341,15 @@\n EMC_HALT_TYPE\n EMC_ABORT_TYPE\n EMC_STAT_TYPE\n EMC_EXEC_PLUGIN_CALL_TYPE\n \n 40 / 67\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 41 / 67\n \n Chapitre 5\n \n Coding Style\n This chapter describes the source code style preferred by the LinuxCNC team.\n@@ -2374,15 +2374,15 @@\n if (x) {\n // do something appropriate\n }\n \n The closing brace is on a line of its own, except in the cases where it is followed by a continuation of\n the same statement, i.e. a while in a do-statement or an else in an if-statement, like this:\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 42 / 67\n \n do {\n // something important\n } while (x > 0);\n \n@@ -2425,15 +2425,15 @@\n function.\n However, if you have a complex function, and you suspect that a less-than-gifted first-year high-school\n student might not even understand what the function is all about, you should adhere to the maximum\n limits all the more closely. Use helper functions with descriptive names (you can ask the compiler to\n in-line them if you think it\u2019s performance-critical, and it will probably do a better job of it that you\n would have done).\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 43 / 67\n \n Another measure of the function is the number of local variables. They shouldn\u2019t exceed 5-10, or\n you\u2019re doing something wrong. Re-think the function, and split it into smaller pieces. A human brain\n can generally easily keep track of about 7 different things, anything more and it gets confused. You\n know you\u2019re brilliant, but maybe you\u2019d like to understand what you did 2 weeks from now.\n@@ -2471,15 +2471,15 @@\n class name. Rationale: Maintains a common style across C and C++ sources, e.g., get_foo_bar().\n However, boolean methods are easier to read if they avoid underscores and use an is prefix (not to be\n confused with methods that manipulate a boolean). Rationale: Identifies the return value as TRUE or\n FALSE and nothing else, e.g., isOpen, isHomed.\n Do NOT use Not in a boolean name, it leads only leads to confusion when doing logical tests, e.g.,\n isNotOnLimit or is_not_on_limit are BAD.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 44 / 67\n \n Variable names should avoid the use of upper case and underscores except for local or private names.\n The use of global variables should be avoided as much as possible. Rationale: Clarifies which are\n variables and which are methods. Public: e.g., axislimit Private: e.g., maxvelocity_ .\n \n@@ -2514,24 +2514,24 @@\n File names: C++ sources and headers use .cc and .hh extension. The use of .c and .h are reserved for\n plain C. Headers are for class, method, and structure declarations, not code (unless the functions are\n declared inline).\n \n 5.10 Python coding standards\n Use the PEP 8 style for Python code.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 45 / 67\n \n 5.11 Comp coding standards\n In the declaration portion of a .comp file, begin each declaration at the first column. Insert extra blank\n lines when they help group related items.\n In the code portion of a .comp file, follow normal C coding style.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 46 / 67\n \n Chapitre 6\n \n Building LinuxCNC\n 6.1 Introduction\n@@ -2560,15 +2560,15 @@\n \n This might fail too! Read this whole document, but especially the section on Setting up the test environment.\n \n 6.2 Supported Platforms\n The LinuxCNC project targets modern Debian-based distributions, including Debian, Ubuntu, and\n Mint.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 47 / 67\n \n We continuously test on the platforms listed at http://buildbot.linuxcnc.org.\n LinuxCNC builds on most other Linux distributions, though dependency management will be more\n manual and less automatic. Patches to improve portability to new platforms are always welcome.\n \n@@ -2601,15 +2601,15 @@\n within the build directory. Nothing is installed outside the build directory.\n This is quick and easy, and suitable for rapid iteration of changes.\n The LinuxCNC test suite runs only in a Run-In-Place build.\n Most LinuxCNC developers primarily build using this mode.\n Building for Run-In-Place follows the steps in the Quick Start section at the top of this document,\n possibly with different arguments to src/configure and make.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 48 / 67\n \n 6.3.1.1 src/configure arguments\n The src/configure script configures how the source code will be compiled. It takes many optional\n arguments.\n List all arguments to src/configure by running this:\n@@ -2650,15 +2650,15 @@\n $ make ../bin/froboz\n \n 6.3.2 Building Debian Packages\n When building Debian packages, the LinuxCNC programs are compiled from source and then stored\n in a Debian package, complete with dependency information. This takes more time, and the programs\n can\u2019t be used until the Debian package is installed on a target machine.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 49 / 67\n \n This build mode is primarily useful when packaging the software for delivery to end users, and when\n building the software for a machine that doesn\u2019t have the build environment installed, or that doesn\u2019t\n have internet access.\n Building Debian packages requires the dpkg-buildpackage tool, from the dpkg-dev package:\n@@ -2698,15 +2698,15 @@\n Configure the Debian package for Preempt-RT realtime or for non-realtime (these two are compatible).\n noauto , rtai , xenomai\n Normally, the lists of RTOSes for uspace realtime to support is detected automatically. However, if\n you wish, you may specify one or more of these after uspace to enable support for these RTOSes.\n Or, to disable autodetection, specify noauto.\n If you want just the traditional RTAI \u201dkernel module\u201d realtime, use -r or $KERNEL_VERSION instead.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 50 / 67\n \n rtai=\n If the development package for rtai lxrt does not start with \u201drtai-modules\u201d, or if the first such\n package listed by apt-cache search is not the desired one, then explicitly specify the package\n name.\n@@ -2746,15 +2746,15 @@\n including the tests.\n \n 6.5.1 Increase the locked memory limit\n LinuxCNC tries to improve its realtime latency by locking the memory it uses into RAM. It does this\n in order to prevent the operating system from swapping LinuxCNC out to disk, which would have bad\n effects on latency.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 51 / 67\n \n Normally locking memory into RAM is frowned upon, and the operating system places a strict limit\n on how much memory a user is allowed to have locked.\n When using the Preempt-RT realtime platform LinuxCNC runs with enough privilege to raise its memory lock limit itself. When using the RTAI realtime platform it does not have enough privilege, and\n the user must raise the memory lock limit.\n@@ -2781,15 +2781,15 @@\n at github, and use that to track and publish your changes.\n After creating your own github fork of LinuxCNC, clone it to your development machine and proceed\n with your hacking as usual.\n We of the LinuxCNC project hope that you will share your changes with us, so that the community can\n benefit from your work. Github makes this sharing very easy: after you polish your changes and push\n them to your github fork, send us a Pull Request.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 52 / 67\n \n Chapitre 7\n \n Adding Configuration Selection Items\n Example Configurations can be added to the Configuration Selector by two methods:\n@@ -2800,15 +2800,15 @@\n \n \u2014 Runtime settings \u2014 the configuration selector can also offer configuration subdirectories specified\n at runtime using an exported environamental variable (LINUXCNC_AUX_CONFIGS). This variable\n should be a path list of one or more configuration directories separated by a (:). Typically, this\n variable would be set in a shell starting linuxcnc or in a user\u2019s ~/.profile startup script. Example:\n export LINUXCNC_AUX_CONFIGS=~/myconfigs:/opt/otherconfigs\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 53 / 67\n \n Chapitre 8\n \n Contribuer \u00e0 LinuxCNC\n 8.1 Introduction\n@@ -2829,15 +2829,15 @@\n All of the LinuxCNC source is maintained in the Git revision control system.\n \n 8.4.1 Repo Git officiel de LinuxCNC\n The official LinuxCNC git repo is at https://github.com/linuxcnc/linuxcnc/\n Anyone can get a read-only copy of the LinuxCNC source tree via git:\n git clone https://github.com/linuxcnc/linuxcnc linuxcnc-dev\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 54 / 67\n \n If you are a developer with push access, then follow github\u2019s instructions for setting up a repository\n that you can push from.\n Note that the clone command put the local LinuxCNC repo in a directory called linuxcnc-dev, instead\n of the default linuxcnc. This is because the LinuxCNC software by default expects configs and G-code\n@@ -2876,15 +2876,15 @@\n \u2014 Clone the git repo.\n \u2014 Make your changes in a local branch.\n \u2014 Adding documentation and writing tests is an important part of adding a new feature. Otherwise,\n others won\u2019t know how to use your feature, and if other changes break your feature it can go\n unnoticed without a test.\n \u2014 Share your changes with the other project developers in one of these ways:\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 55 / 67\n \n \u2014 Push your branch to github and create a github pull request to https://github.com/linuxcnc/linuxcnc (this requires a github account), or\n \u2014 Push your branch to a publicly visible git repo (such as github, or your own publicly-accessible\n server, etc) and share that location on the emc-developers mailing list, or\n \u2014 Email your commits to the LinuxCNC-developers mailing list (\n@@ -2920,15 +2920,15 @@\n 8.7.4 Use multiple commits to organize changes\n When appropriate, organize your changes into a branch (a series of commits) where each commit\n is a logical step towards your ultimate goal. For example, first factor out some complex code into a\n new function. Then, in a second commit, fix an underlying bug. Then, in the third commit, add a new\n feature which is made easier by the refactoring and which would not have worked without fixing that\n bug.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 56 / 67\n \n This is helpful to reviewers, because it is easier to see that the \u201dfactor out code into new function\u201d\n step was right when there aren\u2019t other edits mixed in; it\u2019s easier to see that the bug is fixed when the\n change that fixes it is separate from the new feature; and so on.\n \n@@ -2969,15 +2969,15 @@\n cd linuxcnc-dev\n git-test-sequence origin/master..\n \n \u2019(cd src && make && ../scripts/runtests)\u2019\n \n This will either report All is well or Broke on \n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 57 / 67\n \n 8.7.9 Renommer des fichiers\n Please use the ability to rename files very cautiously. Like running indent on single files, renames still\n make it more difficult to follow changes over time. At a minimum, you should seek consensus on irc\n or the mailing list that the rename is an improvement.\n@@ -3001,15 +3001,15 @@\n 8.9 Other ways to contribute\n There are many ways to contribute to LinuxCNC, that are not addressed by this document. These ways\n include:\n \u2014 Answering questions on the forum, mailing lists, and in IRC\n \u2014 Reporting bugs on the bug tracker, forum, mailing lists, or in IRC\n \u2014 Helping test experimental features\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 58 / 67\n \n Chapitre 9\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -3046,15 +3046,15 @@\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 59 / 67\n \n Ball Nut\n A special nut designed for use with a ball-screw. It contains an internal passage to re-circulate\n the balls from one end of the screw to the other.\n CNC\n@@ -3103,15 +3103,15 @@\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n Relatively slow, controlled motion of the tool used when making a cut.\n Feed rate\n The speed at which a cutting motion occurs. In auto or MDI mode, feed rate is commanded using\n an F word. F10 would mean ten machine units per minute.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 60 / 67\n \n Feedback\n A method (e.g., quadrature encoder signals) by which LinuxCNC receives information about the\n position of motors.\n Feedrate Override\n@@ -3158,15 +3158,15 @@\n coordinates. Inverse kinematics is used for exactly the opposite purpose. Note that kinematics\n does not take into account, the forces, moments etc. on the machine. It is for positioning only.\n Lead-screw\n An screw that is rotated by a motor to move a table or other part of a machine. Lead-screws are\n usually either ball-screws or acme screws, although conventional triangular threaded screws\n may be used where accuracy and long life are not as important as low cost.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 61 / 67\n \n Machine units\n The linear and angular units used for machine configuration. These units are specified and used\n in the INI file. HAL pins and parameters are also generally in machine units.\n MDI\n@@ -3217,15 +3217,15 @@\n A portable interface to real-time operating systems including RTAI and POSIX pthreads with\n realtime extensions.\n RS-274/NGC\n The formal name for the language used by LinuxCNC part programs.\n Servo Motor\n Generally, any motor that is used with error-sensing feedback to correct the position of an ac-\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 62 / 67\n \n tuator. Also, a motor which is specially-designed to provide improved performance in such applications.\n Servo Loop\n A control loop used to control position or velocity of an motor equipped with a feedback device.\n Signed Integer\n@@ -3258,15 +3258,15 @@\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 63 / 67\n \n Chapitre 10\n \n Legal Section\n Translations of this file provided in the source tree are not legally binding.\n@@ -3292,15 +3292,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 64 / 67\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any such\n manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -3349,15 +3349,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover\n must present the full title with all words of the title equally prominent and visible. You may add other\n material on the covers in addition. Copying with changes limited to the covers, as long as they preserve\n the title of the Document and satisfy these conditions, can be treated as verbatim copying in other\n respects.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 65 / 67\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access\n@@ -3403,15 +3403,15 @@\n N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any Invariant\n Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 66 / 67\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -3452,15 +3452,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of this\n \n-\fManuel du d\u00e9veloppeur V2.9.1, 04 Nov 2023\n+\fManuel du d\u00e9veloppeur V2.9.1, 06 Nov 2023\n \n 67 / 67\n \n License provided that you also include the original English version of this License. In case of a disagreement between the translation and the original English version of this License, the original English\n version will prevail.\n 9. TERMINATION\n You may not copy, modify, sublicense, or distribute the Document except as expressly provided for\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_fr.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_fr.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_fr.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Documentation_fr.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'LinuxCNC V2.9.1, 04 Nov 2023'\n+Title: 'LinuxCNC V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-LinuxCNC V2.9.1, 04 Nov 2023\n+LinuxCNC V2.9.1, 06 Nov 2023\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ii\n \n Table des mati\u00e8res\n \n I Getting Started & Configuration\n \n@@ -118,15 +118,15 @@\n \n 9\n \n 1.3.5.1 Basic Tweaks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n iii\n \n 1.3.6 PREEMPT_RT Tweaks (x86/AMD64 only) . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 9\n \n@@ -284,15 +284,15 @@\n \n 1.6.6.2 The GUI Way . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 23\n \n 1.6.3 Terminal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1.6.6.3 Root Access\n \n iv\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -454,15 +454,15 @@\n \n 2.3.5 Coordinate Systems\n \n 45\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n v\n \n 2.3.5.1 G53 Machine Coordinate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 45\n \n@@ -620,15 +620,15 @@\n \n 56\n \n 2.6.1 Lathe Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 56\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n vi\n \n 2.6.2 Lathe Tool Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 56\n \n@@ -782,15 +782,15 @@\n \n 74\n \n 2.7.14.3Float switch (input) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 75\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n vii\n \n 2.7.14.4Ohmic Sensor enable (output) . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 75\n \n@@ -944,15 +944,15 @@\n \n 95\n \n 3.1.11.1Operating without Limit Switches . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 96\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n viii\n \n 3.1.11.2Operating without Home Switches\n \n . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -1022,15 +1022,15 @@\n 4.2.1 What is latency? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130\n 4.2.2 Latency Tests\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130\n \n 4.2.2.1 Latency Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ix\n \n 4.2.2.2 Latency Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132\n 4.2.2.3 Latency Histogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132\n 4.2.3 Latency tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133\n 4.2.3.1 Tuning the BIOS for latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134\n@@ -1096,15 +1096,15 @@\n 4.4.2.14[SPINDLE_] Section(s) . . . . . . . . . . . . . . . . . . . . . . . . . . . 160\n 4.4.2.15[EMCIO] Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160\n 4.5 Homing Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161\n 4.5.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161\n 4.5.2 Prerequisite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161\n 4.5.3 Separate Home Switch Example Layout . . . . . . . . . . . . . . . . . . . . . . . . . . 162\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n x\n \n 4.5.4 Shared Limit/Home Switch Example Layout . . . . . . . . . . . . . . . . . . . . . . . . 163\n 4.5.5 Homing Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163\n 4.5.6 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165\n 4.5.6.1 HOME_SEARCH_VEL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165\n@@ -1148,15 +1148,15 @@\n 4.8.6 Mechanical Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175\n 4.9 Stepper Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176\n 4.9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176\n 4.9.2 Maximum step rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176\n 4.9.3 Pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177\n 4.9.3.1 Standard Pinout HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xi\n \n 4.9.3.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178\n 4.9.3.3 Changing the standard_pinout.hal . . . . . . . . . . . . . . . . . . . . . . . . . 179\n 4.9.3.4 Changing polarity of a signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179\n 4.9.3.5 Adding PWM Spindle Speed Control\n@@ -1203,15 +1203,15 @@\n 5.1.6 Timing Issues In HAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194\n 5.2 HAL Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195\n 5.2.1 HAL Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195\n 5.2.1.1 loadrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196\n 5.2.1.2 addf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196\n 5.2.1.3 loadusr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xii\n \n 5.2.1.4 net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197\n 5.2.1.5 setp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198\n 5.2.1.6 sets\n \n@@ -1277,15 +1277,15 @@\n 5.4.3.5 Saving the HAL configuration\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . 212\n \n 5.4.3.6 Exiting halrun . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212\n 5.4.3.7 Restoring the HAL configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 213\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xiii\n \n 5.4.3.8 Removing HAL from memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213\n 5.4.4 Halmeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213\n 5.4.5 Stepgen Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216\n 5.4.5.1 Installing the components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216\n@@ -1327,15 +1327,15 @@\n 5.6.5 INI settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242\n 5.6.5.1 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242\n 5.7 HAL Component List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243\n 5.7.1 Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243\n 5.7.1.1 User Interfaces (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . 244\n 5.7.1.2 Motion (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xiv\n \n 5.7.1.3 Hardware Drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245\n 5.7.1.4 Mesa and other I/O Cards (Realtime) . . . . . . . . . . . . . . . . . . . . . . . 245\n 5.7.1.5 Utilities (non-realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246\n 5.7.1.6 Signal processing (Realtime) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246\n@@ -1379,15 +1379,15 @@\n 5.8.7 SigGen\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269\n \n 5.8.7.1 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269\n 5.8.7.2 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xv\n \n 5.8.7.3 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269\n 5.8.8 lut5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270\n 5.9 HAL Component Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271\n 5.9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271\n@@ -1432,15 +1432,15 @@\n 5.10.1Compatibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283\n 5.10.2Haltcl Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283\n 5.10.3Haltcl INI-file variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284\n 5.10.4Converting HAL files to Tcl files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285\n 5.10.5Haltcl Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285\n 5.10.6Haltcl Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xvi\n \n 5.10.7Haltcl Interactive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286\n 5.10.8Haltcl Distribution Examples (sim)\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286\n@@ -1507,15 +1507,15 @@\n 5.13.3Create pins and parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296\n 5.13.3.1Changing the prefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296\n 5.13.4Reading and writing pins and parameters . . . . . . . . . . . . . . . . . . . . . . . . . 296\n 5.13.4.1Driving output (HAL_OUT) pins . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n 5.13.4.2Driving bidirectional (HAL_IO) pins . . . . . . . . . . . . . . . . . . . . . . . . 297\n 5.13.5Exiting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xvii\n \n 5.13.6Helpful Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n 5.13.7Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297\n 5.13.8System Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298\n 5.14Canonical Device Interfaces\n@@ -1559,15 +1559,15 @@\n 6.1.1 Loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310\n 6.1.2 PCI Port Address . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313\n 6.1.3 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314\n 6.1.4 Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314\n 6.1.5 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314\n 6.1.6 Common problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xviii\n \n 6.1.7 Using DoubleStep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315\n 6.1.8 probe_parport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315\n 6.1.8.1 Installing probe_parport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315\n 6.2 AX5214H Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316\n@@ -1609,15 +1609,15 @@\n 6.3.7.3 DAC & ADC module\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333\n \n 6.3.7.4 Teach Pendant module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334\n 6.3.8 Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xix\n \n 6.3.8.1 GM6-PCI card Errata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335\n 6.4 GS2 VFD Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335\n 6.4.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336\n 6.4.2 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336\n@@ -1659,15 +1659,15 @@\n 6.7.8 PIN Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345\n 6.7.9 Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345\n 6.7.10HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345\n 6.7.11Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346\n 6.7.12GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348\n 6.7.12.1Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xx\n \n 6.7.12.2Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349\n 6.7.13StepGen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349\n 6.7.13.1Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349\n 6.7.13.2Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349\n@@ -1709,15 +1709,15 @@\n 6.8.5.7 fnct_15_write_multiple_coils . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n 6.8.5.8 fnct_16_write_multiple_registers . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n 6.9 Mitsub VFD Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n 6.9.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363\n 6.9.2 Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364\n 6.9.3 HAL example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxi\n \n 6.9.4 Configuring the Mitsubishi VFD for serial usage . . . . . . . . . . . . . . . . . . . . . 365\n 6.9.4.1 Connecting the Serial Port . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365\n 6.9.4.2 Modbus setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365\n 6.10Motenc Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365\n@@ -1759,15 +1759,15 @@\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376\n \n 6.13.3.1Pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377\n 6.13.3.2Input latching and output updating . . . . . . . . . . . . . . . . . . . . . . . . 377\n 6.13.3.3Step Waveform Timings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxii\n \n 6.13.3.4HAL Functions, Pins and Parameters . . . . . . . . . . . . . . . . . . . . . . . 378\n 6.14Powermax Modbus Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378\n 6.14.1Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379\n 6.14.2Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379\n@@ -1807,15 +1807,15 @@\n 7.2.6 Spindle Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391\n 7.2.6.1 Spindle Synchronized Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391\n 7.2.6.2 Spindle At Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391\n 7.3 MPG Pendant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392\n 7.4 GS2 Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394\n 7.4.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxiii\n \n 8 ClassicLadder\n \n 396\n \n@@ -1860,15 +1860,15 @@\n \n 8.2.10.1MODBUS Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420\n 8.2.10.2Communication Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421\n 8.2.11Debugging modbus problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421\n 8.2.11.1Request . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423\n 8.2.11.2Error response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxiv\n \n 8.2.11.3Data response . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425\n 8.2.11.4MODBUS Bugs\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425\n@@ -1915,15 +1915,15 @@\n 9.3.2 5-Axis Machine Tool Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465\n 9.3.3 Tool Orientation and Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465\n 9.3.4 Translation and Rotation Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466\n 9.3.5 Table Rotary/Tilting 5-Axis Configurations . . . . . . . . . . . . . . . . . . . . . . . . . 467\n 9.3.5.1 Transformations for a xyzac-trt machine tool with work offsets . . . . . . . 469\n 9.3.5.2 Transformations for a xyzac-trt machine with rotary axis offsets . . . . . . 473\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxv\n \n 9.3.5.3 Transformations for a xyzbc-trt machine with rotary axis offsets . . . . . . 476\n 9.3.6 Table Rotary/Tilting Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479\n 9.3.6.1 Vismach Simulation Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479\n 9.3.6.2 Tool-Length Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479\n@@ -1977,15 +1977,15 @@\n \n 9.6.2.2 Picking a code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494\n 9.6.2.3 Parameter handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494\n 9.6.2.4 Handling results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494\n 9.6.2.5 Execution sequencing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494\n 9.6.2.6 An minimal example remapped code . . . . . . . . . . . . . . . . . . . . . . . 495\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxvi\n \n 9.6.3 Configuring Remapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495\n 9.6.3.1 The REMAP statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495\n 9.6.3.2 Useful REMAP option combinations . . . . . . . . . . . . . . . . . . . . . . . . 496\n 9.6.3.3 The argspec parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496\n@@ -2032,15 +2032,15 @@\n 9.6.11.3G-code Cycles: cycle_prolog and cycle_epilog . . . . . . . . . . . . . . . . 517\n 9.6.11.4S (Set Speed) : setspeed_prolog and setspeed_epilog . . . . . . . . . . . 518\n 9.6.11.5F (Set Feed) : setfeed_prolog and setfeed_epilog . . . . . . . . . . . . . 518\n 9.6.11.6M61 Set tool number : settool_prolog and settool_epilog . . . . . . . . 518\n 9.6.12Remapped code execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518\n 9.6.12.1NGC procedure call environment during remaps . . . . . . . . . . . . . . . . 518\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxvii\n \n 9.6.12.2Nested remapped codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518\n 9.6.12.3Sequence number during remaps . . . . . . . . . . . . . . . . . . . . . . . . . 519\n 9.6.12.4Debugging flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519\n 9.6.12.5Debugging Embedded Python code . . . . . . . . . . . . . . . . . . . . . . . . 519\n@@ -2086,15 +2086,15 @@\n 9.6.18Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530\n 9.6.19Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530\n 9.6.20Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531\n 9.7 Moveoff Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531\n 9.7.1 Modifying an existing configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532\n 9.8 Stand Alone Interpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxviii\n \n 9.8.1 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535\n 9.8.2 Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535\n 9.9 External Axis Offsets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536\n 9.9.1 INI File Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536\n@@ -2144,15 +2144,15 @@\n \n 10.1AXIS GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546\n 10.1.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546\n 10.1.2Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547\n 10.1.2.1INI settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547\n 10.1.2.2A Typical Session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 10.1.3AXIS Window\n \n xxix\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548\n \n@@ -2219,15 +2219,15 @@\n . . . . . . . . . . . . . . . . . . 570\n \n 10.1.14.5\n Read the INI file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571\n 10.1.14.6\n Read LinuxCNC Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxx\n \n 10.1.14.7\n Change the current view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571\n 10.1.14.8\n Creating new AXISUI HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . 571\n@@ -2278,15 +2278,15 @@\n 10.2.5.8User Created Message HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . 594\n 10.2.5.9Spindle Feedback Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594\n 10.2.5.10\n Pins to Indicate Program Progress Information . . . . . . . . . . . . . . . . . 594\n 10.2.5.11\n Tool Related Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxi\n \n 10.2.6Auto Tool Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596\n 10.2.6.1Provided Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597\n 10.2.6.2INI File Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597\n 10.2.6.3Needed Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598\n@@ -2342,15 +2342,15 @@\n 10.4.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618\n 10.4.1.1Glade File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623\n 10.4.1.2PyGTK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623\n 10.4.2GladeVCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624\n 10.4.2.1Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624\n 10.4.2.2Build a GladeVCP Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxii\n \n 10.4.3Building a simple clean-sheet custom screen . . . . . . . . . . . . . . . . . . . . . . . 626\n 10.4.4Handler file example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628\n 10.4.4.1Adding Keybindings Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 628\n 10.4.4.2Linuxcnc State Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629\n@@ -2399,15 +2399,15 @@\n 10.5.3Key Bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641\n 10.5.4Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642\n 10.5.5Virtual Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642\n 10.5.6HAL Pins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642\n 10.5.7HAL files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643\n 10.5.8Manual Tool Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxiii\n \n 10.5.9Broche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643\n 10.5.10\n Auto Raise Z Axis on Spindle Pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644\n 10.5.11\n@@ -2477,15 +2477,15 @@\n 10.6.1Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663\n 10.6.2Demonstration Configurations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664\n 10.6.3Library Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666\n 10.6.4Standalone Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667\n 10.6.4.1Standalone NGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667\n 10.6.4.2Standalone PyNGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxiv\n \n 10.6.5Embedding NGCGUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668\n 10.6.5.1Embedding NGCGUI in AXIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668\n 10.6.5.2Embedding PyNGCGUI as a GladeVCP tab page in a GUI . . . . . . . . . . . 668\n 10.6.5.3Additional INI File items required for NCGUI or PyNGCGUI . . . . . . . . . 669\n@@ -2524,15 +2524,15 @@\n 10.8.4.2Package Installation (Buildbot) If The User Has Linux with LinuxCNC v2.8 689\n 10.8.4.3Run In Place Installation If The User Has Linux with LinuxCNC v2.8 . . . . 689\n 10.8.5Creating A QtPlasmaC Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689\n 10.8.5.1Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689\n 10.8.5.2Available I/Os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690\n 10.8.5.3Recommended Settings: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxv\n \n 10.8.5.4Configuring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692\n 10.8.5.5Qt Dependency Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697\n 10.8.5.6Initial Setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697\n 10.8.6Migrating to QtPlasmac From PlasmaC (AXIS or GMOCCAPY)\n@@ -2582,15 +2582,15 @@\n 10.8.9.15\n Pause At End Of Cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737\n 10.8.9.16\n Multiple Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737\n 10.8.9.17\n Velocity Reduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxvi\n \n 10.8.9.18\n THC (Torch Height Controller) . . . . . . . . . . . . . . . . . . . . . . . . . . . 738\n 10.8.9.19\n Cutter Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739\n@@ -2665,15 +2665,15 @@\n 10.8.14\n Customizing QtPlasmaC GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764\n 10.8.14.1\n Add A Custom Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765\n 10.8.14.2\n Create A New Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxvii\n \n 10.8.14.3\n Returning To The Default Styling . . . . . . . . . . . . . . . . . . . . . . . . . 766\n 10.8.14.4\n Custom Python Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766\n@@ -2752,15 +2752,15 @@\n \n 10.9.4Index operations\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796\n \n 10.9.5Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxviii\n \n 11 G-code Programming\n \n 797\n \n@@ -2811,15 +2811,15 @@\n 11.3.4Stand Alone Use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815\n 11.4G-code Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816\n 11.4.1Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816\n 11.4.2Format of a line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816\n 11.4.2.1/: Block Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817\n 11.4.2.2Line Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xxxix\n \n 11.4.2.3Word . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817\n 11.4.2.4Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818\n 11.4.3Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819\n 11.4.3.1Numbered Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 819\n@@ -2880,15 +2880,15 @@\n 11.5.2G-Code Quick Reference Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 836\n 11.5.3G0 Rapid Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837\n 11.5.3.1Rapid Velocity Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838\n 11.5.4G1 Linear Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838\n 11.5.5G2, G3 Arc Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839\n 11.5.5.1Center Format Arcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xl\n \n 11.5.5.2Center Format Examples\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841\n \n@@ -2969,15 +2969,15 @@\n 11.5.40\n G73 Drilling Cycle with Chip Breaking . . . . . . . . . . . . . . . . . . . . . . . . . . . 861\n 11.5.41\n G74 Left-hand Tapping Cycle with Dwell . . . . . . . . . . . . . . . . . . . . . . . . . . 862\n 11.5.42\n G76 Threading Cycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xli\n \n 11.5.43\n G80-G89 Canned Cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865\n 11.5.43.1\n Common Words . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865\n@@ -3055,15 +3055,15 @@\n 11.6.6.2Tool Changer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881\n 11.6.7M7, M8, M9 Coolant Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882\n 11.6.8M19 Orient Spindle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882\n 11.6.9M48, M49 Speed and Feed Override Control . . . . . . . . . . . . . . . . . . . . . . . 883\n 11.6.10\n M50 Feed Override Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlii\n \n 11.6.11\n M51 Spindle Speed Override Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883\n 11.6.12\n M52 Adaptive Feed Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883\n@@ -3136,15 +3136,15 @@\n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898\n \n 11.9.1.2Slotting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898\n 11.9.1.3Grid Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899\n 11.9.1.4Smart Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900\n 11.9.1.5Tool Length Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xliii\n \n 11.9.1.6Hole Probe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901\n 11.9.1.7Cutter Compensation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901\n 11.9.2Lathe Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902\n 11.9.2.1Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902\n@@ -3218,15 +3218,15 @@\n 12.1PyVCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908\n 12.1.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908\n 12.1.2Panel Construction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909\n 12.1.3Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910\n 12.1.4AXIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910\n 12.1.4.1Example Panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xliv\n \n 12.1.5Stand Alone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912\n 12.1.6Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912\n 12.1.6.1Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913\n 12.1.6.2General Notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913\n@@ -3280,15 +3280,15 @@\n . . . . . . . . . . . . . . . . . . . . . . . . . 948\n \n 12.3.3.5Integrating into AXIS, like PyVCP . . . . . . . . . . . . . . . . . . . . . . . . . 948\n 12.3.3.6Embedding as a Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949\n 12.3.3.7Integrating into Touchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949\n 12.3.4GladeVCP command line options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlv\n \n 12.3.5Understanding the GladeVCP startup process . . . . . . . . . . . . . . . . . . . . . . . 950\n 12.3.6HAL Widget reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951\n 12.3.6.1Widget and HAL pin naming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952\n 12.3.6.2Python attributes and methods of HAL Widgets . . . . . . . . . . . . . . . . . 952\n@@ -3355,15 +3355,15 @@\n 12.3.7.4The Action_MDI Toggle and Action_MDI widgets . . . . . . . . . . . . . . . . 985\n 12.3.7.5A simple example: Execute MDI command on button press . . . . . . . . . . 985\n 12.3.7.6Parameter passing with Action_MDI and ToggleAction_MDI widgets . . . . 986\n 12.3.7.7An advanced example: Feeding parameters to an O-word subroutine\n \n . . . 987\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlvi\n \n 12.3.7.8Preparing for an MDI Action, and cleaning up afterwards . . . . . . . . . . 987\n 12.3.7.9Using the LinuxCNC Stat object to deal with status changes . . . . . . . . . 988\n 12.3.8GladeVCP Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988\n 12.3.8.1User Defined Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988\n@@ -3424,15 +3424,15 @@\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011\n \n 12.5.2.5Libraries Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011\n 12.5.2.6Themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012\n 12.5.2.7Local Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.5.2.8Modifying Stock Screens\n \n xlvii\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012\n \n@@ -3476,15 +3476,15 @@\n 12.6.1.5test_led . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036\n 12.6.1.6test_panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037\n 12.6.1.7cam_align . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1038\n 12.6.1.8sim_panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040\n 12.6.1.9tool_dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041\n 12.6.2vismach 3D Simulation Panels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlviii\n \n 12.6.2.1QtVCP vismach_mill_xyz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042\n 12.6.2.2QtVCP vismach_router_atc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043\n 12.6.2.3QtVCP vismach_scara . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044\n 12.6.2.4QtVCP vismach_millturn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045\n@@ -3534,15 +3534,15 @@\n 12.7.2.1ActionButton - Machine Controller Action Control Widget . . . . . . . . . . 1060\n 12.7.2.2ActionToolButton - Optional Actions Menu Button Widget . . . . . . . . . 1062\n 12.7.2.3RoundButton - Round Shapped ActionButton Widget . . . . . . . . . . . . . 1062\n 12.7.2.4AxisToolButton - Select and Set Axis Widget . . . . . . . . . . . . . . . . . . 1063\n 12.7.2.5CamView - Workpiece Alignment and Origin Setting Widget . . . . . . . . . . 1063\n 12.7.2.6DROLabel - Axis Position Display Widget . . . . . . . . . . . . . . . . . . . . . 1063\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n xlix\n \n 12.7.2.7GcodeDisplay - G-code Text Display Widget . . . . . . . . . . . . . . . . . . . 1064\n 12.7.2.8GcodeEditor - G-code Program Editor Widget\n \n . . . . . . . . . . . . . . . . . 1065\n@@ -3613,15 +3613,15 @@\n 12.7.3.8EntryDialog - Edit Line Dialog Widget . . . . . . . . . . . . . . . . . . . . . . 1097\n 12.7.3.9CalculatorDialog - Calculator Dialog Widget . . . . . . . . . . . . . . . . . 1098\n 12.7.3.10\n RunFromLine - Run-From-Line Dialog Widget . . . . . . . . . . . . . . . . . . 1099\n 12.7.3.11\n VersaProbeDialog - Part Touch Probing Dialog Widget . . . . . . . . . . . . 1100\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n l\n \n 12.7.3.12\n MachineLogDialog - Machine and Debugging Logs Dialog Widget . . . . . 1101\n 12.7.4Other Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101\n 12.7.4.1NurbsEditor - NURBS Editing Widget . . . . . . . . . . . . . . . . . . . . . . 1102\n@@ -3658,15 +3658,15 @@\n 12.8.5.3Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117\n 12.8.6VCPWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117\n 12.8.6.1Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118\n 12.8.7Aux_program_loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118\n 12.8.7.1Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118\n 12.8.7.2Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n li\n \n 12.8.8Keylookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119\n 12.8.8.1Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119\n 12.8.8.2Key Defines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120\n 12.8.9Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1122\n@@ -3735,15 +3735,15 @@\n 12.9.6.1Translating Model parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133\n 12.9.6.2Rotating Model Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133\n 12.9.7Animating Parts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134\n 12.9.7.1HalTranslate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134\n 12.9.7.2HalRotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134\n 12.9.7.3HalToolCylinder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n lii\n \n 12.9.7.4HalToolTriangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135\n 12.9.8Assembling the model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135\n 12.9.9Other functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136\n 12.9.10\n@@ -3818,15 +3818,15 @@\n 12.11.12\n Update/Read Objects Periodically . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162\n 12.11.13\n External Control With ZMQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163\n 12.11.13.1\n ZMQ Messages Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n liii\n \n 12.11.13.2\n ZMQ Messages Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1164\n 12.11.14\n Sending Messages To Status Bar Or Desktop Notify Dialogs . . . . . . . . . . . . . . 1165\n@@ -3889,15 +3889,15 @@\n 13.2.3.2The axis dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183\n 13.2.3.3The joint dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184\n 13.2.3.4The spindle dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185\n 13.2.4Preparing to send commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185\n 13.2.5Sending commands through linuxcnc.command . . . . . . . . . . . . . . . . . . . . . 1186\n 13.2.5.1linuxcnc.command attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n liv\n \n 13.2.5.2linuxcnc.command methods: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187\n 13.2.6Reading the error channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1190\n 13.2.7Reading INI file values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1190\n 13.2.8The linuxcnc.positionlogger type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191\n@@ -3954,23 +3954,23 @@\n \n 1222\n \n 17.1Origin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222\n 17.1.1Name Change . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223\n 17.1.2Additional Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1 / 1223\n \n Premi\u00e8re partie\n \n Getting Started & Configuration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 2 / 1223\n \n Chapitre 1\n \n Getting Started with LinuxCNC\n 1.1 About LinuxCNC\n@@ -4002,15 +4002,15 @@\n a specified tolerance, lathe threading, synchronized axis motion, adaptive feedrate, operator feed\n override, and constant velocity control.\n \u2014 Support for non-Cartesian motion systems is provided via custom kinematics modules. Available\n architectures include hexapods (Stewart platforms and similar concepts) and systems with rotary\n joints to provide motion such as PUMA or SCARA robots.\n \u2014 LinuxCNC runs on Linux using real time extensions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3 / 1223\n \n 1.1.2 The Operating System\n LinuxCNC is available as ready-to-use packages for the Ubuntu and Debian distributions.\n \n 1.1.3 Getting Help\n@@ -4046,15 +4046,15 @@\n This is quite active but the demographic is more user-biased than the mailing list. If you want to be\n sure that your message is seen by the developers then the mailing list is to be preferred.\n 1.1.3.4 LinuxCNC Wiki\n A Wiki site is a user maintained web site that anyone can add to or edit.\n \n The user maintained LinuxCNC Wiki site contains a wealth of information and tips at: https://wiki.linuxcnc.or\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 4 / 1223\n \n 1.1.3.5 Bug Reports\n Report bugs to the LinuxCNC github bug tracker.\n \n 1.2 System Requirements\n@@ -4088,15 +4088,15 @@\n uname -a\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n If you see -rtai- in the kernel name then you are running RTAI realtime. See below for the LinuxCNC\n version to install.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 5 / 1223\n \n 1.2.2.1 Preempt-RT with linuxcnc-uspace package\n Preempt-RT is the newest of the realtime systems, and is also the version that is closest to a mainline\n kernel. Preempt-RT kernels are available as precompiled packages from the main repositories. The\n search term \u201dPREEMPT_RT\u201d will find them, and one can be downloaded and installed just like any\n@@ -4127,15 +4127,15 @@\n \n 1.3 Getting LinuxCNC\n This section describes how to install LinuxCNC version 2.9 on a PC already running Debian Bookworm (Debian 12). LinuxCNC requires the PREEMPT_RT real time kernel to ensure the strict timing\n required for CNC operations are met. We will also cover how to install Debian Bookworm optimised\n for LinuxCNC on the x86/AMD64 and ARM64 platforms for first time users. We will also cover some\n troubleshooting steps and common problems you may experience.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 6 / 1223\n \n Note\n The PREEMPT_RT kernel is a dependency of LinuxCNC so on most computer platforms, eg AMD64/x86,\n it will be installed with LinuxCNC. On some platforms such as the Raspberry Pi, it needs to be installed separately. Some environments (eg. Armbian) may support installation of Debian Bookworm but\n require special procedures to install PREEMPT_RT which are beyond the scope of this document.\n@@ -4172,15 +4172,15 @@\n internet connection). https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/debian-live-12.1.0-amd64-xfce.iso\n 3. Burn the Debian Image to a USB drive using Balena Etcher.\n 4. Connect the PC to install LinuxCNC on to a wired internet connection (only use wifi if you must).\n 5. Boot the PC from the USB image. This may require changing the boot order to boot from a USB\n first.\n 6. Follow the prompts to install Debian Bookworm.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 7 / 1223\n \n 7. When asked to partition the drive, use all of the available space and install all files on one partition.\n 8. Do NOT add a password to the root account.\n \n AVERTISSEMENT\n@@ -4218,15 +4218,15 @@\n usermod -aG sudo pi\n \n To update your system, and install the real time kernel, type the following lines:\n apt update\n apt upgrade\n apt install linux-image-rt-arm64 linux-headers-rt-arm64\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 8 / 1223\n \n To improve performance there are several settings in two places:\n To change the startup command line settings, which will be built into /boot/firmware/cmdline.txt\n we modify an upstream file by typing:\n nano /etc/default/raspi-extra-cmdline\n@@ -4268,15 +4268,15 @@\n quality HDMI cable.\n \n Note\n This has put you into a desktop as root. It is not best practice to work as root. . Reboot. Your graphical\n environment should start normally. Log in with the non-root username and password you created\n earlier.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 9 / 1223\n \n 1.3.4 Install Problems\n Most problems booting the installation image are due to uefi hardware. Fortunately, Debian Bookworm\n has significantly better support for uefi systems than earlier versions of Linux.\n Sometimes you can tell the BIOS to boot legacy (non-uefi) hardware.\n@@ -4312,15 +4312,15 @@\n quiet\n \n Change to\n quiet isolcpus=2,3\n \n Save the config, close grub-customiser and reboot for changes to take effect.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 10 / 1223\n \n 1.3.7 Review Latency\n Use latency-histogram instead of latency-test to review latency particularly if you are using a mesa\n card or ethercat and don;t need a base thread:\n latency-histogram --nobase --sbins 1000\n@@ -4357,15 +4357,15 @@\n Bookworm repositories.\n Start by creating a new configuration file to set a higher priority to our LinuxCNC files than the default\n Debian repositories.\n sudo nano /etc/apt/preferences.d/99linuxcnc-uspace\n \n Then copy the following content into this file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 11 / 1223\n \n package: linuxcnc-uspace\n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-dev\n@@ -4407,15 +4407,15 @@\n sudo apt update\n sudo apt upgrade\n \n 1.3.10 Realtek network drivers\n Some users have been reporting significant error finishing read issues with some Realtek NIC\u2019s.\n There are two additional device drivers available in Debian for realtek cards;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12 / 1223\n \n r8125-dkms for 2.5 Gb network cards - RTL8125, RTL8125B(S)(G)\n \n r8168-dkms for the following network cards RTL8111B/RTL8111C, RTL8111D/RTL8111E, RTL8111F/RTL81\n RTL8111H(S), RTL8118(A)(S), RTL8119i, RTL8111L, RTL8111K, RTL8168B, RTL8168E, RTL8168H,\n@@ -4461,15 +4461,15 @@\n \n Check you can still ping the mesa card\n ping 10.10.10.10\n \n If you have to remove this driver, it needs to be purged completely or you will have no network. Eg.\n sudo apt purge r8168-dkms\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 13 / 1223\n \n 1.3.11 Installing a later kernel\n Since the release of Debian Bullseye (Linux kernel 5.10), real time performance has been disappointing. In particular, network latency when communicating with a Mesa ethernet card has been generating Error Finishing Read Errors. This means that the network latency left insufficient time for the\n servo thread cycle to complete in time.\n This appears to have been more prevalent with Realtek Network interfaces. Fortunately, each iteration of the Linux kernel has improved results, particularly since the release of 6.x kernels. Debian\n@@ -4548,15 +4548,15 @@\n & simulation\n machine control\n (known issues)\n simulation only\n machine control\n & simulation\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 14 / 1223\n \n Distribution\n Debian Wheezy\n \n Architecture\n@@ -4616,15 +4616,15 @@\n \u2014 gmoccapy - Touch Screen GUI\n \u2014 gscreen - Touch Screen GUI\n \u2014 pyvcp_demo - Python Virtual Control Panel\n \u2014 qtaxis - Touch Screen GUI, axis lookalike\n \u2014 qtdragon - Touch Screen GUI\n \u2014 qtdragon_hd - Touch Screen GUI, high definition\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 15 / 1223\n \n \u2014 qtplasmac - Touch Screen GUI, for plasma tables\n \u2014 qttouchy - Touch Screen GUI\n \u2014 tklinuxcnc - Keyboard and Mouse Gui (no longer maintained)\n \u2014 touchy - Touch Screen GUI\n@@ -4662,15 +4662,15 @@\n \u2014 parport - Applications to test parport.\n \u2014 pyvcp - Example pyvcp applications.\n \u2014 xhc-hb04 - Applications to test an xhc-hb04 USB wireless MPG\n Note\n Under the Apps directory, only applications that are usefully modified by the user are offered for\n copying to the user\u2019s directory.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 16 / 1223\n \n Figure 1.1 \u2013 LinuxCNC Configuration Selector\n Click any of the listed configurations to display specific information about it. Double-click a configuration or click OK to start the configuration.\n Select Create Desktop Shortcut and then click OK to add an icon on the Ubuntu desktop to directly\n launch this configuration without showing the Configuration Selector screen.\n@@ -4686,15 +4686,15 @@\n All configurations listed under Sample Configurations/sim are intended to run on any computer. No\n specific hardware is required and real-time support is not needed.\n These configurations are useful for studying individual capabilities or options. The sim configurations\n are organized according to the graphical user interface used in the demonstration. The directory for\n axis contains the most choices and subdirectories because it is the most tested GUI. The capabilities\n demonstrated with any specific GUI may be available in other GUIs as well.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 17 / 1223\n \n 1.4.5 Configuration Resources\n 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\n at least one INI file (iniflename.ini) that is used to describe a specific configuration.\n File resources within the copied directory will typically include one or more INI file (filename.ini)\n@@ -4736,15 +4736,15 @@\n The details will depend on which platform you\u2019re running on. Open a terminal then type lsb_release\n -ic to find this information out:\n lsb_release -ic\n Distributor ID: Debian\n Codename:\n Buster\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 18 / 1223\n \n You should be running on Debian Buster, Bullseye or Bookworm or Ubuntu 20.04 \u201dFocal Fossa\u201d or\n newer. LinuxCNC will not run on older distributions than these.\n You will also need to check which realtime kernel is being used:\n uname -r\n@@ -4781,15 +4781,15 @@\n deb https://linuxcnc.org buster base\n 2.9-rtpreempt\n deb https://linuxcnc.org bullseye base\n 2.9-uspace\n deb https://linuxcnc.org bookworm base\n 2.9-uspace\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 19 / 1223\n \n \u2014 Click Add Source, then Close in the Software Sources window. If it pops up a window informing\n you that the information about available software is out-of-date, click the Reload button.\n 1.5.1.2 Upgrading to the new version\n Now your computer knows where to get the new version of the software, next we need to install it.\n@@ -4811,15 +4811,15 @@\n \n 1.5.2 Updating without Network\n To update without a network connection you need to download the .deb then install it with dpkg. The\n .debs can be found in https://linuxcnc.org/dists/ .\n You have to drill down from the above link to find the correct deb for your installation. Open a terminal\n and type in lsb_release -ic to find the release name of your OS.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 20 / 1223\n \n > lsb_release -ic\n Distributor ID: Debian\n Codename:\n buster\n@@ -4853,15 +4853,15 @@\n 1.5.4 Updating Configuration Files (for 2.9.x)\n No changes should be necessary to configuration files when moving from 2.8 to 2.9\n 1.5.4.1 Spindle limits in the INI\n It is now possible to add settings to the [SPINDLE] section of the INI file\n MAX_FORWARD_VELOCITY = 20000 The maximum spindle speed (in rpm)\n MIN_FORWARD_VELOCITY = 3000 The minimum spindle speed (in rpm)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 21 / 1223\n \n MAX_REVERSE_VELOCITY = 20000 This setting will default to MAX_FORWARD_VELOCITY if omitted.\n MIN_REVERSE_VELOCITY = 3000 \u0300 This setting is equivalent to MIN_FORWARD_VELOCITY but for\n reverse spindle rotation. It will default to the MIN_FORWARD_VELOCITY if omitted.\n INCREMENT = 200 Sets the step size for spindle speed increment / decrement commands. This can\n@@ -4893,15 +4893,15 @@\n \u2014 In a terminal, use the command:\n $ /usr/sbin/lightdm --show-config\n \n \u2014 Make a note of the absolute path to the configuration file lightdm.conf.\n \u2014 Edit that file with a pure text editor (gedit, nano, etc), as root.\n \u2014 Find and uncomment the lines:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 22 / 1223\n \n #autologin-user=\n #autologin-user-timeout=0\n \n \u2014 Set autologin-user=your_user_name\n@@ -4938,15 +4938,15 @@\n \n Use the Page Up and Page Down keys to view the man page and the Q key to quit viewing.\n Note\n Viewing the man page from the terminal may not get the expected man page. For example if you\n type in man abs you will get the C abs not the LinuxCNC abs. It is best to view the LinuxCNC man\n pages in the HTML documents.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 23 / 1223\n \n 1.6.5 List Modules\n Sometimes when troubleshooting you need to get a list of modules that are loaded. In a terminal\n window type:\n lsmod\n@@ -4975,15 +4975,15 @@\n In Ubuntu you can become root by typing in \u201dsudo -i\u201d in a terminal window then typing in your password. Be careful, because you can really foul things up as root if you don\u2019t know what you\u2019re doing.\n \n 1.6.7 Terminal Commands\n 1.6.7.1 Working Directory\n To find out the path to the present working directory in the terminal window type:\n pwd\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 24 / 1223\n \n 1.6.7.2 Changing Directories\n To change the working directory to the one one level up, i.e., the parent directory, in the terminal\n window type:\n cd ..\n@@ -5019,15 +5019,15 @@\n With this information put the command together like this:\n find /home/joe/linuxcnc -name \\*.ini -print\n \n The -name is the name of the file your looking for and the -print tells it to print out the result to the\n terminal window. The \\*.ini tells find to return all files that have the .ini extension. The backslash is\n needed to escape the shell meta-characters. See the find man page for more information on find.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 25 / 1223\n \n 1.6.7.5 Searching for Text\n grep -irl \u2019text to search for\u2019 *\n \n This will find all the files that contain the text to search for in the current directory and all the subdirectories below it, while ignoring the case. The -i is for ignore case and the -r is for recursive (include\n@@ -5062,30 +5062,30 @@\n \n 1.6.9.2 Monitor Resolution\n During installation Ubuntu attempts to detect the monitor settings. If this fails you are left with a\n generic monitor with a maximum resolution of 800x600.\n Instructions for fixing this are located here:\n https://help.ubuntu.com/community/FixVideoResolutionHowto\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 26 / 1223\n \n 1.6.10 Paths\n Relative Paths Relative paths are based on the startup directory which is the directory containing\n the INI-file. Using relative paths can facilitate relocation of configurations but requires a good understanding of linux path specifiers.\n ./f0\n is the same as f0, e.g., a file named f0 in the startup directory\n ../f1\n refers to a file f1 in the parent directory\n ../../f2\n refers to a file f2 in the parent of the parent directory\n ../../../f3 etc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 27 / 1223\n \n Chapitre 2\n \n General User Information\n 2.1 User Foreword\n@@ -5116,15 +5116,15 @@\n The Separation rule requires that we make distinct parts that do little things. By separating functions\n debugging is much easier and replacement modules can be dropped into the system and comparisons\n easily made.\n What does the Unix way mean for you as a user of LinuxCNC. It means that you are able to make\n choices about how you will use the system. Many of these choices are a part of machine integration,\n 1. Found at link:https://en.wikipedia.org/wiki/Separation_of_mechanism_and_policy, 2022-11-13\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 28 / 1223\n \n but many also affect the way you will use your machine. As you read you will find many places where\n you will need to make comparisons. Eventually you will make choices, \u201dI\u2019ll use this interface rather\n than that\u201d or, \u201cI\u2019ll write part offsets this way rather than that way.\u201d. Throughout these handbooks we\n describe the range of abilities currently available.\n@@ -5156,15 +5156,15 @@\n \u2014 the high level controllers that coordinate the generation and execution of motion control of the CNC\n machine, namely the motion controller (EMCMOT), the discrete input/output controller (EMCIO)\n and the task executor (EMCTASK).\n The below illustration is a simple block diagram showing what a typical 3-axis CNC mill with stepper\n motors might look like:\n 2. Found at link:https://en.wikipedia.org/wiki/Unix_philosophy, 07/06/2008\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 29 / 1223\n \n Figure 2.1 \u2013 Simple LinuxCNC Controlled Machine\n A computer running LinuxCNC sends a sequence of pulses via the parallel port to the stepper drives,\n each of which has one stepper motor connected to it. Each drive receives two independent signals;\n one signal to command the drive to move its associated stepper motor in a clockwise or anti-clockwise\n@@ -5187,15 +5187,15 @@\n mill, such as the number of steps each stepper motor must turn to complete one full revolution,\n the maximum rate at which each stepper may operate at, the limits of travel of each axis or the\n configuration and behaviour of limit switches on each axis.\n \u2014 My_CNC.hal\n This HAL file contains information that tells LinuxCNC how to link the internal virtual signals\n to physical connections beyond the computer. For example, specifying pin 4 on the parallel port\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 30 / 1223\n \n to send out the Z axis step direction signal, or directing LinuxCNC to cease driving the X axis\n motor when a limit switch is triggered on parallel port pin 13.\n \u2014 custom.hal\n Customisations to the mill configuration beyond the scope of the wizard may be performed by\n@@ -5221,85 +5221,85 @@\n 2.2.3 Graphical User Interfaces\n A graphical user interface is the part of the LinuxCNC that the machine tool operator interacts with.\n LinuxCNC comes with several types of user interfaces which may be chosen from by editing certain\n fields contained in the INI file:\n AXIS\n AXIS, the standard keyboard GUI interface. This is also the default GUI launched when a Configuration Wizard is used to create a desktop icon launcher:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 2.2 \u2013 AXIS, the standard keyboard GUI interface\n \n Touchy\n Touchy, a touch screens GUI:\n \n 31 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 2.3 \u2013 Touchy, a touch screen GUI\n \n Gscreen\n Gscreen, a user-configurable touch screen GUI:\n \n 32 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 33 / 1223\n \n Figure 2.4 \u2013 Gscreen, a configurable base touch screen GUI\n \n GMOCCAPY\n GMOCCAPY, a touch screen GUI based on Gscreen. GMOCCAPY is also designed to work equally\n well in applications where a keyboard and mouse are the preferred methods of controlling the\n GUI:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 34 / 1223\n \n Figure 2.5 \u2013 GMOCCAPY, a touch screen GUI based on Gscreen\n \n NGCGUI\n NGCGUI, a subroutine GUI that provides wizard-style programming of G code. NGCGUI may be\n run as a standalone program or embedded into another GUI as a series of tabs. The following\n screenshot shows NGCGUI embedded into AXIS:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 35 / 1223\n \n Figure 2.6 \u2013 NGCGUI, a graphical interface integrated into AXIS\n \n TkLinuxCNC\n TkLinuxCNC, another interface based on Tcl/Tk. Once the most popular interface after AXIS.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 36 / 1223\n \n Figure 2.7 \u2013 TkLinuxCNC graphical interface\n \n QtDragon\n QtDragon, a touch screen GUI based on QtVCP using the PyQt5 library. It comes in two versions\n QtDragon and QtDragon_hd. They are very similar in features but QtDragon_hd is made for larger\n monitors.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 37 / 1223\n \n Figure 2.8 \u2013 QtDragon, a touch screen GUI based on QtVCP\n \n QtPlasmaC\n QtPlasmaC, a touch screen plasma cutting GUI based on QtVCP using the PyQt5 library. It comes\n in three aspect ratios, 16:9, 4:3, and 9:16.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 38 / 1223\n \n Figure 2.9 \u2013 QtPlasmaC, a touch screen plasma cutting GUI based on QtVCP\n \n 2.2.4 Interfaces utilisateur\n These User interfaces are a way to interact with LinuxCNC outside of the graphical user interfaces.\n@@ -5313,41 +5313,41 @@\n add indicators, readouts, switches or sliders to the basic appearance of one of the GUIs for increased\n flexibility or functionality. Two styles of Virtual Control Panel are offered in LinuxCNC:\n PyVCP\n PyVCP, a Python-based virtual control panel that can be added to the AXIS GUI. PyVCP only\n utilises virtual signals contained within the Hardware Abstraction Layer, such as the spindle-atspeed indicator or the Emergency Stop output signal, and has a simple no-frills appearance. This\n makes it an excellent choice if the user wants to add a Virtual Control Panel with minimal fuss.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 39 / 1223\n \n Figure 2.10 \u2013 PyVCP Example Embedded Into AXIS GUI\n \n GladeVCP\n GladeVCP, a Glade-based virtual control panel that can be added to the AXIS or Touchy GUIs.\n GladeVCP has the advantage over PyVCP in that it is not limited to the display or control of HAL\n virtual signals, but can include other external interfaces outside LinuxCNC such as window or\n network events. GladeVCP is also more flexible in how it may be configured to appear on the\n GUI:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 40 / 1223\n \n Figure 2.11 \u2013 GladeVCP Example Embedded Into AXIS GUI\n \n QtVCP\n QtVCP, a PyQt5-based virtual control panel that can be added to most GUIs or run as a standalone\n panel. QtVCP has the advantage over PyVCP in that it is not limited to the display or control of\n HAL virtual signals, but can include other external interfaces outside LinuxCNC such as window\n or network events by extending with python code. QtVCP is also more flexible in how it may be\n configured to appear on the GUI with many special widgets:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 41 / 1223\n \n Figure 2.12 \u2013 QtVCP Example Embedded Into QtDragon GUI\n \n 2.2.6 Languages\n LinuxCNC uses translation files to translate LinuxCNC User Interfaces into many languages including\n@@ -5363,15 +5363,15 @@\n lessons learned. A beautiful finish, tight tolerances and caution during the work are evidence of lessons\n learned. No machine nor program can replace human experience.\n Now that you start working with the LinuxCNC software, you have to put yourself in the shoes of an\n operator. You must be in the role of someone in charge of a machine. It\u2019s a machine that will wait\n for your commands and then execute the orders that you will give it. In these pages, we will give the\n explanations which will help you to become a good CNC operator with LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 42 / 1223\n \n 2.2.8 Modes of Operation\n When LinuxCNC is running, there are three different major modes used for inputting commands.\n These are Manual, Auto, and Manual Data Input (MDI). Changing from one mode to another makes\n a big difference in the way that the LinuxCNC control behaves. There are specific things that can be\n@@ -5411,15 +5411,15 @@\n cam detector is not employed with G64 Pn.\n The basic acceleration and deceleration described above is not complex and there is no compromise\n to be made. In the INI file the specified machine constraints, such as maximum axis velocity and axis\n acceleration, must be obeyed by the trajectory planner.\n For more information on the Trajectory Planner INI options see the Trajectory Section in the INI\n chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 43 / 1223\n \n 2.3.1.2 Path Following\n A less straightforward problem is that of path following. When you program a corner in G-code, the\n trajectory planner can do several things, all of which are right in some cases:\n \u2014 It can decelerate to a stop exactly at the coordinates of the corner, and then accelerate in the new\n@@ -5464,15 +5464,15 @@\n the end point of the move is as large as it needs to be to keep up the best contouring feed.\n Naive CAM Detector\n Successive G1 moves that involve only the XYZ axes that deviate less than Q- from a straight\n line are merged into a single straight line. This merged movement replaces the individual G1\n movements for the purposes of blending with tolerance. Between successive movements, the\n controlled point will pass no more than P- from the actual endpoints of the movements. The\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 44 / 1223\n \n controlled point will touch at least one point on each movement. The machine will never move at\n such a speed that it cannot come to an exact stop at the end of the current movement (or next\n movement, if you pause when blending has already started). On G2/3 moves in the G17 (XY) plane,\n when the maximum deviation of an arc from a straight line is less than the G64 Q- tolerance, the\n@@ -5509,15 +5509,15 @@\n 2.3.2 G-code\n 2.3.2.1 Defaults\n When LinuxCNC first starts up many G- and M-codes are loaded by default. The current active G- and\n M-codes can be viewed on the MDI tab in the Active G-codes: window in the AXIS interface. These\n G- and M-codes define the behavior of LinuxCNC and it is important that you understand what each\n one does before running LinuxCNC. The defaults can be changed when running a G-code file and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 45 / 1223\n \n left in a different state than when you started your LinuxCNC session. The best practice is to set the\n defaults needed for the job in the preamble of your G-code file and not assume that the defaults have\n not changed. Printing out the G-code Quick Reference page can help you remember what each one is.\n 2.3.2.2 Feed Rate\n@@ -5548,15 +5548,15 @@\n Coordinate Systems is in the Coordinate System section of this manual.\n 2.3.5.1 G53 Machine Coordinate\n When you home LinuxCNC you set the G53 Machine Coordinate System to 0 for each axis homed.\n No other coordinate systems or tool offsets are changed by homing.\n The only time you move in the G53 machine coordinate system is when you program a G53 on the\n same line as a move. Normally you are in the G54 coordinate system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 46 / 1223\n \n 2.3.5.2 G54-59.3 User Coordinates\n Normally you use the G54 Coordinate System. When an offset is applied to a current user coordinate\n system, a small blue ball with lines will be at the machine origin when your DRO is displaying Position: Relative Actual in AXIS. If your offsets are temporary use the Zero Coordinate System from the\n Machine menu or program G10 L2 P1 X0 Y0 Z0 at the end of your G-code file. Change the P number\n@@ -5583,22 +5583,22 @@\n in relation to the material.\n Note also the position of the limit switches and the direction of activation of their cams. Several\n combinations are possible, for example it is possible (contrary to the drawing) to place a single fixed\n limit switch in the middle of the table and two mobile cams to activate it. In this case the limits will\n be reversed, +X will be on the right of the table and -X on the left. This inversion does not change\n anything from the point of view of the direction of movement of the tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 47 / 1223\n \n Figure 2.14 \u2013 Typical Mill Configuration\n The following diagram shows a typical lathe showing direction of travel of the tool and limit switches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 2.15 \u2013 Typical Lathe Configuration\n \n 2.4 Starting LinuxCNC\n 2.4.1 Running LinuxCNC\n LinuxCNC is started with the script file linuxcnc.\n linuxcnc [options] []\n@@ -5613,15 +5613,15 @@\n $ linuxcnc [Options] path/to/your_ini_file\n Name the configuration INI file using its path\n $ linuxcnc [Options] -l\n Use the previously used configuration INI file\n \n 48 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 49 / 1223\n \n Options:\n -d: Turn on \u201ddebug\u201d mode\n -v: Turn on \u201dverbose\u201d mode\n -r: Disable redirection of stdout and stderr to ~/linuxcnc_print.txt and\n@@ -5647,15 +5647,15 @@\n or GladeVCP objects with HAL pins you must use the postgui HAL file to make any connections to\n those pins. See the [HAL] section of the INI configuration for more information.\n 2.4.1.1 Configuration Selector\n If no INI file is passed to the linuxcnc script it loads the configuration selector so you can choose and\n save a sample configuration. Once a sample configuration has been saved it can be modified to suit\n your application. The configuration files are saved in linuxcnc/configs directory.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 50 / 1223\n \n 2.5 CNC Machine Overview\n This section gives a brief description of how a CNC machine is viewed from the input and output ends\n of the Interpreter.\n \n@@ -5671,15 +5671,15 @@\n two motors for one axis is better handled by kinematics rather than by a second linear axis.\n Note\n If the motion of mechanical components is not independent, as with hexapod machines, the\n RS274/NGC language and the canonical machining functions will still be usable, as long as the lower\n levels of control know how to control the actual mechanisms to produce the same relative motion of\n tool and workpiece as would be produced by independent axes. This is called kinematics.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 51 / 1223\n \n Note\n With LinuxCNC, the case of the XYYZ gantry machine with two motors for one axis is better handled\n by the kinematics than by an additional linear axis.\n \n@@ -5710,15 +5710,15 @@\n \n 2.5.2 Control and Data Components\n 2.5.2.1 Linear Axes\n The X, Y, and Z axes form a standard right-handed coordinate system of orthogonal linear axes. Positions of the three linear motion mechanisms are expressed using coordinates on these axes.\n The U, V and W axes also form a standard right-handed coordinate system. X and U are parallel, Y and\n V are parallel, and Z and W are parallel (when A, B, and C are rotated to zero).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 52 / 1223\n \n 2.5.2.2 Rotational Axes\n The rotational axes are measured in degrees as wrapped linear axes in which the direction of positive\n rotation is counterclockwise when viewed from the positive end of the corresponding X, Y, or Z-axis.\n By wrapped linear axis, we mean one on which the angular position increases without limit (goes\n@@ -5758,15 +5758,15 @@\n 1. If any of XYZ are moving, F is in units per minute in the XYZ cartesian system, and all other axes\n (ABCUVW) move so as to start and stop in coordinated fashion.\n 2. Otherwise, if any of UVW are moving, F is in units per minute in the UVW cartesian system, and\n all other axes (ABC) move so as to start and stop in coordinated fashion.\n 3. Otherwise, the move is pure rotary motion and the F word is in rotary units in the ABC pseudocartesian system.\n 3. If the parallelism requirement is violated, the system builder will have to say how to distinguish clockwise from counterclockwise.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 53 / 1223\n \n 2.5.2.6 Cooling\n Flood or droplets cooling can be enabled separately. RS274/NGC language stops them together. See\n section about cooling control.\n 2.5.2.7 Dwell\n@@ -5794,15 +5794,15 @@\n 2.5.2.11 Tool Carousel\n Zero or one tool is assigned to each slot in the tool carousel.\n 2.5.2.12 Tool Change\n A machining center may be commanded to change tools.\n 2.5.2.13 Pallet Shuttle\n The two pallets may be exchanged by command.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 54 / 1223\n \n 2.5.2.14 Speed Override\n The speed override buttons can be activated (they function normally) or rendered inoperative (they no\n longer have any effect). The RS274/NGC language has a command that activates all the buttons and\n another that disables them. See inhibition and activation speed correctors. See also here for further\n@@ -5831,15 +5831,15 @@\n 2.5.3.2 Block Delete Switch\n If the block delete switch is on, lines of G-code which start with a slash (the block delete character)\n are not interpreted. If the switch is off, such lines are interpreted. Normally the block delete switch\n should be set before starting the NGC program.\n 2.5.3.3 Optional Program Stop Switch\n If this switch is on and an M1 code is encountered, program execution is paused.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 55 / 1223\n \n 2.5.4 Tool Table\n A tool table is required to use the Interpreter. The file tells which tools are in which tool changer slots\n and what the size and type of each tool is. The name of the tool table is defined in the INI file:\n [EMCIO]\n@@ -5888,15 +5888,15 @@\n 0.0\n 0.0\n \n Comment\n G28 Home X\n G28 Home Y\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 56 / 1223\n \n See the Parameters section for more information.\n \n 2.6 Lathe User Information\n This chapter will provide information specific to lathes.\n@@ -5927,30 +5927,30 @@\n There is also a built-in tool table editor in the AXIS display. The maximum number of entries in the\n tool table is 56. The maximum tool and pocket number is 99999.\n Earlier versions of LinuxCNC had two different tool table formats for mills and lathes, but since the\n 2.4.x release, one tool table format is used for all machines. Just ignore the parts of the tool table that\n don\u2019t pertain to your machine, or which you don\u2019t need to use. For more information on the specifics\n of the tool table format, see the Tool Table Section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 57 / 1223\n \n 2.6.3 Lathe Tool Orientation\n The following figure shows the lathe tool orientations with the center line angle of each orientation\n and info on FRONTANGLE and BACKANGLE.\n The FRONTANGLE and BACKANGLE are clockwise starting at a line parallel to Z+.\n \n Figure 2.16 \u2013 Lathe Tool Orientations\n In AXIS the following figures show what the Tool Positions look like, as entered in the tool table.\n Tool Positions 1, 2, 3 & 4Tool Positions 123 & 4 23 & 4 3 & 4\n \n Tool Positions 5, 6, 7 & 8Tool Positions 567 & 8 67 & 8 7 & 8\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 58 / 1223\n \n 2.6.4 Tool Touch Off\n When running in lathe mode in AXIS you can set the X and Z in the tool table using the Touch Off\n window. If you have a tool turret you normally have Touch off to fixture selected when setting up your\n turret. When setting the material Z zero you have Touch off to material selected. For more information\n@@ -5979,15 +5979,15 @@\n use the spindle nose or chuck face. This gives you the ability to change to a new tool and set its Z\n offset without having to reset all the tools.\n A typical session might be:\n 1. Home each axis if not homed.\n 2. Make sure no offsets are in effect for the current coordinate system.\n 3. Set the current tool with Tn M6 G43 where n is the tool number.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 59 / 1223\n \n 4. Select the Z axis in the Manual Control window.\n 5. Bring the tool close to the control surface.\n 6. Using a cylinder move the Z away from the control surface until the cylinder just passes between\n the tool and the control surface.\n@@ -6023,15 +6023,15 @@\n \n 2.6.6 Arcs\n Calculating arcs can be mind challenging enough without considering radius and diameter mode on\n lathes as well as machine coordinate system orientation. The following applies to center format arcs.\n On a lathe you should include G18 in your preamble as the default is G17 even if you\u2019re in lathe mode,\n in the user interface AXIS. Arcs in G18 XZ plane use I (X axis) and K (Z axis) offsets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 60 / 1223\n \n 2.6.6.1 Arcs and Lathe Design\n The typical lathe has the spindle on the left of the operator and the tools on the operator side of the\n spindle center line. This is typically set up with the imaginary Y axis (+) pointing at the floor.\n The following will be true on this type of setup:\n@@ -6056,15 +6056,15 @@\n X and Z axes for that tool. When turning or facing straight sided parts the cutting path and the tool\n edge follow the same path. When turning radius and angles the edge of the tool tip will not follow the\n programmed path unless cutter comp is in effect. In the following figures you can see how the control\n point does not follow the tool edge as you might assume.\n \n Figure 2.17 \u2013 Control point\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 61 / 1223\n \n 2.6.7.2 Cutting Angles without Cutter Comp\n Now imagine we program a ramp without cutter comp. The programmed path is shown in the following\n figure. As you can see in the figure the programmed path and the desired cut path are one and the\n same as long as we are moving in an X or Z direction only.\n@@ -6072,44 +6072,44 @@\n Figure 2.18 \u2013 Ramp Entry\n Now as the control point progresses along the programmed path the actual cutter edge does not follow\n the programmed path as shown in the following figure. There are two ways to solve this, cutter comp\n and adjusting your programmed path to compensate for tip radius.\n \n Figure 2.19 \u2013 Ramp Path\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 62 / 1223\n \n In the above example it is a simple exercise to adjust the programmed path to give the desired actual\n path by moving the programmed path for the ramp to the left the radius of the tool tip.\n 2.6.7.3 Cutting a Radius\n In this example we will examine what happens during a radius cut without cutter comp. In the next\n 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.\n \n Figure 2.20 \u2013 Turning Cut\n In this next figure you can see as the tool approaches the end of the part the control point still follows\n the path but the tool tip has left the part and is cutting air. You can also see that even though a radius\n has been programmed the part will actually end up with a square corner.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 63 / 1223\n \n Figure 2.21 \u2013 Radius Cut\n Now you can see as the control point follows the radius programmed the tool tip has left the part and\n is now cutting air.\n \n Figure 2.22 \u2013 Radius Cut\n In the final figure we can see the tool tip will finish cutting the face but leave a square corner instead\n of a nice radius. Notice also that if you program the cut to end at the center of the part a small amount\n of material will be left from the radius of the tool. To finish a face cut to the center of a part you have\n to program the tool to go past center at least the nose radius of the tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 64 / 1223\n \n Figure 2.23 \u2013 Face Cut\n \n 2.6.7.4 Using Cutter Comp\n \u2014 When using cutter comp on a lathe think of the tool tip radius as the radius of a round cutter.\n@@ -6132,15 +6132,15 @@\n on the metal to be cut.\n In a Plasma Cutting Torch a cool gas enters Zone B, where a pilot arc between the electrode and the\n torch tip heats and ionises the gas. The main cutting arc then transfers to the workpiece through the\n column of plasma gas in Zone C. By forcing the plasma gas and electric arc through a small orifice, the\n torch delivers a high concentration of heat to a small area. The stiff, constricted plasma arc is shown\n in Zone C. Direct current (DC) straight polarity is used for plasma cutting, as shown in the illustration.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 65 / 1223\n \n Zone A channels a secondary gas that cools the torch. This gas also assists the high velocity plasma\n gas in blowing the molten metal out of the cut allowing for a fast, slag - free cut.\n \n 2.7.2 Arc Initialisation\n@@ -6154,15 +6154,15 @@\n Inexpensive models will not have a pilot arc, and require touching the consumable to the work to\n start. Employing a HF circuit also can increase maintenance issues, as there are usually adjustable\n points that must be cleaned and readjusted from time to time.\n 2.7.2.2 Blowback Start\n This start type uses air pressure supplied to the cutter to force a small piston or cartridge inside the\n torch head back to create a small spark between the inside surface of the consumable, ionising the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 66 / 1223\n \n air, and creating a small plasma flame. This also creates a \u201dpilot arc\u201d that provides a plasma flame\n that stays on, whether in contact with the metal or not. This is a very good start type that is now used\n by several manufacturers. It\u2019s advantage is that it requires somewhat less circuitry, is a fairly reliable\n and generates far less electrical noise.\n@@ -6186,15 +6186,15 @@\n \u2014 Torch to work distance can impact edge bevel\n \n \u2014 Negative cut angle: torch too low, increase torch to work distance.\n \u2014 Positive cut angle: torch too high, decrease torch to work distance.\n Note\n A slight variation in cut angles may be normal, as long as it is within tolerance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 67 / 1223\n \n The ability to precisely control the cutting height in such a hostile and ever changing environment is\n a very difficult challenge. Fortunately there is a very linear relationship between Torch height (Arc\n length) and arc voltage as this graph shows.\n \n@@ -6223,15 +6223,15 @@\n \u2014 Dry Contacts for ArcOK\n \u2014 Terminals for Arc On switch\n \u2014 Raw arc voltage or divided arc voltage output\n \u2014 Optionally a RS485 interface if using a Hypertherm plasma cutter and want to control it from the\n LinuxCNC console.\n \u2014 Higher duty cycles\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 68 / 1223\n \n In recent times, another class of machine which includes some of these features has become available\n at around USD $550. One example is the Herocut55i available on Amazon but there is yet no feedback\n from users. This Machine features a blowback torch, ArcOK output, torch start contacts and raw arc\n voltage.\n@@ -6278,15 +6278,15 @@\n resistor should be mounted in such a way that the generated heat does not damage anything whilst\n in operation.\n If you have an ArcOK signal, it is recommended it is used over and above any synthesised signal to\n eliminate potential build issues. A synthesised signal available from an external THC or QtPlasmaC\u2019s\n Mode 0 can\u2019t fully replace the ArcOK circuitry in a plasma inverter. Some build issues have been\n observed where misconfiguration or incompatibility with the plasma inverter has occurred from a\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 69 / 1223\n \n synthesised ArcOK signal. By and large however, a correctly configured synthesised ArcOK signal is\n fine.\n A simple and effective ArcOK signal can be achieved with a simple reed relay. Wrap 3 turns of one of\n the plasma cutter\u2019s thick cables, e.g. the material clamp cable, around it. Place the relay in an old pen\n@@ -6324,15 +6324,15 @@\n relay to enable the probing signal to be transmitted to the CNC controller.\n 3. The positive side of the circuit should be at the torch\n 4. Both sides of the circuit needs to be isolated by opto-isolated relays until probing is being undertaken\n 5. Blocking diodes be used to prevent arc voltage entering the ohmic sensing circuit.\n The following is an example circuit that has been proven to work and is compatible with the LinuxCNC\n QtPlasmaC configuration.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 70 / 1223\n \n 2.7.7.3 Hypersensing with a MESA THCAD-5\n A more sophisticated method of material sensing that eliminates the relays and diodes is to use another\n THCAD-5 to monitor the material sensing circuit voltage from an isolated power supply. The advantage\n this has is the THCAD is designed for the hostile plasma electrical environment and totally and safely\n@@ -6346,15 +6346,15 @@\n threshold above which it is deemed contact is made and an output is enabled. By monitoring the voltage, a lower \u201cbreak circuit\u201d threshold can be set to build in strong switch hysteresis. This minimises\n false triggering. In our testing, we found the material sensing using this method was more sensitive\n and robust as well as being simpler to implement the wiring. One further advantage is using software\n outputs instead of physical I/O pins is that it frees up pins to use for other purposes. This advantage\n is helpful to get the most out of the Mesa 7I96 which has limited I/O pins.\n The following circuit diagram shows how to implement a hypersensing circuit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 71 / 1223\n \n We used a 15 W Mean Well HDR-15 Ultra Slim DIN Rail Supply 24 V DIN rail based isolated power\n supply. This is a double insulated Isolation Class II device that will withstand any arc voltage that\n might be applied to the terminals.\n 2.7.7.4 Example HAL Code for Hypersensing\n@@ -6371,15 +6371,15 @@\n setp ohmicsense.thcad-fullscale\n \n 140200\n 988300\n 32\n 5\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 72 / 1223\n \n setp ohmicsense.volt-divider\n 4.9\n setp ohmicsense.ohmic-threshold\n 22.0\n@@ -6412,15 +6412,15 @@\n \n 2.7.10 Torch Breakaway\n It is recommended that a mechanism is provided to allow the torch to \u201cbreak away\u201d or fall off in the\n case of impact with the material or a cut part that has tipped up. A sensor should be installed to allow\n the CNC controller to detect if this has occurred and pause the running program. Usually a break\n away is implemented using magnets to secure the torch to the Z axis stage.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 73 / 1223\n \n 2.7.11 Corner Lock / Velocity Anti-Dive\n The LinuxCNC trajectory planner is responsible for translating velocity and acceleration commands\n into motion that obey the laws of physics. For example, motion will slow when negotiating a corner.\n Whilst this is not a problem with milling machines or routers, this poses a particular problem for\n@@ -6452,15 +6452,15 @@\n his work using simple air plasma.\n The generally accepted method to get good holes from 37mm dia. and down to material thickness with\n minimal taper using an air plasma is:\n 1. Use recommended cutting current for consumables.\n 2. Use fixed (no THC) recommended cutting height for consumables.\n 3. Cut from 60% to 70% of the recommended feed rate of consumables and materials.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 74 / 1223\n \n 4. Start lead in at or near center of hole.\n 5. Use perpendicular lead in.\n 6. No lead out, either a slight over burn or early torch off depending on what works best for you.\n You will need to experiment to get exact hole size because the kerf with this method will be wider\n@@ -6501,15 +6501,15 @@\n \u0300 nn> pins for use from G-code with M66\n 2.7.14.2 Torch On (output)\n \u2014 Triggers a relay to close the torch on switch in the inverter.\n \u2014 Connect the torch on terminals on the inverter to the relay output terminals.\n \u2014 Connect one side of the coil to the output pin.\n \u2014 Connect the other side of the coil to Field Power ground.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 75 / 1223\n \n \u2014 If a mechanical relay is used, connect a flyback diode (e.g., IN400x series) across the coil terminals\n with the band on the diode pointing towards the output pin.\n \u2014 If a Solid State Relay is used, polarity may need to be observed on the outputs.\n \u2014 In some circumstances, the onboard spindle relay on a Mesa card can be used instead of an external\n@@ -6545,15 +6545,15 @@\n use of their THCAD board to read arc voltage.\n 2.7.14.6 Torch Breakaway Sensor\n \u2014 As mentioned earlier, a breakaway sensor should be installed that is triggered if the torch crashes\n and falls off.\n \u2014 Usually, this would be connected to halui.program-pause so the fault can be rectified and the\n program resumed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 76 / 1223\n \n 2.7.15 G-code For Plasma Controllers\n Most plasma controllers offer a method to change settings from G-code. LinuxCNC support this via\n M67/M68 for analog commands and M62-M65 for digital (on/off commands). How this is implemented is\n totally arbitrary. Lets look at how the LinuxCNC QtPlasmaC configuration does this:\n@@ -6596,15 +6596,15 @@\n to a fixed diameter and the external offset moves the tool in and out to machine the cam lobe via an\n applied external offset. To configure our lathe to machine this cam, we need to allocate some portion\n of the axis velocity and acceleration to external offsets or the tool can\u2019t move. This is where the INI\n variable OFFSET_AV_RATIO comes in. Say we decide we need to allocate 20% of the velocity and\n acceleration to the external offset to the Z axis. We set this equal to 0.2. The consequence of this is\n that your maximum velocity and acceleration for the Lathe\u2019s Z axis is only 80% of what it could be.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 77 / 1223\n \n External offsets are a very powerful method to make torch height adjustments to the Z axis via a\n THC. But plasma is all about high velocities and rapid acceleration so it makes no sense to limit these\n parameters. Fortunately in a plasma machine, the Z axis is either 100% controlled by the THC or it\n isn\u2019t. During the development of LinuxCNC\u2019s external offsets it was recognised that Z axis motion\n@@ -6646,15 +6646,15 @@\n Because the full scale is 10 Volts, then the frequency per Volt is:\n (29000 Hz - 3800 Hz) / 10 V = 2520 Hz per Volt\n So assuming we have a 5 Volt input, the calculated frequency would be:\n (2520 Hz/V * 5 V) + 3800 Hz = 16400 Hz\n So now it should be fairly clear how to convert the frequency to its voltage equivalent:\n Voltage = (frequency [Hz] - 3800 Hz) / (2520 Hz/V)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 78 / 1223\n \n 2.7.17.1 THCAD Connections\n On the high voltage side:\n \u2014 Connect the divided or raw arc voltage to IN + and IN \u2014 Connect the interconnect cable shield to the Shield connection.\n \u2014 Connect the other Shield terminal to frame ground.\n@@ -6691,15 +6691,15 @@\n HF Start Install the THCAD at the inverter as the frequency signal is far more immune to EMI noise.\n \u2014 If you do not have a voltage divider and you have room inside the plasma cutter, install a THCAD300 inside the plasma cutter.\n \u2014 If you do not have a voltage divider and you do not have room inside the plasma cutter, install a\n THCAD-10 in a metal case outside the plasma cutter and install 50% of the scaling resistance on\n each of the IN + and IN - inside the plasma cutter case so no lethal voltages come out of the case.\n \u2014 If you have a voltage divider, install a THCAD-10 in a metal case outside the plasma cutter\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 79 / 1223\n \n Raw Arc voltage presented on a connector In this case, regardless of the arc starting method,\n there are probably already resistors included in the circuitry to avoid lethal shocks so a THCAD-10 is\n advised so this resistance (typically 200 k\u2126) can be accounted for when choosing a scaling resistor as\n these resistors will distort the voltage reported by the THCAD-300.\n@@ -6744,15 +6744,15 @@\n machine).\n External wiring to motors should be shielded and appropriately sized to handle the current passing\n through the circuit. The shield should be left unconnected at the motor end and earthed at the control\n box end. Consider using an additional pin on any connectors into the control box so the earth can\n be extended through into the control box and earthed to the chassis right at the stepper/servo motor\n controller itself.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 80 / 1223\n \n We are aware of at least one commercial system builder who has had problems with induced electrical\n noise on the ohmic sensing circuit. Whilst this can be mitigated by using ferrite beads and coiling the\n cable, adding a feed through power line filter is also recommended where the ohmic sensing signal\n enters the electronics enclosure.\n@@ -6793,15 +6793,15 @@\n 5 mm pitch ball screw with a 3:1 or 5:1 reduction drive is ideal for the Z axis.\n \n 2.7.24 QtPlasmaC LinuxCNC Plasma Configuration\n The QtPlasmaC which is comprised of a HAL component (plasmac.hal) plus a complete configurations\n 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\n much testing and development work in getting QtPlasmaC to its current working state. Everything\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 81 / 1223\n \n from circuit design to G-code control and configuration has been included. Additionally, QtPlasmaC\n supports external THC\u2019s such as the Proma 150 but really comes into its own when paired with a\n 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.\n QtPlasmaC is designed to stand alone and includes the ability to include your cutting charts yet also\n@@ -6836,15 +6836,15 @@\n and allows you to configure toolsets and code snippets to suit your needs. SheetCam post processors\n are text files written in the Lua programming language and are generally easy to modify to suit your\n exact requirements. For further information, consult the SheetCam web site and their support forum.\n Another popular post-processor is included with the popular Fusion360 package but the included\n post-processors will need some customisation.\n LinuxCNC is a CNC application and discussions of CAM techniques other than this introductory discussion are out of scope of LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 82 / 1223\n \n Chapitre 3\n \n Configuration Wizards\n 3.1 Stepper Configuration Wizard\n@@ -6855,15 +6855,15 @@\n & direction.\n StepConf is installed when you install LinuxCNC and is in the CNC menu.\n StepConf places a file in the linuxcnc/config directory to store the choices for each configuration you\n create. When you change something, you need to pick the file that matches your configuration name.\n The file extension is .stepconf.\n The StepConf Wizard works best with at least 800 x 600 screen resolution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 83 / 1223\n \n 3.1.2 Start Page\n \n Figure 3.1 \u2013 StepConf Entry Page\n The three first radio buttons are self-explanatory:\n@@ -6877,15 +6877,15 @@\n mach XML file will not be changed.\n These next options will be recorded in a preference file for the next run of StepConf.\n \u2014 Create Desktop Shortcut - This will place a link on your desktop to the files.\n \u2014 Create Desktop Launcher - This will place a launcher on your desktop to start your application.\n \u2014 Create Simulated Hardware - This allows you to build a config for testing, even if you don\u2019t have\n the actual hardware.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 84 / 1223\n \n 3.1.3 Basic Information\n \n Figure 3.2 \u2013 Basic Information Page\n \u2014 Create Simulated Hardware - This allows you to build a config for testing, even if you don\u2019t have\n@@ -6899,15 +6899,15 @@\n \u2014 Driver Type - If you have one of the stepper drivers listed in the pull down box, choose it. Otherwise,\n select Other and find the timing values in your driver\u2019s data sheet and enter them as nano seconds\n in the Driver Timing Settings. If the data sheet gives a value in microseconds, multiply by 1000.\n For example, enter 4.5 \u00b5s as 4500 ns.\n A list of some popular drives, along with their timing values, is on the LinuxCNC.org Wiki under\n Stepper Drive Timing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 85 / 1223\n \n Additional signal conditioning or isolation such as optocouplers and RC filters on break out boards\n can impose timing constraints of their own, in addition to those of the driver. You may find it necessary to add some time to the drive requirements to allow for this.\n 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\n will work with most drives. * Step Space - Minimum time between step pulses in nano seconds. If\n@@ -6930,15 +6930,15 @@\n only, so no hardware needs to be connected to run the test.\n \n AVERTISSEMENT\n Do not attempt run LinuxCNC while the latency test is running.\n \n Figure 3.3 \u2013 Latency Test\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 86 / 1223\n \n Latency is how long it takes the PC to stop what it is doing and respond to an external request. In our\n case, the request is the periodic heartbeat that serves as a timing reference for the step pulses. The\n lower the latency, the faster you can run the heartbeat, and the faster and smoother the step pulses\n will be.\n@@ -6953,15 +6953,15 @@\n If your Max Jitter number is less than about 15-20 \u00b5s (15000-20000 ns), the computer should give very\n nice results with software stepping. If the max latency is more like 30-50 \u00b5s, you can still get good\n results, but your maximum step rate might be a little disappointing, especially if you use microstepping\n or have very fine pitch leadscrews. If the numbers are 100 \u00b5s or more (100,000 ns), then the PC is not\n a good candidate for software stepping. Numbers over 1 millisecond (1,000,000 ns) mean the PC is\n not a good candidate for LinuxCNC, regardless of whether you use software stepping or not.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 87 / 1223\n \n 3.1.5 Parallel Port Setup\n \n Figure 3.4 \u2013 Parallel Port Setup Page\n You may specify the address as a hexadecimal (often 0x378) or as linux\u2019s default port number (probably\n@@ -6975,15 +6975,15 @@\n uses all normally closed contacts.\n \u2014 Homing & Limit Switches - These can be selected from an input pin drop down box for most configurations.\n \u2014 Charge Pump - If your driver board requires a charge pump signal select Charge Pump from the\n drop down list for the output pin you wish to connect to your charge pump input. The charge pump\n output is connected to the base thread by StepConf. The charge pump output will be about 1/2 of\n the maximum step rate shown on the Basic Machine Configuration page.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 88 / 1223\n \n \u2014 Plasma Arc Voltage - If you require a Mesa THCAD to input a plasma arc voltage then select Plasma\n Arc Voltage from the list of output pins. This will enable a THCAD page during the setup procedure\n for the entry of the card parameters.\n \n@@ -6991,15 +6991,15 @@\n \n Figure 3.5 \u2013 Parallel Port 2 Setup Page\n The second Parallel port (if selected) can be configured and It\u2019s pins assigned on this page. No step and\n direction signals can be selected. You may select in or out to maximizes the number of input/output\n pins that are available. You may specify the address as a hexadecimal (often 0x378) or as linux\u2019s\n default port number (probably 1).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 89 / 1223\n \n 3.1.7 Axis Configuration\n \n Figure 3.6 \u2013 Axis Configuration Screen\n \u2014 Motor Steps Per Revolution - The number of full steps per motor revolution. If you know how many\n@@ -7012,15 +7012,15 @@\n of threads per inch. If you chose mm units, enter the number of millimeters per revolution (e.g.,\n enter 2 for 2mm/rev). If the machine travels in the wrong direction, enter a negative number here\n instead of a positive number, or invert the direction pin for the axis.\n \u2014 Maximum Velocity - Enter the maximum velocity for the axis in units per second.\n \u2014 Maximum Acceleration - The correct values for these items can only be determined through experimentation. See Finding Maximum Velocity to set the speed and Finding Maximum Acceleration\n to set the acceleration.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 90 / 1223\n \n \u2014 Home Location - The position the machine moves to after completing the homing procedure for\n this axis. For machines without home switches, this is the location the operator manually moves\n the machine to before pressing the Home button. If you combine the home and limit switches you\n must move off of the switch to the home position or you will get a joint limit error.\n@@ -7049,15 +7049,15 @@\n \u2014 Axis SCALE - The number that will be used in the INI file [SCALE] setting. This is how many steps\n per user unit.\n \u2014 Test this axis - This will open a window to allow testing for each axis. This can be used after filling\n out all the information for this axis.\n \n Figure 3.7 \u2013 Axis Test\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 91 / 1223\n \n Test this axis is a basic tester that only outputs step and direction signals to try different values for\n acceleration and velocity.\n Important\n In order to use test this axis you have to manually enable the axis if this is required. If your\n@@ -7090,15 +7090,15 @@\n 3.1.7.2 Finding Maximum Acceleration\n With the Maximum Velocity you found in the previous step, enter the acceleration value to test. Using\n the same procedure as above, adjust the Acceleration value up or down as necessary. In this test, it is\n important that the combination of Acceleration and Test Area allow the machine to reach the selected\n Velocity. Once you have found a value at which the axis does not stall or lose steps during this testing\n procedure, reduce it by 10% and use that as the axis Maximum Acceleration.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 92 / 1223\n \n 3.1.8 Spindle Configuration\n \n Figure 3.8 \u2013 Spindle Configuration Page\n This page only appears when Spindle PWM is chosen in the Parallel Port Pinout page for one of the\n@@ -7108,15 +7108,15 @@\n \u2014 PWM Rate - The carrier frequency of the PWM signal to the spindle. Enter 0 for PDM mode, which\n is useful for generating an analog control voltage. Refer to the documentation for your spindle\n controller for the appropriate value.\n \u2014 Speed 1 and 2, PWM 1 and 2 - The generated configuration file uses a simple linear relationship\n to determine the PWM value for a given RPM value. If the values are not known, they can be\n determined. For more information see Determining Spindle Calibration.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 93 / 1223\n \n 3.1.8.2 Spindle-synchronized motion\n When the appropriate signals from a spindle encoder are connected to LinuxCNC via HAL, LinuxCNC\n supports lathe threading. These signals are:\n \u2014 Spindle Index - Is a pulse that occurs once per revolution of the spindle.\n@@ -7157,15 +7157,15 @@\n Because most spindle drivers are somewhat nonlinear in their response curves, it is best to:\n \u2014 Make sure the two calibration speeds are not too close together in RPM.\n \u2014 Make sure the two calibration speeds are in the range of speeds you will typically use while milling.\n For instance, if your spindle will go from 0 RPM to 8000 RPM, but you generally use speeds from 400\n RPM (10%) to 4000 RPM (100%), then find the PWM values that give 1600 RPM (40%) and 2800 RPM\n (70%).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 94 / 1223\n \n 3.1.9 Options\n \n Figure 3.9 \u2013 Advanced Options Configuration\n \u2014 Include Halui - This will add the Halui user interface component. See the HALUI Chapter for more\n@@ -7173,15 +7173,15 @@\n \u2014 Include PyVCP - This option adds the PyVCP panel base file or a sample file to work on. See the\n PyVCP Chapter for more information.\n \u2014 Include ClassicLadder PLC - This option will add the ClassicLadder PLC (Programmable Logic\n Controller). See the ClassicLadder Chapter for more information.\n \u2014 Onscreen Prompt For Tool Change - If this box is checked, LinuxCNC will pause and prompt you to\n change the tool when M6 is encountered. This feature is usually only useful if you have presettable\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 95 / 1223\n \n tools.\n \n 3.1.10 Complete Machine Configuration\n Click Apply to write the configuration files. Later, you can re-run this program and tweak the settings\n@@ -7208,15 +7208,15 @@\n The zero position is the location on the axis that is 0 in the machine coordinate system. Usually the zero\n position will be within the soft limits. On lathes, constant surface speed mode requires that machine\n X=0 correspond to the center of spindle rotation when no tool offset is in effect.\n The home position is the location within travel that the axis will be moved to at the end of the homing\n sequence. This value must be within the soft limits. In particular, the home position should never be\n exactly equal to a soft limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 96 / 1223\n \n 3.1.11.1 Operating without Limit Switches\n A machine can be operated without limit switches. In this case, only the soft limits stop the machine\n from reaching the hard stop. Soft limits only operate after the machine has been homed.\n 3.1.11.2 Operating without Home Switches\n@@ -7234,15 +7234,15 @@\n LinuxCNC expects a TRUE value when a switch is closed, so the corresponding Invert box must be\n checked on the pinout configuration page. The pull up resistor show in the diagrams pulls the input\n high until the connection to ground is made and then the input goes low. Otherwise the input might\n float between on and off when the circuit is open. Typically for a parallel port you might use 47 k\u03a9;.\n \n Figure 3.11 \u2013 Normally Closed Switches (N/C) wiring in series (simplified diagram)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 97 / 1223\n \n Figure 3.12 \u2013 Normally Open Switches (N/O) wiring in parallel (simplified diagram)\n The following combinations of switches are permitted in StepConf:\n \u2014 Combine home switches for all axes\n \u2014 Combine limit switches for all axes\n@@ -7264,15 +7264,15 @@\n The other is to use PnCconf to build a config that is close to what you want and then hand edit everything to tailor it to your needs. This would be the choice if you need extensive modifications beyond\n PnCconf\u2019s scope or just want to tinker with / learn about LinuxCNC.\n You navigate the wizard pages with the forward, back, and cancel buttons there is also a help button\n that gives some help information about the pages, diagrams and an output page.\n ASTUCE\n PnCconf\u2019s help page should have the most up to date info and has additional details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 98 / 1223\n \n 3.2.1 Step by Step Instructions\n \n Figure 3.13 \u2013 PnCconf Splash\n \n@@ -7284,15 +7284,15 @@\n places a note in those files. It also allows you to select desktop shortcut / launcher options. A desktop\n shortcut will place a folder icon on the desktop that points to your new configuration files. Otherwise\n you would have to look in your home folder under linuxcnc/configs.\n A Desktop launcher will add an icon to the desktop for starting your config directly. You can also\n launch it from the main menu by using the Configuration Selector LinuxCNC found in CNC menu and\n selecting your config name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 99 / 1223\n \n 3.2.3 Basic Machine Information\n \n Figure 3.14 \u2013 PnCconf Basic\n Machine Basics\n@@ -7305,15 +7305,15 @@\n \n Computer Response Time\n The servo period sets the heart beat of the system. Latency refers to the amount of time the\n computer can be longer then that period. Just like a railroad, LinuxCNC requires everything\n on a very tight and consistent time line or bad things happen. LinuxCNC requires and uses a\n real time operating system, which just means it has a low latency ( lateness ) response time\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 100 / 1223\n \n when LinuxCNC requires its calculations and when doing LinuxCNCs calculations it cannot be\n interrupted by lower priority requests (such as user input to screen buttons or drawing etc).\n Testing the latency is very important and a key thing to check early. Luckily by using the Mesa card\n to do the work that requires the fastest response time (encoder counting and PWM generation) we\n@@ -7363,15 +7363,15 @@\n displayed for a few seconds during start up. For PCI parallel port cards the address can be found\n by pressing the parport address search button. This pops up the help output page with a list of\n all the PCI devices that can be found. In there should be a reference to a parallel port device with\n a list of addresses. One of those addresses should work. Not all PCI parallel ports work properly.\n Either type can be selected as in (maximum amount of input pins) or out (maximum amount of\n output pins).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 101 / 1223\n \n GUI Front-end list\n This specifies the graphical display screens LinuxCNC will use. Each one has different option.\n AXIS\n \u2014 fully supports lathes.\n@@ -7397,15 +7397,15 @@\n \u2014 fully featured plasmac configuration based on the QtVCP infrastructure.\n \u2014 mouse/keyboard operation or touchscreen operation\n \u2014 no VCP integration\n \n 3.2.4 External Configuration\n This page allows you to select external controls such as for jogging or overrides.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 102 / 1223\n \n Figure 3.15 \u2013 External Controls\n If you select a Joystick for jogging, You will need it always connected for LinuxCNC to load. To use\n the analog sticks for useful jogging you probably need to add some custom HAL code. MPG jogging\n requires a pulse generator connected to a MESA encoder counter. Override controls can either use\n@@ -7416,15 +7416,15 @@\n connect to Linux\u2019s device list. PnCconf will help to prepare this file.\n \u2014 Search for device rule will search the system for rules, you can use this to find the name of\n devices you have already built with PnCconf.\n \u2014 Add a device rule will allow you to configure a new device by following the prompts. You will\n need your device available.\n \u2014 test device allows you to load a device, see its pin names and check its functions with halmeter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 103 / 1223\n \n joystick jogging uses HALUI and hal_input components.\n External buttons\n allows jogging the axis with simple buttons at a specified jog rate. Probably best for rapid jogging.\n MPG Jogging\n@@ -7438,15 +7438,15 @@\n PnCconf allows overrides of feed rates and/or spindle speed using a pulse generator (MPG) or\n switches (eg. rotary).\n \n 3.2.5 GUI Configuration\n Here you can set defaults for the display screens, add virtual control panels (VCP), and set some\n LinuxCNC options..\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 104 / 1223\n \n Figure 3.16 \u2013 GUI Configuration\n Front-end GUI Options\n The default options allows general defaults to be chosen for any display screen.\n AXIS defaults are options specific to AXIS. If you choose size, position or force maximize options then\n@@ -7458,15 +7458,15 @@\n Themes controls the basic look and feel of a program. You can download themes from the net or edit\n them yourself. There are a list of the current themes on the computer that you can pick from. To help\n some of the text to stand out PnCconf allows you to override the Themes\u2019s defaults. The position and\n force max options can be used to move Touchy to a second monitor if the system is capable.\n QtPlasmaC options are specific to QtPlasmac, any common options that are not required will be disabled. If QtPlasmac is selected then the following screen will be a user button setup screen that is\n specific to QtPlasmaC and VCP options will not be available.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 105 / 1223\n \n VCP options\n Virtual Control Panels allow one to add custom controls and displays to the screen. AXIS and\n Touchy can integrate these controls inside the screen in designated positions. There are two\n kinds of VCPs - PyVCP which uses Tkinter to draw the screen and GladeVCP that uses GTK to\n@@ -7509,15 +7509,15 @@\n Defaults and Options\n \u2014 Require homing before MDI / Running\n \u2014 If you want to be able to move the machine before homing uncheck this checkbox.\n \u2014 Popup Tool Prompt\n \u2014 Choose between an on screen prompt for tool changes or export standard signal names for\n a User supplied custom tool changer HAL file\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 106 / 1223\n \n \u2014 Leave spindle on during tool change:\n \u2014 Used for lathes\n \u2014 Force individual manual homing\n \u2014 Move spindle up before tool change\n@@ -7530,15 +7530,15 @@\n 3.2.6 Mesa Configuration\n The Mesa configuration pages allow one to utilize different firmwares. On the basic page you selected\n a Mesa card here you pick the available firmware and select what and how many components are\n available.\n \n Figure 3.17 \u2013 Mesa Board Configuration\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 107 / 1223\n \n Parport address is used only with Mesa parport card, the 7i43. An on board parallel port usually uses\n 0x278 or 0x378 though you should be able to find the address from the BIOS page. The 7i43 requires\n the parallel port to use the EPP mode, again set in the BIOS page. If using a PCI parallel port the\n address can be searched for by using the search button on the basic page.\n@@ -7574,49 +7574,49 @@\n the I/O setup pages. Only I/O tabs will be shown for available connectors, depending on the Mesa\n board.\n \n 3.2.7 Mesa I/O Setup\n The tabs are used to configure the input and output pins of the Mesa boards. PnCconf allows one to\n create custom signal names for use in custom HAL files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 108 / 1223\n \n Figure 3.18 \u2013 Mesa I/O C2 Setup\n On this tab with this firmware the components are setup for a 7i33 daughter board, usually used with\n closed loop servos. Note the component numbers of the encoder counters and PWM drivers are not\n in numerical order. This follows the daughter board requirements.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 109 / 1223\n \n Figure 3.19 \u2013 Mesa I/O C3 Setup\n On this tab all the pins are GPIO. Note the 3 digit numbers - they will match the HAL pin number.\n GPIO pins can be selected as input or output and can be inverted.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 110 / 1223\n \n Figure 3.20 \u2013 Mesa I/O C4 Setup\n On this tab there are a mix of step generators and GPIO. Step generators output and direction pins\n can be inverted. Note that inverting a Step Gen-A pin (the step output pin) changes the step timing.\n It should match what your controller expects.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3.2.8 Parallel port configuration\n \n The parallel port can be used for simple I/O similar to Mesa\u2019s GPIO pins.\n \n 111 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 112 / 1223\n \n 3.2.9 Axis Configuration\n \n Figure 3.21 \u2013 Axis Drive Configuration\n This page allows configuring and testing of the motor and/or encoder combination. If using a servo\n@@ -7628,15 +7628,15 @@\n Handbook 1 standards or AXIS graphical display will not make much sense. Hopefully the help\n page and diagrams can help figure this out. Note that axis directions are based on TOOL movement not table movement. There is no acceleration ramping with the open loop test so start with\n lower DAC numbers. By moving the axis a known distance one can confirm the encoder scaling.\n The encoder should count even without the amp enabled depending on how power is supplied to\n the encoder.\n 1. \u201daxis nomenclature\u201d in the chapter \u201dNumerical Control\u201d in the \u201dMachinery\u2019s Handbook\u201d published by Industrial Press.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 113 / 1223\n \n AVERTISSEMENT\n If the motor and encoder do not agree on counting direction then the servo will run away when\n using PID control.\n \n@@ -7686,15 +7686,15 @@\n \u2014 As a result, the a and b coefficients from the linear fit can be used as the scale and offset for the\n controller directly.\n MAX OUTPUT\n 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\n scaling to raw output units. The value is applied symmetrically to both the plus and the minus\n side.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 114 / 1223\n \n Tuning Test\n The tuning test unfortunately only works with stepper based systems. Again confirm the directions on the axis is correct. Then test the system by running the axis back and forth, If the\n acceleration or max speed is too high you will lose steps. While jogging, Keep in mind it can\n take a while for an axis with low acceleration to stop. Limit switches are not functional during\n@@ -7706,25 +7706,25 @@\n ones you have figured out). If in doubt use large numbers such as 5000 this will only limit max\n speed.\n Brushless Motor Control\n These options are used to allow low level control of brushless motors using special firmware\n and daughter boards. It also allows conversion of HALL sensors from one manufacturer to another. It is only partially supported and will require one to finish the HAL connections. Contact\n the mail-list or forum for more help.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 115 / 1223\n \n Figure 3.22 \u2013 Axis Scale Calculation\n The scale settings can be directly entered or one can use the calculate scale button to assist. Use the\n check boxes to select appropriate calculations. Note that pulley teeth requires the number of teeth\n not the gear ratio. Worm turn ratio is just the opposite it requires the gear ratio. If your happy with\n the scale press apply otherwise push cancel and enter the scale directly.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 116 / 1223\n \n Figure 3.23 \u2013 Axis Configuration\n Also refer to the diagram tab for two examples of home and limit switches. These are two examples\n of many different ways to set homing and limits.\n \n@@ -7736,15 +7736,15 @@\n handbook.\n On a typical knee or bed mill\n \u2014 when the TABLE moves out that is the positive Y direction\n \u2014 when the TABLE moves left that is the positive X direction\n \u2014 when the TABLE moves down that is the positive Z direction\n \u2014 when the HEAD moves up that is the positive Z direction\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 117 / 1223\n \n On a typical lathe\n \u2014 when the TOOL moves right, away from the chuck\n \u2014 that is the positive Z direction\n \u2014 when the TOOL moves toward the operator\n@@ -7795,15 +7795,15 @@\n to be measured directly from origin to limit switch. The positive and negative travel distances\n should add up to the total travel distance.\n POSITIVE TRAVEL DISTANCE\n This is the distance the Axis travels from the Origin to the positive travel distance or the total\n travel minus the negative travel distance. You would set this to zero if the origin is positioned at\n the positive limit. The will always be zero or a positive number.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 118 / 1223\n \n NEGATIVE TRAVEL DISTANCE\n This is the distance the Axis travels from the Origin to the negative travel distance. or the total\n travel minus the positive travel distance. You would set this to zero if the origin is positioned\n at the negative limit. This will always be zero or a negative number. If you forget to make this\n@@ -7834,30 +7834,30 @@\n LinuxCNC will search for an encoder index pulse while in the latch stage of homing.\n Use Compensation File\n Allows specifying a Comp filename and type. Allows sophisticated compensation. See AXIS Section of the INI chapter.\n Use Backlash Compensation\n Allows setting of simple backlash compensation. Can not be used with Compensation File. See\n AXIS Section of the INI chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 119 / 1223\n \n Figure 3.24 \u2013 AXIS Help Diagram\n The diagram should help to demonstrate an example of limit switches and standard axis movement\n directions. In this example the Z axis was two limit switches, the positive switch is shared as a home\n switch. The MACHINE ORIGIN (zero point) is located at the negative limit. The left edge of the carriage\n is the negative trip pin and the right the positive trip pin. We wish the FINAL HOME POSITION to be\n 4 inches away from the ORIGIN on the positive side. If the carriage was moved to the positive limit\n we would measure 10 inches between the negative limit and the negative trip pin.\n \n 3.2.10 Spindle Configuration\n If you select spindle signals then this page is available to configure spindle control.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 120 / 1223\n \n ASTUCE\n Many of the option on this page will not show unless the proper option was selected on previous\n pages!\n \n@@ -7871,15 +7871,15 @@\n \u2014 Spindle-at-speed allows LinuxCNC to wait till the spindle is at the requested speed before moving\n the axis. This is particularly handy on lathes with constant surface feed and large speed diameter\n changes. It requires either encoder feedback or a digital spindle-at-speed signal typically connected\n to a VFD drive.\n \u2014 If using encoder feedback, you may select a spindle-at-speed scale setting that specifies how close\n the actual speed must be to the requested speed to be considered at-speed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 121 / 1223\n \n \u2014 If using encoder feedback, the VCP speed display can be erratic - the filter setting can be used to\n smooth out the display. The encoder scale must be set for the encoder count / gearing used.\n \u2014 If you are using a single input for a spindle encoder you must add the line: setp hm2_7i43.0.encoder.00.cou\n mode 1 (changing the board name and encoder number to your requirements) into a custom HAL\n@@ -7893,15 +7893,15 @@\n has a timed lube pump signal. The Z auto touch-off is with a touch-off plate, the GladeVCP touch-off\n button and special HALUI commands to set the current user origin to zero and rapid clear. The serial\n modbus program is basically a blank template program that sets up ClassicLadder for serial modbus.\n See the ClassicLadder Chapter in the manual.\n \n Figure 3.26 \u2013 PnCconf, advanced options\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 122 / 1223\n \n 3.2.12 HAL Components\n On this page you can add additional HAL components you might need for custom HAL files. In this\n way one should not have to hand edit the main HAL file, while still allowing user needed components.\n \n@@ -7912,15 +7912,15 @@\n Meaning if you need 2 and PnCconf needs 1 PnCconf will load 3 instances and use the last one.\n Custom Component Commands\n This selection will allow you to load HAL components that PnCconf does not use. Add the loadrt\n or loadusr command, under the heading loading command Add the addf command under the\n heading Thread command. The components will be added to the thread between reading of inputs\n and writing of outputs, in the order you write them in the thread command.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 123 / 1223\n \n 3.2.13 Advanced Usage Of PnCconf\n PnCconf does its best to allow flexible customization by the user. PnCconf has support for custom\n signal names, custom loading of components, custom HAL files and custom firmware.\n There are also signal names that PnCconf always provides regardless of options selected, for user\u2019s\n@@ -7963,26 +7963,26 @@\n with the -a option. The contents of this file can be seen when you first load PnCconf - press the help\n button and look at the output page.\n Ask on the LinuxCNC mail-list or forum for info about converting custom firmware. Not all firmware\n can be utilized with PnCconf.\n Custom HAL Files\n There are four custom files that you can use to add HAL commands to:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 124 / 1223\n \n \u2014 custom.hal is for HAL commands that don\u2019t have to be run after the GUI frontend loads. It is\n run after the configuration-named HAL file.\n \u2014 custom_postgui.hal is for commands that must be run after AXIS loads or a standalone PyVCP\n display loads.\n \u2014 custom_gvcp.hal is for commands that must be run after GladeVCP is loaded.\n \u2014 shutdown.hal is for commands to run when LinuxCNC shuts down in a controlled manner.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 125 / 1223\n \n Chapitre 4\n \n Configuration\n 4.1 Integrator Concepts\n@@ -8010,15 +8010,15 @@\n locations can be in a different place. To view the options for running LinuxCNC from the command\n line run linuxcnc -h.\n Note\n Optional locations for some files can be configured in the INI file. See the\n <> section and the <>\n section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 126 / 1223\n \n 4.1.2 Files\n Each configuration directory requires at least the following files:\n \u2014 An INI file .ini\n \u2014 A HAL file .hal or HALTCL file .tcl specified in the HAL section of the INI file.\n@@ -8059,15 +8059,15 @@\n high time. Add the 11 \u00b5s latency to the 4.5 \u00b5s high time, and you get a minimum period of 15.5 \u00b5s\n 1. This section refers to using stepgen, LinuxCNC\u2019s built-in step generator. Some hardware devices have their own step\n generator and do not use LinuxCNC\u2019s built-in one. In that case, refer to your hardware manual.\n 2. steplen refers to a parameter that adjusts the performance of LinuxCNC\u2019s built-in step generator, stepgen, which is a HAL\n component. This parameter adjusts the length of the step pulse itself. Keep reading, all will be explained eventually.\n 3. dirhold refers to a parameter that adjusts the length of the direction hold time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 127 / 1223\n \n . When you try 15.5 \u00b5s , you find that the computer is sluggish, so you settle on 16 \u00b5s . If we leave\n dirhold at 1 (the default), then the minimum time between step and direction is the 16 \u00b5s period minus\n the 11 \u00b5s latency = 5 \u00b5s , which is not enough. We need another 15 \u00b5s . Since the period is 16 \u00b5s , we\n need one more period. So we change dirhold from 1 to 2. Now the minimum time from the end of the\n@@ -8086,15 +8086,15 @@\n how a servomotor system is connected.\n \n Figure 4.1 \u2013 Servo Loop\n This diagram shows that the input signal (and the feedback signal) drive the summing amplifier, the\n summing amplifier drives the power amplifier, the power amplifier drives the motor, the motor drives\n the load (and the feedback device), and the feedback device (and the input signal) drive the motor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 128 / 1223\n \n This looks very much like a circle (a closed loop) where A controls B, B controls C, C controls D, and\n D controls A.\n If you have not worked with servo systems before, this will no doubt seem a very strange idea at first,\n especially as compared to more normal electronic circuits, where the inputs proceed smoothly to the\n@@ -8124,15 +8124,15 @@\n retain a steady state error that is a function of the proportional gain and the process gain. Despite the\n steady-state offset, both tuning theory and industrial practice indicate that it is the proportional term\n that should contribute the bulk of the output change.\n 4. If it helps, the closest equivalent to this in the digital world are state machines, sequential machines and so forth, where\n what the outputs are doing now depends on what the inputs (and the outputs) were doing before. If it doesn\u2019t help, then\n nevermind.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 129 / 1223\n \n 4.1.4.3 Integral term\n The contribution from the integral term (sometimes called reset) is proportional to both the magnitude\n of the error and the duration of the error. Summing the instantaneous error over time (integrating\n the error) gives the accumulated offset that should have been corrected previously. The accumulated\n@@ -8169,15 +8169,15 @@\n The Real Time Application Interface (RTAI) is used to provide the best Real Time (RT) performance.\n The RTAI patched kernel lets you write applications with strict timing constraints. RTAI gives you the\n ability to have things like software step generation which require precise timing.\n 4.1.5.1 ACPI\n The Advanced Configuration and Power Interface (ACPI) has a lot of different functions, most of which\n interfere with RT performance (for example: power management, CPU power down, CPU frequency\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 130 / 1223\n \n scaling, etc). The LinuxCNC kernel (and probably all RTAI-patched kernels) has ACPI disabled. ACPI\n also takes care of powering down the system after a shutdown has been started, and that\u2019s why you\n might need to push the power button to completely turn off your computer. The RTAI group has been\n improving this in recent releases, so your LinuxCNC system may shut off by itself after all.\n@@ -8214,15 +8214,15 @@\n This will start the latency test with a base-thread period of 25uS and a servo-thread period of 1mS.\n The period times may be specified on the command line:\n latency-test 50000 1000000\n \n This will start the latency test with a base-thread period of 50uS and a servo-thread period of 1mS.\n For available options, on the command line enter:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 131 / 1223\n \n latency-test -h\n \n After starting a latency test you should see something like this:\n \n@@ -8244,15 +8244,15 @@\n software stepping. Numbers over 1 millisecond (1,000,000 nanoseconds) mean the PC is not a good\n candidate for LinuxCNC, regardless of whether you use software stepping or not.\n Note\n If you get high numbers, there may be ways to improve them. Another PC had very bad latency\n (several milliseconds) when using the onboard video. But a $5 used video card solved the problem.\n LinuxCNC does not require bleeding edge hardware.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 132 / 1223\n \n For more information on stepper tuning see the Stepper Tuning Chapter.\n Additional command line tools are available for examining latency when LinuxCNC is not\n running.\n 4.2.2.2 Latency Plot\n@@ -8276,15 +8276,15 @@\n 4.2.2.3 Latency Histogram\n latency-histogram displays a histogram of latency (jitter) for a base and servo thread.\n Usage:\n latency-histogram --help | -?\n latency-histogram [Options]\n Options:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n --base\n --servo\n --bbinsize\n --sbinsize\n --bbins\n --sbins\n@@ -8328,15 +8328,15 @@\n Figure 4.5 \u2013 latency-histogram Window\n \n 4.2.3 Latency tuning\n LinuxCNC can run on many different hardware platforms and with many different realtime kernels,\n and they all may benefit from tuning for optimal latency.\n A primary goal in tuning the system for LinuxCNC is to reserve a CPU for the exclusive use of LinuxCNC\u2019s realtime tasks, so that other tasks (both user programs and kernel threads) do not interfere\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 134 / 1223\n \n with LinuxCNC\u2019s access to that CPU.\n When specific tuning options are believed to be universally helpful LinuxCNC does this tuning automatically at startup, but many tuning options are machine-specific and cannot be done automatically.\n The person installing LinuxCNC will need to experimentally determine the optimal tuning for their\n system.\n@@ -8372,15 +8372,15 @@\n \n 4.3 Stepper Tuning\n 4.3.1 Getting the most out of Software Stepping\n Generating step pulses in software has one very big advantage - it\u2019s free. Just about every PC has a\n parallel port that is capable of outputting step pulses that are generated by the software. However,\n software step pulses also have some disadvantages:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 135 / 1223\n \n \u2014 limited maximum step rate\n \u2014 jitter in the generated pulses\n \u2014 loads the CPU\n This chapter has some steps that can help you get the best results from software generated steps.\n@@ -8422,15 +8422,15 @@\n Step Frequency: 0 to 333 kHz\n Step Pulse \u201d0\u201d Time: 2.0 \u00b5s min (Step on rising edge)\n Step Pulse \u201d1\u201d Time: 1.0 \u00b5s min\n Direction Setup:\n 200 ns (0.2 \u00b5s) before step pulse rising edge\n 200 ns (0.2 \u00b5s) hold after step pulse rising edge\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 136 / 1223\n \n From the Xylotex datasheet:\n Minimum DIR setup time before rising edge of STEP Pulse 200 ns Minimum\n DIR hold time after rising edge of STEP pulse 200 ns\n Minimum STEP pulse high time 2.0 \u00b5s\n@@ -8475,15 +8475,15 @@\n But you can\u2019t start celebrating yet. Note that 13 \u00b5s is a very short period. If you try to run the step\n generator every 13 \u00b5s, there might not be enough time left to run anything else, and your computer\n will lock up. If you are aiming for periods of less than 25 \u00b5s, you should start at 25 \u00b5s or more, run\n LinuxCNC, and see how things respond. If all is well, you can gradually decrease the period. If the\n mouse pointer starts getting sluggish, and everything else on the PC slows down, your period is a\n little too short. Go back to the previous value that let the computer run smoothly.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 137 / 1223\n \n In this case, suppose you started at 25 \u00b5s, trying to get to 13 \u00b5s, but you find that around 16 \u00b5s is the\n limit - any less and the computer doesn\u2019t respond very well. So you use 16 \u00b5s. With a 16 \u00b5s period and\n 11 \u00b5s latency, the shortest output time will be 16-11 = 5 \u00b5s. The drive only needs 2 \u00b5s, so you have\n some margin. Margin is good - you don\u2019t want to lose steps because you cut the timing too close.\n@@ -8523,15 +8523,15 @@\n your latency test result and your stepper drive timing requirements and the spreadsheet calculates\n the optimum BASE_PERIOD. Next, you test the period to make sure it won\u2019t slow down or lock up\n your PC. Finally, you enter the actual period, and the spreadsheet will tell you the stepgen parameter\n settings that are needed to meet your drive\u2019s timing requirements. It also calculates the maximum\n step rate that you will be able to generate.\n I\u2019ve added a few things to the spreadsheet to calculate max speed and stepper electrical calculations.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 138 / 1223\n \n 4.4 INI Configuration\n 4.4.1 The INI File Components\n A typical INI file follows a rather simple layout that includes;\n \u2014 comments\n@@ -8573,15 +8573,15 @@\n \u2014 [RS274NGC] settings used by the G-code interpreter\n \u2014 [EMCMOT] settings used by the real time motion controller\n \u2014 [TASK] settings used by the task controller\n \u2014 [HAL] specifies .hal files\n \u2014 [HALUI] MDI commands used by HALUI\n \u2014 [APPLICATIONS] Other applications to be started by LinuxCNC\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 139 / 1223\n \n \u2014 [TRAJ] additional settings used by the real time motion controller\n \u2014 [JOINT_n] individual joint variables\n \u2014 [AXIS_l] individual axis variables\n \u2014 [KINS] kinematics variables\n@@ -8619,15 +8619,15 @@\n TYPE = LINEAR\n ...\n SCALE = 16000\n \n To introduce a custom section with its own variables, add the section and variables to the INI file.\n Custom Section Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 140 / 1223\n \n [PROBE]\n Z_FEEDRATE = 50\n Z_OFFSET = 12\n Z_SAFE_DISTANCE = -10\n@@ -8667,15 +8667,15 @@\n #INCLUDE /home/myusername/myincludes/display.inc\n #INCLUDE ~/linuxcnc/myincludes/rs274ngc.inc\n \n The #INCLUDE directives are supported for one level of expansion only \u2014 an included file may not\n include additional files. The recommended file extension is .inc. Do not use a file extension of .ini for\n included files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 141 / 1223\n \n 4.4.2 INI File Sections\n 4.4.2.1 [EMC] Section\n \u2014 VERSION = 1.1 - The version number for the configuration. Any value other than 1.1 will cause the\n configuration checker to run and try to update the configuration to the new style joint axes type of\n@@ -8713,15 +8713,15 @@\n \u2014 MIN_SPINDLE_0_OVERRIDE = 0.5 - The minimum spindle override the user may select. 0.5 means\n 50% of the programmed spindle speed. (This is used to set the minimum spindle speed.) On multi\n spindle machine there will be entries for each spindle number. Only used by the QtVCP based user\n interfaces.\n \u2014 MAX_SPINDLE_OVERRIDE = 1.0 - The maximum spindle override the user may select. 1.0 means\n 100% of the programmed spindle speed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 142 / 1223\n \n \u2014 MAX_SPINDLE_0_OVERRIDE = 1.0 - The maximum feed override the user may select. 1.2 means\n 120% of the programmed feed rate. On multi spindle machine there will be entries for each spindle\n number. Only used by the QtVCP based user interfaces.\n \u2014 DEFAULT_SPINDLE_SPEED = 100 - The default spindle RPM when the spindle is started in manual\n@@ -8760,15 +8760,15 @@\n \u2014 EMBED_TAB_COMMAND = halcmd loadusr -Wn gladevcp gladevcp -c gladevcp -x {XID\\} -u ./glad\n ./gladevcp/manual-example.ui\n Note\n Different user interface programs use different options, and not every option is supported by every\n user interface. See AXIS GUI document for AXIS details. See GMOCCAPY document for GMOCCAPY\n details.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 143 / 1223\n \n \u2014 DEFAULT_LINEAR_VELOCITY = .25 - The default velocity for linear jogs, in machine units per second.\n \u2014 MIN_VELOCITY = .01 - The approximate lowest value the jog slider.\n \u2014 MAX_LINEAR_VELOCITY = 1.0 - The maximum velocity for linear jogs, in machine units per second.\n \u2014 MIN_LINEAR_VELOCITY = .01 - The approximate lowest value the jog slider.\n@@ -8814,15 +8814,15 @@\n 7. The proper GEOMETRY string depends on the machine configuration and the kinematics used\n to control it. The order of the letters is important. For example, rotating around C then B is\n different than rotating around B then C.\n 8. Rotations are by default applied with respect to the machine origin. Example: GEOMETRY=CXYZ\n first translates the control point to X, Y, Z and then performs a C rotation about the Z axis\n centered at the machine origin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 144 / 1223\n \n 9. UVW translation example: GEOMETRY=XYZUVW causes UVW to move in the coordinate system of\n the tool and XYZ to move in the coordinate system of the material.\n 10. Foam-cutting machines (FOAM = 1) should specify \u201dXY;UV\u201d or leave the value blank even though\n this value is presently ignored in foam-cutter mode. A future version may define what \u201d;\u201d\n@@ -8860,15 +8860,15 @@\n Note\n The following [DISPLAY] item is used by the TKLinuxCNC interface only.\n \u2014 HELP_FILE = tklinucnc.txt - Path to help file.\n 4.4.2.3 [FILTER] Section\n AXIS and GMOCCAPY have the ability to send loaded files through a filter program. This filter can\n do any desired task: Something as simple as making sure the file ends with M2, or something as\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 145 / 1223\n \n complicated as detecting whether the input is a depth image, and generating G-code to mill the shape it\n defines. The [FILTER] section of the INI file controls how filters work. First, for each type of file, write\n a PROGRAM_EXTENSION-line. Then, specify the program to execute for each type of file. This program\n is given the name of the input file as its first argument, and must write RS274NGC code to standard\n@@ -8912,15 +8912,15 @@\n file_out = []\n for line in file_in:\n # print(line)\n if line.find(\u2019Z\u2019) != -1:\n words = line.rstrip(\u2019\\n\u2019)\n words = words.split(\u2019 \u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 146 / 1223\n \n newword = \u2019\u2019\n for i in words:\n if i[0] == \u2019Z\u2019:\n newword = \u2019W\u2019+ i[1:]\n@@ -8962,15 +8962,15 @@\n 2. If [DISPLAY]PROGRAM_PREFIX is not specified, search the default location: nc_files\n 3. Then search each directory in the list [RS274NGC]USER_M_PATH.\n The first executable M1xx found in the search is used for each M1xx.\n Note\n The maximum number of USER_M_PATH directories is defined at compile time (typ:\n USER_DEFINED_FUNCTION_MAX_DIRS == 5).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 147 / 1223\n \n \u2014 INI_VARS = 1 (Default: 1)\n Allows G-code programs to read values from the INI file using the format #<_ini[section]name>.\n See G-code Parameters.\n \u2014 HAL_PIN_VARS = 1 (Default: 1)\n@@ -9013,15 +9013,15 @@\n \u2014 ON_ABORT_COMMAND=O call See Remap Extending G-code chapter for details.\n 4.4.2.5 [EMCMOT] Section\n This section is a custom section and is not used by LinuxCNC directly. Most configurations use values\n from this section to load the motion controller. For more information on the motion controller see the\n Motion section.\n \u2014 EMCMOT = motmod - the motion controller name is typically used here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 148 / 1223\n \n \u2014 BASE_PERIOD = 50000 - the Base task period in nanoseconds.\n \u2014 SERVO_PERIOD = 1000000 - This is the \u201dServo\u201d task period in nanoseconds.\n \u2014 TRAJ_PERIOD = 100000 - This is the Trajectory Planner task period in nanoseconds.\n \u2014 COMM_TIMEOUT = 1.0 - Number of seconds to wait for Motion (the realtime part of the motion\n@@ -9060,15 +9060,15 @@\n See the HALTCL Chapter for more information.\n \u2014 HALFILE = LIB:sys_example.hal - Execute the system library file sys_example.hal at start up.\n Explicit use of the LIB: prefix causes use of the system library HALFILE without searching the INI\n file directory.\n \u2014 HALFILE = LIB:sys_texample.tcl [arg1 [arg2 \u2026]] - Execute the system library file sys_texample.tcl\n at start up. Explicit use of the LIB: prefix causes use of the system library HALFILE without searching the INI file directory.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 149 / 1223\n \n HALFILE items specify files that loadrt HAL components and make signal connections between component pins. Common mistakes are\n 1. omission of the addf statement needed to add a component\u2019s function(s) to a thread,\n 2. incomplete signal (net) specifiers.\n Omission of required addf statements is almost always an error. Signals usually include one or more\n@@ -9108,15 +9108,15 @@\n \u2014 MDI_COMMAND = G53 G0 X0 Y0 Z0 - An MDI command can be executed by using halui.mdi-command-00.\n Increment the number for each command listed in the [HALUI] section.\n 4.4.2.9 [APPLICATIONS] Section\n LinuxCNC can start other applications before the specified GUI is started. The applications can be\n started after a specified delay to allow for GUI-dependent actions (like creating GUI-specific HAL\n pins).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 150 / 1223\n \n \u2014 DELAY = value - seconds to wait before starting other applications. A delay may be needed if an\n application has dependencies on [HAL]POSTGUI_HALFILE actions or GUI-created HAL pins (default\n DELAY=0).\n \u2014 \u2018APP = \u0300 appname [arg1 [arg2 \u2026]]\u2019 - Application to be started. This specification can be included\n@@ -9159,15 +9159,15 @@\n # n = v_max / (2.0 * a_max * t_c)\n # where:\n # n = optimization depth\n # v_max = max axis velocity (UU / sec)\n # a_max = max axis acceleration (UU / sec)\n # t_c = servo period (seconds)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 151 / 1223\n \n So, a machine with a maximum axis velocity of 10 IPS, a max acceleration of 100 IPS2 , and a servo\n period of 0.001 s would need:\n 10 / (2.0 * 100 * 0.001) = 50 segments to always reach maximum velocity along the fastest axis.\n In practice, this number isn\u2019t that important to tune, since the look ahead rarely needs the full\n@@ -9212,15 +9212,15 @@\n # f = cutoff frequency from INI\n \n For the aforementioned machine, the ripple for a 20 Hz cutoff frequency is 100 / (4 * 20) = 1.25 IPS.\n This seems high, but keep in mind that it is only a worst-case estimate. In reality, the trapezoidal\n motion profile is limited by other factors, such as normal acceleration or requested velocity, and so\n the actual performance loss should be much smaller. Increasing the cutoff frequency can squeeze\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 152 / 1223\n \n out more performance, but make the motion rougher due to acceleration discontinuities. A value\n in the range 20 Hz to 200 Hz should be reasonable to start.\n Finally, no amount of tweaking will speed up a tool path with lots of small, tight corners, since you\u2019re\n limited by cornering acceleration.\n@@ -9267,15 +9267,15 @@\n (mill, lathe, gantry types) this value is ignored. Note: The sim hexapod config requires a non-zero\n value for the Z coordinate.\n \u2014 TPMOD = alternate_trajectory_planning module [tp_parms=value]\n The TPMOD variable is optional. If specified, use a specified (user-built) module instead of the default\n (tpmod). Module parameters (tp_parms) may be included if supported by the named module. The\n setting may be overridden from the command line using the -t option ($ linuxcnc -h).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 153 / 1223\n \n \u2014 NO_PROBE_JOG_ERROR = 0 - Allow to bypass probe tripped check when you jog manually.\n \u2014 NO_PROBE_HOME_ERROR = 0 - Allow to bypass probe tripped check when homing is in progress.\n 4.4.2.11 [KINS] Section\n \u2014 JOINTS = 3 - Specifies the number of joints (motors) in the system. For example, a trivkins XYZ\n@@ -9314,15 +9314,15 @@\n offsets:\n axis..eoffset-enable\n axis..eoffset-count\n axis..eoffset-scale\n \n See the chapter: External Axis Offsets for usage information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 154 / 1223\n \n 4.4.2.13 [JOINT_] Sections\n The specifies the joint number 0 \u2026 (num_joints-1) The value of num_joints is set by [KINS]JOINTS=.\n The [JOINT_0], [JOINT_1], etc. sections contains general parameters for the individual components\n in the joint control module. The joint section names begin numbering at 0, and run through the number\n@@ -9367,15 +9367,15 @@\n (commanded) position for both types.\n A COMP_FILE_TYPE must be specified for each COMP_FILE.\n \u2014 Type 0: The second value specifies the actual position as the joint is moving in the positive\n direction (increasing value). The third value specifies the actual position as the joint is moving\n in the negative direction (decreasing value).\n Type 0 Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 155 / 1223\n \n -1.000 -1.005 -0.995\n 0.000 0.002 -0.003\n 1.000 1.003 0.998\n \n@@ -9416,15 +9416,15 @@\n 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,\n and proportionally smaller following errors for slower speeds. The maximum allowable following\n error will always be greater than MIN_FERROR. This prevents small following errors for stationary\n axes from inadvertently aborting motion. Small following errors will always be present due to vibration, etc.\n \u2014 LOCKING_INDEXER = 1 - Indicates the joint is used as a locking indexer.\n These parameters are Homing related, for a better explanation read the Homing Configuration Chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 156 / 1223\n \n \u2014 HOME = 0.0 - The position that the joint will go to upon completion of the homing sequence.\n \u2014 HOME_OFFSET = 0.0 - The joint position of the home switch or index pulse, in machine units. When\n the home point is found during the homing process, this is the position that is assigned to that point.\n When sharing home and limit switches and using a home sequence that will leave the home/limit\n@@ -9470,15 +9470,15 @@\n settings in one place. For more information on custom INI file entries see the Custom Sections\n and Variables subsection.\n \n The following items might be used by a PID component and the assumption is that the output is volts.\n \u2014 DEADBAND = 0.000015 - How close is close enough to consider the motor in position, in machine\n units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 157 / 1223\n \n This is often set to a distance equivalent to 1, 1.5, 2, or 3 encoder counts, but there are no strict\n rules. Looser (larger) settings allow less servo hunting at the expense of lower accuracy. Tighter\n (smaller) settings attempt higher accuracy at the expense of more servo hunting. Is it really more\n accurate if it\u2019s also more uncertain? As a general rule, it\u2019s good to avoid, or at least limit, servo\n@@ -9512,15 +9512,15 @@\n \n \u2014 OUTPUT_SCALE = 1.000\n \u2014 OUTPUT_OFFSET = 0.000\n These two values are the scale and offset factors for the joint output to the motor amplifiers.\n The second value (offset) is subtracted from the computed output (in volts), and divided by the first\n value (scale factor), before being written to the D/A converters. The units on the scale value are\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 158 / 1223\n \n in true volts per DAC output volts. The units on the offset value are in volts. These can be used to\n linearize a DAC. Specifically, when writing outputs, the LinuxCNC first converts the desired output\n in quasi-SI units to raw actuator values, e.g., Volts for an amplifier DAC. This scaling looks like:\n \n@@ -9564,15 +9564,15 @@\n \u2014 MAX_OUTPUT = 10 - The maximum value for the output of the PID compensation that is written\n to the motor amplifier, in volts. The computed output value is clamped to this limit. The limit is\n applied before scaling to raw output units. The value is applied symmetrically to both the plus and\n the minus side.\n \u2014 INPUT_SCALE = 20000 - in Sample configs\n \u2014 ENCODER_SCALE = 20000 - in PnCconf built configs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 159 / 1223\n \n Specifies the number of pulses that corresponds to a move of one machine unit as set in the [TRAJ]\n section. For a linear joint one machine unit will be equal to the setting of LINEAR_UNITS. For an angular\n joint one unit is equal to the setting in ANGULAR_UNITS. A second number, if specified, is ignored. For\n example, on a 2000 counts per rev encoder, and 10 revs/inch gearing, and desired units of inch, we\n@@ -9610,15 +9610,15 @@\n loop\u201d. If you have added backlash compensation to an joint then this should be 1.5 to 2 times\n greater than MAX_ACCELERATION.\n \u2014 STEPGEN_MAXVEL = 1.4 - Older configuration files have a velocity limit for the step generator as\n well. If specified, it should also be 1% to 10% larger than the joint MAX_VELOCITY. Subsequent\n testing has shown that use of STEPGEN_MAXVEL does not improve the tuning of StepGen\u2019s position\n loop.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 160 / 1223\n \n 4.4.2.14 [SPINDLE_] Section(s)\n The specifies the spindle number 0 \u2026 (num_spindles-1)\n The value of num_spindles is set by [TRAJ]SPINDLES= .\n By default maximum velocity of the spindle in forward and reverse is approximately 2147483000 RPM.\n@@ -9661,15 +9661,15 @@\n the XYZABCUVW location when 9 digits are used. Tool Changes can be combined. For example if\n you combine the quill up with change position you can move the Z first then the X and Y.\n \u2014 TOOL_CHANGE_WITH_SPINDLE_ON = 1 - The spindle will be left on during the tool change when the\n value is 1. Useful for lathes or machines where the material is in the spindle, not the tool.\n \u2014 TOOL_CHANGE_QUILL_UP = 1 - The Z axis will be moved to machine zero prior to the tool change\n when the value is 1. This is the same as issuing a G0 G53 Z0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 161 / 1223\n \n \u2014 TOOL_CHANGE_AT_G30 = 1 - The machine is moved to reference point defined by parameters 51815186 for G30 if the value is 1. For more information see G-code Parameters and G-code G30-G30.1.\n \u2014 RANDOM_TOOLCHANGER = 1 - This is for machines that cannot place the tool back into the pocket it\n came from. For example, machines that exchange the tool in the active pocket with the tool in the\n spindle.\n@@ -9709,15 +9709,15 @@\n \u2014 If using a separate homing switch, it is possible to start homing on the wrong side of the home\n switch, which combined with HOME_IGNORE_LIMITS option will lead to a hard crash. You can\n avoid this by making the home switch toggle its state when the trip dog is on a particular side until\n it returns passed the trip point again. Said another way, the home switch state must represent the\n position of the dog relative to the switch (ie before or after the switch), and must stay that way\n even if the dog coasts past the switch in the same direction.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 162 / 1223\n \n Note\n While it is possible to use LinuxCNC with the G53 machine origin outside the soft machine limits, if\n you use G28 or G30 without setting the parameters it goes to the origin by default. This would trip\n the limit switches before getting to position.\n@@ -9741,15 +9741,15 @@\n \u2014 Note that there is distance between the limit switches and actual physical hard contact for coasting\n after the amplifier is disabled.\n Note\n Homing sets the G53 coordinate system, while the machine origin (zero point) can be anywhere,\n setting the zero point at the negative soft limit makes all G53 coordinates positive, which is probably\n easiest to remember. Do this by setting MIN_LIMIT = 0 and make sure MAX_LIMIT is positive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 163 / 1223\n \n 4.5.4 Shared Limit/Home Switch Example Layout\n This example shows a maximum limit switch and a combined minimum limit/home switch.\n \n Figure 4.7 \u2013 Demonstrative Shared Switch Layout\n@@ -9771,21 +9771,21 @@\n 4.5.5 Homing Sequence\n \n There are four possible homing sequences defined by the sign of HOME_SEARCH_VEL and HOME_LATCH_V\n along with the associated configuration parameters as shown in the following table. Two basic conditions exist, HOME_SEARCH_VEL and HOME_LATCH_VEL are the same sign or they are opposite\n signs. For a more detailed description of what each configuration parameter does, see the following\n section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 164 / 1223\n \n Figure 4.8 \u2013 Homing Sequences\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 165 / 1223\n \n 4.5.6 Configuration\n The following determines exactly how the home sequence behaves. They are defined in an [JOINT_n]\n section of the INI file.\n Homing Type\n@@ -9839,15 +9839,15 @@\n value is zero.\n 4.5.6.3 HOME_FINAL_VEL\n This variable has units of machine-units per second.\n It specifies the speed that LinuxCNC uses when it makes its move from HOME_OFFSET to the HOME\n position. If the HOME_FINAL_VEL is missing from the INI file, then the maximum joint speed is used\n to make this move. The value must be a positive number.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 166 / 1223\n \n 4.5.6.4 HOME_IGNORE_LIMITS\n Can hold the values YES / NO. The default value for this parameter is NO. This flag determines whether\n LinuxCNC will ignore the limit switch input for this joint while homing. This setting will not ignore\n limit inputs for other joints. If you do not have a separate home switch set this to YES and connect the\n@@ -9881,15 +9881,15 @@\n switch or home switch then index pulse (depending on configuration), and setting the coordinate of\n that point to HOME_OFFSET, LinuxCNC makes a move to HOME as the final step of the homing\n process. The default value is zero. Note that even if this parameter is the same as HOME_OFFSET,\n the joint will slightly overshoot the latched position as it stops. Therefore there will always be a small\n move at this time (unless HOME_SEARCH_VEL is zero, and the entire search/latch stage was skipped).\n This final move will be made at the joint\u2019s maximum velocity unless HOME_FINAL_VEL has been set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 167 / 1223\n \n Note\n The distinction between HOME_OFFSET and HOME is that HOME_OFFSET first establishes the origin\n location and scale on the machine by applying the HOME_OFFSET value to the location where home\n was found, and then HOME says where the joint should move to on that scale.\n@@ -9925,15 +9925,15 @@\n The initial HOME_SEQUENCE number may be 0, 1 (or -1). The absolute value of sequence numbers\n must increment by one \u2014 skipping sequence numbers is not supported. If a sequence number is omitted, HOME ALL homing will stop upon completion of the last valid sequence number.\n Negative HOME_SEQUENCE values indicate that joints in the sequence should synchronize the\n final move to [JOINT_n]HOME by waiting until all joints in the sequence are ready. If any joint has a\n negative HOME_SEQUENCE value, then all joints with the same absolute value (positive or negative)\n of the HOME_SEQUENCE item value will synchronize the final move.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 168 / 1223\n \n A negative HOME_SEQUENCE also applies to commands to home a single joint. If the HOME_SEQUENCE\n value is negative, all joints having the same absolute value of that HOME_SEQUENCE will be homed together with a synchronized final move. If the HOME_SEQUENCE value is zero or positive,\n a command to home the joint will home only the specified joint.\n Joint mode jogging of joints having a negative HOME_SEQUENCE is disallowed. In common gantry\n@@ -9976,15 +9976,15 @@\n 4.5.6.13 LOCKING_INDEXER\n If this joint is a locking rotary indexer, it will unlock before homing, and lock afterward.\n 4.5.6.14 Immediate Homing\n If a joint does not have home switches or does not have a logical home position like a rotary joint and\n you want that joint to home at the current position when the \u201dHome All\u201d button is pressed in the AXIS\n GUI, then the following INI entries for that joint are needed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 169 / 1223\n \n HOME_SEARCH_VEL = 0\n HOME_LATCH_VEL = 0\n HOME_USE_INDEX = NO\n HOME_OFFSET = 0 (Or the home position offset (HOME))\n@@ -10029,15 +10029,15 @@\n net hsequence_select => motion.homing-inhibit\n \n Note\n INI HAL pins (like ini.N.home_sequence) are not available until milltask starts so execution of the\n above HAL commands should be deferred using a postgui HAL file or a delayed [APPLICATION]APP=\n script.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 170 / 1223\n \n Note\n Realtime synchronization of joint jogging for multiple joints requires additional HAL connections for the Manual-Pulse-Generator (MPG) type jog pins (joint.N.enable, joint.N.scale,\n joint.N.counts).\n \n@@ -10073,15 +10073,15 @@\n PROTOCOL_VERSION = 2\n Defaults to 2. Setting to 1 will emulate old iocontrol behaviour.\n EMCIO = iov2 -support-start-change\n You need to explicitly enable the start-change protocol by adding the -support-start-change option; otherwise the start-change pin remains low and start-change-ack is ignored. The reason for\n this is better backwards compatibility.\n [TASK] section\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 171 / 1223\n \n IO_ERROR\n Printf-style template for operator error display (negative toolchanger fault codes). No quoting\n needed. Example: IO_ERROR = Toolchanger fault %d. Default: toolchanger error %d.\n [EMC] section\n@@ -10125,15 +10125,15 @@\n \u2014 toolchanger-reason: (S32, in) convey reason code for toolchanger-originated fault to iov2. Usage:\n signal whether to continue or abort the program, plus UI informational if negative. Read during\n toolchanger-fault TRUE. Non-zero values will cause an Axis operator operator message or error\n message, see below.\n \u2014 toolchanger-faulted: (bit, out) signals toolchanger-notify line has toggled and toolchanger-reasoncode was in the fault range. Next M6 will abort.\n \u2014 toolchanger-clear-fault: (bit, in) resets TC fault condition. Deasserts toolchanger-faulted if toolchangernotify is line FALSE. Usage: UI - e.g., clear fault condition button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 172 / 1223\n \n 4.6.4 Parameters\n \u2014 iocontrol.0.tool-prep-index (s32, RO) IO\u2019s internal array index of the prepped tool requested by the\n most recent T-word. 0 if no tool is prepped. On random toolchanger machines this is tool\u2019s pocket\n number (i.e., the same as the tool-prep-pocket pin), on non-random toolchanger machines this is a\n@@ -10169,15 +10169,15 @@\n of the toolchanger-reason pin.\n \u2014 toolchanger-reason = 0 : the program is aborted\n \u2014 toolchanger-reason < 0 : the program is aborted and an operator error message is displayed by\n using the IO_ERROR template.\n The usage of the toolchanger-fault-ack pin is optional. It will become TRUE when toolchanger-fault is\n raised and the toolchanger-reason pin has been read by iov2.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 173 / 1223\n \n 4.7 Lathe Configuration\n 4.7.1 Default Plane\n When LinuxCNC\u2019s interpreter was first written, it was designed for mills. That is why the default\n plane is XY (G17). A normal lathe only uses the XZ plane (G18). To change the default plane place the\n@@ -10220,15 +10220,15 @@\n ...\n [KINS]\n KINEMATICS = trivkins coordinates=xz\n JOINTS = 2\n [TRAJ]\n COORDINATES = X Z\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 174 / 1223\n \n ...\n [JOINT_0]\n ...\n [JOINT_1]\n@@ -10275,15 +10275,15 @@\n \n Dir. Hold\n (ns)\n \n Dir. Setup\n (ns)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 175 / 1223\n \n 4.8.5 Pinout Information\n Gather the information about the connections from your machine to the PC parallel port.\n Output Pin\n 1\n@@ -10376,15 +10376,15 @@\n = 10 micro steps per step\n Motor Teeth\n = 20\n Leadscrew Teeth = 40\n Leadscrew Pitch =\n 0.2000 inches per turn\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 176 / 1223\n \n From the above information, the leadscrew moves 0.200 inches per turn. - The motor turns 2.000\n 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.\n So the scale needed is:\n \n@@ -10420,15 +10420,15 @@\n its INPUT_SCALE. If the requested step rate is not attainable, following errors will occur, particularly\n during fast jogs and G0 moves.\n If your stepper driver can accept quadrature input, use this mode. With a quadrature signal, one step\n is possible for each BASE_PERIOD, doubling the maximum step rate.\n The other remedies are to decrease one or more of: the BASE_PERIOD (setting this too low will cause\n the machine to become unresponsive or even lock up), the INPUT_SCALE (if you can select different\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 177 / 1223\n \n step sizes on your stepper driver, change pulley ratios, or leadscrew pitch), or the MAX_VELOCITY\n and STEPGEN_MAXVEL.\n If no valid combination of BASE_PERIOD, INPUT_SCALE, and MAX_VELOCITY is acceptable, then\n consider using hardware step generation (such as with the LinuxCNC-supported Universal Stepper\n@@ -10471,15 +10471,15 @@\n net Ydir => parport.0.pin-04-out\n net Zstep => parport.0.pin-07-out\n net Zdir => parport.0.pin-06-out\n # create a signal for the estop loopback\n net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in\n # create signals for tool loading loopback\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 178 / 1223\n \n net tool-prep-loop iocontrol.0.tool-prepare iocontrol.0.tool-prepared\n net tool-change-loop iocontrol.0.tool-change iocontrol.0.tool-changed\n # connect \u201dspindle on\u201d motion controller pin to a physical pin\n net spindle-on spindle.0.on => parport.0.pin-09-out\n@@ -10520,15 +10520,15 @@\n ###\n # net Xlimits parport.0.pin-13-in => joint.0.neg-lim-sw-in joint.0.pos-lim-sw-in\n \n The lines starting with # are comments, and their only purpose is to guide the reader through the file.\n 4.9.3.2 Overview\n There are a couple of operations that get executed when the standard_pinout.hal gets executed/interpreted:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 179 / 1223\n \n \u2014 The Parport driver gets loaded (see the Parport Chapter for details).\n \u2014 The read & write functions of the parport driver get assigned to the base thread 5 .\n \u2014 The step & direction signals for axes X, Y, Z get linked to pins on the parport.\n \u2014 Further I/O signals get connected (estop loopback, toolchanger loopback).\n@@ -10563,15 +10563,15 @@\n setp pwmgen.0.scale 1800 # Change to your spindle\u2019s top speed in RPM\n \n This assumes that the spindle controller\u2019s response to PWM is simple: 0% PWM gives 0 RPM, 10%\n PWM gives 180 RPM, etc. If there is a minimum PWM required to get the spindle to turn, follow the\n example in the nist-lathe sample configuration to use a scale component.\n 5. The fastest thread in the LinuxCNC setup, usually the code gets executed every few tens of microseconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 180 / 1223\n \n 4.9.3.6 Adding an enable signal\n Some amplifiers (drives) require an enable signal before they accept and command movement of the\n motors. For this reason there are already defined signals called Xen, Yen, Zen.\n To connect them use the following example:\n@@ -10605,15 +10605,15 @@\n 4.10.2 Error Messages\n 4.10.2.1 Following Error\n The concept of a following error is strange when talking about stepper motors. Since they are an open\n loop system, there is no position feedback to let you know if you actually are out of range. LinuxCNC\n calculates if it can keep up with the motion called for, and if not, then it gives a following error.\n Following errors usually are the result of one of the following on stepper systems.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 181 / 1223\n \n \u2014 FERROR too small\n \u2014 MIN_FERROR too small\n \u2014 MAX_VELOCITY too fast\n \u2014 MAX_ACCELERATION too fast\n@@ -10652,15 +10652,15 @@\n MAX_ACCELERATION or MAX_VELOCITY set too high for that axis.\n The following program will test the Z axis configuration for proper setup. Copy the program to your\n \\~/emc2/nc_files directory and name it TestZ.ngc or similar. Zero your machine with Z = 0.000 at the\n table top. Load and run the program. It will make 200 moves back and forth from 0.5 to 1\u201d. If you have\n a configuration issue, you will find that the final position will not end up 0.500\u201d that the axis window\n is showing. To test another axis just replace the Z with your axis in the G0 lines.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 182 / 1223\n \n ( test program to see if Z axis loses position )\n ( msg, test 1 of Z axis configuration )\n G20 #1000=100 ( loop 100 times )\n ( this loop has delays after moves )\n@@ -10707,15 +10707,15 @@\n PROGRAM_EXTENSION = .py Python Script\n py = python\n \n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 183 / 1223\n \n Figure 4.9 \u2013 Circular Holes\n If the filter program sends lines to stderr of the form:\n FILTER_PROGRESS=10\n \n@@ -10735,15 +10735,15 @@\n time.sleep(.1)\n # output a line of G-code\n print(\u2019G0 X1\u2019, file=sys.stdout)\n # update progress\n print(\u2019FILTER_PROGRESS={}\u2019.format(i), file=sys.stderr)\n except:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 184 / 1223\n \n # This causes an error message\n print(\u2019Error; But this was only a test\u2019, file=sys.stderr)\n raise SystemExit(1)\n \n@@ -10786,15 +10786,15 @@\n raise SystemExit(1)\n def process(self):\n try:\n # get next line of code\n codeLine = self.temp[self.line]\n # process the line somehow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 185 / 1223\n \n # push out processed code\n print(codeLine, file=sys.stdout)\n self.line +=1\n # update progress\n@@ -10816,15 +10816,15 @@\n else:\n path = None\n app = QApplication(sys.argv)\n w = CustomDialog(path=path)\n w.show()\n sys.exit( app.exec_() )\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 186 / 1223\n \n Chapitre 5\n \n HAL (Hardware Abstraction Layer)\n 5.1 HAL Introduction\n@@ -10852,15 +10852,15 @@\n \u2014 how allow for updates of the internal state by sensors (encoders, probes).\n The HAL layer consists of parts (referred to as \u201dcomponents\u201d) that\n \u2014 are connected with each other, e.g., to update position data or have the planning algorithm tell the\n motors about the next step.\n \u2014 may know how to communicate with hardware,\n \u2014 may simply process incoming data and provide data outputs to other components,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 187 / 1223\n \n \u2014 are always periodically executed either\n \u2014 with a very high frequency of a few microseconds (\u00b5s) execution time, called base thread, e.g.,\n to\n 1. give a stepper motor a trigger to step ahead, or to\n@@ -10897,15 +10897,15 @@\n the current implementation of LinuxCNC is limited to a single interpreter and a single Task module.\n Currently this is almost always a G-code interpreter and \u201dmilltask\u201d (which was found to also work well\n for lathes and adequately for robots) but these modules are selectable at load-time. With an increasing\n interest in the control of multiple cooperating machines, to overcome this limitation is likely one of\n the prime steps for the future development of LinuxCNC to address. It is a bit tricky though and the\n community is still organizing its thoughts on this.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 188 / 1223\n \n HAL lies at the core of LinuxCNC and is used and/or extended by all the parts of LinuxCNC, which\n includes the GUIs. The G-code (or alternative language) interpreter knows how to interpret the G-code\n and translates it into machine operations by triggering signals in HAL. The user may query HAL in\n various ways to gain information about its state, which then also represents the state of the machine.\n@@ -10947,15 +10947,15 @@\n \u2014 positions that stepper motors should take next\n In a analogy to electronic cables, pins can be wired, so the value changing in one pin serves as input to\n another pin. HAL components prepare such input and output pins and are thus automatically triggered\n to perform.\n HAL Components The many \u201dexpert\u201d software parts of LinuxCNC are typically implemented as components of HAL, conceptually also referred to as modules. These computer-implemented experts perpetually read from HAL about a state that the machine should strive to achieve and compare that\n desired state with the state the machine is in at the current moment. When there is a difference\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 189 / 1223\n \n between what should be and what the current state is then some action is performed to reduce that\n difference, while perpetually writing updates of the current states back to the HAL data space.\n There are components specializing on how to talk to stepper motors, and other components know how\n to control servos. On a higher level, some components know how the machine\u2019s axes are arranged\n@@ -10990,15 +10990,15 @@\n HAL is based on traditional system design techniques. HAL is based on the same principles that\n are used to design hardware circuits and systems, so it is useful to examine those principles first.\n Any system, including a CNC machine, consists of interconnected components. For the CNC machine,\n those components might be the main controller, servo amps or stepper drives, motors, encoders, limit\n switches, pushbutton pendants, perhaps a VFD for the spindle drive, a PLC to run a toolchanger, etc.\n The machine builder must aselect, mount and wire these pieces together to make a complete system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 190 / 1223\n \n Figure 5.1 \u2013 HAL Concept - Connecting like electrical circuits.\n Figure one would be written in HAL code like this:\n net signal-blue\n net signal-red\n@@ -11018,15 +11018,15 @@\n about which specific components to use is based on what that component does and the specifications\n supplied by the manufacturer of the device. The size of a motor and the load it must drive will affect the\n choice of amplifier needed to run it. The choice of amplifier may affect the kinds of feedback needed\n by the amp and the velocity or position signals that must be sent to the amp from a control.\n In the HAL world, the integrator must decide what HAL components are needed. Usually every interface card will require a driver. Additional components may be needed for software generation of step\n pulses, PLC functionality, and a wide variety of other tasks.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 191 / 1223\n \n 5.1.3.2 Interconnection Design\n The designer of a hardware system not only selects the parts, he also decides how those parts will be\n interconnected. Each black box has terminals, perhaps only two for a simple switch, or dozens for a\n servo drive or PLC. They need to be wired together. The motors connect to the servo amps, the limit\n@@ -11050,15 +11050,15 @@\n HAL provides the software equivalents of a voltmeter, oscilloscope, signal generator, and other tools\n needed for testing and tuning a system. The same commands used to build the system can be used to\n make changes as needed.\n 5.1.3.5 Summary\n This document is aimed at people who already know how to do this kind of hardware system integration, but who do not know how to connect the hardware to LinuxCNC. See the Remote Start Example\n section in the HAL UI Examples documentation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 192 / 1223\n \n Figure 5.2 \u2013 Remote Start Example (Schema)\n The traditional hardware design as described above ends at the edge of the main control. Outside the\n control are a bunch of relatively simple boxes, connected together to do whatever is needed. Inside,\n the control is a big mystery \u2014 one huge black box that we hope works.\n@@ -11084,15 +11084,15 @@\n or flow in the HAL way of things.\n Component\n When we talked about hardware design, we referred to the individual pieces as parts, building\n blocks, black boxes, etc. The HAL equivalent is a component or HAL component. This document\n uses HAL component when there is likely to be confusion with other kinds of components, but\n normally just uses component. A HAL component is a piece of software with well-defined inputs,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 193 / 1223\n \n outputs, and behavior, that can be installed and interconnected as needed. + + Many HAL Components model the behaviour of a tangible part of a machine, and a pin may indeed be meant to\n be connected to a physical pin on the device to communicate with it, hence the names. But most\n often this is not the case. Imagine a retrofit of a manual lathe/mill. What LinuxCNC implements\n is how the machine presents itself to the outside world, and it is secondary if the implementation\n@@ -11137,15 +11137,15 @@\n \u2014 s32 - a 32 bit signed integer, legal values are -2,147,483,647 to +2,147,483,647\n Function\n Real hardware components tend to act immediately on their inputs. For example, if the input\n voltage to a servo amp changes, the output also changes automatically. However software components cannot act automatically. Each component has specific code that must be executed to\n do whatever that component is supposed to do. In some cases, that code simply runs as part of\n the component. However in most cases, especially in realtime components, the code must run in\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 194 / 1223\n \n a specific sequence and at specific intervals. For example, inputs should be read before calculations are performed on the input data, and outputs should not be written until the calculations\n are done. In these cases, the code is made available to the system in the form of one or more\n functions. Each function is a block of code that performs a specific action. The system integrator can use threads to schedule a series of functions to be executed in a particular order and at\n specific time intervals.\n@@ -11188,15 +11188,15 @@\n What distinguishes one thread from another is not what the thread does - that is determined by which\n functions are connected to it. The real distinction is simply how often a thread runs.\n In LinuxCNC you might have a 50 \u00b5s thread and a 1 ms thread. These would be created based on\n BASE_PERIOD and SERVO_PERIOD, the actual times depend on the values in your INI file.\n The next step is to decide what each thread needs to do. Some of those decisions are the same in\n (nearly) any LinuxCNC system. For instance, motion-command-handler is always added to servothread.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 195 / 1223\n \n Other connections would be made by the integrator. These might include hooking the STG driver\u2019s\n encoder read and DAC write functions to the servo thread, or hooking StepGen\u2019s function to the basethread, along with the parport function(s) to write the steps to the port.\n \n 5.2 HAL Basics\n@@ -11207,15 +11207,15 @@\n window.\n To see the HAL configuration and check the status of pins and parameters use the HAL Configuration\n window on the Machine menu in AXIS. To watch a pin status open the Watch tab and click on each\n pin you wish to watch and it will be added to the watch window.\n \n Figure 5.3 \u2013 HAL Configuration Window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 196 / 1223\n \n 5.2.1.1 loadrt\n The command loadrt loads a real time HAL component. Real time component functions need to be\n added to a thread to be updated at the rate of the thread. You cannot load a non-realtime component\n into the realtime space.\n@@ -11279,15 +11279,15 @@\n addf Syntax and Example\n addf \n addf mux4.0 servo-thread\n \n Note\n If the component requires a floating point thread that is usually the slower servo-thread.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 197 / 1223\n \n 5.2.1.3 loadusr\n The command loadusr loads a non-realtime HAL component. Non-realtime programs are their own\n separate processes, which optionally talk to other HAL components via pins and parameters. You\n cannot load realtime components into non-realtime space.\n@@ -11337,15 +11337,15 @@\n A pin can be connected to a signal if it obeys the following rules:\n \u2014 An IN pin can always be connected to a signal.\n \u2014 An IO pin can be connected unless there\u2019s an OUT pin on the signal.\n \u2014 An OUT pin can be connected only if there are no other OUT or IO pins on the signal.\n The same signal-name can be used in multiple net commands to connect additional pins, as long as\n the rules above are obeyed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 198 / 1223\n \n Figure 5.4 \u2013 Signal Direction\n This example shows the signal xStep with the source being stepgen.0.out and with two readers,\n parport.0.pin-02-out and parport.0.pin-08-out. Basically the value of stepgen.0.out is sent to\n the signal xStep and that value is then sent to parport.0.pin-02-out and parport.0.pin-08-out.\n@@ -11368,15 +11368,15 @@\n 5.2.1.5 setp\n The command setp sets the value of a pin or parameter. The valid values will depend on the type of\n the pin or parameter. It is an error if the data types do not match.\n Some components have parameters that need to be set before use. Parameters can be set before use\n or while running as needed. You cannot use setp on a pin that is connected to a signal.\n Syntax and Examples of setp\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 199 / 1223\n \n setp \n setp parport.0.pin-08-out TRUE\n \n 5.2.1.6 sets\n@@ -11417,15 +11417,15 @@\n Type must be bit, s32, u32 or float. Error if already exists.\n Syntax and Examples of newsig\n newsig \n newsig Xstep bit\n \n More information can be found in the HAL manual or the man pages for halrun.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 200 / 1223\n \n 5.2.2 HAL Data\n 5.2.2.1 Bit\n A bit value is an on or off.\n \u2014 bit values = true or 1 and false or 0 (True, TRUE, true are all valid)\n@@ -11463,15 +11463,15 @@\n .tmax\n \n Tmax is the maximum number of CPU cycles it took to execute the function.\n \n tmax is a read/write parameter so the user can set it to 0 to get rid of the first time initialization on\n the function\u2019s execution time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 201 / 1223\n \n 5.2.5 Basic Logic Components\n HAL contains several real time logic components. Logic components follow a Truth Table that states\n what the output is for any given input. Typically these are bit manipulators and follow electrical logic\n gate truth tables.\n@@ -11518,15 +11518,15 @@\n \n out\n False\n False\n False\n True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 202 / 1223\n \n Table 5.2: Truth Table of not\n in\n True\n False\n@@ -11576,15 +11576,15 @@\n \n out\n True\n True\n True\n False\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 203 / 1223\n \n Table 5.4: xor2 Truth Table\n in0\n True\n True\n@@ -11654,15 +11654,15 @@\n FALSE\n \n Name\n wsum.0.bit.0.in\n wsum.0.bit.0.weight\n wsum.0.bit.1.in\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 204 / 1223\n \n Table 5.5: (continued)\n Owner\n 10\n 10\n@@ -11743,15 +11743,15 @@\n With TWOPASS enabled, you can have multiple specifications like:\n loadrt and2 names=aa\n ...\n loadrt and2 names=ab,ac\n ...\n loadrt and2 names=ad\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 205 / 1223\n \n These commands can appear in different HAL files. The HAL files are processed in the order of their\n appearance in the INI file, in multiple HALFILE assignments.\n The TWOPASS option can be specified with options to add output for debugging (verbose) and to\n prevent deletion of temporary files (nodelete). The options are separated with commas.\n@@ -11792,15 +11792,15 @@\n convenient to place all the [HAL]POSTGUI_HALFILE loadrt declarations for the necessary components in a preloaded HAL file.\n Example of a HAL section when using a POSTGUI_HALFILE\n [HAL]\n TWOPASS = on\n HALFILE = core_sim.hal\n HALFILE = sim_spindle_encoder.hal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 206 / 1223\n \n HALFILE = axis_manualtoolchange.hal\n HALFILE = simulated_home.hal\n HALFILE = load_for_postgui.hal <- loadrt lines for components in postgui.hal\n POSTGUI_HALFILE = postgui.hal\n@@ -11841,15 +11841,15 @@\n $ cat twopass_excluded.hal\n # The following magic comment causes this file to\n # be excluded from twopass processing:\n # NOTWOPASS\n # debugging component with complex options:\n loadrt mycomponent parm1=\u201dabc def\u201d parm2=ghi\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 207 / 1223\n \n show pin mycomponent\n # ordering special components\n loadrt component_1\n loadrt component_2\n@@ -11883,15 +11883,15 @@\n 5.4.2.1 Notation\n For this tutorial, commands for the operating system are typically shown without the prompt provided\n by the UNIX shell, i.e typically a dollar sign ($) or a hash/double cross (#). When communicating\n directly with the HAL through halcmd or halrun, the prompts are shown in the examples. The terminal\n window is in Applications/Accessories from the main Ubuntu menu bar.\n Terminal Command Example - prompts\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 208 / 1223\n \n me@computer:~linuxcnc$ halrun\n (will be shown like the following line)\n halrun\n (the halcmd: prompt will be shown when running HAL)\n@@ -11929,15 +11929,15 @@\n Loading HAL\n cd linuxcnc\n halrun\n halcmd:\n 1. Run In Place, when the source files have been downloaded to a user directory and are compiled and executed directly\n from there.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 209 / 1223\n \n With the realtime OS and RTAPI loaded, we can move into the first example. Notice that the prompt is\n now shown as halcmd:. This is because subsequent commands will be interpreted as HAL commands,\n not shell commands.\n For the first example, we will use a HAL component called siggen, which is a simple signal generator.\n@@ -12019,15 +12019,15 @@\n hundreds of pins. But right now there are only nine pins. Of these pins eight are floating point and\n one is bit (boolean). Six carry data out of the siggen component and three are used to transfer settings\n into the component. Since we have not yet executed the code contained within the component, some\n the pins have a value of zero.\n The next step is to look at parameters:\n Show Parameters\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 210 / 1223\n \n halcmd: show param\n Parameters:\n Owner\n Type\n@@ -12106,15 +12106,15 @@\n \n Up till now, we\u2019ve been using halcmd only to look at the HAL. However, this time we used the addf\n (add function) command to actually change something in the HAL. We told halcmd to add the function\n siggen.0.update to the thread test-thread, and if we look at the thread list again, we see that it\n succeeded:\n 2. CodeAddr and Arg fields were used during development and should probably disappear.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 211 / 1223\n \n halcmd: show thread\n Realtime Threads:\n Period FP\n 999855 YES\n@@ -12219,15 +12219,15 @@\n The real power of HAL is that you can change things. For example, we can use the setp command to\n set the value of a parameter. Let\u2019s change the amplitude of the signal generator from 1.0 to 5.0:\n Set Pin\n halcmd: setp siggen.0.amplitude 5\n \n Check the parameters and pins again\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 212 / 1223\n \n halcmd: show param\n Parameters:\n Owner\n Type\n@@ -12310,15 +12310,15 @@\n Save configuration to a file with halcmd\n halcmd: save all saved.hal\n \n 5.4.3.6 Exiting halrun\n When you\u2019re finished with your HAL session type exit at the \u201dhalcmd:\u201d prompt. This will return you to\n the system prompt and close down the HAL session. Do not simply close the terminal window without\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 213 / 1223\n \n shutting down the HAL session.\n Exit HAL\n halcmd: exit\n \n@@ -12356,15 +12356,15 @@\n the selection window at program launch, the Select button, re-opens the selection window and the\n Exit button stops the program and closes both windows.\n It is possible to run several halmeters simultaneously, which makes it possible to visualize several\n items at the same time. To open a halmeter and release the console by running it in the background,\n run the following command:\n halmeter &\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 214 / 1223\n \n It is possible to launch halmeter and make it immediately display an item. For this, add pin|sig|par[am]\n name arguments on the command line. It will display the signal, pin, or parameter name as soon as it\n will start. If the indicated item does not exist, it will start normally.\n Finally, if an item is specified for display, it is possible add -s in front of pin|sig|param to tell halmeter\n@@ -12381,27 +12381,27 @@\n \n At this point we have the siggen component loaded and running. It\u2019s time to start halmeter.\n Starting Halmeter\n halcmd: loadusr halmeter\n \n The first window you will see is the \u201dSelect Item to Probe\u201d window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 215 / 1223\n \n Figure 5.5 \u2013 Halmeter Select Window\n This dialog has three tabs. The first tab displays all of the HAL pins in the system. The second one\n displays all the signals, and the third displays all the parameters. We would like to look at the pin\n siggen.0.cosine first, so click on it then click the \u201dClose\u201d button. The probe selection dialog will\n close, and the meter looks something like the following figure.\n \n Figure 5.6 \u2013 Halmeter Window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 216 / 1223\n \n To change what the meter displays press the \u201dSelect\u201d button which brings back the \u201dSelect Item to\n Probe\u201d window.\n You should see the value changing as siggen generates its cosine wave. Halmeter refreshes its display\n about 5 times per second.\n@@ -12475,15 +12475,15 @@\n siggen.0.sawtooth\n siggen.0.sine\n siggen.0.square\n siggen.0.triangle\n stepgen.0.counts\n stepgen.0.dir\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 3\n 3\n 3\n 3\n 3\n 3\n@@ -12649,15 +12649,15 @@\n input of the first step pulse generator. The first step is to connect the signal to the signal generator\n output. To connect a signal to a pin we use the net command.\n net command\n halcmd: net X-vel <= siggen.0.cosine\n \n To see the effect of the net command, we show the signals again.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 218 / 1223\n \n halcmd: show sig\n Signals:\n Type\n float\n@@ -12736,15 +12736,15 @@\n Every time it is executed, it calculates the values of the sine, cosine, triangle, and square outputs. To\n make smooth signals, it needs to run at specific intervals.\n The other three functions are related to the step pulse generators.\n The first one, stepgen.capture_position, is used for position feedback. It captures the value of an\n internal counter that counts the step pulses as they are generated. Assuming no missed steps, this\n counter indicates the position of the motor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 219 / 1223\n \n The main function for the step pulse generator is stepgen.make_pulses. Every time make_pulses runs\n it decides if it is time to take a step, and if so sets the outputs accordingly. For smooth step pulses, it\n should run as frequently as possible. Because it needs to run so fast, make_pulses is highly optimized\n and performs only a few calculations. Unlike the others, it does not need floating point math.\n@@ -12819,15 +12819,15 @@\n pulse generator isn\u2019t quite right. By default, it generates an output frequency of 1 step per second\n with an input of 1.0. It is unlikely that one step per second will give us one inch per second of table\n movement. Let\u2019s assume instead that we have a 5 turn per inch leadscrew, connected to a 200 step\n per rev stepper with 10x microstepping. So it takes 2000 steps for one revolution of the screw, and\n 5 revolutions to travel one inch. That means the overall scaling is 10000 steps per inch. We need\n to multiply the velocity input to the step pulse generator by 10000 to get the proper output. That is\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 220 / 1223\n \n exactly what the parameter stepgen.n.velocity-scale is for. In this case, both the X and Y axis have\n the same scaling, so we set the scaling parameters for both to 10000.\n halcmd: setp stepgen.0.position-scale 10000\n halcmd: setp stepgen.1.position-scale 10000\n@@ -12862,24 +12862,24 @@\n halcmd loadusr halscope\n \n If LinuxCNC is not running or the autosave.halscope file does not match the pins available in the\n current running LinuxCNC the scope GUI window will open, immediately followed by a Realtime\n function not linked dialog that looks like the following figure. To change the sample rate left click on\n the samples box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 221 / 1223\n \n Figure 5.7 \u2013 Realtime function not linked dialog\n This dialog is where you set the sampling rate for the oscilloscope. For now we want to sample once\n per millisecond, so click on the 989 \u00b5s thread slow and leave the multiplier at 1. We will also leave the\n record length at 4000 samples, so that we can use up to four channels at one time. When you select\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 222 / 1223\n \n a thread and then click OK, the dialog disappears, and the scope window looks something like the\n following figure.\n \n Figure 5.8 \u2013 Initial scope window\n@@ -12891,33 +12891,33 @@\n length - more channels means shorter records, since the memory available for the record is fixed at\n approximately 16,000 samples.\n The channel buttons run across the bottom of the halscope screen. Click button 1, and you will see the\n Select Channel Source dialog as shown in the following figure. This dialog is very similar to the one\n used by Halmeter. We would like to look at the signals we defined earlier, so we click on the Signals\n tab, and the dialog displays all of the signals in the HAL (only two for this example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 223 / 1223\n \n Figure 5.9 \u2013 Select Channel Source\n To choose a signal, just click on it. In this case, we want channel 1 to display the signal X-vel. Click on\n the Signals tab then click on X-vel and the dialog closes and the channel is now selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 224 / 1223\n \n Figure 5.10 \u2013 Select Signal\n The channel 1 button is pressed in, and channel number 1 and the name X-vel appear below the row\n of buttons. That display always indicates the selected channel - you can have many channels on the\n screen, but the selected one is highlighted, and the various controls like vertical position and scale\n always work on the selected one.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 225 / 1223\n \n Figure 5.11 \u2013 Halscope\n To add a signal to channel 2, click the 2 button. When the dialog pops up, click the Signals tab, then\n click on Y-vel. We also want to look at the square and triangle wave outputs. There are no signals\n connected to those pins, so we use the Pins tab instead. For channel 3, select siggen.0.triangle and\n@@ -12928,15 +12928,15 @@\n a 4000 sample record length, and are acquiring 1000 samples per second, it will take halscope about\n 2 seconds to fill half of its buffer. During that time a progress bar just above the main screen will show\n the buffer filling. Once the buffer is half full, the scope waits for a trigger. Since we haven\u2019t configured\n one yet, it will wait forever. To manually trigger it, click the Force button in the Trigger section at the\n top right. You should see the remainder of the buffer fill, then the screen will display the captured\n waveforms. The result will look something like the following figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 226 / 1223\n \n Figure 5.12 \u2013 Captured Waveforms\n The Selected Channel box at the bottom tells you that the purple trace is the currently selected one,\n channel 4, which is displaying the value of the pin siggen.0.square. Try clicking channel buttons 1\n through 3 to highlight the other three traces.\n@@ -12944,29 +12944,29 @@\n The traces are rather hard to distinguish since all four are on top of each other. To fix this, we use\n the Vertical controls in the box to the right of the screen. These controls act on the currently selected\n channel. When adjusting the gain, notice that it covers a huge range - unlike a real scope, this one\n can display signals ranging from very tiny (pico-units) to very large (Tera-units). The position control\n moves the displayed trace up and down over the height of the screen only. For larger adjustments the\n offset button should be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 227 / 1223\n \n Figure 5.13 \u2013 Vertical Adjustment\n The large Selected Channel button at the bottom indicates that channel 1 is currently selected channel\n and that it matches the X-vel signal. Try clicking on the other channels to put their traces in evidence\n and to be able to move them with the Pos cursor.\n 5.4.6.4 Triggering\n Using the Force button is a rather unsatisfying way to trigger the scope. To set up real triggering, click\n on the Source button at the bottom right. It will pop up the Trigger Source dialog, which is simply a\n list of all the probes that are currently connected. Select a probe to use for triggering by clicking on\n it. For this example we will use channel 3, the triangle wave as shown in the following figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 228 / 1223\n \n Figure 5.14 \u2013 Trigger Source Dialog\n After setting the trigger source, you can adjust the trigger level and trigger position using the sliders\n in the Trigger box along the right edge. The level can be adjusted from the top to the bottom of the\n screen, and is displayed below the sliders. The position is the location of the trigger point within\n@@ -12976,15 +12976,15 @@\n trigger point is visible as a vertical line in the progress box above the screen. The trigger polarity can\n be changed by clicking the button just below the trigger level display. It will then become descendant.\n Note that changing the trigger position stops the scope once the position has been adjusted, you\n relaunch the scope by clicking on the Normal button of Run mode the group.\n Now that we have adjusted the vertical controls and triggering, the scope display looks something\n like the following figure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 229 / 1223\n \n Figure 5.15 \u2013 Waveforms with Triggering\n \n 5.4.6.5 Horizontal Adjustments\n To look closely at part of a waveform, you can use the zoom slider at the top of the screen to expand\n@@ -12993,15 +12993,15 @@\n the sampling rate. For example, we would like to look at the actual step pulses that are being generated\n in our example. Since the step pulses may be only 50 \u00b5s long, sampling at 1 kHz isn\u2019t fast enough. To\n change the sample rate, click on the button that displays the number of samples and sample rate to\n bring up the Select Sample Rate dialog figure. For this example, we will click on the 50 \u00b5s thread,\n fast, which gives us a sample rate of about 20 kHz. Now instead of displaying about 4 seconds worth\n of data, one record is 4000 samples at 20 kHz, or about 0.20 seconds.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 230 / 1223\n \n Figure 5.16 \u2013 Sample Rate Dialog\n \n 5.4.6.6 More Channels\n Now let\u2019s look at the step pulses. Halscope has 16 channels, but for this example we are using only 4 at\n@@ -13010,15 +13010,15 @@\n do the same for channel 4. Even though the channels are turned off, they still remember what they are\n connected to, and in fact we will continue to use channel 3 as the trigger source. To add new channels,\n select channel 5, and choose pin stepgen.0.dir, then channel 6, and select stepgen.0.step. Then\n click run mode Normal to start the scope, and adjust the horizontal zoom to 5 ms per division. You\n should see the step pulses slow down as the velocity command (channel 1) approaches zero, then the\n direction pin changes state and the step pulses speed up again. You might want toincrease the gain on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 231 / 1223\n \n channel 1 to about 20 milli per division to better see the change in the velocity command. The result\n should look like the following figure.\n \n Figure 5.17 \u2013 Step Pulses\n@@ -13031,15 +13031,15 @@\n samples, so that when sampling 4 channels at a time there will be 20000 samples per channel. (If\n scope_rt was already loaded, the numeric argument to halscope will have no effect).\n \n 5.5 HAL Examples\n All of these examples assume you are starting with a StepConf-based configuration and have two\n threads base-thread and servo-thread. The StepConf wizard will create an empty custom.hal and a\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 232 / 1223\n \n custom_postgui.hal file. The custom.hal file will be loaded after the configuration HAL file and the\n custom_postgui.hal file is loaded after the GUI has been loaded.\n \n 5.5.1 Connecting Two Outputs\n@@ -13101,15 +13101,15 @@\n pin. From the direction arrow you can see that the button is and output and the or2.0.in0 is an input.\n The output from or2 goes to the input of the LED.\n \n 5.5.2 Manual Toolchange\n In this example it is assumed that you\u2019re rolling your own configuration and wish to add the HAL\n Manual Toolchange window. The HAL Manual Toolchange is primarily useful if you have presettable\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 233 / 1223\n \n tools and you store the offsets in the tool table. If you need to touch off for each tool change then it is\n best just to split up your G-code. To use the HAL Manual Toolchange window you basically have to\n 1. load the hal_manualtoolchange component,\n 2. then send the iocontrol tool change to the hal_manualtoolchange change and\n@@ -13155,15 +13155,15 @@\n \n In this last section we are setting the mult2.0.in1 to 60 to convert the inch per second to inch per\n minute (IPM) that we get from the ddt.0.out.\n The xpos-cmd sends the commanded position to the ddt.0.in. The ddt computes the derivative of the\n change of the input.\n The ddt2.0.out is multiplied by 60 to give IPM.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 234 / 1223\n \n The mult2.0.out is sent to the abs to get the absolute value.\n The following figure shows the result when the X axis is moving at 15 IPM in the minus direction.\n Notice that we can get the absolute value from either the abs.0.out pin or the X-IPM signal.\n \n@@ -13178,15 +13178,15 @@\n spindle.N.speed-out through a limiter before the PID, so that the PID command value changes to\n new settings more slowly.\n Three built-in components that limit a signal are:\n \u2014 limit2 limits the range and first derivative of a signal.\n \u2014 limit3 limits the range, first and second derivatives of a signal.\n \u2014 lowpass uses an exponentially-weighted moving average to track an input signal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 235 / 1223\n \n To find more information on these HAL components check the man pages.\n Place the following in a text file called softstart.hal. If you\u2019re not familiar with Linux place the file in\n your home directory.\n loadrt threads period1=1000000 name1=thread\n@@ -13219,15 +13219,15 @@\n Next to set up a trigger signal click on the Source None button and select square. The button will\n change to Source Chan 1.\n Next click on Single in the Run Mode radio buttons box. This will start a run and when it finishes you\n will see your traces.\n To separate the signals so you can see them better click on a channel then use the Pos slider in the\n Vertical box to set the positions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 236 / 1223\n \n To see the effect of changing the set point values of any of the components you can change them in\n the terminal window. To see what different gain settings do for lowpass just type the following in the\n terminal window and try different settings.\n setp lowpass.0.gain *.01\n@@ -13241,15 +13241,15 @@\n 5.5.5 Stand Alone HAL\n In some cases you might want to run a GladeVCP screen with just HAL. For example say you had a\n stepper driven device that all you need is to run a stepper motor. A simple Start/Stop interface is all\n you need for your application so no need to load up and configure a full blown CNC application.\n In the following example we have created a simple GladeVCP panel with one stepper.\n Basic Syntax\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 237 / 1223\n \n # load the winder.glade GUI and name it winder\n loadusr -Wn winder gladevcp -c winder -u handler.py winder.glade\n # load realtime components\n loadrt threads name1=fast period1=50000 fp1=0 name2=slow period2=1000000\n@@ -13288,15 +13288,15 @@\n default is 4 each. The number of Spindles is set with num_spindles, default is 1.\n Pin and parameter names starting with axis.L and joint.N are read and updated by the motion-controller\n function.\n Motion is loaded with the motmod command. A kins should be loaded before motion.\n loadrt motmod base_period_nsec=[\u2019period\u2019] servo_period_nsec=[\u2019period\u2019]\n traj_period_nsec=[\u2019period\u2019] num_joints=[\u20190-9\u2019]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 238 / 1223\n \n num_dio=[\u20191-64\u2019] num_aio=[\u20191-16\u2019] unlock_joints_mask=[\u20190xNN\u2019]\n num_spindles=[\u20191-8\u2019]\n \n \u2014 base_period_nsec = 50000 - the Base task period in nanoseconds. This is the fastest thread in the\n@@ -13338,15 +13338,15 @@\n \u2014 motion.analog-in-00 - (float, in) These pins (00, 01, 02, 03 or more if configured) are controlled by\n M66.\n \u2014 motion.analog-out-00 - (float, out) These pins (00, 01, 02, 03 or more if configured) are controlled\n by M67 or M68.\n \u2014 motion.coord-error - (bit, out) TRUE when motion has encountered an error, such as exceeding a\n soft limit\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 239 / 1223\n \n \u2014 motion.coord-mode - (bit, out) TRUE when motion is in coordinated mode, as opposed to teleop\n mode\n \u2014 motion.current-vel - (float, out) The current tool velocity in user units per second.\n \u2014 motion.digital-in-00 - (bit, in) These pins (00, 01, 02, 03 or more if configured) are controlled by\n@@ -13392,15 +13392,15 @@\n 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\n adjustments.\n \u2014 motion.teleop-mode - (bit, out) TRUE when motion is in teleop mode, as opposed to coordinated\n mode\n \u2014 motion.tooloffset.x \u2026 motion.tooloffset.w - (float, out, one per axis) shows the tool offset in effect;\n it could come from the tool table (G43 active), or it could come from the G-code (G43.1 active)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 240 / 1223\n \n 5.6.1.3 Parameters\n Many of these parameters serve as debugging aids, and are subject to change or removal at any time.\n \u2014 motion-command-handler.time - (s32, RO)\n \u2014 motion-command-handler.tmax - (s32, RW)\n@@ -13439,15 +13439,15 @@\n \u2014 spindle.N.forward - (bit, out) TRUE when the spindle should rotate forward.\n \u2014 spindle.N.index-enable - (bit, I/O) For correct operation of spindle synchronized moves, this pin\n must be hooked to the index-enable pin of the spindle encoder.\n \u2014 spindle.N.inhibit - (bit, in) When this bit is TRUE, the spindle speed is set to 0.\n \u2014 spindle.N.on - (bit, out) TRUE when spindle should rotate.\n \u2014 spindle.N.reverse - (bit, out) TRUE when the spindle should rotate backward\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 241 / 1223\n \n \u2014 spindle.N.revs - (float, in) For correct operation of spindle synchronized moves, this signal must\n 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)\n direction.\n \u2014 spindle.N.speed-in - (float, in) Feedback of actual spindle speed in rotations per second. This is\n@@ -13492,15 +13492,15 @@\n 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\n rotation mode.\n Also, any of the M3, M4 or M5 commands cancel either searching for desired orientation or orientation\n complete mode. This is indicated by deasserting both the spindle-orient and spindle-locked pins.\n The spindle-orient-mode pin reflects the M19 P word and shall be interpreted as follows:\n \u2014 0: rotate clockwise or counterclockwise for smallest angular movement\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 242 / 1223\n \n \u2014 1: always rotate clockwise\n \u2014 2: always rotate counterclockwise\n It can be used with the orient HAL component which provides a PID command value based on spindle\n encoder position, spindle-orient-angle and spindle-orient-mode.\n@@ -13534,15 +13534,15 @@\n A number of INI settings are made available as HAL input pins.\n 5.6.5.1 Pins\n N refers to a joint number, L refers to an axis letter.\n \u2014 ini.N.ferror - (float, in) [JOINT_N]FERROR\n \u2014 ini.N.min_ferror - (float, in) [JOINT_N]MIN_FERROR\n \u2014 ini.N.backlash - (float, in) [JOINT_N]BACKLASH\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 243 / 1223\n \n \u2014 ini.N.min_limit - (float, in) [JOINT_N]MIN_LIMIT\n \u2014 ini.N.max_limit - (float, in) [JOINT_N]MAX_LIMIT\n \u2014 ini.N.max_velocity - (float, in) [JOINT_N]MAX_VELOCITY\n \u2014 ini.N.max_acceleration - (float, in) [JOINT_N]MAX_ACCELERATION\n@@ -13582,15 +13582,15 @@\n man axis\n \n The one or other setup of a UNIX system may require to explicitly specify the section of the man page.\n If you do not find the man page or the name of the man page is already taken by another UNIX tool\n with the LinuxCNC man page residing in another section, then try to explicitly specify the section, as\n in man _sectionno_ axis, with sectionno = 1 for non-realtime and 9 for realtime components.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 244 / 1223\n \n Note\n See also the Man Pages section of the docs main page or the directory listing. To search in the man\n pages, use the UNIX tool apropos.\n \n@@ -13666,15 +13666,15 @@\n iocontrol - interacts with HAL or G-code in non-realtime\n Interacts with HAL or G-code in non-realtime\n Interacts with HAL or G-code in non-realtime\n Send G-code commands from the terminal to the running LinuxCNC\n instance\n Non-realtime task controller for LinuxCNC\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 245 / 1223\n \n 5.7.1.3 Hardware Drivers\n elbpcom\n gs2_vfd\n hy_gt_vfd\n@@ -13753,15 +13753,15 @@\n bitbanged SPI\n mesa_7i65\n Mesa Electronics driver for the 7I65 eight-axis servo card. (See the man\n page for more information)\n mesa_pktgyro_test\n PktUART simple test with Microstrain 3DM-GX3-15 gyro\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n opto_ac5\n pluto_servo\n pluto_step\n serport\n sserial\n thc\n@@ -13843,15 +13843,15 @@\n E-stop latch\n D-type flip-flop\n General logic function component\n 5-input logic function based on a look-up table Description\n 8-bit binary match detector\n Single-, double-, triple-, and quadruple-click detector\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 247 / 1223\n \n multiswitch\n not\n oneshot\n or2\n@@ -13950,15 +13950,15 @@\n sum2\n Sum of two inputs (each with a gain) and an offset.\n timedelta\n Component that measures thread scheduling timing behavior.\n updown\n Counts up or down, with optional limits and wraparound behavior.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 248 / 1223\n \n wcomp\n Window comparator.\n weighted_sumConvert a group of bits to an integer.\n xhc_hb04_util xhc-hb04 convenience utility\n@@ -14025,15 +14025,15 @@\n machines and lathes use the trivial kinematics module.\n userkins\n Template for user-built kinematics\n 3. When the input is a position, this means that the position is limited.\n 4. When the input is a position, this means that position and velocity are limited.\n 5. When the input is a position, this means that the position, velocity, and acceleration are limited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 249 / 1223\n \n 5.7.1.8 Motion control (Realtime)\n motion\n \n Accepts NML motion commands, interacts with HAL in realtime\n@@ -14103,15 +14103,15 @@\n \n 5.7.2 HAL API calls\n hal_add_funct_to_thread.3hal\n hal_bit_t.3hal\n hal_create_thread.3hal\n hal_del_funct_from_thread.3hal\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n hal_exit.3hal\n hal_export_funct.3hal\n hal_float_t.3hal\n hal_get_lock.3hal\n hal_init.3hal\n hal_link.3hal\n@@ -14162,15 +14162,15 @@\n intro.3rtapi\n rtapi_app_exit.3rtapi\n rtapi_app_main.3rtapi\n rtapi_clock_set_period.3rtapi\n \n 250 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 251 / 1223\n \n rtapi_delay.3rtapi\n rtapi_delay_max.3rtapi\n rtapi_exit.3rtapi\n rtapi_get_clocks.3rtapi\n@@ -14216,30 +14216,30 @@\n \n 5.8.1 StepGen\n This component provides software based generation of step pulses in response to position or velocity\n commands. In position mode, it has a built in pre-tuned position loop, so PID tuning is not required. In\n velocity mode, it drives a motor at the commanded speed, while obeying velocity and acceleration limits. It is a realtime component only, and depending on CPU speed, etc., is capable of maximum step\n rates of 10 kHz to perhaps 50 kHz. The step pulse generator block diagram shows three block diagrams, each is a single step pulse generator. The first diagram is for step type 0, (step and direction).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 252 / 1223\n \n The second is for step type 1 (up/down, or pseudo-PWM), and the third is for step types 2 through\n 14 (various stepping patterns). The first two diagrams show position mode control, and the third one\n shows velocity mode. Control mode and step type are set independently, and any combination can be\n selected.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 5.19 \u2013 Step Pulse Generator Block Diagram position mode\n \n 253 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 254 / 1223\n \n Loading stepgen component\n halcmd: loadrt stepgen step_type= [ctrl_type=]\n \n \n@@ -14296,15 +14296,15 @@\n \u2014 (float) stepgen. \u0300\n ____.position-scale \u0300 - Steps per position unit. This parameter is used for\n both output and feedback.\n \u2014 (float) stepgen. \u0300\n ____.maxvel \u0300 - Maximum velocity, in position units per second. If 0.0, has\n no effect.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 255 / 1223\n \n \u2014 (float) stepgen. \u0300\n ____.maxaccel \u0300 - Maximum accel/decel rate, in positions units per second\n squared. If 0.0, has no effect.\n \u2014 (float) stepgen. \u0300\n@@ -14346,15 +14346,15 @@\n takes effect the first time the code runs. Since one step requires steplen ns high and stepspace ns low,\n the maximum frequency is 1,000,000,000 divided by (steplen + stepspace)\u2019. If maxfreq is set higher\n than that limit, it will be lowered automatically. If maxfreq is zero, it will remain zero, but the output\n frequency will still be limited.\n When using the parallel port driver the step frequency can be doubled using the parport reset function\n together with StepGen\u2019s doublefreq setting.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 256 / 1223\n \n Figure 5.20 \u2013 Step and Direction Timing\n Step Type 1 Step type 1 has two outputs, up and down. Pulses appear on one or the other, depending\n on the direction of travel. Each pulse is steplen ns long, and the pulses are separated by at least\n stepspace ns. The maximum frequency is the same as for step type 0. If maxfreq is set higher than\n@@ -14366,33 +14366,33 @@\n \n Step Type 2 - 14 Step types 2 through 14 are state based, and have from two to five outputs. On\n each step, a state counter is incremented or decremented. The Two-and-Three-Phase, Four-Phase,\n and Five-Phase show the output patterns as a function of the state counter. The maximum frequency\n is 1,000,000,000 divided by steplen, and as in the other modes, maxfreq will be lowered if it is above\n the limit.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 5.21 \u2013 Two-and-Three-Phase Step Types\n \n 257 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 258 / 1223\n \n Figure 5.22 \u2013 Four-Phase Step Types\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 259 / 1223\n \n Figure 5.23 \u2013 Five-Phase Step Types\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 260 / 1223\n \n 5.8.1.4 Functions\n The component exports three functions. Each function acts on all of the step pulse generators - running\n different generators in different threads is not supported.\n \u2014 (funct) stepgen.make-pulses - High speed function to generate and count pulses (no floating\n@@ -14435,15 +14435,15 @@\n unloadrt pwmgen\n \n 5.8.2.1 Output Types\n The PWM generator supports three different output types.\n \u2014 Output type 0 - PWM output pin only. Only positive commands are accepted, negative values are\n treated as zero (and will be affected by the parameter min-dc if it is non-zero).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 261 / 1223\n \n \u2014 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\n commands. If your control needs positive PWM for both CW and CCW use the abs component to\n convert your PWM signal to positive value, when a negative input is input.\n \u2014 Output type 2 - UP and DOWN pins. For positive commands, the PWM signal appears on the up\n@@ -14499,15 +14499,15 @@\n 50% duty cycle and 25 Hz PWM frequency this means that the output changes state every (1/25) s\n / 50 \u00b5s * 50% = 400 iterations. This also means that you have a 800 possible duty cycle values\n (without dithering).\n \u2014 (funct) pwmgen.update - Low speed function to scale and limit value and handle other parameters.\n This is the function of the module that does the more complicated mathematics to work out how\n many base-periods the output should be high for, and how many it should be low for.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 262 / 1223\n \n 5.8.3 Encoder\n This component provides software based counting of signals from quadrature (or single-pulse) encoders. It is a realtime component only, and depending on CPU speed, latency, etc., is capable of\n maximum count rates of 10 kHz to perhaps up to 50 kHz.\n The base thread should be 1/2 count speed to allow for noise and timing variation. For example if you\n@@ -14521,15 +14521,15 @@\n Loading Encoder\n halcmd: loadrt encoder [num_chan=]\n \n is the number of encoder counters that you want to install. If num_chan is not specified,\n three counters will be installed. The maximum number of counters is 8 (as defined by MAX_CHAN\n in encoder.c). Each counter is independent, but all are updated by the same function(s) at the same\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 263 / 1223\n \n time. In the following descriptions, is the number of a specific counter. The first counter is\n number 0.\n Unloading Encoder\n halcmd: unloadrt encoder\n@@ -14575,15 +14575,15 @@\n \u2014 encoder.__.position-scale (float, I/O) - Scale factor, in counts per length unit. For example,\n if position-scale is 500, then 1000 counts of the encoder will be reported as a position of 2.0 units.\n \u2014 encoder.__.rawcounts (s32, In) - The raw count, as determined by update-counters. This\n value is updated more frequently than counts and position. It is also unaffected by reset or the\n index pulse.\n \u2014 encoder.__.reset (bit, In) - When True, force counts and position to zero immediately.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 264 / 1223\n \n \u2014 encoder.__.velocity (float, Out) - Velocity in scaled units per second. encoder uses an\n algorithm that greatly reduces quantization noise as compared to simply differentiating the position\n output. When the magnitude of the true velocity is below min-speed-estimate, the velocity output\n is 0.\n@@ -14603,15 +14603,15 @@\n \n 5.8.4 PID\n This component provides Proportional/Integral/Derivative control loops. It is a realtime component\n only. For simplicity, this discussion assumes that we are talking about position loops, however this\n component can be used to implement other feedback loops such as speed, torch height, temperature,\n etc. The PID Loop Block Diagram is a block diagram of a single PID loop.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 265 / 1223\n \n Figure 5.25 \u2013 PID Loop Block Diagram\n Loading PID\n halcmd: loadrt pid [num_chan=] [debug=1]\n \n@@ -14623,15 +14623,15 @@\n cluttering the pin list.\n Unloading PID\n halcmd: unloadrt pid\n \n 5.8.4.1 Pins\n The three most important pins are\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 266 / 1223\n \n \u2014 (float) pid. \u0300\n ____.command \u0300 - The desired position, as commanded by another system\n component.\n \u2014 (float) pid. \u0300\n@@ -14675,15 +14675,15 @@\n All max* limits are implemented so that if the value of this parameter is zero, there is no limit.\n If debug=1 was specified when the component was installed, four additional pins will be exported:\n \u2014 (float) pid..errorI - Integral of error.\n \u2014 (float) pid..errorD - Derivative of error.\n \u2014 (float) pid..commandD - Derivative of the command.\n \u2014 (float) pid..commandDD - 2nd derivative of the command.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 267 / 1223\n \n 5.8.4.2 Functions\n The component exports one function for each PID loop. This function performs all the calculations\n needed for the loop. Since each loop has its own function, individual loops can be included in different\n threads and execute at different rates.\n@@ -14723,15 +14723,15 @@\n 5.8.5.3 Functions\n The component exports two functions. Each function affects all simulated encoders.\n \u2014 (funct) sim-encoder.make-pulses - High speed function to generate quadrature pulses (no floating\n point).\n \u2014 (funct) sim-encoder.update-speed - Low speed function to read .speed, do scaling, and set up\n .make-pulses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 268 / 1223\n \n 5.8.6 Debounce\n Debounce is a realtime component that can filter the glitches created by mechanical switch contacts.\n It may also be useful in other applications where short pulses are to be rejected.\n Loading debounce\n@@ -14767,15 +14767,15 @@\n 5.8.6.3 Functions\n Each group of filters has one function, which updates all the filters in that group simultaneously.\n Different groups of filters can be updated from different threads at different periods.\n \u2014 (funct) debounce. - Updates all filters in group .\n 6. Each individual filter also has an internal state variable. There is a compile time switch that can export that variable as a\n parameter. This is intended for testing, and simply wastes shared memory under normal circumstances.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 269 / 1223\n \n 5.8.7 SigGen\n SigGen is a realtime component that generates square, triangle, and sine waves. It is primarily used\n for testing.\n Loading siggen\n@@ -14818,15 +14818,15 @@\n None. 7\n 5.8.7.3 Functions\n \u2014 (funct) siggen. \u0300\n ____.update \u0300 - Calculates new values for all five outputs.\n 7. Prior to version 2.1, frequency, amplitude, and offset were parameters. They were changed to pins to allow control by\n other components.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 270 / 1223\n \n 5.8.8 lut5\n The lut5 component is a 5 input logic component based on a look up table.\n \u2014 lut5 does not require a floating point thread.\n Loading lut5\n@@ -15011,15 +15011,15 @@\n 1\n \n Output\n \n lut5 Two Inputs Example In the following table we have selected the output state for each line that\n we wish to be true.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 271 / 1223\n \n Table 5.7: lut5 Two Inputs Example Look Up Table\n Bit 4\n 0\n 0\n@@ -15087,15 +15087,15 @@\n \n 5.9.2 Installing\n To compile a component, if a packaged version of LinuxCNC is used, development packages have to\n be installed using either Synaptic from the main menu System -> Administration -> Synaptic package\n manager or by running one of the following commands in a terminal window:\n Installation of Development packages for LinuxCNC\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 272 / 1223\n \n sudo apt install linuxcnc-dev\n # or\n sudo apt install linuxcnc-uspace-dev\n \n@@ -15131,15 +15131,15 @@\n \n 5.9.6 Implicit Parameters\n Functions are implicitly passed the period parameter which is the time in nanoseconds of the last\n period to execute the component. Functions which use floating-point can also refer to fperiod which\n is the floating-point time in seconds, or (period*1e-9). This can be useful in components that need the\n timing information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 273 / 1223\n \n 5.9.7 Syntax\n A .comp file consists of a number of declarations, followed by ;; on a line of its own, followed by C\n code implementing the module\u2019s functions.\n Declarations include:\n@@ -15197,15 +15197,15 @@\n x-y-z\n x.MM.z\n x.MM\n \n \u2014 if CONDITION - An expression involving the variable personality which is nonzero when the pin or\n parameter should be created.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 274 / 1223\n \n \u2014 SIZE - A number that gives the size of an array. The array items are numbered from 0 to SIZE-1.\n \u2014 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\n the array is created its size will be CONDSIZE.\n \u2014 DOC - A string that documents the item. String can be a C-style \u201ddouble quoted\u201d string, like:\n@@ -15244,15 +15244,15 @@\n Neither halcompile nor gcc can detect the use of floating-point calculations in functions that are\n tagged nofp, but the use of such operations results in undefined behavior.\n 5.9.7.2 Options\n The currently defined options are:\n \u2014 option singleton yes - (default: no) Do not create a count module parameter, and always create a\n single instance. With singleton, items are named component-name.item-name and without singleton, items for numbered instances are named component-name..item-name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 275 / 1223\n \n \u2014 option default_count number - (default: 1) Normally, the module parameter count defaults to 1. If\n specified, the count will default to this value instead.\n \u2014 option count_function yes - (default: no) Normally, the number of instances to create is specified in\n the module parameter count; if count_function is specified, the value returned by the function int\n@@ -15301,15 +15301,15 @@\n \u2014 option homemod yes - (default: no)\n Module is a custom Homing module loaded using [EMCMOT]HOMEMOD=modulename .\n \u2014 option tpmod yes - (default: no)\n Module is a custom Trajectory Planning (tp) module loaded using [TRAJ]TPMOD=modulename .\n If an option\u2019s VALUE is not specified, then it is equivalent to specifying option \u2026 yes.\n The result of assigning an inappropriate value to an option is undefined.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 276 / 1223\n \n The result of using any other option is undefined.\n \n 5.9.7.3 License and Authorship\n \u2014 LICENSE - Specify the license of the module for the documentation and for the MODULE_LICENSE()\n@@ -15343,15 +15343,15 @@\n \u2014 comp_id\n \u2014 fperiod\n \u2014 rtapi_app_main\n \u2014 rtapi_app_exit\n \u2014 extra_setup\n \u2014 extra_cleanup\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 277 / 1223\n \n 5.9.9 Convenience Macros\n \n Based on the items in the declaration section, halcompile creates a C structure called struct __comp_state.\n However, instead of referring to the members of this structure (e.g., *(inst->name)), they will generally be referred to using the macros below. The details of struct __comp_state and these macros\n@@ -15397,15 +15397,15 @@\n numerous components included in the distribution that are built using halcompile.\n To alter the allowed number of personality items for user-built components, use the --personality\n option with halcompile. For example, to allow up to 128 personality times:\n [sudo] halcompile --personality=128 --install ...\n \n When using components with personality, normal usage is to specify a personality item for each specified component instance. Example for 3 instances of the logic component:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 278 / 1223\n \n loadrt logic names=and4,or3,nand5, personality=0x104,0x203,0x805\n \n Note\n If a loadrt line specifies more instances than personalities, the instances with unspecified personalities are assigned a personality of 0. If the requested number of instances exceeds the number of\n@@ -15441,15 +15441,15 @@\n halcompile --document rtexample.comp\n \n The resulting manpage, example.9 can be viewed with\n man ./example.9\n \n or copied to a standard location for manual pages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 279 / 1223\n \n 5.9.14 Compiling non-realtime components outside the source tree\n halcompile can process, compile, install, and document non-realtime components:\n halcompile non-rt-example.comp\n halcompile --compile non-rt-example.comp\n@@ -15489,15 +15489,15 @@\n pin in float theta;\n function _;\n license \u201dGPL\u201d; // indicates GPL v2 or later\n ;;\n #include \n FUNCTION(_) { sin_ = sin(theta); cos_ = cos(theta); }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 280 / 1223\n \n 5.9.15.3 out8\n This component is a driver for a fictional card called \u201dout8\u201d, which has 8 pins of digital output which\n are treated as a single 8-bit value. There can be a varying number of such cards in the system, and they\n can be at various addresses. The pin is called out_ because out is an identifier used in . It\n@@ -15542,15 +15542,15 @@\n \n 5.9.15.4 hal_loop\n component hal_loop;\n pin out float example;\n \n This fragment of a component illustrates the use of the hal_ prefix in a component name.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 281 / 1223\n \n loop is a common name, and the hal_ prefix avoids potential name collisions with other unrelated\n software. For example, on RTAI realtime systems realtime code runs in the kernel, so if the component\n were named just loop it could easily conflict with the standard loop kernel module.\n When loaded, halcmd show comp will show a component called hal_loop. However, the pin shown by\n@@ -15594,15 +15594,15 @@\n function _ nofp;\n description \u201d\u201d\u201d\n Experimental general \u2019logic function\u2019 component. Can perform \u2019and\u2019, \u2019or\u2019\n and \u2019xor\u2019 of up to 16 inputs. Determine the proper value for \u2019personality\u2019\n by adding:\n .IP \\\\(bu 4\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 282 / 1223\n \n The number of input pins, usually from 2 to 16\n .IP \\\\(bu\n 256 (0x100) if the \u2019and\u2019 output is desired\n .IP \\\\(bu\n@@ -15651,15 +15651,15 @@\n }\n //main function\n FUNCTION(_) {\n if (in < 0){\n set(&out1);\n unset(&out2);\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 283 / 1223\n \n }else if (in >0){\n unset(&out2);\n set(&out2);\n }else{\n@@ -15697,15 +15697,15 @@\n The halcmd language used in HAL files has a simple syntax that is actually a subset of the more\n powerful general-purpose Tcl scripting language.\n \n 5.10.2 Haltcl Commands\n Haltcl files use the Tcl scripting language augmented with the specific commands of the LinuxCNC\n hardware abstraction layer (HAL). The HAL-specific commands are:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 284 / 1223\n \n addf, alias,\n delf, delsig,\n getp, gets\n ptype,\n@@ -15756,15 +15756,15 @@\n not a list.\n When the value could contain special characters (quote characters, curly-brace characters, embedded\n whitespace, and other characters that have special meaning in Tcl) then it is necessary to distinguish\n between the list of values and the initial (and possibly only) value in the list.\n In Tcl, this is written [lindex $::SECTION(ITEM) 0].\n For example: given the following INI values\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 285 / 1223\n \n [HOSTMOT2]\n DRIVER=hm2_eth\n IPADDR=\u201d10.10.10.10\u201d\n BOARD=7i92\n@@ -15802,15 +15802,15 @@\n Whitespace in the bare expression is not allowed, use quotes for that:\n setp scale.0.gain \u201d6.28 / 360.0 * $::JOINT_0(radius) * 60.0\u201d\n \n In other contexts, such as loadrt, you must explicitly use the Tcl expr command ([expr {}]) for computational expressions.\n Example\n loadrt motion base_period=[expr {500000000/$::TRAJ(MAX_PULSE_RATE)}]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 286 / 1223\n \n 5.10.6 Haltcl Examples\n Consider the topic of stepgen headroom. Software stepgen runs best with an acceleration constraint\n that is \u201da bit higher\u201d than the one used by the motion planner. So, when using halcmd files, we force\n INI files to have a manually calculated value.\n@@ -15850,15 +15850,15 @@\n $ halrun -T haltclfile.tcl\n \n 5.10.8 Haltcl Distribution Examples (sim)\n The configs/sim/axis/simtcl directory includes an INI file that uses a .tcl file to demonstrate a haltcl\n configuration in conjunction with the usage of twopass processing. The example shows the use of Tcl\n procedures, looping, the use of comments and output to the terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 287 / 1223\n \n 5.11 HAL User Interface\n 5.11.1 Introduction\n Halui is a HAL based user interface for LinuxCNC, it connects HAL pins to NML commands. Most of\n the functionality (buttons, indicators etc.) that is provided by a traditional GUI (AXIS, GMOCCAPY,\n@@ -15906,15 +15906,15 @@\n IN FALSE halui.mdi-command-02 <== call-mysub\n ...\n \n When a halui MDI pin is set (pulsed) true, halui will send the MDI command defined in the INI. This\n will not always succeed depending on the current operating mode (e.g., while in AUTO halui can\u2019t\n successfully send MDI commands).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 288 / 1223\n \n 5.11.3 Example Configuration\n An example sim config (configs/sim/axis/halui_pyvcp/halui.ini) is included in the distribution.\n \n 5.11.4 Halui Pin Reference\n@@ -15944,15 +15944,15 @@\n \u2014 halui.mist.off (bit, in) - pin for requesting mist off\n \u2014 halui.mist.on (bit, in) - pin for requesting mist on\n 5.11.4.5 Flood\n \u2014 halui.flood.is-on (bit, out) - indicates flood is on\n \u2014 halui.flood.off (bit, in) - pin for requesting flood off\n \u2014 halui.flood.on (bit, in) - pin for requesting flood on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 289 / 1223\n \n 5.11.4.6 Homing\n \n \u2014 halui.home-all (bit, in) - pin for requesting all axis to home. This pin will only be there if HOME_SEQUENCE\n is set in the INI file.\n@@ -15987,15 +15987,15 @@\n will be exported by halui.\n 5.11.4.11 Joint\n N = joint number (0 \u2026 num_joints-1)\n Example:\n \u2014 halui.joint.N.select (bit in) - pin for selecting joint N\n \u2014 halui.joint.N.is-selected (bit out) - status pin that joint N is selected\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 290 / 1223\n \n \u2014 halui.joint.N.has-fault (bit out) - status pin telling that joint N has a fault\n \u2014 halui.joint.N.home (bit in) - pin for homing joint N\n \u2014 halui.joint.N.is-homed (bit out) - status pin telling that joint N is homed\n \u2014 halui.joint.N.on-hard-max-limit (bit out) - status pin telling that joint N is on the positive hardware\n@@ -16039,15 +16039,15 @@\n \u2014 halui.joint.N.plus (bit in) - pin for jogging joint N in positive direction at the halui.joint.jog-speed\n velocity\n \u2014 halui.joint.selected.increment (float in) - pin for setting the jog increment for the selected joint\n when using increment-plus/minus\n \u2014 halui.joint.selected.increment-minus (bit in) - a rising edge will will make the selected joint jog in\n the negative direction by the increment amount\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 291 / 1223\n \n \u2014 halui.joint.selected.increment-plus (bit in) - a rising edge will will make the selected joint jog in the\n positive direction by the increment amount\n \u2014 halui.joint.selected.minus (bit in) - pin for jogging the selected joint in negative direction at the\n halui.joint.jog-speed velocity\n@@ -16086,15 +16086,15 @@\n halui.axis.jog-speed velocity\n \u2014 halui.axis.selected.plus (pin in) - for jogging the selected axis bit in in positive direction at the\n halui.axis.jog-speed velocity\n 5.11.4.15 Mode\n \u2014 halui.mode.auto (bit, in) - pin for requesting auto mode\n \u2014 halui.mode.is-auto (bit, out) - indicates auto mode is on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 292 / 1223\n \n \u2014 halui.mode.is-joint (bit, out) - indicates joint by joint jog mode is on\n \u2014 halui.mode.is-manual (bit, out) - indicates manual mode is on\n \u2014 halui.mode.is-mdi (bit, out) - indicates MDI mode is on\n \u2014 halui.mode.is-teleop (bit, out) - indicates coordinated jog mode is on\n@@ -16136,15 +16136,15 @@\n \u2014 halui.spindle.N.override.direct-value (bit, in) - false when using encoder to change counts, true\n when setting counts directly.\n \u2014 halui.spindle.N.override.increase (bit, in) - pin for increasing the SO (+=scale)\n \u2014 halui.spindle.N.override.scale (float, in) - pin for setting the scale on changing the SO\n \u2014 halui.spindle.N.override.value (float, out) - current SO value\n \u2014 halui.spindle.N.override.reset (bit, in) - pin for resetting the SO value (scale=1.0)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 293 / 1223\n \n 5.11.4.19 Broche\n \u2014 halui.spindle.N.brake-is-on (bit, out) - indicates brake is on\n \u2014 halui.spindle.N.brake-off (bit, in) - pin for deactivating spindle/brake\n \u2014 halui.spindle.N.brake-on (bit, in) - pin for activating spindle-brake\n@@ -16178,15 +16178,15 @@\n To connect a remote program start button to LinuxCNC you use the halui.program.run pin and the\n halui.mode.auto pin. You have to insure that it is OK to run first by using the halui.mode.is-auto\n pin. You do this with an and2 component. The following figure shows how this is done. When the\n Remote Run Button is pressed it is connected to both halui.mode.auto and and2.0.in0. If it is OK\n for auto mode the pin halui.mode.is-auto will be on. If both the inputs to the and2.0 component are\n on the and2.0.out will be on and this will start the program.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 294 / 1223\n \n Figure 5.26 \u2013 Remote Start Example\n The hal commands needed to accomplish the above are:\n net program-start-btn halui.mode.auto and2.0.in0 <= \n net program-run-ok and2.0.in1 <= halui.mode.is-auto\n@@ -16212,15 +16212,15 @@\n This system works in the following way. When an M0 is encountered in your G-code, the halui.program.is-p\n signal goes true. This turns on your output pin so that the external controller knows that LinuxCNC\n is paused.\n To resume the LinuxCNC G-code program, when the external controller is ready it will make its output\n true. This will signal LinuxCNC that it should resume executing G-code.\n Difficulties in timing\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 295 / 1223\n \n \u2014 The \u201dresume\u201d input return signal should not be longer than the time required to get the G-code\n running again.\n \u2014 The \u201dis-paused\u201d output should no longer be active by the time the \u201dresume\u201d signal ends.\n These timing problems could be avoided by using ClassicLadder to activate the \u201dis-paused\u201d output via\n@@ -16281,15 +16281,15 @@\n 3.14\n 3.14\n \n Name\n passthrough.in\n passthrough.out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 296 / 1223\n \n 5.13.2 Non-realtime components and delays\n If you typed \u201dshow pin\u201d quickly, you may see that passthrough.out still had its old value of 0. This is\n because of the call to time.sleep(1), which makes the assignment to the output pin occur at most once\n per second. Because this is a non-realtime component, the actual delay between assignments can be\n@@ -16337,15 +16337,15 @@\n calling the .getprefix() method.\n \n 5.13.4 Reading and writing pins and parameters\n For pins and parameters which are also proper Python identifiers, the value may be accessed or set\n using the attribute syntax:\n h.out = h.in\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 297 / 1223\n \n For all pins, whether or not they are also proper Python identifiers, the value may be accessed or set\n using the subscript syntax:\n h[\u2019out\u2019] = h[\u2019in\u2019]\n \n@@ -16387,15 +16387,15 @@\n \u2014 MSG_NONE\n \u2014 MSG_ALL\n \u2014 MSG_DBG\n \u2014 MSG_ERR\n \u2014 MSG_INFO\n \u2014 MSG_WARN\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 298 / 1223\n \n 5.13.8 System Information\n Read these to acquire information about the realtime system.\n \u2014 is_kernelspace\n \u2014 is_rt\n@@ -16425,15 +16425,15 @@\n \n 5.14.3 Digital Output\n The canonical digital output (I/O type field: digout) is also very simple.\n 5.14.3.1 Pins\n (bit) out\n Value to be written (possibly inverted) to the hardware output.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 299 / 1223\n \n 5.14.3.2 Parameters\n (bit) invert\n If TRUE, out is inverted before writing to the hardware.\n 5.14.3.3 Functions\n@@ -16462,15 +16462,15 @@\n it may cause all channels to be read.\n \n 5.14.5 Analog Output\n The canonical analog output (I/O Type: adcout). This is intended for any kind of hardware that can\n output a more-or-less continuous range of values. Examples are digital to analog converters or PWM\n generators.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 300 / 1223\n \n 5.14.5.1 Pins\n (float) value\n The value to be written. The actual value output to the hardware will depend on the scale and\n offset parameters.\n@@ -16510,15 +16510,15 @@\n the man page available:\n cd toplevel_directory_for_rip_build\n . scripts/rip-environment\n man halcmd\n \n The HAL Tutorial has a number of examples of halcmd usage, and is a good tutorial for halcmd.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 301 / 1223\n \n 5.15.2 Halmeter\n Halmeter is a voltmeter for the HAL. It lets you look at a pin, signal, or parameter, and displays the\n current value of that item. It is pretty simple to use. Start it by typing halmeter in an X windows shell.\n Halmeter is a GUI application. It will pop up a small window, with two buttons labeled \u201dSelect\u201d and\n@@ -16543,23 +16543,23 @@\n displays the value. Multiple \u0300 \u0300halmeter \u0300 \u0300s can be open at the same time. If you use a script to open\n multiple \u0300 \u0300halmeter \u0300 \u0300s you can set the position of each one with -g X Y relative to the upper left corner\n of your screen. For example:\n loadusr halmeter pin hm2.0.stepgen.00.velocity-fb -g 0 500\n \n See the man page for more options and the section Halmeter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 5.27 \u2013 Halmeter selection window\n \n Figure 5.28 \u2013 Halmeter watch window\n \n 302 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 303 / 1223\n \n 5.15.3 Halshow\n halshow (complete usage description) can be started from the command line to show details for selected components, pins, parameters, signals, functions, and threads of a running HAL. The WATCH tab\n provides a continuous display of selected pin, parameters, and signal items. The File menu provides\n buttons to save the watch items to a watch list and to load an existing watch list. The watch list items\n@@ -16575,15 +16575,15 @@\n Notes:\n Create watchfile in halshow using: \u2019File/Save Watch List\u2019.\n LinuxCNC must be running for standalone usage.\n \n Figure 5.29 \u2013 Halshow Watch Tab\n A watchfile created using the File/Save Watch List menu item is formatted as a single line with tokens\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 304 / 1223\n \n \u201dpin+\u201d, \u201dparam+\u201d, \u201dsig=+\u201d, followed by the appropriate pin, param, or signal name. The token-name\n pairs are separated by a space character.\n Single Line Watchfile Example\n pin+joint.0.pos-hard-limit pin+joint.1.pos-hard-limit sig+estop-loop\n@@ -16629,15 +16629,15 @@\n pin:\n IN or I/O (and not connected to a signal with a writer)\n param: RW\n signal: connected to a writable pin\n HAL item types bit,s32,u32,float are supported.\n When a bit item is specified, a pushbutton is created\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 305 / 1223\n \n to manage the item in one of three manners specified\n by radio buttons:\n toggle: Toggle value when button pressed\n pulse: Pulse item to 1 once when button pressed\n@@ -16658,15 +16658,15 @@\n \n Figure 5.30 \u2013 sim_pin Window\n \n 5.15.6 Simulate Probe\n simulate_probe is a simple GUI to simulate activation of the pin motion.probe-input. Usage:\n simulate_probe &\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 306 / 1223\n \n Figure 5.31 \u2013 simulate_probe Window\n \n 5.15.7 HAL Histogram\n hal-histogram is a command line utility to display histograms for HAL pins.\n@@ -16711,15 +16711,15 @@\n 1. LinuxCNC (or another HAL application) must be running.\n 2. If no pinname is specified, default is: motion-command-handler.time.\n 3. This app may be opened for 5 pins.\n 4. Pintypes float, s32, u32, bit are supported.\n 5. The pin must be associated with a thread supporting floating point. For a base thread, this may\n require using loadrt motmod ... base_thread_fp=1 .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 307 / 1223\n \n Figure 5.32 \u2013 hal-histogram Window\n \n 5.15.8 Halreport\n halreport is a command-line utility that generates a report about HAL connections for a running\n@@ -16734,15 +16734,15 @@\n 7. Signals with no inputs.\n 8. Functions with no addf.\n 9. Warning tags for components marked as deprecated/obsolete in docs.\n 10. Real names for pins that use alias names.\n The report can be generated from the command line and directed to an output file (or stdout if no\n outfilename is specified):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 308 / 1223\n \n halreport Usage\n Usage:\n halreport -h | --help (this help)\n or\n@@ -16823,27 +16823,27 @@\n Questionable component function detection may occur for\n 1. unsupported (deprecated) components,\n 2. user-created components that use multiple functions or unconventional function naming, or\n 3. GUI-created non-realtime components that lack distinguishing characteristics such as a prefix\n based on the GUI program name.\n Questionable functions are tagged with a question mark \u201d?\u201d.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 309 / 1223\n \n Note\n Component pins that cannot be associated with a known thread function report the function as \u201dUnknown\u201d.\n \n halreport generates a connections report (without pin types, and current values) for a running HAL\n application to aid in designing and verifying connections. This helps with the understanding what the\n source of a pin value is. Use this information with applications like halshow, halmeter, halscope or\n the halcmd show command in a terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 310 / 1223\n \n Chapitre 6\n \n Hardware Drivers\n 6.1 Parallel Port Driver\n@@ -16876,15 +16876,15 @@\n The parport driver can control up to 8 ports (defined by MAX_PORTS in hal_parport.c). The ports are\n numbered starting at zero.\n \n 6.1.1 Loading\n The hal_parport driver is a real time component so it must be loaded into the real time thread with\n loadrt. The configuration string describes the parallel ports to be used, and (optionally) their types. If\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 311 / 1223\n \n the configuration string does not describe at least one port, it is an error.\n loadrt hal_parport cfg=\u201dport [type] [port [type] ...]\u201d\n \n Specifying the Port Numbers below 16 refer to parallel ports detected by the system. This is the\n@@ -16908,15 +16908,15 @@\n 2 to 9 explicitly specified as outputs. Note that you must know the base address of the parallel ports\n to configure the drivers correctly. For ISA bus ports, this is usually not a problem, since the ports\n are almost always at a well-known address, such as 0x278 or 0x378 which are typically configured\n in the BIOS. The addresses of PCI bus cards are usually found with lspci -v in an I/O ports line, or\n in a kernel message after running sudo modprobe -a parport_pc. There is no default address, so if\n does not contain at least one address, it is an error.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 312 / 1223\n \n Figure 6.1 \u2013 Parport block diagram\n Type For each parallel port handled by the hal_parport driver, a type can optionally be specified. The\n type is one of in, out, epp, or x.\n Table 6.1: Parallel Port Direction\n@@ -16976,15 +16976,15 @@\n out\n out\n in\n in\n in\n in\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 313 / 1223\n \n Table 6.1: (continued)\n Pin\n 14\n 15\n@@ -17047,15 +17047,15 @@\n direction.\n loadrt hal_parport cfg=\u201d0x378 0xc000\u201d\n \n Please note that your values will differ. The Netmos cards are Plug-N-Play, and might change their\n settings depending on which slot you put them into, so if you like to get under the hood and re-arrange\n things, be sure to check these values before you start LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 314 / 1223\n \n 6.1.3 Pins\n \u2014 parport.

.pin- \u0300\n ____-out \u0300 (bit) Drives a physical output pin.\n \u2014 parport.

.pin- \u0300\n@@ -17104,15 +17104,15 @@\n idea to use both an -all function and an individual function at the same time.\n \n 6.1.6 Common problems\n If loading the module reports\n insmod: error inserting \u2019/home/jepler/emc2/rtlib/hal_parport.ko\u2019:\n -1 Device or resource busy\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 315 / 1223\n \n then ensure that the standard kernel module parport_pc is not loaded 1 and that no other device in\n the system has claimed the I/O ports.\n If the module loads but does not appear to function, then the port address is incorrect.\n \n@@ -17149,15 +17149,15 @@\n \n Then use of this module will probably be necessary.\n Finally, HAL parport components should be loaded:\n loadrt probe_parport\n loadrt hal_parport ...\n 1. In the LinuxCNC packages for Ubuntu, the file /etc/modprobe.d/emc2 generally prevents parport_pc from being automatically loaded.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 316 / 1223\n \n 6.2 AX5214H Driver\n The Axiom Measurement & Control AX5214H is a 48 channel digital I/O board. It plugs into an ISA\n bus, and resembles a pair of 8255 chips. In fact it may be a pair of 8255 chips, but I\u2019m not sure. If/when\n someone starts a driver for an 8255 they should look at the ax5214 code, much of the work is already\n@@ -17196,15 +17196,15 @@\n module, and FALSE drives it high, turning OFF the OPTO-22 module. If -invert is TRUE, then setting\n the HAL out- pin TRUE will drive the physical pin high and turn the module OFF.\n \n 6.2.4 Functions\n \u2014 (funct) ax5214..read \u2014 Reads all digital inputs on one board.\n \u2014 (funct) ax5214..write \u2014 Writes all digital outputs on one board.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 317 / 1223\n \n 6.3 General Mechatronics Driver\n General Mechatronics GM6-PCI card based motion control system\n For detailed description, please refer to the System integration manual.\n The GM6-PCI motion control card is based on an FPGA and a PCI bridge interface ASIC. A small\n@@ -17222,15 +17222,15 @@\n loadrt hal_gm\n \n During loading (or attempted loading) the driver prints some useful debugging messages to the kernel\n log, which can be viewed with dmesg.\n Up to 3 boards may be used in one system.\n The following connectors can be found on the GM6-PCI card:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 318 / 1223\n \n Figure 6.2 \u2013 GM6-PCI card connectors and LEDs\n \n 6.3.1 I/O connectors\n \n@@ -17266,15 +17266,15 @@\n 2\n IOx/0\n \n Each pin can be configured as digital input or output. GM6-PCI motion control card has 4 general\n purpose I/O (GPIO) connectors, with eight configurable I/O on each. Every GPIO pin and parameter\n name begins as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 319 / 1223\n \n gm..gpio.\n \n where is from 0 to 3.\n State of the first pin of the first GPIO connector on the GM6-PCI card.\n@@ -17322,15 +17322,15 @@\n When True, pin value will be inverted.\n Used when pin is configured as output.\n \n 6.3.2 Axis connectors\n \n Figure 6.4 \u2013 Pin numbering of axis connectors\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 320 / 1223\n \n Table 6.5: Pinout of axis connectors\n 1\n 2\n 3\n@@ -17358,15 +17358,15 @@\n modules to the axis connectors. Seven different system configurations are presented in the System integration manual for evaluating typical applications. Also the detailed description of the Axis modules\n can be found in the System integration manual.\n For evaluating the appropriate servo-drive structure the modules have to be connected as the following\n block diagram shows:\n \n Figure 6.5 \u2013 Servo axis interfaces\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 321 / 1223\n \n 6.3.2.2 Encoder\n The GM6-PCI motion control card has six encoder modules. Each encoder module has three channels:\n \u2014 Channel-A\n \u2014 Channel-B\n@@ -17430,15 +17430,15 @@\n calculate velocity. It greatly reduces\n quantization noise as compared to\n simply differentiating the position\n output. When the measured velocity is\n below min-speed-estimate, the\n velocity output is 0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 322 / 1223\n \n Table 6.7: Encoder parameters\n Parameters\n .counter-mode\n \n@@ -17513,15 +17513,15 @@\n example, if position-scale is 2000, then\n 1000 counts of the encoder will\n produce a position of 0.5 units.\n \n Setting encoder module of axis 0 to receive 500 CPR quadrature encoder signal and use\n reset to round position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 323 / 1223\n \n setp gm.0.encoder.0.counter-mode 0\n # 0: quad, 1: stepDir\n setp gm.0.encoder.0.index-mode 1\n # 0: reset pos at index, 1:round pos at index\n@@ -17592,15 +17592,15 @@\n \n Parameter description\n When 0, module produces Step/Dir signal.\n When 1, it produces Up/Down step signals.\n And when it is 2, it produces quadrature\n output signals.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 324 / 1223\n \n Table 6.9: (continued)\n Parameters\n .control-type\n \n@@ -17657,15 +17657,15 @@\n Minimum time between two step pulses in\n nano-seconds.\n Minimum time between step pulse and\n direction change in nanoseconds.\n \n For evaluating the appropriate values see the timing diagrams below:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 325 / 1223\n \n Figure 6.6 \u2013 Reference signal timing diagrams\n Setting StepGen module of axis 0 to generate 1000 step pulse per position unit\n setp gm.0.stepgen.0.step-type 0\n setp gm.0.stepgen.0.control-type 0\n@@ -17683,15 +17683,15 @@\n # step generator, let interpolator control it.\n setp gm.0.stepgen.0.position-scale 1000 # 1000 step/position unit\n setp gm.0.stepgen.0.steplen 1000\n # 1000 ns = 1 \u00b5s\n setp gm.0.stepgen.0.stepspace1000\n # 1000 ns = 1 \u00b5s\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 326 / 1223\n \n setp gm.0.stepgen.0.dirdelay 2000\n \n # 2000 ns = 2 \u00b5s\n \n@@ -17744,15 +17744,15 @@\n direction\n (bit, In)\n \n Pin description\n Enable DAC output. When enable is\n false, DAC output is 0.0 V.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 327 / 1223\n \n Table 6.11: (continued)\n Pins\n \n Type and\n@@ -17813,15 +17813,15 @@\n gm..can-gm.\n \n where is from 0 to 5. For example, gm.0.can-gm.0.position refers to the output position\n of axis 0 in position units.\n HAL pins are updated by function:\n gm..write\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 328 / 1223\n \n 6.3.3.1 Pins\n Table 6.13: CAN module pins\n Pins\n \n@@ -17867,15 +17867,15 @@\n \n Pin description\n Indicates that watchdog timer is expired.\n \n Watchdog timer overrun causes the set of power-enable to low in hardware.\n 6.3.4.2 Parameters\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 329 / 1223\n \n Table 6.16: Watchdog parameters\n Parameters\n \n Type and\n@@ -17980,15 +17980,15 @@\n 2\n V+\n (Ext.)\n \n The GM6-PCI motion control card has two limit- and one homing switch input for each joint. All the\n names of these pins begin as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 330 / 1223\n \n gm..joint.\n \n where is from 0 to 5. For example, gm.0.joint.0.home-sw-in indicates the state of the\n axis 0 home switch.\n@@ -18049,15 +18049,15 @@\n \u2014 Off, when no data communication.\n 6.3.6.2 RS485\n Color: Orange\n \u2014 Blink, during initialization of modules on the bus\n \u2014 On, when the data communication is up between all initialized modules.\n \u2014 Off, when any of the initialized modules dropped off because of an error.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 331 / 1223\n \n 6.3.6.3 EMC\n Color: White\n \u2014 Blink, when LinuxCNC is running.\n \u2014 Otherwise off.\n@@ -18087,15 +18087,15 @@\n (green LED blinking), and turns all outputs to error state.\n 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 card, and the end is the last module.\n \n Figure 6.8 \u2013 Connecting the RS485 nodes to the GM6-PCI card\n Addressing Each node on the bus has a 4 bit unique address that can be set with a red DIP switch.\n Status LED A green LED indicates the status of the module:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 332 / 1223\n \n \u2014 Blink, when the module is only powered, but not jet identified, or when module is dropped down.\n \u2014 Off, during identification (computer is on, but LinuxCNC not started)\n \u2014 On, when it communicates continuously.\n 6.3.7.1 Relay output module\n@@ -18151,15 +18151,15 @@\n For pinout, connection and electrical charasteristics of the module, please refer to the System integration manual.\n All the pins and parameters are updated by the following function:\n gm..rs485\n \n It should be added to servo thread or other thread with larger period to avoid CPU overload. Every\n RS485 module pin and parameter name begins as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 333 / 1223\n \n gm..rs485.\n \n where is from 00 to 15.\n Table 6.22: Digital input output module pins\n@@ -18220,15 +18220,15 @@\n \n Pin description\n Value of ADC input in Volts.\n Enable DAC output. When enable is false then\n DAC output is set to 0.0 V.\n Value of DAC output in Volts.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 334 / 1223\n \n Table 6.24: DAC & ADC module parameters\n Parameters\n .adc-scale-<0-7>\n \n@@ -18317,15 +18317,15 @@\n The raw count is the counts, but unaffected by\n reset.\n Position in scaled units\n (=.enc-counts/.enc-position-scale).\n Input pin\n Negated input pin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 335 / 1223\n \n Table 6.26: Teach Pendant module parameters\n Parameters\n .adc-scale-<0-5>\n \n@@ -18381,15 +18381,15 @@\n This component is loaded using the halcmd \u201dloadusr\u201d command:\n loadusr -Wn spindle-vfd gs2_vfd -n spindle-vfd\n \n The above command says: loadusr, wait for named to load, component gs2_vfd, named spindle-vfd.\n The HAL loadusr command is described in the loadusr chapter.\n 2. In Europe the equivalent can be found under the brand name Omron.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 336 / 1223\n \n 6.4.1 Command Line Options\n \u2014 -b or --bits (default: 8) Set number of data bits to n, where n must be from 5 to 8 inclusive.\n \u2014 -d or --device (default: /dev/ttyS0) Set the file path to the serial device node to use.\n \u2014 -g or --debug Turn on debugging messages. This will also set the verbose flag. Debug mode will\n@@ -18431,15 +18431,15 @@\n \u2014 .scale-frequency (float, out) from the VFD\n \u2014 .speed-command (float, in) speed sent to VFD in RPM It is an error to send a speed faster\n than the Motor Max RPM as set in the VFD.\n \u2014 .spindle-fwd (bit, in) 1 for FWD and 0 for REV sent to VFD\n \u2014 .spindle-rev (bit, in) 1 for REV and 0 if off\n \u2014 .spindle-on (bit, in) 1 for ON and 0 for OFF sent to VFD\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 337 / 1223\n \n \u2014 .status-1 (s32, out) Drive Status of the VFD (see the GS2 manual)\n \u2014 .status-2 (s32, out) Drive Status of the VFD (see the GS2 manual)\n Note\n The status value is a sum of all the bits that are on. So a 163 which means the drive is in the run\n@@ -18497,15 +18497,15 @@\n Pin Num\n 3\n 5\n 7\n 29\n 31\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 7\n 8\n 9\n 10\n 11\n 12\n@@ -18612,15 +18612,15 @@\n 6.5.5 Functions\n \u2014 hal_pi_gpio.read - Add this to the base thread to update the HAL pin values to match the physical\n input values.\n \u2014 hal_pi_gpio.write - Add this to the base thread to update the physical pins to match the HAL values.\n Typically the read function will be early in the call list, before any encoder counters and the write\n function will be later in the call list, after stepgen.make-pulses.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 339 / 1223\n \n 6.5.6 Pin Numbering\n The GPIO connector and the pinout has been consistent since around 2015. These older Pi models\n are probably a poor choice for LinuxCNC anyway. However, this driver is designed to work with them,\n and will detect and correctly configure for the two alternative pinouts.\n@@ -18697,15 +18697,15 @@\n active-high\n active-high\n active-high\n active-high\n active-high\n active-high\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n line\n line\n line\n line\n line\n line\n@@ -18826,15 +18826,15 @@\n \u2014 hal_gpio.NAME-in-not - HAL_OUT An inverted version of the above, for convenience\n \u2014 hal_gpio.NAME-out - HAL_IN use this pin to transfer a HAL bit value to a physical output\n \n 6.6.4 Parameters\n \u2014 hal_gpio.reset_ns - HAL_RW - \u201dsetp\u201d this parameter to control the pulse length of pins added to the\n \u201dreset\u201d list. The value will be limited between 0 and thread-period / 4.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 341 / 1223\n \n 6.6.5 Functions\n \u2014 hal_gpio.read - Add this to the base thread to update the HAL pin values to match the physical\n input values.\n \u2014 hal_gpio.write - Add this to the base thread to update the physical pins to match the HAL values.\n@@ -18870,15 +18870,15 @@\n \n 6.6.8 Author\n Andy Pugh\n \n 6.6.9 Known Bugs\n None at this time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 342 / 1223\n \n 6.7 Mesa HostMot2 Driver\n 6.7.1 Introduction\n HostMot2 is an FPGA configuration developed by Mesa Electronics for their line of Anything I/O motion\n control cards. The firmware is open source, portable and flexible. It can be configured (at compiletime) with zero or more instances (an object created at runtime) of each of several Modules: encoders\n@@ -18913,15 +18913,15 @@\n \n 6.7.4 Loading HostMot2\n The LinuxCNC support for the HostMot2 firmware is split into a generic driver called hostmot2 and\n two low-level I/O drivers for the Anything I/O boards. The low-level I/O drivers are hm2_7i43 and\n hm2_pci (for all the PCI- and PC-104/Plus-based Anything I/O boards). The hostmot2 driver must be\n loaded first, using a HAL command like this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 343 / 1223\n \n loadrt hostmot2\n \n See the hostmot2(9) man page for details.\n The hostmot2 driver by itself does nothing, it needs access to actual boards running the HostMot2\n@@ -18955,15 +18955,15 @@\n \u2014 hm2_..read - Read all inputs, update input HAL pins.\n \u2014 hm2_..write - Write all outputs.\n \u2014 hm2_..read_gpio - Read the GPIO input pins only. (This function is not\n available on the 7I43 due to limitations of the EPP bus.)\n \u2014 hm2_..write_gpio - Write the GPIO control registers and output pins\n only. (This function is not available on the 7I43 due to limitations of the EPP bus.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 344 / 1223\n \n Note\n The above read_gpio and write_gpio functions should not normally be needed, since the GPIO bits are\n read and written along with everything else in the standard read and write functions above, which\n are normally run in the servo thread.\n@@ -19011,15 +19011,15 @@\n [ 1141.053432] hm2/hm2_5i20.0: IO Pin 011 (P2-23): PWMGen #0, pin Not-Enable (Output)\n ...\n [ 1141.053589] hm2/hm2_5i20.0: IO Pin 060 (P4-25): StepGen #2, pin Step (Output)\n [ 1141.053593] hm2/hm2_5i20.0: IO Pin 061 (P4-27): StepGen #2, pin Direction (Output)\n [ 1141.053597] hm2/hm2_5i20.0: IO Pin 062 (P4-29): StepGen #2, pin (unused) (Output)\n [ 1141.053601] hm2/hm2_5i20.0: IO Pin 063 (P4-31): StepGen #2, pin (unused) (Output)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 345 / 1223\n \n [ 1141.053605] hm2/hm2_5i20.0: IO Pin 064 (P4-33): StepGen #2, pin (unused) (Output)\n [ 1141.053609] hm2/hm2_5i20.0: IO Pin 065 (P4-35): StepGen #2, pin (unused) (Output)\n [ 1141.053613] hm2/hm2_5i20.0: IO Pin 066 (P4-37): IOPort\n [ 1141.053616] hm2/hm2_5i20.0: IO Pin 067 (P4-39): IOPort\n@@ -19044,15 +19044,15 @@\n mothercard on LinuxCNC startup. If you are using Run In Place, you must still install a hostmot2firmware- package. There is more information about firmware and configuration in the Configurations section.\n \n 6.7.10 HAL Pins\n The HAL pins for each configuration can be seen by opening up Show HAL Configuration from the\n Machine menu. All the HAL pins and parameters can be found there. The following figure is of the\n 5I20 configuration used above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 346 / 1223\n \n Figure 6.9 \u2013 5i20 HAL Pins\n \n 6.7.11 Configurations\n 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\u2019s look\n@@ -19068,15 +19068,15 @@\n 7I47). So in this way we can save two ports (48 bits) for GPIO.\n Here are tables of the firmwares available in the official packages. There may be additional firmwares\n available at the Mesanet.com website that have not yet made it into the LinuxCNC official firmware\n packages, so check there too.\n 3x20 (6-port various) Default Configurations (The 3x20 comes in 1M, 1.5M, and 2M gate versions. So\n far, all firmware is available in all gate sizes.)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Firmware\n SV24\n SVST16_24\n \n Encoder\n 24\n@@ -19289,15 +19289,15 @@\n 0\n 4\n \n GPIO\n 0\n 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Firmware\n SVST8_4IM2\n \n Encoder\n 8 (+IM)\n \n@@ -19402,15 +19402,15 @@\n \u2014 in - (Bit, Out) Normal state of the hardware input pin. Both full GPIO pins and I/O pins used as\n inputs by active module instances have this pin.\n \u2014 in_not - (Bit, Out) Inverted state of the hardware input pin. Both full GPIO pins and I/O pins used\n as inputs by active module instances have this pin.\n \u2014 out - (Bit, In) Value to be written (possibly inverted) to the hardware output pin. Only full GPIO\n pins have this pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 349 / 1223\n \n 6.7.12.2 Parameters\n \u2014 invert_output - (Bit, RW) This parameter only has an effect if the is_output parameter is true. If this\n parameter is true, the output value of the GPIO will be the inverse of the value on the out HAL pin.\n Only full GPIO pins and I/O pins used as outputs by active module instances have this parameter.\n@@ -19448,15 +19448,15 @@\n \u2014 position-fb - (Float, Out) Feedback position in user-defined position units (counts / position_scale).\n \u2014 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).\n \u2014 velocity-fb - (Float, Out) Feedback velocity in user-defined position units per second.\n 6.7.13.2 Parameters\n \u2014 dirhold - (u32, RW) Minimum duration of stable Direction signal after a step ends, in nanoseconds.\n 3. At present, the firmware supports multi-phase stepper outputs, but the driver doesn\u2019t. Interested volunteers are solicited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 350 / 1223\n \n \u2014 dirsetup - (u32, RW) Minimum duration of stable Direction signal before a step begins, in nanoseconds.\n \u2014 maxaccel - (Float, RW) Maximum acceleration, in position units per second per second. If set to 0,\n the driver will not limit its acceleration.\n \u2014 maxvel - (Float, RW) Maximum speed, in position units per second. If set to 0, the driver will choose\n@@ -19488,15 +19488,15 @@\n The function of the Out0 and Out1 I/O pins varies with output-type parameter (see below).\n The hm2 pwmgen representation is similar to the software pwmgen component. Each pwmgen instance has the following pins and parameters:\n 6.7.14.1 Pins\n \u2014 enable - (Bit, In) If true, the pwmgen will set its Not-Enable pin false and output its pulses. If enable\n is false, pwmgen will set its Not-Enable pin true and not output any signals.\n \u2014 value - (Float, In) The current pwmgen command value, in arbitrary units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 351 / 1223\n \n 6.7.14.2 Parameters\n \u2014 output-type - (s32, RW) This emulates the output_type load-time argument to the software pwmgen\n component. This parameter may be changed at runtime, but most of the time you probably want\n to set it at startup and then leave it alone. Accepted values are 1 (PWM on Out0 and Direction on\n@@ -19540,15 +19540,15 @@\n \n 6.7.15 Encoder\n Encoders have names like hm2_..encoder... Instance is a twodigit number that corresponds to the HostMot2 encoder instance number. There are num_encoders\n instances, starting with 00.\n Each encoder uses three or four input I/O pins, depending on how the firmware was compiled. Threepin encoders use A, B, and Index (sometimes also known as Z). Four-pin encoders use A, B, Index, and\n Index-mask.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 352 / 1223\n \n The hm2 encoder representation is similar to the one described by the Canonical Device Interface\n (in the HAL General Reference document), and to the software encoder component. Each encoder\n instance has the following pins and parameters:\n 6.7.15.1 Pins\n@@ -19587,15 +19587,15 @@\n seconds.\n \n 6.7.16 5I25 Configuration\n 6.7.16.1 Firmware\n The 5I25 firmware comes preloaded for the daughter card it is purchased with. So the firmware=xxx.BIT\n is not part of the hm2_pci configuration string when using a 5I25.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 353 / 1223\n \n 6.7.16.2 Configuration\n Example configurations of the 5I25/7I76 and 5I25/7I77 cards are included in the Configuration Selector.\n If you like to roll your own configuration the following examples show how to load the drivers in the\n HAL file.\n@@ -19632,15 +19632,15 @@\n If you wanted to scale the analog out of a channel to RPM for a 0 to 6000 RPM spindle with 0-10 V\n control you could set the limits like this:\n minlimit: 0\n maxlimit: 6000\n maxfullscale: 6000\n (this would prevent unwanted negative output voltages from being set)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 354 / 1223\n \n 6.7.17 Example Configurations\n Several example configurations for Mesa hardware are included with LinuxCNC. The configurations\n are located in the hm2-servo and hm2-stepper sections of the Configuration Selector. Typically you\n will need the board installed for the configuration you pick to load. The examples are a good place to\n@@ -19676,15 +19676,15 @@\n b. Default component name: loadusr -W mb2hal config=config_file.ini\n c. Custom component name: loadusr -Wn mymodule mb2hal config=config_file.ini\n \n 6.8.3 Options\n 6.8.3.1 Init Section\n [MB2HAL_INIT]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Value\n INIT_DEBUG\n \n Type\n Required\n Integer No\n@@ -19806,15 +19806,15 @@\n A list of element names. These names will be used for the\n NELEMENTS pin names, e.g. mb2hal.plcin.cycle_start.\n is\n NOTE: There must be no white space characters in the list.\n specified\n Example: PIN_NAMES=cycle_start,stop,feed_hold\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Value\n MB_TX_CODE\n \n Type\n String\n \n@@ -19891,15 +19891,15 @@\n \u2014 0x07 - NEGATIVE_ACKNOWLEDGE - Unsuccessful programming request using function code 13\n or 14.\n \u2014 0x08 - MEMORY_PARITY_ERROR - SLAVE parity error in MEMORY.\n \u2014 0x0A (-10) - GATEWAY_PROBLEM_PATH - Gateway path(s) not available.\n \u2014 0x0B (-11) - GATEWAY_PROBLEM_TARGET - The target device failed to respond (generated by\n master, not slave).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 357 / 1223\n \n Program or connection:\n \u2014 0x0C (-12) - COMM_TIME_OUT\n \u2014 0x0D (-13) - PORT_SOCKET_FAILURE\n \u2014 0x0E (-14) - SELECT_FAILURE\n@@ -19942,15 +19942,15 @@\n TOTAL_TRANSACTIONS=9\n # ++++++++++++++++++++++++\n # Transactions\n # ++++++++++++++++++++++++\n #One transaction section is required per transaction, starting at 00 and counting up \u2190sequentially.\n #If there is a new link (not transaction), you must provide the REQUIRED parameters 1st \u2190time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 358 / 1223\n \n #Warning: Any OPTIONAL parameter not specified are copied from the previous transaction.\n [TRANSACTION_00]\n #REQUIRED: You must specify either a \u201dserial\u201d or \u201dtcp\u201d link for the first transaction.\n #Later transaction will use the previous transaction link if not specified.\n@@ -19996,15 +19996,15 @@\n #It is an error to specify both NELEMENTS and PIN_NAMES\n #The pin names will be sequential numbers e.g mb2hal.plcin.01\n #NELEMENTS=4\n #REQUIRED unless NELEMENTS is specified: A list of element names.\n #these names will be used for the pin names, e.g mb2hal.plcin.cycle_start\n #NOTE: there must be no white space characters in the list\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 359 / 1223\n \n PIN_NAMES=cycle_start,stop,feed_hold\n #REQUIRED: Modbus transaction function code (see www.modbus.org specifications).\n #\n fnct_01_read_coils\n@@ -20095,15 +20095,15 @@\n #using the same name.\n HAL_TX_NAME=remoteIOcfg\n #OPTIONAL: Maximum update rate in HZ. Defaults to 0.0 (0.0 = as soon as available =\n infinite).\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 360 / 1223\n \n #NOTE: This is a maximum rate and the actual rate may be lower.\n #If you want to calculate it in ms use (1000 / required_ms).\n #Example: 100 ms = MAX_UPDATE_RATE=10.0, because 1000.0 ms / 100.0 ms = 10.0 Hz\n MAX_UPDATE_RATE=0.0\n@@ -20165,15 +20165,15 @@\n [TRANSACTION_03]\n MB_TX_CODE=fnct_05_write_single_coil\n FIRST_ELEMENT=100\n NELEMENTS=1\n HAL_TX_NAME=setEnableout\n MAX_UPDATE_RATE=0.0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n [TRANSACTION_04]\n MB_TX_CODE=fnct_15_write_multiple_coils\n FIRST_ELEMENT=150\n NELEMENTS=10\n HAL_TX_NAME=remoteIOout\n MAX_UPDATE_RATE=0.0\n@@ -20212,15 +20212,15 @@\n NELEMENTS=8\n HAL_TX_NAME=XDrive04\n MAX_UPDATE_RATE=10.0\n DEBUG=1\n \n 361 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 362 / 1223\n \n 6.8.5 Pins\n Note\n Yellow = New in MB2HAL 1.1 (LinuxCNC 2.9) To use these new features you have to set VERSION =\n 1.1.\n@@ -20247,15 +20247,15 @@\n NELEMENTS needs to be 1 or PIN_NAMES must contain just one name.\n 6.8.5.6 fnct_06_write_single_register\n \u2014 mb2hal.m.n.float float in\n \u2014 mb2hal.m.n.int s32 in\n NELEMENTS needs to be 1 or PIN_NAMES must contain just one name. Both pin values are added and\n limited to 65535 (UINT16_MAX). Use one and let the other open (read as 0).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 363 / 1223\n \n 6.8.5.7 fnct_15_write_multiple_coils\n \u2014 mb2hal.m.n.bit bit in\n 6.8.5.8 fnct_16_write_multiple_registers\n \u2014 mb2hal.m.n.float float in\n@@ -20287,15 +20287,15 @@\n \u2014 -b or --baud : set the baud rate - all networked VFDs must be the same\n \u2014 -p or --port : sets the port to use such as /dev/ttyUSB0\n \u2014 = : sets the HAL component/pin name and slave number.\n Debugging can be toggled by setting the debug pin true.\n Note\n Turning on debugging will result in a flood of text in the terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 364 / 1223\n \n 6.9.2 Pins\n Where is mitsub_vfd or the name given during loading.\n \u2014 .fwd (bit, in) True sets motion forward, False sets reverse.\n \u2014 .run (bit, in) True sets the VFD in motion based on the .fwd pin.\n@@ -20360,15 +20360,15 @@\n #\n command full speed\n setp coolant.motor-cmd 60\n #\n allows us to see status\n setp coolant.monitor 1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 365 / 1223\n \n 6.9.4 Configuring the Mitsubishi VFD for serial usage\n 6.9.4.1 Connecting the Serial Port\n The Mitsubishi VFDs have an RJ-45 jack for serial communication.\n Since they use RS485 protocol, they can be networked together point to point.\n@@ -20406,15 +20406,15 @@\n \n 6.10.1 Pins\n In the following pins, parameters, and functions, is the board ID. According to the naming\n conventions the first board should always have an ID of zero. However this driver sets the ID based\n on a pair of jumpers on the board, so it may be non-zero even if there is only one board.\n \u2014 (s32) motenc..enc--count - Encoder position, in counts.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 366 / 1223\n \n \u2014 (float) motenc..enc--position - Encoder position, in user units.\n \u2014 (bit) motenc..enc--index - Current status of index pulse input.\n \u2014 (bit) motenc..enc--idx-latch - Driver sets this pin true when it latches an index\n pulse (enabled by latch-index). Cleared by clearing latch-index.\n@@ -20467,15 +20467,15 @@\n Typically, the useful values are 0 (watchdog disabled) or 20 (8ms watchdog enabled, cleared by dacwrite).\n \u2014 (u32) motenc..led-view - Maps some of the I/O to onboard LEDs.\n \n 6.10.3 Functions\n \u2014 (funct) motenc..encoder-read - Reads all encoder counters.\n \u2014 (funct) motenc..adc-read - Reads the analog-to-digital converters.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 367 / 1223\n \n \u2014 (funct) motenc..digital-in-read - Reads digital inputs.\n \u2014 (funct) motenc..dac-write - Writes the voltages to the DACs.\n \u2014 (funct) motenc..digital-out-write - Writes digital outputs.\n \u2014 (funct) motenc..misc-update - Updates misc stuff.\n@@ -20515,15 +20515,15 @@\n signal to this pin to write to an I/O point of the card. The PINNUMBER represents the position in\n the relay rack.Eg. PINNUMBER 23 is position 23 in a Opto22 relay rack and would be pin 1 on the\n 50 pin header connector.\n \u2014 opto_ac5.[BOARDNUMBER].led[NUMBER] OUT bit - Turns one of the 4 onboard LEDs on/off. LEDs\n are numbered 0 to 3.\n BOARDNUMBER can be 0-3 PORTNUMBER can be 0 or 1. Port 0 is closest to the card bracket.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 368 / 1223\n \n 6.11.4 Parameters\n \u2014 opto_ac5.[BOARDNUMBER].port[PORTNUMBER].out-[PINNUMBER]-invert W bit - When TRUE,\n invert the meaning of the corresponding -out pin so that TRUE gives LOW and FALSE gives HIGH.\n \n@@ -20560,15 +20560,15 @@\n 24 bits represented in a BINARY number. Bit 1 is the rightmost number:\n 16 zeros for the 16 inputs and 8 ones for the 8 outputs\n 000000000000000011111111\n \n This converts to FF on the calculator, so 0xff is the number to use for portconfig0 and/or portconfig1\n when loading the driver.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 369 / 1223\n \n 6.11.7 Pin Numbering\n HAL pin 00 corresponds to bit 1 (the rightmost) which represents position 0 on an Opto22 relay rack.\n HAL pin 01 corresponds to bit 2 (one spot to the left of the rightmost) which represents position 1 on\n an Opto22 relay rack. HAL pin 23 corresponds to bit 24 (the leftmost) which represents position 23\n@@ -20611,15 +20611,15 @@\n Alternatively, the 8 digital output pins can be used as additional digital outputs, it works the same\n way as above with the syntax : extradout=0xnn\u2019. The extradac and extradout options are mutually\n exclusive on each board, you can only specify one.\n The UPC and PPMC encoder boards can timestamp the arrival of encoder counts to refine the derivation of axis velocity. This derived velocity can be fed to the PID hal component to produce smoother D\n term response. The syntax is : timestamp=0xnn[,0xmm], this works the same way as above to select\n which board is being configured. Default is to not enable the timestamp option. If you put this option\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 370 / 1223\n \n on the command line, it enables the option. The first n selects the EPP bus, the second one matches\n the address of the board having the option enabled. The driver checks the revision level of the board\n to make sure it has firmware supporting the feature, and produces an error message if the board does\n not support it.\n@@ -20663,15 +20663,15 @@\n home-to-index. This is a bidirectional HAL signal. Setting it to true causes the encoder hardware\n to reset the count to zero on the next encoder index pulse. The driver will detect this and set the\n signal back to false.\n \u2014 (PPMC float output) ppmc..DAC..value - sends a signed value to the 16-bit Digital\n to Analog Converter on the PPMC DAC16 board commanding the analog output voltage of that DAC\n channel.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 371 / 1223\n \n \u2014 (UPC bit input) ppmc..pwm..enable - Enables a PWM generator.\n \u2014 (UPC float input) ppmc..pwm..value - Value which determines the duty cycle of\n the PWM waveforms. The value is divided by pwm..scale, and if the result is 0.6 the duty\n cycle will be 60%, and so on. Negative values result in the duty cycle being based on the absolute\n@@ -20714,15 +20714,15 @@\n on some PWM servo drives.\n \u2014 (USC u32) ppmc..stepgen..setup-time - Sets minimum time between direction change and step pulse, in units of 100 ns. Applies to a group of four consecutive step\n generators, as indicated by . Values between 200 ns and 25.5 \u00b5s can be specified.\n \u2014 (USC u32) ppmc..stepgen..pulse-width - Sets width of step pulses, in units\n of 100 ns. Applies to a group of four consecutive step generators, as indicated by .\n Values between 200 ns and 25.5 \u00b5s may be specified.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 372 / 1223\n \n \u2014 (USC u32) ppmc..stepgen..pulse-space-min - Sets minimum time between\n pulses, in units of 100 ns. Applies to a group of four consecutive step generators, as indicated by\n . Values between 200 ns and 25.5 \u00b5s can be specified. The maximum step rate is:\n \n@@ -20758,15 +20758,15 @@\n Note\n The Pluto P board requires EPP mode. Netmos98xx chips do not work in EPP mode. The Pluto P board\n will work on some computers and not on others. There is no known pattern to which computers work\n and which don\u2019t work.\n \n For more information on PCI EPP compatible parallel port cards see the LinuxCNC Supported Hardware page on the wiki.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 373 / 1223\n \n 6.13.1.2 Connectors\n \u2014 The Pluto-P board is shipped with the left connector presoldered, with the key in the indicated\n position. The other connectors are unpopulated. There does not seem to be a standard 12-pin IDC\n connector, but some of the pins of a 16P connector can hang off the board next to QA3/QZ3.\n@@ -20801,15 +20801,15 @@\n through these VCC pins. The required current is not yet known, but is probably around 50mA plus\n I/O current.\n \u2014 The regulator on the Pluto-P board is a low-dropout type. Supplying 5V at the power jack will allow\n the regulator to work properly.\n 6.13.1.6 PC interface\n \u2014 Only a single pluto_servo or pluto_step board is supported.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 374 / 1223\n \n 6.13.1.7 Rebuilding the FPGA firmware\n The src/hal/drivers/pluto_servo_firmware/ and src/hal/drivers/pluto_step_firmware/ subdirectories contain\n the Verilog source code plus additional files used by Quartus for the FPGA firmwares. Altera\u2019s Quartus\n II software is required to rebuild the FPGA firmware. To rebuild the firmware from the .hdl and other\n@@ -20848,15 +20848,15 @@\n corresponding quadrature channel is unused.\n \u2014 QZx - The Z (index) signal for quadrature counter X. May be used as a digital input if the index\n feature of the corresponding quadrature channel is unused.\n \u2014 INx - Dedicated digital input #x\n \u2014 OUTx - Dedicated digital output #x\n \u2014 GND - Ground\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 375 / 1223\n \n \u2014 VCC - +3.3V regulated DC\n \n Figure 6.10 \u2013 Pluto-Servo Pinout\n Table 6.27: Pluto-Servo Alternate Pin Functions\n@@ -20918,15 +20918,15 @@\n output\n XOR\u2019d with DN0 or DIR0\n When pwm-1-pwmdir is\n TRUE, this pin is the DIR\n output\n XOR\u2019d with DN1 or DIR1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 376 / 1223\n \n Table 6.27: (continued)\n Primary function\n \n Alternate Function\n@@ -21007,15 +21007,15 @@\n reported success with International Rectifier\u2019s integrated high-side/low-side drivers.\n \n 6.13.3 Pluto Step\n Pluto-step is suitable for control of a 3- or 4-axis CNC mill with stepper motors. The large number of\n inputs allows for a full set of limit switches.\n The board features:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 377 / 1223\n \n \u2014 4 step+direction channels with 312.5 kHz maximum step rate, programmable step length, space,\n and direction change times\n \u2014 14 dedicated digital outputs\n \u2014 16 dedicated digital inputs\n@@ -21035,15 +21035,15 @@\n \n 6.13.3.2 Input latching and output updating\n \u2014 Step frequencies for each channel are updated at different times.\n \u2014 Digital outputs are all updated at the same time.\n \u2014 Digital inputs are all latched at the same time.\n \u2014 Feedback positions for each channel are latched at different times.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 378 / 1223\n \n 6.13.3.3 Step Waveform Timings\n The firmware and driver enforce step length, space, and direction change times. Timings are rounded\n up to the next multiple of 1.6\u03bcs, with a maximum of 49.6\u03bcs. The timings are the same as for the software stepgen component, except that dirhold and dirsetup have been merged into a single parameter\n dirtime which should be the maximum of the two, and that the same step timings are always applied\n@@ -21060,15 +21060,15 @@\n Note\n Since this is a non-realtime program it can be affected by computer loading and latency. It is possible\n to lose communications which will be indicated by a change in the status output. One should always\n have an Estop circuit that kills the power to the unit in case of emergency.\n \n This component is loaded using the halcmd \u201dloadusr\u201d command:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 379 / 1223\n \n loadusr -Wn pmx485 pmx485 /dev/ttyUSB0\n \n This will load the pmx485 component using the /dev/ttyUSB0 port and wait for it to become ready.\n It is necessary to name the port to use for communications.\n@@ -21104,15 +21104,15 @@\n \u2014 Disconnect the Powermax power supply from its power source for approximately 30 seconds. When\n you power the system back ON, it will no longer be in remote mode.\n \n 6.14.3 Reference:\n \u2014 Hypertherm Application Note #807220\n \u201dPowermax45 XP/65/85/105/125\u00ae Serial Communication Protocol\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 380 / 1223\n \n 6.15 Servo To Go Driver\n The Servo-To-Go (STG) is one of the first PC motion control cards supported by LinuxCNC. It is an\n ISA card and it exists in different flavors (all supported by this driver). The board includes up to 8\n channels of quadrature encoder input, 8 channels of analog input and output, 32 bits digital I/O, an\n@@ -21154,15 +21154,15 @@\n \u2014 stg..position - (float) Outputs a converted position.\n \u2014 stg..dac-value - (float) Drives the voltage for the corresponding DAC.\n \u2014 stg..adc-value - (float) Tracks the measured voltage from the corresponding ADC.\n \u2014 stg.in- - (bit) Tracks a physical input pin.\n \u2014 stg.in--not - (bit) Tracks a physical input pin, but inverted.\n \u2014 stg.out- - (bit) Drives a physical output pin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 381 / 1223\n \n For each pin, is the axis number, and is the logic pin number of the STG if\n IIOO is defined, there are 16 input pins (in-00 .. in-15) and 16 output pins (out-00 .. out-15), and they\n correspond to PORTs ABCD (in-00 is PORTA.0, out-15 is PORTD.7).\n The in- HAL pin is TRUE if the physical pin is high, and FALSE if the physical pin is low.\n@@ -21198,15 +21198,15 @@\n The ShuttleXpress has five momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n The ShuttlePRO has 13 momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n The ShuttlePRO2 has 15 momentary buttons, a 10 counts/revolution jog wheel with detents, and a\n 15-position spring-loaded outer wheel that returns to center when released.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 382 / 1223\n \n AVERTISSEMENT\n 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\n event comes into the driver, the driver uses the device\u2019s reported jog-wheel position to initialize counts to 0.\n This means that if the first event is generated by a jog-wheel move, that first move will be lost.\n@@ -21244,15 +21244,15 @@\n \n 6.17 VFS11 VFD Driver\n This is a non-realtime HAL program to control the S11 series of VFDs from Toshiba.\n vfs11_vfd supports serial and TCP connections. Serial connections may be RS232 or RS485. RS485 is\n supported in full- and half-duplex mode. TCP connections may be passive (wait for incoming connection), or active outgoing connections, which may be useful to connect to TCP-based devices or through\n a terminal server.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 383 / 1223\n \n Regardless of the connection type, vfs11_vfd operates as a Modbus master.\n This component is loaded using the halcmd \u201dloadusr\u201d command:\n loadusr -Wn spindle-vfd vfs11_vfd -n spindle-vfd\n \n@@ -21293,15 +21293,15 @@\n \u2014 .frequency-command (float, out) current target frequency in Hz as set through speed-command\n (which is in RPM), from the VFD\n \u2014 .frequency-out (float, out) current output frequency of the VFD\n \u2014 .inverter-load-percentage (float, out) current load report from VFD\n \u2014 .is-e-stopped (bit, out) the VFD is in emergency stop status (blinking \u201dE\u201d on panel). Use errreset to reboot the VFD and clear the e- stop status.\n \u2014 .is-stopped (bit, out) true when the VFD reports 0 Hz output\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 384 / 1223\n \n \u2014 .max-rpm (float, R) actual RPM limit based on maximum frequency the VFD may generate,\n and the motors nameplate values. For instance, if nameplate-HZ is 50, and nameplate-RPM_ is\n 1410, but the VFD may generate up to 80 Hz, then max-rpm would read as 2256 (80*1410/50). The\n frequency limit is read from the VFD at startup. To increase the upper frequency limit, the UL and\n@@ -21344,15 +21344,15 @@\n in src/hal/user_comps/vfs11_vfd/*.ini.\n [VFS11]\n # serial connection\n TYPE=rtu\n # serial port\n DEVICE=/dev/ttyS0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n # TCP server - wait for incoming connection\n TYPE=tcpserver\n # tcp portnumber for TYPE=tcpserver or tcpclient\n PORT=1502\n # TCP client - active outgoing connection\n TYPE=tcpclient\n@@ -21393,15 +21393,15 @@\n #\n # example usage of the VF-S11 VFD driver\n #\n #\n \n 385 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 386 / 1223\n \n loadusr -Wn spindle-vfd vfs11_vfd -n spindle-vfd\n # connect the spindle direction pins to the VFD\n net vfs11-fwd spindle-vfd.spindle-fwd <= spindle.0.forward\n net vfs11-rev spindle-vfd.spindle-rev <= spindle.0.reverse\n@@ -21441,15 +21441,15 @@\n TCPDEST:PORTNO.\n \n 6.17.8 Configuring the VFS11 VFD for Modbus usage\n 6.17.8.1 Connecting the Serial Port\n The VF-S11 has an RJ-45 jack for serial communication. Unfortunately, it does not have a standard\n RS-232 plug and logic levels. The Toshiba-recommended way is: connect the USB001Z USB-to-serial\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 387 / 1223\n \n conversion unit to the drive, and plug the USB port into the PC. A cheaper alternative is a homebrew\n interface ( hints from Toshiba support, circuit diagram).\n Note: the 24V output from the VFD has no short-circuit protection.\n Serial port factory defaults are 9600/8/1/even, the protocol defaults to the proprietary \u201dToshiba Inverter Protocol\u201d.\n@@ -21471,15 +21471,15 @@\n (Precise Pengolin). Moreover, these packages lack support for the MODBUS_RTS_MODE_* flags. Therefore, building vfs11_vfd using this library might generate a warning if RTS_MODE= is specified in\n the INI file.\n To use the full functionality on lucid and precise:\n \u2014 remove the libmodbus packages: sudo apt-get remove libmodbus5 libmodbus-dev\n \u2014 build and install libmodbus version 3 from source as outlined here.\n Libmodbus does not build on Ubuntu Hardy, hence vfs11_vfd is not available on Hardy.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 388 / 1223\n \n Chapitre 7\n \n Hardware Examples\n 7.1 PCI Parallel Port\n@@ -21510,15 +21510,15 @@\n and then added the following lines so the parport will be read and written:\n addf parport.1.read base-thread\n addf parport.1.write base-thread\n \n After doing the above then run your config and verify that the parallel port got loaded in Machine/Show\n HAL Configuration window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 389 / 1223\n \n 7.2 Spindle Control\n LinuxCNC can control up to 8 spindles. The number is set in the INI file. The examples below all refer\n to a single-spindle config with spindle control pins with names like spindle.0... In the case of a multiple\n spindle machine all that changes is that additional pins exist with names such as spindle.6...\n@@ -21554,15 +21554,15 @@\n \n 7.2.3 Spindle Enable\n If you need a spindle enable signal, link your output pin to spindle.0.on. To link these pins to a parallel\n port pin put something like the following in your .hal file, making sure you pick the pin that is connected\n to your control device.\n net spindle-enable spindle.0.on => parport.0.pin-14-out\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 390 / 1223\n \n 7.2.4 Spindle Direction\n If you have direction control of your spindle, then the HAL pins spindle.N.forward and spindle.N.reverse\n are controlled by the G-codes M3 and M4. Spindle speed Sn must be set to a positive non-zero value\n for M3/M4 to turn on spindle motion.\n@@ -21605,15 +21605,15 @@\n net spindle-ramped <= spindle-ramp.out => scale.0.in\n # to know when to start the motion we send the near component\n # (named spindle-at-speed) to the spindle commanded speed from\n # the signal spindle-cmd and the actual spindle speed\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 391 / 1223\n \n # provided your spindle can accelerate at the maxv setting.\n net spindle-cmd => spindle-at-speed.in1\n net spindle-ramped => spindle-at-speed.in2\n # the output from spindle-at-speed is sent to spindle.0.at-speed\n@@ -21656,15 +21656,15 @@\n 1. In this example, we will assume that some encoders have already been issued to axes/joints 0, 1, and 2. So the next encoder\n available for us to attach to the spindle would be number 3. Your situation may differ.\n 2. The HAL encoder index-enable is an exception to the rule in that it behaves as both an input and an output, see the\n Encoder Section for details\n 3. It is because we selected non-quadrature simple counting\u2026 above that we can get away with quadrature counting without\n having any B quadrature input.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 392 / 1223\n \n achieve this you need spindle feedback from an encoder. Since the feedback and the commanded\n speed are not usually exactly the same you should to use the near component to determine that the\n two numbers are close enough.\n The connections needed are from the spindle velocity command signal to near.n.in1 and from the\n@@ -21705,15 +21705,15 @@\n addf mux4.0 servo-thread\n # If your MPG outputs a quadrature signal per click set x4 to 1\n # If your MPG puts out 1 pulse per click set x4 to 0\n setp encoder.0.x4-mode 0\n # For velocity mode, set to 1\n # In velocity mode the axis stops when the dial is stopped\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 393 / 1223\n \n # even if that means the commanded motion is not completed,\n # For position mode (the default), set to 0\n # In position mode the axis will move exactly jog-scale\n # units for each count, regardless of how long that might take,\n@@ -21760,15 +21760,15 @@\n # If your MPG outputs a quadrature signal per click set x4 to 1\n # If your MPG puts out 1 pulse per click set x4 to 0\n setp encoder.0.x4-mode 0\n # For velocity mode, set to 1\n # In velocity mode the axis stops when the dial is stopped\n # even if that means the commanded motion is not completed,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 394 / 1223\n \n # For position mode (the default), set to 0\n # In position mode the axis will move exactly jog-scale\n # units for each count, regardless of how long that might take,\n setp axis.x.jog-vel-mode 0\n@@ -21811,15 +21811,15 @@\n config. Make sure the pins with \u201dSpindle CW\u201d and \u201dSpindle PWM\u201d are set to unused in the parallel\n port setup screen.\n In the custom.hal file we place the following to connect LinuxCNC to the GS2 and have LinuxCNC\n control the drive.\n GS2 Example\n # load the non-realtime component for the Automation Direct GS2 VFDs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 395 / 1223\n \n loadusr -Wn spindle-vfd gs2_vfd -r 9600 -p none -s 2 -n spindle-vfd\n # connect the spindle direction pin to the GS2\n net gs2-fwd spindle-vfd.spindle-fwd <= spindle.N.forward\n # connect the spindle on pin to the GS2\n@@ -21844,15 +21844,15 @@\n \u2014 P4.00 (Source of Frequency Command) must be set to Frequency determined by RS232C/RS485\n communication interface, 05.\n \u2014 P9.01 (Transmission Speed) must be set to 9600 baud, 01.\n \u2014 P9.02 (Communication Protocol) must be set to \u201dModbus RTU mode, 8 data bits, no parity, 2 stop\n bits\u201d, 03.\n A PyVCP panel based on this example is here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 396 / 1223\n \n Chapitre 8\n \n ClassicLadder\n 8.1 ClassicLadder Introduction\n@@ -21882,15 +21882,15 @@\n along the top and bottom of the page while the rungs are drawn vertically from left to right.\n A program in ladder logic, also called a ladder diagram, is similar to a schematic for a set of relay\n circuits. Ladder logic is useful because a wide variety of engineers and technicians can understand\n and use it without much additional training because of the resemblance.\n Ladder logic is widely used to program PLCs, where sequential control of a process or manufacturing\n operation is required. Ladder logic is useful for simple but critical control systems, or for reworking\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 397 / 1223\n \n old hardwired relay circuits. As programmable logic controllers became more sophisticated it has also\n been used in very complex automation systems.\n Ladder logic can be thought of as a rule-based language, rather than a procedural language. A rung in\n the ladder represents a rule. When implemented with relays and other electromechanical devices, the\n@@ -21926,15 +21926,15 @@\n Building on the above example, suppose we add a switch that closes whenever the coil Q0 is active.\n This would be the case in a relay, where the coil can activate the switch contacts; or in a contactor,\n where there are often several small auxiliary contacts in addition to the large 3-phase contacts that\n are the primary feature of the contactor.\n Since this auxiliary switch is driven from coil Q0 in our earlier example, we will give it the same\n number as the coil that drives it. This is the standard practice followed in all ladder programming,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 398 / 1223\n \n although it may seem strange at first to see a switch labeled the same as a coil. So let\u2019s call this\n auxiliary contact Q0 and connect it across the B0 pushbutton contact from our earlier example.\n Let\u2019s take a look at it:\n \n@@ -21964,15 +21964,15 @@\n well to make sure that you understand how this circuit operates.\n \n 8.2 ClassicLadder Programming\n 8.2.1 Ladder Concepts\n ClassicLadder is a type of programming language originally implemented on industrial PLCs (it\u2019s\n called Ladder Programming). It is based on the concept of relay contacts and coils, and can be used to\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 399 / 1223\n \n construct logic checks and functions in a manner that is familiar to many systems integrators. Ladder\n consists of rungs that may have branches and resembles an electrical circuit. It is important to know\n how ladder programs are evaluated when running.\n It seems natural that each line would be evaluated left to right, then the next line down, etc., but it\n@@ -22013,15 +22013,15 @@\n and outputs. If you can turn a switch on and off faster than ClassicLadder can notice it then you may\n need to speed up the thread. The fastest that ClassicLadder can update the rungs is one millisecond.\n You can put it in a faster thread but it will not update any faster. If you put it in a slower than one\n millisecond thread then ClassicLadder will update the rungs slower. The current scan time will be\n displayed on the section display, it is rounded to microseconds. If the scan time is longer than one\n millisecond you may want to shorten the ladder or put it in a slower thread.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 400 / 1223\n \n 8.2.3.3 Variables\n It is possible to configure the number of each type of ladder object while loading the ClassicLadder\n real time module. If you do not configure the number of ladder objects ClassicLadder will use the\n default values.\n@@ -22098,15 +22098,15 @@\n 8.2.4 Loading the ClassicLadder non-realtime module\n ClassicLadder HAL commands must executed before the GUI loads or the menu item Ladder Editor\n will not function. If you used the Stepper Config Wizard place any ClassicLadder HAL commands in\n the custom.hal file.\n To load the non-realtime module:\n loadusr classicladder\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 401 / 1223\n \n Note\n Only one .clp file can be loaded. If you need to divide your ladder then use sections.\n \n To load a ladder file:\n@@ -22131,15 +22131,15 @@\n 8.2.5.1 Sections Manager\n When you first start up ClassicLadder you get an empty Sections Manager window.\n \n Figure 8.1 \u2013 Sections Manager Default Window\n This window allows you to name, create or delete sections and choose what language that section\n uses. This is also how you name a subroutine for call coils.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 402 / 1223\n \n 8.2.5.2 Section Display\n When you first start up ClassicLadder you get an empty Section Display window. Displayed is one\n empty rung.\n \n@@ -22155,15 +22155,15 @@\n ladder program will still run in the background.\n The check box at the top right allows you to select whether variable names or symbol names are\n displayed\n You might notice that there is a line under the ladder program display that reads \u201dProject failed to\n load\u2026\u201d. That is the status bar that gives you info about elements of the ladder program that you click\n on in the display window. This status line will now display HAL signal names for variables %I, %Q and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 403 / 1223\n \n the first %W (in an equation). You might see some funny labels, such as (103) in the rungs. This is\n displayed (on purpose) because of an old bug- when erasing elements older versions sometimes didn\u2019t\n erase the object with the right code. You might have noticed that the long horizontal connection button\n sometimes did not work in the older versions. This was because it looked for the free code but found\n@@ -22177,15 +22177,15 @@\n The Bit Status Window displays some of the boolean (on/off) variable data. Notice all variables start\n with the % sign. The %I variables represent HAL input bit pins. The %Q represents the relay coil\n and HAL output bit pins. The %B represents an internal relay coil or internal contact. The three edit\n areas at the top allow you to select what 15 variables will be displayed in each column. For instance,\n if the %B Variable column were 15 entries high, and you entered 5 at the top of the column, variables\n %B5 to %B19 would be displayed. The check boxes allow you to set and unset %B variables manually\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 404 / 1223\n \n as long as the ladder program isn\u2019t setting them as outputs. Any Bits that are set as outputs by the\n program when ClassicLadder is running can not be changed and will be displayed as checked if on\n and unchecked if off.\n \n@@ -22193,15 +22193,15 @@\n The Watch Window displays variable status. The edit box beside it is the number stored in the variable\n and the drop-down box beside that allow you to choose whether the number to be displayed in hex,\n decimal or binary. If there are symbol names defined in the symbols window for the word variables\n showing and the display symbols checkbox is checked in the section display window, symbol names\n 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\n checked) over an existing variable number/name and press the Enter Key.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 405 / 1223\n \n 8.2.5.4 Symbol Window\n \n Figure 8.5 \u2013 Symbol Names window\n This is a list of symbol names to use instead of variable names to be displayed in the section window\n@@ -22209,15 +22209,15 @@\n and capital letters), symbol name. If the variable can have a HAL signal connected to it (%I, %Q, and\n %W-if you have loaded s32 pin with the real time module) then the comment section will show the\n current HAL signal name or lack thereof. Symbol names should be kept short to display better. Keep\n in mind that you can display the longer HAL signal names of %I, %Q and %W variable by clicking on\n them in the section window. Between the two, one should be able to keep track of what the ladder\n program is connected to!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 406 / 1223\n \n 8.2.5.5 The Editor window\n \n Figure 8.6 \u2013 Editor Window\n \u2014 Add - adds a rung after the selected rung\n@@ -22226,15 +22226,15 @@\n \u2014 Modify - opens the selected rung for editing\n Starting from the top left image:\n \u2014 Object Selector, Eraser\n \u2014 N.O. Input, N.C. Input, Rising Edge Input, Falling Edge Input\n \u2014 Horizontal Connection, Vertical Connection, Long Horizontal Connection\n \u2014 Timer IEC Block, Counter Block, Compare Variable\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 407 / 1223\n \n \u2014 Old Timer Block, Old Monostable Block (These have been replaced by the IEC Timer)\n \u2014 COILS - N.O. Output, N.C. Output, Set Output, Reset Output\n \u2014 Jump Coil, Call Coil, Variable Assignment\n A short description of each of the buttons:\n@@ -22261,21 +22261,21 @@\n \u2014 Compare - creates a compare block to compare variable to values or other variables, e.g. %W1<=5\n or %W1=%W2. Compare cannot be placed in the right most side of the section display.\n \u2014 Variable Assignment - creates an assignment block so you to assign values to variables, e.g. %W2=7\n or %W1=%W2. ASSIGNMENT functions can only be placed at the right most side of the section display.\n 8.2.5.6 Config Window\n The config window shows the current project status and has the Modbus setup tabs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 408 / 1223\n \n Figure 8.7 \u2013 Config Window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 409 / 1223\n \n 8.2.6 Ladder objects\n 8.2.6.1 CONTACTS\n Represent switches or relay contacts. They are controlled by the variable letter and number assigned\n to them.\n@@ -22314,15 +22314,15 @@\n \u2014 %TMxxx.V - timer value (read write)\n 8.2.6.3 TIMERS\n Represent count down timers. This is deprecated and replaced by IEC Timers.\n Timers have 4 contacts.\n \u2014 E - enable (input) starts timer when true, resets when goes false\n \u2014 C - control (input) must be on for the timer to run (usually connect to E)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 410 / 1223\n \n \u2014 D - done (output) true when timer times out and as long as E remains true\n \u2014 R - running (output) true when timer is running\n The timer base can be multiples of milliseconds, seconds, or minutes.\n There are also Variables for timers that can be read and/or written to in compare or operate blocks.\n@@ -22360,15 +22360,15 @@\n There are also Variables for counters that can be read and/or written to in compare or operate blocks.\n \u2014 \u2019%C\u2019xx.D - Counter xx done (Boolean, read only)\n \u2014 \u2019%C\u2019xx.E - Counter xx empty overflow (Boolean, read only_)\n \u2014 \u2019%C\u2019xx.F - Counter xx full overflow (Boolean, read only)\n \u2014 \u2019%C\u2019xx.V - Counter xx current value (integer, read or write)\n \u2014 \u2019%C\u2019xx.P - Counter xx preset (integer, read or write)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 411 / 1223\n \n 8.2.6.6 COMPARE\n For arithmetic comparison. Is variable %XXX = to this number (or evaluated number)\n The compare block will be true when comparison is true. You can use most math symbols:\n \u2014 +, -, *, /, = (standard math symbols)\n@@ -22404,28 +22404,28 @@\n %QW3=12\n \n Note\n When you assign a value to a variable with the variable assignment block the value is retained until\n you assign a new value using the variable assignment block. The last value assigned will be restored\n when LinuxCNC is started.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 412 / 1223\n \n The following figure shows an Assignment and a Comparison Example. %QW0 is a S32out bit and\n %IW0 is a S32in bit. In this case the HAL pin classicladder.0.s32out-00 will be set to a value of\n 5 and when the HAL pin classicladder.0.s32in-00 is 0 the HAL pin classicladder.0.out-00 will\n be set to True.\n \n Figure 8.8 \u2013 Assign/Compare Ladder Example\n \n Figure 8.9 \u2013 Assignment Expression Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 413 / 1223\n \n Figure 8.10 \u2013 Comparison Expression Example\n \n 8.2.6.8 COILS\n Coils represent relay coils. They are controlled by the variable letter and number assigned to them.\n@@ -22455,15 +22455,15 @@\n If you look at the top left of the sections display window you will see a small label box and a longer\n comment box beside it. Now go to Editor\u2192Modify then go back to the little box, type in a name.\n Go ahead and add a comment in the comment section. This label name is the name of this rung only\n and is used by the JUMP COIL to identify where to go.\n When placing a JUMP COIL, add it in the rightmost position and change the label to the rung you want\n to JUMP to.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 414 / 1223\n \n A CALL COIL is used to go to a subroutine section then return, like a gosub in BASIC programming\n language.\n If you go to the sections manager window hit the add section button. You can name this section, select\n what language it will use (ladder or sequential), and select what type (main or subroutine).\n@@ -22520,15 +22520,15 @@\n \u2014 %Xxxx - Activity of step xxx (sequential language)\n \u2014 %X \u0300\n __xxx__.V \u0300 - Time of activity in seconds of step xxx (sequential language)\n \u2014 %Exx - Errors (Boolean, read write(will be overwritten))\n \u2014 Indexed or vectored variables - These are variables indexed by another variable. Some might call\n this vectored variables. Example: %W0[%W4] => if %W4 equals 23 it corresponds to %W23\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 415 / 1223\n \n 8.2.8 GRAFCET (State Machine) Programming\n AVERTISSEMENT\n This is probably the least used and most poorly understood feature of ClassicLadder. Sequential\n programming is used to make sure a series of ladder events always happen in a prescribed\n@@ -22552,15 +22552,15 @@\n Selector arrow, Eraser\n Ordinary step, Initial (Starting) step\n Transition, Step and Transition\n Transition Link-Downside, Transition Link-Upside\n Pass-through Link-Downside, Pass-through Link-Upside Jump\n Link, Comment Box\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 416 / 1223\n \n Figure 8.11 \u2013 Sequence Editor Window\n \u2014 ORDINARY STEP - has a unique number for each one\n \u2014 STARTING STEP - a sequential program must have one. This is where the program will start.\n \u2014 TRANSITION - shows the variable that must be true for control to pass through to the next step.\n@@ -22579,15 +22579,15 @@\n With sequential programming: The variable %X \u0300\n __xxx__ (e.g., \u0300\n %X5) is used to see if a step is active.\n The variable %X \u0300\n __xxx__.V \u0300 (e.g., %X5.V) is used to see how long the step has been active. The %X and\n %X.v variables are use in LADDER logic. The variables assigned to the transitions (e.g., %B) control\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 417 / 1223\n \n whether the logic will pass to the next step. After a step has become active the transition variable that\n caused it to become active has no control of it anymore. The last step has to JUMP LINK back only to\n the beginning step.\n \n@@ -22613,21 +22613,21 @@\n \u2014 6 - write single register\n \u2014 8 - echo test\n \u2014 15 - write multiple coils\n \u2014 16 - write multiple registers\n If you do not specify a --modmaster when loading the ClassicLadder non-realtime program this page\n will not be displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 418 / 1223\n \n Figure 8.12 \u2013 Modbus I/O Config\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 419 / 1223\n \n Figure 8.13 \u2013 Modbus Communication Config\n \u2014 SERIAL PORT - For IP blank. For serial the location/name of serial driver, e.g., /dev/ttyS0 ( or\n /dev/ttyUSB0 for a USB-to-serial converter).\n \u2014 SERIAL SPEED - Should be set to speed the slave is set for - 300, 600, 1200, 2400, 4800, 9600,\n@@ -22647,15 +22647,15 @@\n or IW).\n \u2014 SLAVE ADDRESS - For serial the slaves ID number usually settable on the slave device (usually\n 1-256). For IP the slave IP address plus optionally the port number.\n \u2014 TYPE ACCESS - This selects the MODBUS function code to send to the slave (eg what type of\n request).\n \u2014 COILS / INPUTS - Inputs and Coils (bits) are read from/written to I, B, or Q variables (user selects).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 420 / 1223\n \n \u2014 REGISTERS (WORDS) - Registers (Words/Numbers) map to IW, W, or QW variables (user selects).\n \u2014 1st MODBUS ELEMENT - The address (or register number) of the first element in a group (remember to set MODBUS ELEMENT OFFSET properly).\n \u2014 NUMBER OF ELEMENTS - The number of elements in this group.\n \u2014 LOGIC - You can invert the logic here.\n@@ -22693,15 +22693,15 @@\n \u2014 Pause inter frame is the time to pause after receiving an answer.\n \u2014 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).\n 8.2.10.1 MODBUS Info\n \u2014 ClassicLadder can use distributed inputs/outputs on modules using the Modbus protocol (\u201dmaster\u201d:\n polling slaves).\n \u2014 The slaves and theirs I/O can be configured in the config window.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 421 / 1223\n \n \u2014 2 exclusive modes are available : ethernet using Modbus/TCP and serial using Modbus/RTU.\n \u2014 No parity is used.\n \u2014 If no port name for serial is set, TCP/IP mode will be used\u2026\n \u2014 The slave address is the slave address (Modbus/RTU) or the IP address.\n@@ -22727,24 +22727,24 @@\n 8.2.11 Debugging modbus problems\n A good reference for the protocol: https://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdf.\n If you run linuxcnc/classicladder from a terminal, it will print the Modbus commands and slave responses.\n Here we set ClassicLadder to request slave 1, to read holding registers (function code 3) starting\n at address 8448 (0x2100). We ask for 1 (2 byte wide) data element to be returned. We map it to a\n ClassicLadder variable starting at 2.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 422 / 1223\n \n Figure 8.14 \u2013 Modbus I/O Register Setup\n Note in this image we have set the debug level to 1 so modbus messages are printed to the terminal. We\n have mapped our read and written holding registers to ClassicLadder\u2019s %W variables so our returned\n data will be in %W2 as in the other image we mapped the data starting at the 2nd element.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 423 / 1223\n \n Figure 8.15 \u2013 Modbus Communication Setup\n \n 8.2.11.1 Request\n Lets look at an example of reading one hold register at 8448 Decimal (0x2100 Hex).\n@@ -22772,15 +22772,15 @@\n (2\n 1 to 125 (0x7D)\n Bytes)\n (2\n Calculated\n bytes) automatically\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 424 / 1223\n \n Here is an example sent command as printed in the terminal (all Hex):\n INFO CLASSICLADDERModbus I/O module to send: Lgt=8 \u201dpy-reset\u201d\n \u201dReset\u201d\n \n \n \n Now start up your config and it should look like this.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 437 / 1223\n \n Figure 8.26 \u2013 AXIS E-Stop\n Note that in this example like in real life you must clear the remote E-Stop (simulated by the checkbox)\n before the AXIS E-Stop or the external Reset will put you in OFF mode. If the E-Stop in the AXIS screen\n was pressed, you must press it again to clear it. You cannot reset from the external after you do an\n E-Stop in AXIS.\n \n 8.3.4 Timer/Operate Example\n In this example we are using the Operate block to assign a value to the timer preset based on if an\n input is on or off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 438 / 1223\n \n Figure 8.27 \u2013 Timer/Operate Example\n In this case %I0 is true so the timer preset value is 10. If %I0 was false the timer preset would be 5.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 439 / 1223\n \n Chapitre 9\n \n Sujets avanc\u00e9s\n 9.1 Kinematics\n@@ -23149,15 +23149,15 @@\n Cartesian coordinates. The A B C axes refer to rotational coordinates about the X Y Z axes respectively.\n The U V W axes refer to additional coordinates that are commonly made colinear to the X Y Z axes\n respectively.\n 1. The word \u201daxes\u201d is also commonly (and wrongly) used when talking about CNC machines, and referring to the moving\n directions of the machine.\n 2. Kinematics: a two way function to transform from Cartesian space to joint space.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 440 / 1223\n \n 9.1.2 Trivial Kinematics\n The simplest machines are those in which which each joint is placed along one of the Cartesian axes.\n On these machines the mapping from Cartesian space (the G-code program) to the joint space (the\n actual actuators of the machine) is trivial. It is a simple 1:1 mapping:\n@@ -23210,15 +23210,15 @@\n joints[1] = pos->tran.z\n 3. If the machine (for example a lathe) is mounted with only the X, Z and A axes and the INI file of LinuxCNC contains only\n the definition of these 3 joints, then the previous assertion is false. Because we currently have (joint0=X, joint1=Z, joint2=A)\n which assumes that joint1=Y. To make this work in LinuxCNC just define all the axes (XYZA), LinuxCNC will then use a simple\n loop in HAL for unused Y axis.\n 4. Another way to make it work is to change the corresponding code and recompile the software.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 441 / 1223\n \n Use of the coordinates= parameter is recommended for configurations that omit axis letters. 5\n The trivkins kinematics module also allows the same coordinate to be specified for more than one\n joint. This feature can be useful on machines like a gantry having two independent motors for the y\n coordinate. Such a machine could use coordinates=xyyz resulting in joint assignments:\n@@ -23239,15 +23239,15 @@\n \n Figure 9.1 \u2013 Bipod setup\n 5. Historically, the trivkins module did not support the coordinates= parameter so lathe configs were often configured as\n XYZ machines. The unused Y axis was configured to 1) home immediately, 2) use a simple loopback to connect its position\n command HAL pin to its position feedback HAL pin, and 3) hidden in gui displays. Numerous sim configs use these methods in\n order to share common HAL files.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 442 / 1223\n \n The Bipod we are talking about is a device that consists of 2 motors placed on a wall, from which a\n device is hung using some wire. The joints in this case are the distances from the motors to the device\n (named AD and BD in the figure).\n The position of the motors is fixed by convention. Motor A is in (0,0), which means that its X coordinate\n@@ -23279,15 +23279,15 @@\n double x = (AD2 - BD2 + Bx * Bx) / (2 * Bx);\n double y2 = AD2 - x * x;\n if(y2 < 0) return -1;\n pos->tran.x = x;\n pos->tran.y = sqrt(y2);\n return 0;\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 443 / 1223\n \n 9.1.3.2 Inverse transformation\n The inverse kinematics is much easier in our example, as we can write it directly:\n \n or translated to actual code:\n@@ -23322,15 +23322,15 @@\n \n int kinematicsSwitchable(void)\n int kinematicsSwitch(int switchkins_type)\n KINS_NOT_SWITCHABLE\n \n The function kinematicsSwitchable() returns 1 if multiple kinematics types are supported. The function kinematicsSwitch() selects the kinematics type. See Switchable Kinematitcs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 444 / 1223\n \n Note\n The majority of provided kinematics modules support a single kinematics type and use the directive\n \u201dKINS_NOT_SWITCHABLE\u201d to supply defaults for the required kinematicsSwitchable() and kinematicsSwitch() functions.\n \n@@ -23363,15 +23363,15 @@\n Note\n This document does not cover the creation of a vismach model which, while certainly very useful,\n requires just as much careful modeling if it is to match the genserkins model derived in this document.\n \n Note\n There may be errors and/or shortcomings \u2014 use at your own risk!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 445 / 1223\n \n 9.2.2 General\n With the proliferation of industrial robots comes an increased interest to control used robots with\n LinuxCNC. A common type of robot used in industry and manufacturing is the \u201dserial manipulator\u201d\n designed as a series of motorized joints connected by rigid links. Serial robots often have six joints\n@@ -23414,15 +23414,15 @@\n \n 9.2.4 Modified DH-Parameters as used in genserkins\n Note that genserkins does not handle offsets to theta-values \u2014 theta is the joint variable that is controlled by LinuxCNC. With the CS aligned with the joint, a rotation around its Z-Axis is identical to the\n rotation commanded to that joint by LinuxCNC. This makes it impossible to define the 0\u00b0 position of\n our robots joints arbitrarily.\n The three configurable parameters are:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 446 / 1223\n \n 1. alpha : positive or negative rotation (in radians) around the X-axis of the \u201dcurrent coordinate\n system\u201d\n 2. a : positive distance, along X, between two joint axes specified in machine units (mm or inch)\n defined in the system\u2019s INI file.\n@@ -23453,87 +23453,87 @@\n but there is no point in setting it other than 0.\n \n 9.2.8 Detailed Example (RV-6SL)\n Described below is a method to derive the required \u201dmodified DH-parameters\u201d for a Mitsubishi RV6SDL and how to set the parameters in the HAL file to be used with the genserkins kinematics in\n LinuxCNC. The necessary dimensions are best taken from a dimensional drawing provided by the\n manufacturer of the robot.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 447 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 448 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 449 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 450 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 451 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 452 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 453 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 454 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 455 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 456 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 457 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 458 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 459 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 460 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 461 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 462 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 463 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 464 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 465 / 1223\n \n 9.2.9 Credits\n Thanks to user Aciera for all text and the graphics for the RV-6SL robot!\n \n 9.3 5-Axis Kinematics\n@@ -23562,27 +23562,27 @@\n of the cutter tip position and the cutter orientation relative to the workpiece coordinate system. Two\n vectors, as generated by most CAM systems and shown in Fig. 1, contain this information:\n \n The K vector is equivalent to the 3rd vector from the pose matrix E6 that was used in the 6-axis robot\n kinematics [3] and the Q vector is equivalent to the 4th vector of E6 . In MASTERCAM for example this\n information is contained in the intermediate output \u201d.nci\u201d file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 466 / 1223\n \n Figure 9.2 \u2013 Cutter location data\n \n 9.3.4 Translation and Rotation Matrices\n Homogeneous transformations provide a simple way to describe the mathematics of multi-axis machine kinematics. A transformation of the space H is a 4x4 matrix and can represent translation and\n rotation transformations. Given a point x,y,x described by a vector u = {x,y,z,1}T , then its transformation v is represented by the matrix product\n \n There are four fundamental transformation matrices on which 5-axis kinematics can be based:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 467 / 1223\n \n The matrix T(a,b,c) implies a translation in the X, Y, Z coordinate directions by the amounts a, b, c\n respectively. The R matrices imply rotations of the angle theta about the X, Y and Z coordinate axes\n respectively. The C and S symbols refer to cosine and sine functions respectively.\n \n@@ -23592,15 +23592,15 @@\n \u2014 A rotary table which rotates about the vertical Z-axes (C-rotation, secondary) mounted on a tilting\n table which rotates about the X- or Y-axis (A- or B-rotation, primary). The workpiece is mounted on\n the rotary table.\n \u2014 A tilting table which rotates about the X- or Y-axis (A- or B-rotation, secondary) is mounted on a\n rotary table which rotates about the Z-axis (C-rotation, primary), with the workpiece on the tilting\n table.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 468 / 1223\n \n Figure 9.3 \u2013 General configuration and coordinate systems\n 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\n describe the relative position and orientation between these coordinate frames\n We need to describe a relationship between the workpiece coordinate system and the tool coordinate system. This can be defined by a transformation matrix w At , which can be found by subsequent\n@@ -23608,43 +23608,43 @@\n defined coordinate system. In general such a transformation may look as follows:\n \n where each matrix i-1 Aj is a translation matrix T or a rotation matrix R of the form (2,3).\n Matrix multiplication is a simple process in which the elements of each row of the lefthand matrix\n A is multiplied by the elements of each column of the righthand matrix B and summed to obtain an\n element in the result matrix C, ie.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 469 / 1223\n \n In Fig. 2 a generic configuration with coordinate systems is shown [4]. It includes table rotary/tilting\n axes as well as spindle rotary/tilting axes. Only two of the rotary axes are actually used in a machine\n tool.\n First we will develop the transformations for the first type of configuration mentioned above, ie. a table\n tilting/rotary (trt) type with no rotating axis offsets. We may give it the name xyzac-trt configuration.\n We also develop the transformations for the same type (xyzac-trt), but with rotating axis offsets.\n Then we develop the transformations for a xyzbc-trt configuration with rotating axis offsets.\n 9.3.5.1 Transformations for a xyzac-trt machine tool with work offsets\n \n Figure 9.4 \u2013 vismach model of xyzac-trt with coincident rotation axes\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 470 / 1223\n \n We deal here with a simplified configuration in which the tilting axis and rotary axis intersects at a\n point called the pivot point as shown in Fig. 4. therefore the two coordinate systems Ows and Owp of\n Fig. 2 are coincident.\n \n Figure 9.5 \u2013 Table tilting/rotary configuration\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 471 / 1223\n \n In these equations Lx , Ly , Lz defines the offsets of the pivot point of the two rotary axes A and C\n relative to the workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances\n of the pivot point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot\n point. The pivot point is at the intersection of the two rotary axes. The signs of the SA and SC terms\n@@ -23663,56 +23663,56 @@\n Equating the last column of (8) with the tool position vector Q, we can write:\n \n The vector on the right hand side can also be written as the product of a matrix and a vector resulting\n in:\n \n This can be expanded to give\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 472 / 1223\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (13) as P = (Q AP )-1 * Q. Noting that the square matrix is a homogeneous 4x4 matrix containing a rotation matrix R and translation vector q, for which the inverse can\n be written as:\n \n where R^T is the transpose of R (rows and columns swappped). We therefore obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 473 / 1223\n \n 9.3.5.2 Transformations for a xyzac-trt machine with rotary axis offsets\n \n Figure 9.6 \u2013 vismach model of xyzac-trt with rotational axis offsets (positive)\n We deal here with a extended configuration in which the tilting axis and rotary axis do not intersect\n at a point but have an offset Dy . Furthermore, there is also an z-offset between the two coordinate\n systems Ows and Owp of Fig. 2, called Dz . A vismach model is shown in Fig. 5 and the offsets are\n shown in Fig. 6 (positive offsets in this example). To simplify the configuration, the offsets Lx , Ly , Lz\n of the previous case are not included. They are probably not necessary if one uses the G54 offsets in\n LinuxCNC by means of the \u201dtouch of\u201d facility.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 474 / 1223\n \n Figure 9.7 \u2013 Table tilting/rotary xyzac-trt configuration, with axis offsets\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n In these equations Dy , Dz defines the offsets of the pivot point of the rotary axes A relative to the\n workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances of the pivot\n point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot point. The\n pivot point is on the A rotary axis.\n When multiplied in accordance with (18), we obtain:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 475 / 1223\n \n We can now equate the third column of this matrix with our given tool orientation vector K, ie.:\n \n From these equations we can solve for the rotation angles thetaA , thetaC . From the third row we find:\n \n@@ -23726,42 +23726,42 @@\n in:\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (25) as P = (Q AP )-1 * Q using (15) as before. We thereby obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 476 / 1223\n \n 9.3.5.3 Transformations for a xyzbc-trt machine with rotary axis offsets\n \n Figure 9.8 \u2013 vismach model of xyzbc-trt with rotational axis offsets (negative)\n We deal here again with a extended configuration in which the tilting axis (about the y-axis) and rotary\n axis do not intersect at a point but have an offset Dx . Furthermore, there is also an z-offset between the\n two coordinate systems Ows and Owp of Fig. 2, called Dz . A vismach model is shown in Fig. 7 (negative\n offsets in this example) and the positive offsets are shown in Fig. 8.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 477 / 1223\n \n Figure 9.9 \u2013 Table tilting/rotary xyzbc-trt configuration, with axis offsets\n The transformation can be defined by the sequential multiplication of the matrices:\n \n with the matrices built up as follows:\n \n In these equations Dx , Dz defines the offsets of the pivot point of the rotary axes B relative to the\n workpiece coordinate system origin. Furthermore, Px , Py , Pz are the relative distances of the pivot\n point to the cutter tip position, which can also be called the \u201djoint coordinates\u201d of the pivot point. The\n pivot point is on the B rotary axis.\n When multiplied in accordance with (29), we obtain:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 478 / 1223\n \n We can now equate the third column of this matrix with our given tool orientation vector K, i.e.:\n \n From these equations we can solve for the rotation angles thetaB , thetaC . From the third row we find:\n \n@@ -23776,15 +23776,15 @@\n \n which is the forward transformation of the kinematics.\n We can solve for P from equation (37) as P = (Q AP )-1 * Q.\n With the same approach as before, we obtain:\n \n The desired equations for the inverse transformation of the kinematics thus can be written as:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 479 / 1223\n \n 9.3.6 Table Rotary/Tilting Examples\n LinuxCNC includes kinematics modules for the xyzac-trt and xyzbc-trt topologies described in the\n mathematics detailed above. For interested users, the source code is available in the git tree in the\n src/emc/kinematics/ directory.\n@@ -23828,15 +23828,15 @@\n \n 9.3.7 Custom Kinematics Components\n LinuxCNC implements kinematics using a HAL component that is loaded at startup of LinuxCNC. The\n most common kinematics module, trivkins, implements identity (trivial) kinematics where there is a\n one-to-one correspondence between an axis coordinate letter and a motor joint. Additional kinematics\n modules for more complex systems (including xyzac-trt and xyzbc-trt described above) are available.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 480 / 1223\n \n See the kins manpage (\\$ man kins) for brief descriptions of the available kinematics modules.\n The kinematics modules provided by LinuxCNC are typically written in the C-language. Since a standard structure is used, creation of a custom kinematics module is facilitated by copying an existing\n source file to a user file with a new name, modifying it, and then installing.\n Installation is done using halcompile:\n@@ -23858,29 +23858,29 @@\n module. These pins can be connected to a signal for dynamic control or set once with HAL connections\n like:\n # set offset parameters\n net :tool-offset motion.tooloffset.z xyzac-trt-kins.tool-offset\n setp xyzac-trt-kins.y-offset 0\n setp xyzac-trt-kins.z-offset 20\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 9.3.8 Figures\n \n Figure 9.10 \u2013 Table tilting/rotating configuration\n \n 481 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 9.11 \u2013 Spindle/table tilting configuration\n \n 482 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 483 / 1223\n \n Figure 9.12 \u2013 Spindle tilting/rotary configuration\n \n 9.3.9 REFERENCES\n 1. AXIS MACHINE TOOLS: Kinematics and Vismach Implementation in LinuxCNC, RJ du Preez,\n@@ -23897,15 +23897,15 @@\n 9.4.1 Introduction\n A number of kinematics modules support the switching of kinematics calculations. These modules\n support a default kinematics method (type0), a second built-in method (type1), and (optionally) a userprovided kinematics method (type2). Identity kinematics are typically used for the type1 method.\n The switchkins functionality can be used for machines where post-homing joint control is needed\n during setup or to avoid movement near singularities from G-code. Such machines use specific kinematics calculations for most operations but can be switched to identity kinematics for control of\n individual joints after homing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 484 / 1223\n \n The kinematics type is selected by a motion module HAL pin that can be updated from a G-code\n program or by interactive MDI commands. The halui provisions for activating MDI commands can be\n used to allow buttons to select the kinematics type using hardware controls or a virtual panel (PyVCP,\n GladeVCP, etc.).\n@@ -23947,15 +23947,15 @@\n identical to those provided for the trivkins module. However, duplication of axis letters to assign\n multiple joints for a coordinate letter is not generally applicable for serial or parallel kinematics (like\n genserkins, pumakins, genhexkins, etc.) where there is no simple relationship between joints and\n coordinates.\n Duplication of axis coordinate letters is supported in the kinematics modules xyzac-trt-kins, xyzbc-trtkins, and 5axiskins (bridgemill). Typical applications for duplicate coordinates are gantry machines\n where two motors (joints) are used for the transverse axis.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 485 / 1223\n \n 9.4.2.2 Backwards compatibility\n Switchable kinematics initialize with motion.switchkins-type==0 implementing their eponymous kinematics method. If the the motion.switchkins-type pin is not connected \u2014 as in legacy configurations \u2014\n only the default kinematics type is available.\n \n@@ -23993,15 +23993,15 @@\n ...\n ;user G-code\n ...\n M68 E3 Q0 ;update analog-out-03 to select kinstype 0\n M66 E0 L0 ;sync interp-motion\n ...\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 486 / 1223\n \n Note\n An M66 wait-on-input command updates the #5399 variable. If the current value of this variable is\n needed for subsequent purposes, it should be copied to an additional variable before invoking M66.\n \n@@ -24039,15 +24039,15 @@\n \n The relevant INI-HAL pins for a joint number (N) are:\n ini.N.min_limit\n ini.N.max_limit\n ini.N.max_acceleration\n ini.N.max_velocity\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 487 / 1223\n \n The relevant INI-HAL pins for an axis coordinate (L) are:\n ini.L.min_limit\n ini.L.max_limit\n ini.L.max_velocity\n@@ -24101,15 +24101,15 @@\n \n demonstrate\n \n M-code\n \n scripts\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 488 / 1223\n \n 9.4.4.4 Offset considerations\n Like INI file limit settings, coordinate system offsets (G92, G10L2, G10L20, G43, etc) are generally\n applicable only for the type 0 default startup kinematics type. When switching kinematics types, it may\n be important to either reset all offsets prior to switching or update offsets based on system-specific\n@@ -24144,15 +24144,15 @@\n When using jogging facilities or MDI commands interactively, operator caution is required. Guis should\n include indicators to display the current kinematics type.\n Note\n Switching kinematics can cause substantial operational changes requiring careful design, testing,\n and training for deployment. The management of coordinate offsets, tool compensation, and INI file\n limits may require complicated and non-standard operating protocols.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 489 / 1223\n \n 9.4.8 Code Notes\n Kinematic modules providing switchkins functionality are linked to the switchkins.o object (switchkins.c) that provides the module main program (rtapi_app_main()) and related functions. This main\n program reads (optional) module command-line parameters (coordinates, sparm) and passes them to\n the module-provided function switchkinsSetup().\n@@ -24189,15 +24189,15 @@\n error. It then uses the error to calculate a correction to the process\u2019s input variable (the action) so\n that this correction will remove the error from the process\u2019s output measurement.\n In a PID loop, correction is calculated from the error in three ways: cancel out the current error directly\n (Proportional), the amount of time the error has continued uncorrected (Integral), and anticipate the\n future error from the rate of change of the error over time (Derivative).\n 6. This Subsection is taken from an much more extensive article found at https://en.wikipedia.org/wiki/PID_controller\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 490 / 1223\n \n A PID controller can be used to control any measurable variable which can be affected by manipulating\n some other process variable. For example, it can be used to control temperature, pressure, flow rate,\n chemical composition, speed, or other variables. Automobile cruise control is an example of a process\n outside of industry which utilizes crude PID control.\n@@ -24240,15 +24240,15 @@\n hours for a set point change to produce a stable effect. Some processes have a degree of non-linearity\n and so parameters that work well at full-load conditions don\u2019t work when the process is starting up\n from no-load. This section describes some traditional manual methods for loop tuning.\n There are several methods for tuning a PID loop. The choice of method will depend largely on whether\n or not the loop can be taken offline for tuning, and the response speed of the system. If the system\n can be taken offline, the best tuning method often involves subjecting the system to a step change in\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 491 / 1223\n \n input, measuring the output as a function of time, and using this response to determine the control\n parameters.\n Simple method If the system must remain on line, one tuning method is to first set the I and D values\n to zero. Increase the P until the output of the loop oscillates. Then increase I until oscillation stops.\n@@ -24324,15 +24324,15 @@\n The set of codes (M,G,T,S,F) currently understood by the RS274NGC interpreter is fixed and cannot\n be extended by configuration options.\n In particular, some of these codes implement a fixed sequence of steps to be executed. While some of\n these, like M6, can be moderately configured by activating or skipping some of these steps through\n 7. Introduced in the 1942 paper Optimum Settings for Automatic Controllers, DOI 10.1115/1.2899060 also available from\n The Internet Archive.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 492 / 1223\n \n INI file options, overall the behavior is fairly rigid. So - if your are happy with this situation, then this\n manual section is not for you.\n In many cases, this means that supporting a non out of the box configuration or machine is either cumbersome or impossible, or requires resorting to changes at the C/C+\\+ language level. The latter is\n unpopular for good reasons - changing internals requires in-depth understanding of interpreter internals, and moreover brings its own set of support issues. While it is conceivable that certain patches\n@@ -24371,15 +24371,15 @@\n \u2014 For remapping T,M6,M61,S,F there is some standard Python glue which should cover most situations, see Standard Glue.\n \u2014 For more complex situations, one can write your own Python glue to implement new behavior.\n Embedded Python functions in the Interpreter started out as glue code, but turned out very useful\n well beyond that. Users familiar with Python will likely find it easier to write remapped codes, glue,\n O-word procedures, etc. in pure Python, without resorting to the somewhat cumbersome RS274NGC\n language at all.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 493 / 1223\n \n A Word on Embedded Python Many people are familiar with extending the Python interpreter by\n C/C++ modules, and this is heavily used in LinuxCNC to access Task, HAL and Interpreter internals\n from Python scripts. Extending Python basically means: Your Python script executes as it is in the\n driver seat, and may access non-Python code by importing and using extension modules written in\n@@ -24422,15 +24422,15 @@\n # generic support code - make sure this actually points to Python-stdglue\n PATH_APPEND=../../nc_files/remap_lib/python-stdglue/\n # import the following Python module\n TOPLEVEL=toplevel.py\n # the higher the more verbose tracing of the Python plugin\n LOG_LEVEL = 0\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 494 / 1223\n \n You must also add the required Python file in your configuration folder.\n Upgrade an existing configuration\n 9.6.2.2 Picking a code\n Note that currently only a few existing codes may be redefined, whereas there are many free codes\n@@ -24468,15 +24468,15 @@\n behavior.\n If a G-code block contains several executable words on a line, these words are executed in a predefined\n order of execution, not in the order they appear in block.\n When you define a new executable code, the interpreter does not yet know where your code fits into\n this scheme. For this reason, you need to choose an appropriate modal group for your code to execute\n in.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 495 / 1223\n \n 9.6.2.6 An minimal example remapped code\n To give you an idea how the pieces fit together, let\u2019s explore a fairly minimal but complete remapped\n code definition. We choose an unallocated M-code and add the following option to the INI file:\n [RS274NGC]\n@@ -24521,15 +24521,15 @@\n argspec=\n See description of the argspec parameter options. Optional.\n ngc=\n Basename of an O-word subroutine file name. Do not specify an .ngc extension. Searched for in\n the directories specified in the directory specified in [DISPLAY]PROGRAM_PREFIX, then in [RS274NGC]SUB\n Mutually exclusive with python=. It is an error to omit both ngc= and python=.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 496 / 1223\n \n python=\n Instead of calling an ngc O-word procedure call a Python function. The function is expected to\n be defined in the module_basename.oword module. Mutually exclusive with ngc=.\n prolog=\n@@ -24571,15 +24571,15 @@\n An empty argspec, or no argspec argument at all implies the remapped code does not receive any\n parameters from the block. It will ignore any extra parameters present.\n Note that RS274NGC rules still apply - for instance you may use axis words (e.g., X, Y, Z) only in the\n context of a G-code.\n Axis words may also only be used if the axis is enabled. If only XYZ are enabled, ABCUVW will not be\n available to be used in argspec.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 497 / 1223\n \n Words F, S and T (short FST) will have the normal functions but will be available as variables in the\n remapped function. F will set feedrate, S will set spindle RPM, T will trigger the tool prepare function.\n Words FST should not be used if this behavior is not desired.\n Words DEIJKPQR have no predefined function and are recommended for use as argspec parameters.\n@@ -24621,15 +24621,15 @@\n (the q argspec is optional since its lowercase in the argspec. Use as follows:)\n o100 if [EXISTS[#]]\n (debug, Q word set: #)\n o100 endif\n o endsub\n M2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 498 / 1223\n \n \u2014 Executing M400 will fail with the message user-defined M400: missing: P.\n \u2014 Executing M400 P123 will display P word=123.000000.\n \u2014 Executing M400 P123 Q456 will display P word=123.000000 and Q word set: 456.000000.\n Example for positional parameter passing to NGC procedures Assume the code is defined as\n@@ -24672,15 +24672,15 @@\n in C/C+\\+ can be now be done in Python.\n The following example is based on the nc_files/involute.py script - but canned as a G-code with\n some parameter extraction and checking. It also demonstrates calling the interpreter recursively (see\n self.execute()).\n Assuming a definition like so (NB: this does not use argspec):\n REMAP=G88.1 modalgroup=1 py=involute\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 499 / 1223\n \n The involute function in python/remap.py listed below does all word extraction from the current\n block directly. Note that interpreter errors can be translated to Python exceptions. Remember this is\n readahead time - execution time errors cannot be trapped this way.\n import sys\n@@ -24724,15 +24724,15 @@\n if c.z_flag: # retract to starting height\n self.execute(\u201dG0 Z%f\u201d % (old_z),lineno())\n except InterpreterException,e:\n msg = \u201d%d: \u2019%s\u2019 - %s\u201d % (e.line_number,e.line_text, e.error_message)\n return msg\n return INTERP_OK\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 500 / 1223\n \n The examples described so far can be found in configs/sim/axis/remap/getting-started with complete\n working configurations.\n \n 9.6.4 Upgrading an existing configuration for remapping\n@@ -24776,15 +24776,15 @@\n machine as we like - it will also need to replicate those steps from this sequence which are needed to\n keep the interpreter and task happy.\n However, this does not affect the processing of tool change-related commands in task and iocontrol.\n This means when we execute step 6b this will still cause iocontrol to do its thing.\n Decisions, decisions:\n \u2014 Do we want to use an O-word procedure or do it all in Python code?\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 501 / 1223\n \n \u2014 Is the iocontrol HAL sequence (tool-prepare/tool-prepared and tool-change/tool-changed pins)\n good enough or do we need a different kind of HAL interaction for our tool changer (for example:\n more HAL pins involved with a different interaction sequence)?\n Depending on the answer, we have four different scenarios:\n@@ -24829,15 +24829,15 @@\n iocontrol pin correspondence in the examples\n iocontrol.0 pin\n tool-prepare\n \n motion pin\n digital-out-00\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n iocontrol.0 pin\n tool-prepared\n tool-change\n tool-changed\n tool-prep-number\n tool-prep-pocket\n@@ -24890,15 +24890,15 @@\n index for tool items loaded from a tool table ([EMCIO]TOOL_TABLE) or via a tooldata database ([EMCIO]DB_PROGRAM).\n \n def change_prolog(self, **words):\n try:\n if self.selected_pocket < 0:\n return \u201dM6: no tool prepared\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 503 / 1223\n \n if self.cutter_comp_side:\n return \u201dCannot change tools with cutter radius compensation on\u201d\n self.params[\u201dtool_in_spindle\u201d] = self.current_tool\n self.params[\u201dselected_tool\u201d] = self.selected_tool\n@@ -24946,15 +24946,15 @@\n your NGC code.\n Again, most epilogs have a common scheme:\n 1. First, determine whether things went right in the remap procedure,\n 2. then do any commit and cleanup actions which can\u2019t be done in NGC code.\n 9.6.5.4 Configuring iocontrol with a remapped M6\n Note that the sequence of operations has changed: we do everything required in the O-word procedure - including any HAL pin setting/reading to get a changer going, and to acknowledge a tool\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 504 / 1223\n \n change - likely with motion.digital-* and motion-analog-* IO pins. When we finally execute the\n CHANGE_TOOL() command, all movements and HAL interactions are already completed.\n Normally only now iocontrol would do its thing as outlined here. However, we don\u2019t need the HAL\n pin wiggling anymore - all iocontrol is left to do is to accept we\u2019re done with prepare and change.\n@@ -24999,15 +24999,15 @@\n \n o sub\n M6 (use built in M6 behavior)\n (.. move to tool length switch, probe and set tool length..)\n o endsub\n m2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 505 / 1223\n \n Attention\n When redefining a built-in code, do not specify any leading zeroes in G- or M-codes - for\n example, say REMAP=M1 .., not REMAP=M01 ....\n \n@@ -25054,15 +25054,15 @@\n \n The minimal ngc prepare procedure again looks like so:\n o sub\n ; returning a positive value to commit:\n o endsub [1]\n m2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 506 / 1223\n \n And the epilog:\n def prepare_epilog(self, **words):\n try:\n if self.return_value > 0:\n@@ -25110,15 +25110,15 @@\n The suggested on_abort procedure would look like so (adapt to your needs):\n o sub\n G54 (origin offsets are set to the default)\n G17 (select XY plane)\n G90 (absolute)\n G94 (feed mode: units/minute)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 507 / 1223\n \n M48 (set feed and speed overrides)\n G40 (cutter compensation off)\n M5 (spindle off)\n G80 (cancel modal motion)\n@@ -25162,15 +25162,15 @@\n \n Note\n INI and HAL variable expansion is optional and can be disabled in the INI file\n \n If more fine grained recovery action is needed, use the idiom laid out in the previous example:\n \u2014 Define an epilog function, even if it is just to signal an error condition,\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 508 / 1223\n \n \u2014 pass a negative value from the handler to signal the error,\n \u2014 inspect the return value in the epilog function,\n \u2014 take any recovery action needed,\n \u2014 return the error message string from the handler, which will set the interpreter error message and\n@@ -25217,15 +25217,15 @@\n \n r1\n \n causes the following (note R is sticky, and Z is sticky since the plane is XY):\n 1. g843.ngc is called with words x=1, y=2, z=3, r=1\n 2. g843.ngc is called with words x=3, y=4, z=3, p=2, r=1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 509 / 1223\n \n 3. g843.ngc is called with words x=6, y=7, z=3, r=1\n 4. The G84.3 cycle is canceled.\n Besides creating new cycles, this provides an easy method for repackaging existing G-codes which\n do not behave as cycles. For instance, the G33.1 Rigid Tapping code does not behave as a cycle. With\n@@ -25261,15 +25261,15 @@\n Note that the interpreter instance is available here as self, so you could also run:\n ;py,print(self.tool_table[0].toolno)\n \n The emcStatus structure is accessible, too:\n ;py,from emctask import *\n ;py,print(emcstat.io.aux.estop)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 510 / 1223\n \n 9.6.9 Programming Embedded Python in the RS274NGC Interpreter\n 9.6.9.1 The Python plugin namespace\n The namespace is expected to be laid out as follows:\n oword\n@@ -25307,15 +25307,15 @@\n def __delete__(self):\n # add any cleanup/state saving actions here\n if self.task: # as above\n pass\n else:\n pass\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 511 / 1223\n \n This function may be used to initialize any Python-side attributes which might be needed later, for\n instance in remap or O-word functions, and save or restore state beyond what PARAMETER_FILE provides.\n If there are setup or cleanup actions which are to happen only in the milltask Interpreter instance (as\n opposed to the interpreter instance which sits in the gcode Python module and serves preview/progress display purposes but nothing else), this can be tested for by evaluating self.task.\n@@ -25355,15 +25355,15 @@\n self.return_value (float).\n #\n Indicates the last procedure called did return or endsub with an explicit value. 1.0 if true. Set\n to 0.0 on each call. Exposed in Interp was self.value_returned (int).\n See also tests/interp/value-returned for an example.\n Calling conventions for prolog= and epilog= subroutines Arguments are:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 512 / 1223\n \n self\n The interpreter instance.\n words\n Keyword parameter dictionary. If an argspec was present, words are collected from the current\n@@ -25406,15 +25406,15 @@\n This signals task to stop read ahead, execute all queued operations, execute the queue-buster\n operation, synchronize interpreter state with machine state, and then signal the interpreter to\n continue. At this point the function is resumed at the statement following the yield .. statement.\n Dealing with queue-buster: Probe, Tool change and waiting for a HAL pin Queue busters interrupt a procedure at the point where such an operation is called, hence the procedure needs to be\n restarted after the interpreter synch(). When this happens the procedure needs to know if it is restarted, and where to continue. The Python generator method is used to deal with procedure restart.\n This demonstrates call continuation with a single point-of-restart:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 513 / 1223\n \n def read_pin(self,*args):\n # wait 5secs for digital-input 00 to go high\n emccanon.WAIT(0,1,2,5.0)\n # cede control after executing the queue buster:\n@@ -25455,15 +25455,15 @@\n def insert_param(self, **words): # in the remap module\n print(\u201dinsert_param call level=\u201d,self.call_level)\n self.params[\u201dmyname\u201d] = 123\n self.params[1] = 345\n self.params[2] = 678\n return INTERP_OK\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 514 / 1223\n \n def retrieve_param(self, **words):\n print(\u201dretrieve_param call level=\u201d,self.call_level)\n print(\u201d#1=\u201d, self.params[1])\n print(\u201d#2=\u201d, self.params[2])\n@@ -25509,15 +25509,15 @@\n the interpreter\u2019s error message\n Errors can be trapped in the following Pythonic way:\n import interpreter\n interpreter.throw_exceptions = 1\n ...\n try:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n self.execute(\u201dG3456\u201d)\n \n 515 / 1223\n \n #\n \n@@ -25566,15 +25566,15 @@\n \u2014 Import that module from the TOPLEVEL script.\n # namedparams.py\n # trivial example\n def _pi(self):\n return 3.1415926535\n # = [2 * # * #<_pi>]\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 516 / 1223\n \n Functions in namedparams.py are expected to return a float or int value. If a string is returned, this\n sets the interpreter error message and aborts execution.\n \u00d2nly functions with a leading underscore are added as parameters, since this is the RS274NGC\n convention for globals.\n@@ -25611,15 +25611,15 @@\n 9.6.11.2 M6: change_prolog and change_epilog\n These wrap a NGC procedure for M6 Tool Change.\n Actions of change_prolog\n \u2014 The following three steps are applicable only if the iocontrol-v2 component is used:\n \u2014 If parameter 5600 (fault indicator) is greater than zero, this indicates a Toolchanger fault, which\n is handled as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 517 / 1223\n \n \u2014 if parameter 5601 (error code) is negative, this indicates a hard fault and the prolog aborts with\n an error message.\n \u2014 if parameter 5601 (error code) is greater equal zero, this indicates a soft fault. An informational\n message is displayed and the prolog continues.\n@@ -25659,15 +25659,15 @@\n \n This will permit cycle_prolog to determine the compatibility of any axis words give in the block, see\n below.\n Actions of cycle_prolog\n \u2014 Determine whether the words passed in from the current block fulfill the conditions outlined under\n Canned Cycle Errors.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 518 / 1223\n \n \u2014 Export the axis words as , # etc; fail if axis words from different groups (XYZ) (UVW) are\n used together, or any of (ABC) is given.\n \u2014 Export L- as #; default to 1 if not given.\n \u2014 Export P- as #

; fail if p less than 0.\n@@ -25696,15 +25696,15 @@\n particular in the presence of optional parameters. Therefore, the calling convention has been extended\n to use something remotely similar to the Python keyword arguments model.\n See LINKTO G-code/main Subroutines: sub, endsub, return, call.\n 9.6.12.2 Nested remapped codes\n Remapped codes may be nested just like procedure calls - that is, a remapped code whose NGC procedure refers to some other remapped code will execute properly.\n The maximum nesting level remaps is currently 10.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 519 / 1223\n \n 9.6.12.3 Sequence number during remaps\n \n Sequence numbers are propagated and restored like with O-word calls. See tests/remap/nested-remaps/wo\n for the regression test, which shows sequence number tracking during nested remaps three levels\n@@ -25769,15 +25769,15 @@\n pydevd.settrace() will block execution if Eclipse and the Pydev debug server have not been\n started.\n \n To cover the last two steps: the o procedure helps to get into the debugger from MDI mode.\n See also the call_pydevd function in util.py and its usage in remap.involute to set a breakpoint.\n Here\u2019s a screen-shot of Eclipse/PyDevd debugging the involute procedure from above:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 520 / 1223\n \n See the Python code in configs/sim/axis/remap/getting-started/python for details.\n \n 9.6.13 Axis Preview and Remapped code execution\n For complete preview of a remapped code\u2019s tool path some precautions need to be taken. To understand what is going on, let\u2019s review the preview and execution process (this covers the AXIS case, but\n@@ -25794,15 +25794,15 @@\n probe succeeds or fails - but you would likely want to see what the maximum depth of the probe is,\n and assume it succeeds and continues execution to preview further movements. Also, there is no point\n in displaying a probe failed message and aborting during preview.\n The way to address this issue is to test in your procedure whether it executes in preview or execution\n mode. This can be checked for by testing the #<_task> predefined named parameter - it will be 1\n during actual execution and 0 during preview. See configs/sim/axis/remap/manual-toolchange-withtool-length-switch/nc_subroutines/manual_change.ngc for a complete usage example.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 521 / 1223\n \n Within Embedded Python, the task instance can be checked for by testing self.task - this will be 1 in\n the milltask instance, and 0 in the preview instance(s).\n \n 9.6.14 Remappable Codes\n@@ -25861,15 +25861,15 @@\n 16\n \n Gxx\n G10\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 522 / 1223\n \n Table 9.2: (continued)\n #\n 17\n 18\n@@ -25950,15 +25950,15 @@\n G43\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n G41.1\n G42.1\n G43.1\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 523 / 1223\n \n Table 9.5: (continued)\n #\n 49\n \n@@ -26036,15 +26036,15 @@\n \n G76\n \n Gxx.1 Gxx.2 Gxx.3 Gxx.4 Gxx.5 Gxx.6 Gxx.7 Gxx.8 Gxx.9\n G71.1 G71.2\n G72.1 G72.2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 524 / 1223\n \n Table 9.9: Table of Allocated G-codes 80-89\n #\n 80\n 81\n@@ -26228,15 +26228,15 @@\n \n M83\n M93\n \n All M-codes from M100 to M199 are user-defined M-codes already, and should not be remapped.\n All M-codes from M200 to M999 are available for remapping.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 525 / 1223\n \n 9.6.14.4 readahead time and execution time\n FIXME Write missing information\n 9.6.14.5 plugin/pickle hack\n FIXME Write missing information\n@@ -26259,15 +26259,15 @@\n 9.6.16.3 Execution-time Python procedures\n FIXME Write missing information\n \n 9.6.17 A short survey of LinuxCNC program execution\n To understand remapping of codes it might be helpful to survey the execution of task and interpreter\n as far as it relates to remapping.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 526 / 1223\n \n 9.6.17.1 Interpreter state\n Conceptually, the interpreter\u2019s state consist of variables which fall into the following categories:\n 1. Configuration information (typically from INI file)\n 2. The \u2019World model\u2019 - a representation of actual machine state\n@@ -26305,15 +26305,15 @@\n Here the interpreter can clearly predict machine positions for each line:\n After N20: x=10 y=-5 z=20; after N30: x=10 y=15 z=15; after N40: x=10 y=15 z=45 and so can\n parse the whole program and generate canonical operations well in advance.\n 9.6.17.4 Queue-busters break position prediction\n However, complete read ahead is only possible when the interpreter can predict the position impact\n for every line in the program in advance. Let\u2019s look at a modified example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 527 / 1223\n \n N10 G91\n N20 G0 X10 Y-5 Z20\n N30 G38.3 Z-10\n N40 O100 if [#5070 EQ 0]\n@@ -26352,15 +26352,15 @@\n 9.6.17.7 Parsing\n Once a line is read (in either MDI mode, or from the current NGC file), it is parsed and flags and\n parameters are set in a struct block (struct _setup, member block1). This struct holds all information\n about the current source line, but independent of different ordering of codes on the current line: As\n long as several codes are compatible, any source ordering will result in the same variables set in the\n struct block. Right after parsing, all codes on a block are checked for compatibility.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 528 / 1223\n \n 9.6.17.8 Execution\n After successful parsing the block is executed by execute_block(), and here the different items are\n handled according to execution order.\n If a \u201dqueue buster\u201d is found, a corresponding flag is set in the interpreter state (toolchange_flag,\n@@ -26397,15 +26397,15 @@\n ;py,from emctask import *\n ;py,print(emcstat.io.tool.pocketPrepped)\n ;py,print(emcstat.io.tool.toolInSpindle)\n ;py,print(emcstat.io.tool.toolTable[0])\n \n You need to have LinuxCNC started from a terminal window to see the results.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 529 / 1223\n \n 9.6.17.11 How Tx (Prepare Tool) works\n Interpreter action on a Tx command\n All the interpreter does is evaluate the toolnumber parameter, looks up its corresponding tooldata\n index, remembers it in the selected_pocket variable for later, and queues a canon command (SELECT_TOOL). See Interp::convert_tool_select in src/emc/rs274/interp_execute.cc.\n@@ -26442,15 +26442,15 @@\n will:\n a. generate a rapid move to TOOL_CHANGE_POSITION if so set in INI\n b. enqueue an EMC_TOOL_LOAD NML message to task.\n 7. set the numberer parameters 5400-5413 according to the new tool\n 8. signal to task to stop calling the interpreter for readahead by returning INTERP_EXECUTE_FINISH\n since M6 is a queue buster.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 530 / 1223\n \n What task does when it sees a CHANGE_TOOL command Again, not much more than passing\n the buck to iocontrol by sending it an EMC_TOOL_LOAD message, and waiting until iocontrol has\n done its thing.\n Iocontrol action on EMC_TOOL_LOAD\n@@ -26484,15 +26484,15 @@\n \n 9.6.19 Changes\n \u2014 The method to return error messages and fail used to be self.set_errormsg(text) followed by return\n INTERP_ERROR. This has been replaced by merely returning a string from a Python handler or\n oword subroutine. This sets the error message and aborts the program. Previously there was no\n clean way to abort a Python O-word subroutine.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 531 / 1223\n \n 9.6.20 Debugging\n In the [EMC] section of the INI file the DEBUG parameter can be changed to get various levels of\n debug messages when LinuxCNC is started from a terminal.\n Debug level, 0 means no messages. See src/emc/nml_intf/debugflags.h for others\n@@ -26538,15 +26538,15 @@\n Backtracking through waypoints results in slower movement rates as the moves are point-to-point\n respecting velocity and acceleration settings. The velocity and acceleration limit pins can be managed\n dynamically to control offsets at all times.\n When backtrack-enable is FALSE, the auto-return move is NOT coordinated, each axis returns to zero\n at its own rate. If a controlled path is wanted in this condition, each axis should be manually returned\n to zero before deasserting an enabling pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 532 / 1223\n \n The waypoint-sample-secs, waypoint-threshold, and epsilon pins are evaluated only when the component is idle.\n The offsets-applied output pin is provided to indicate the current state to a GUI so that program\n resumption can be managed. If the offset(s) are non-zero when the apply-offsets pin is deasserted\n (for example when resuming a program when offsetting during a pause), offsets are returned to zero\n@@ -26589,15 +26589,15 @@\n 5. Set the moveoff component operating parameters and limits for each axis in accordance with\n additional INI file settings\n Note: The moveoff_gui application supports configurations that use known kinematics modules with\n KINEMATICS_TYPE=KINEMATICS_IDENTITY. Supported modules include: trivkins. With identity kins,\n moveoff_gui assigns each axis name specified with the command line parameter -axes axisnames to\n the corresponding joint.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 533 / 1223\n \n Modify an existing configuration as follows:\n Make sure there is an INI file entry for [HAL]HALUI and create a new [HAL]HALFILE entry for\n LIB:hookup_moveoff.tcl. The entry for LIB:hookup_moveoff.tcl should follow all HALFILE= entries for\n HAL files that connect the pins for joint.N.motor-pos-cmd, joint.N.motor-pos-fb, and any components\n@@ -26643,15 +26643,15 @@\n The moveoff_gui makes the required connections for the moveoff component pins: mv.power_on and\n mv.apply-offsets. The mv.power_on pin is connected to the motion.motion-enabled pin (a new signal\n is automatically created if necessary). The mv.apply-offsets is connected to halui.program.is-paused\n or set to 1 depending upon the command line option -mode [ onpause | always ]. A new signal is\n automatically created if necessary.\n To use the moveoff_gui, add an entry in the INI file [APPLICATIONS] section as follows:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 534 / 1223\n \n [APPLICATIONS]\n # Note: a delay (specified in seconds) may be required if connections\n # are made using postgui HAL files ([HAL]POSTGUI_HALFILE=)\n DELAY = 0\n@@ -26703,15 +26703,15 @@\n \n (default: xyz (no spaces))\n (letters from set of: x y z a b c u v w)\n (example: -axes z)\n (example: -axes xz)\n (example: -axes xyz)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n [-inc incrementvalue]\n \n [-size integer]\n [-loc center|+x+y]\n [-autoresume]\n [-delay delay_secs]\n@@ -26771,15 +26771,15 @@\n -T: call task_init()\n -l: specify the log_level (default: -1)\n \n 9.8.2 Example\n To see the output of a loop for example we can run rs274 on the following file and see that the loop\n never ends. To break out of the loop use Ctrl Z. The following two files are needed to run the example.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 536 / 1223\n \n test.ngc\n # = 123.352\n o101 while [[# MOD 60 ] NE 0]\n (debug,#)\n@@ -26816,15 +26816,15 @@\n = (1-r) * MAX_VELOCITY\n = ( r) * MAX_VELOCITY\n \n planning max acceleration\n = (1-r) * MAX_ACCELERATIOIN\n external offset acceleration = ( r) * MAX_ACCELERATION\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 537 / 1223\n \n 9.9.2 HAL Pins\n 9.9.2.1 Per-Axis Motion HAL Pins\n For each axis letter (L in xyzabcuvw)\n 1. axis.L.eoffset-enable Input(bit): enable\n@@ -26853,15 +26853,15 @@\n When the machine is turned off, the current position with external offsets is maintained so that\n there is no unexpected motion at turn off or turn on.\n At each startup (machine-on), the internal counts register for each HAL pin axis.L.eoffset-counts is\n zeroed and the corresponding HAL output pin axis.L.eoffset is reset to zero.\n In other words, external offsets are defined as ZERO at each startup (machine-on) regardless of the\n value of the axis.L.eoffset-counts pins. To avoid confusion, it is recommended that all axis.L.eoffsetcounts pins are set to zero when the machine is off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 538 / 1223\n \n 9.9.3.3 Soft Limits\n External axis offset movements are independently planned with velocity and acceleration settings\n specified by the [AXIS_L]OFFSET_AV_RATIO. The offsetting motion is not coordinated with teleop\n jogs nor with coordinated (G-code) motion. During teleop jogging and coordinated (G-code) motion,\n@@ -26900,15 +26900,15 @@\n may be less than the opposing planned rate of motion. In such cases, pausing (or stopping) the planned, coordinated motion will allow movement away from the soft limit when correcting changes are\n made in the offending external offset.\n 9.9.3.5 Warning\n The use of external offsets can alter machine motion in a significant manner. The control of external\n offsets with HAL components and connections and any associated user interfaces should be carefully\n designed and tested before deployment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 539 / 1223\n \n 9.9.4 Related HAL Components\n 9.9.4.1 eoffset_per_angle.comp\n Component to compute an external offset from a function based on a measured angle (rotary coordinate or spindle). See the man page for details ($ man eoffset_per_angle).\n \n@@ -26950,15 +26950,15 @@\n The sim configurations utilize the INI setting [HAL]HALFILE = LIB:basic_sim.tcl to configure all\n routine HAL connections for the axes specified in the INI file [TRAJ]COORDINATES= setting. The\n HAL logic needed to demonstrate external offset functionality and the GUI HAL pin connections for\n a PyVCP panel are made in separate HAL files. A non-simulation configuration should replace the\n LIB:basic_sim.tcl item HALFILEs appropriate to the machine. The provided PyVCP files (.hal and .xml)\n could be a starting point for application-specific GUI interfaces.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 540 / 1223\n \n 9.9.6.1 eoffsets.ini\n The sim config sim/configs/axis/external_offsets/eoffsets.ini demonstrates a cartesian XYZ machine\n with controls to enable external offsets on any axis.\n Displays are provided to show all important position and offset values.\n@@ -26989,15 +26989,15 @@\n typically set by a program (or MDI) M68 command to control a motion.analog-out-NN pin.\n Panel LEDs are provided to show important status items.\n Functions are provided for inside and outside polygons (nsides >= 3), sine waves and square waves.\n The functions can be multiplied in frequency using the fmul pin and modified in amplitude using the\n rfrac pin (fraction of reference radius).\n Controls are provided to start/stop offset waveforms and to set the function type and its parameters.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 541 / 1223\n \n 9.10 Tool Database Interface\n \n Tool data is conventionally described by a tool table file specified by an inifile setting: [EMCIO]TOOL_TABLE=\n A tool table file consists of a text line for each available tool describing the tool\u2019s parameters, see Tool\n@@ -27034,15 +27034,15 @@\n response of \u201dFINI\u201d terminates the reply.\n 4. The db_program then enters an event wait loop to receive commands that indicate that tool data\n has been changed by LinuxCNC. Tool data changes include:\n \u2014 a) spindle loading(Tn M6)/unloading(T0 M6)\n \u2014 b) tool parameter changes (G10L1Pn for example)\n \u2014 c) tool substitutions (M61Qn).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 542 / 1223\n \n When a tool data change occurs, LinuxCNC sends a command to the db_program consisting of an\n identifying command letter followed by a full or abbreviated tool data line. The db_program must\n respond with a reply to confirm receipt. If the reply includes the text \u201dNAK\u201d, a message is printed to\n stdout but execution continues. The \u201dNAK\u201d message signifies a lack of synchronization between the\n@@ -27083,15 +27083,15 @@\n command().load_tool_table()\n \n Alternatively, a db_program may push its local data changes to synchronize its data with LinuxCNC by\n using the load_tool_table() interface command. Commands which push changes to LinuxCNC may be\n rejected if the interpreter is running. The interpreter state can be checked before issuing a load_tool_table()\n command. Example:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 543 / 1223\n \n #! /usr/bin/env python3\n import linuxcnc\n s = linuxcnc.stat()\n s.poll()\n@@ -27137,15 +27137,15 @@\n ...\n def user_load_spindle(toolno,params):\n # function to respond to \u2019l\u2019 (put) commands\n ...\n def user_unload_spindle(toolno,params):\n # function to respond to \u2019u\u2019 (put) commands\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 544 / 1223\n \n ...\n #-----------------------------------------------------------# Begin:\n from tooldb import tooldb_tools\n # identify known tools\n@@ -27184,50 +27184,50 @@\n LinuxCNC tooldata updates and the database application updates.\n 9.10.2.1 Notes\n \n When a db_program is used in conjunction with a random tool changer ([EMCIO]RANDOM_TOOLCHANGER\n LinuxCNC maintains a file (db_spindle.tbl in the configuration directory) that consists of a single tool\n table line identifying the current tool in the spindle.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 545 / 1223\n \n Deuxi\u00e8me partie\n \n Usage\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 546 / 1223\n \n Chapitre 10\n \n Interfaces utilisateur\n 10.1 AXIS GUI\n 10.1.1 Introduction\n AXIS is a graphical front-end for LinuxCNC which features a live preview and backplot. It is written\n in Python and uses Tk and OpenGL to display its user interface.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 547 / 1223\n \n Figure 10.1 \u2013 The AXIS Window\n \n 10.1.2 Getting Started\n If your configuration is not currently set up to use AXIS, you can change it by editing the .ini file (INI\n file). In the section [DISPLAY] change the [DISPLAY] line to read DISPLAY = axis.\n The sample configuration sim/axis.ini is already configured to use AXIS as its front-end.\n When AXIS starts, a window like the one in the figure Figure 10.1 above opens.\n 10.1.2.1 INI settings\n For more information on INI file settings that can change how AXIS works see the Display Section of\n the INI Configuration Chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 548 / 1223\n \n \u2014 CYCLE_TIME - Adjust the response rate of the GUI in milliseconds. Typical 100, useable range 50\n - 200\n (will accept time in seconds (.05 -.2) for legacy reasons - milliseconds preferred to match other\n screens).\n@@ -27266,15 +27266,15 @@\n \u2014 A large readout showing the current position and all offsets.\n \u2014 A menu bar and toolbar that allow you to perform various actions\n \u2014 Manual Control Tab - which allows you to make the machine move, turn the spindle on or off, and\n turn the coolant on or off if included in the INI file.\n \u2014 MDI Tab - where G-code programs can be entered manually, one line at a time. This also shows the\n Active G-codes which shows which modal G-codes are in effect.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 549 / 1223\n \n \u2014 Feed Override - which allows you to scale the speed of programmed motions. The default maximum\n is 120% and can be set to a different value in the INI file. See the Display Section of the INI file for\n more information.\n \u2014 Spindle Override - which allows you to scale the spindle speed up or down.\n@@ -27317,15 +27317,15 @@\n AVERTISSEMENT\n Do not use Run From Selected Line if your G-code program contains subroutines.\n \n \u2014 Step - Single step through a program.\n \u2014 Pause - Pause a program.\n \u2014 Resume - Resume running from a pause.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 550 / 1223\n \n \u2014 Stop - Stop a running program. When run is selected after a stop the program will start from the\n beginning.\n \u2014 Stop at M1 - If an M1 is reached, and this is checked, program execution will stop on the M1 line.\n Press Resume to continue.\n@@ -27366,15 +27366,15 @@\n \u2014 Perspective View - The Perspective View (or P view) displays the G-code looking at the part from an\n adjustable point of view, defaulting to X+, Y-, Z+. The position is adjustable using the mouse and\n the drag/rotate selector. This view is a compromise view, and while it does do a good job of trying\n to show three (to nine!) axes on a two-dimensional display, there will often be some feature that is\n hard to see, requiring a change in viewpoint. This view is best when you would like to see all three\n (to nine) axes at once.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 551 / 1223\n \n Point of View\n The AXIS display pick menu View refers to Top, Front, and Side views. These terms are correct if\n the CNC machine has its Z axis vertical, with positive Z up. This is true for vertical mills, which\n is probably the most popular application, and also true for almost all EDM machines, and even\n@@ -27421,15 +27421,15 @@\n encoders or simulated by step generators. This may differ slightly from the Commanded Position\n for many reasons including PID tuning, physical constraints, or position quantization.\n \u2014 Show Machine Position - This is the position in unoffset coordinates, as established by Homing.\n \u2014 Show Relative Position - This is the Machine Position modified by G5x, G92, and G43 offsets.\n \u2014 About AXIS - We all know what this is.\n \u2014 Quick Reference - Shows the keyboard shortcut keys.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 552 / 1223\n \n 10.1.3.2 Toolbar buttons\n From left to right in the AXIS display, the toolbar buttons (keyboard shortcuts shown [in brackets])\n are:\n \u2014\n@@ -27514,15 +27514,15 @@\n \n is shown if the axis has been homed.\n \n is shown on the right side of the coordinate position number if the axis is on one of\n A limit symbol\n its limit switches.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 553 / 1223\n \n To properly interpret the coordinate position numbers, refer to the Position: indicator in the status bar.\n If the position is Machine Actual, then the displayed number is in the machine coordinate system. If it\n is Relative Actual, then the displayed number is in the offset coordinate system. When the coordinates\n displayed are relative and an offset has been set, the display will include a cyan machine origin\n@@ -27559,15 +27559,15 @@\n rate, and magenta for circular moves at a feed rate.\n Grid AXIS can optionally display a grid when in orthogonal views. Enable or disable the grid using\n the Grid menu under View. When enabled, the grid is shown in the top and rotated top views; when\n coordinate system is not rotated, the grid is shown in the front and side views as well. The presets in\n the Grid menu are controlled by the INI file item [DISPLAY]GRIDS. If unspecified, the default is 10mm\n 20mm 50mm 100mm 1in 2in 5in 10in.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 554 / 1223\n \n Specifying a very small grid may decrease performance.\n Interacting By left-clicking on a portion of the preview plot, the line will be highlighted in both the\n graphical and text displays. By left-clicking on an empty area, the highlighting will be removed.\n By dragging with the left mouse button pressed, the preview plot will be shifted (panned).\n@@ -27585,15 +27585,15 @@\n \n 10.1.3.5 Manual Control\n While the machine is turned on but not running a program, the items in the Manual Control tab can\n be used to move the machine or control its spindle and coolant.\n When the machine is not turned on, or when a program is running, the manual controls are unavailable.\n Many of the items described below are not useful on all machines. When AXIS detects that a particular pin is not connected in HAL, the corresponding item in the Manual Control tab is removed. For\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 555 / 1223\n \n instance, if the HAL pin spindle.0.brake is not connected, then the Brake button will not appear on\n the screen. If the environment variable AXIS_NO_AUTOCONFIGURE is set, this behavior is disabled\n and all the items will appear.\n The Axis group AXIS allows you to manually move the machine. This action is known as jogging.\n@@ -27625,15 +27625,15 @@\n will show Home Joint.\n See the Homing Configuration Chapter for more information.\n Touch Off\n By pressing Touch Off or the END key, the G5x offset for the current axis is changed so that the\n current axis value will be the specified value. Expressions may be entered using the rules for rs274ngc\n programs, except that variables may not be referred to. The resulting value is shown as a number.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 556 / 1223\n \n Figure 10.4 \u2013 Touch Off Window\n See also the Machine menu options: Touch part and Touch part holder.\n Tool Touch Off By pressing the Tool Touch Off button the tool length and offsets of the currently\n loaded tool will be changed so that the current tool tip position matches the entered coordinate.\n@@ -27652,15 +27652,15 @@\n Pressing the spindle start button sets the S speed to 1.\n The Coolant group The two buttons allow the Mist and Flood coolants to be turned on and off.\n Depending on your machine configuration, not all the items in this group may appear.\n 10.1.3.6 MDI\n MDI allows G-code commands to be entered manually. When the machine is not turned on, or when a\n program is running, the MDI controls are unavailable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 557 / 1223\n \n Figure 10.6 \u2013 The MDI tab\n \u2014 History - This shows MDI commands that have been typed earlier in this session.\n \u2014 MDI Command - This allows you to enter a G-code command to be executed. Execute the command\n by pressing Enter or by clicking Go.\n@@ -27676,15 +27676,15 @@\n only appears when the HAL pin spindle.0.speed-out is connected.\n 10.1.3.9 Jog Speed\n By moving this slider, the speed of jogs can be modified. For instance, if the slider is set to 1 in/min,\n then a .01 inch jog will complete in about .6 seconds, or 1/100 of a minute. Near the left side (slow\n jogs) the values are spaced closely together, while near the right side (fast jogs) they are spaced much\n further apart, allowing a wide range of jog speeds with fine control when it is most important.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 558 / 1223\n \n On machines with a rotary axis, a second jog speed slider is shown. This slider sets the jog rate for\n the rotary axes (A, B and C).\n 10.1.3.10 Max Velocity\n By moving this slider, the maximum velocity can be set. This caps the maximum velocity for all programmed moves except spindle-synchronized moves.\n@@ -27765,15 +27765,15 @@\n Manual\n Manual\n Manual\n Manual\n Manual\n Auto\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 559 / 1223\n \n Table 10.1: (continued)\n Keystroke\n S\n ESC\n@@ -27812,15 +27812,15 @@\n \n 10.1.5 Show LinuxCNC Status (linuxcnctop)\n AXIS includes a program called linuxcnctop which shows some of the details of LinuxCNC\u2019s state. You\n can run this program by invoking Machine > Show LinuxCNC Status\n \n Figure 10.7 \u2013 LinuxCNC Status Window\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 560 / 1223\n \n The name of each item is shown in the left column. The current value is shown in the right column. If\n the value has recently changed, it is shown on a red background.\n \n 10.1.6 MDI interface\n@@ -27856,15 +27856,15 @@\n hal_manualtoolchange can be used even when AXIS is not used as the GUI. This component is most\n useful if you have presettable tools and you use the tool table.\n Note\n Important Note: Rapids will not show on the preview after a T is issued until the next feed move\n after the M6. This can be very confusing to most users. To turn this feature off for the current tool\n change program a G1 with no move after the T.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 561 / 1223\n \n Figure 10.8 \u2013 Manual Toolchange Window\n \n 10.1.9 Python modules\n AXIS includes several Python modules which may be useful to others. For more information on one of\n@@ -27880,44 +27880,44 @@\n \n 10.1.10 Using AXIS in Lathe Mode\n By including the line LATHE = 1 in the [DISPLAY] section of the INI file, AXIS selects lathe mode. The\n Y axis is not shown in coordinate readouts, the view is changed to show the Z axis extending to the\n right and the X axis extending towards the bottom of the screen, and several controls (such as those\n for preset views) are removed. The coordinate readouts for X are replaced with diameter and radius.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 562 / 1223\n \n Figure 10.9 \u2013 AXIS Lathe Mode\n Pressing V zooms out to show the entire file, if one is loaded.\n When in lathe mode, the shape of the loaded tool (if any) is shown.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 563 / 1223\n \n Figure 10.10 \u2013 Lathe Tool Shape\n To change the display to a back tool lathe you need to have both LATHE = 1 and BACK_TOOL_LATHE\n = 1 in the [DISPLAY] section. This will invert the view and put the tool on the back side of the Z axis.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 564 / 1223\n \n Figure 10.11 \u2013 Lathe Back Tool Shape\n \n 10.1.11 Using AXIS in Foam Cutting mode\n By including the line FOAM = 1 in the [DISPLAY] section of the INI file, AXIS selects foam-cutting\n mode. In the program preview, XY motions are displayed in one plane, and UV motions in another. In\n the live plot, lines are drawn between corresponding points on the XY plane and the UV plane. The\n special comments (XY_Z_POS) and (UV_Z_POS) set the Z coordinates of these planes, which default\n to 0 and 1.5 machine units.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 565 / 1223\n \n Figure 10.12 \u2013 Foam Cutting Mode\n \n 10.1.12 Advanced Configuration\n When AXIS is started it creates the HAL pins for the GUI then it executes the HAL file named in the INI\n@@ -27925,15 +27925,15 @@\n _postgui + .hal eg. lathe_postgui.hal, but can be any legal filename. These commands are executed\n after the screen is built, guaranteeing the widget\u2019s HAL pins are available. You can have multiple line\n of POSTGUI_HALFILE= in the INI. Each will be run one after the other in the order they\n appear.\n For more information on the INI file settings that can change the way AXIS works, see the Display\n Section of the INI configuration chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 566 / 1223\n \n 10.1.12.1 Program Filters\n AXIS has the ability to send loaded files through a filter program. This filter can do any desired task:\n Something as simple as making sure the file ends with M2, or something as complicated as generating\n G-code from an image.\n@@ -27955,15 +27955,15 @@\n In this way, any Python script can be opened, and its output is treated as G-code. One such example\n script is available at nc_files/holecircle.py. This script creates G-code for drilling a series of holes\n along the circumference of a circle.\n \n Figure 10.13 \u2013 Circular Holes\n If the environment variable AXIS_PROGRESS_BAR is set, then lines written to stderr of the form\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 567 / 1223\n \n FILTER_PROGRESS=%d\n \n will set the AXIS progress bar to the given percentage. This feature should be used by any filter that\n runs for a long time.\n@@ -27999,15 +27999,15 @@\n Example of .axisrc file\n root_window.bind(\u201d\u201d, \u201ddestroy .\u201d)\n help2.append((\u201dControl-Q\u201d, \u201dQuit\u201d))\n \n The following stops the \u201dDo you really want to quit\u201d dialog.\n root_window.tk.call(\u201dwm\u201d,\u201dprotocol\u201d,\u201d.\u201d,\u201dWM_DELETE_WINDOW\u201d,\u201ddestroy .\u201d)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 568 / 1223\n \n 10.1.12.5 USER_COMMAND_FILE\n \n A configuration-specific Python file may be specified with an INI file setting [DISPLAY]USER_COMMAND_FIL\n Like a ~/.axisrc file, this file is sourced just before the AXIS GUI is displayed. This file is specific to\n@@ -28043,15 +28043,15 @@\n G-code file, one can disable the preview on certain parts that are already working OK).\n \u2014 (AXIS,hide) Stops the preview (must be first)\n \u2014 (AXIS,show) Resumes the preview (must follow a hide)\n \u2014 (AXIS,stop) Stops the preview from here to the end of the file.\n \u2014 (AXIS,notify,the_text) Displays the_text as an info display\n This display can be useful in the AXIS preview when (debug,message) comments are not displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 569 / 1223\n \n 10.1.13 Axisui\n To improve the interaction of AXIS with physical jog wheels, the axis currently selected in the GUI is\n also reported on a pin with a name like axisui.jog.x. One of these pins is TRUE at one time, and the\n rest are FALSE. These are meant to control motion\u2019s jog-enable pins.\n@@ -28134,15 +28134,15 @@\n 10.1.14 AXIS Customization Hints\n AXIS is a fairly large and difficult-to-penetrate code base, this is helpful To keep the code stable but\n makes it difficult to customize.\n Here we will show code snippets to modify behaviours or visuals of the screen. Keep in mind the\n internal code of AXIS can change from time to time.\n these snippets are not guaranteed to continue to work - they may need adjustment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 570 / 1223\n \n 10.1.14.1 The update function\n There is a function in AXIS named user_live_update that is called every time AXIS updates itself. You\n can use this to update your own functions.\n # continuous update function\n@@ -28181,15 +28181,15 @@\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(50))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(60))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(70))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(80))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(90))\n root_window.bind(\u2019\u2019,lambda event: set_rapidrate(100))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n root_window.bind(\u2019\u2019,lambda event: set_feedrate(0))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(10))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(20))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(30))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(40))\n root_window.bind(\u2019\u2019,lambda event: set_feedrate(50))\n@@ -28228,15 +28228,15 @@\n # connect pins\n hal.new_sig(\u2019idle-led\u2019,hal.HAL_BIT)\n hal.connect(\u2019halui.program.is-idle\u2019,\u2019idle-led\u2019)\n hal.connect(\u2019my_component.idle-led\u2019,\u2019idle-led\u2019)\n \n 571 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 572 / 1223\n \n # set a pin\n hal.set_p(\u2019my_component.pause-led\u2019,\u20191\u2019)\n # get a pin 2,8+ branch\n value = hal.get_value(\u2019halui.program.is-idle\u2019)\n@@ -28277,15 +28277,15 @@\n root_window.tk.call(\u2019button\u2019,\u2019.pane.top.tabs.fmanual.homey\u2019,\u2019-text\u2019,\u2019Home Y\u2019,\u2019-command\u2019,\u2019 \u2190goto_home Y\u2019,\u2019-height\u2019,\u20192\u2019)\n # place the button\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.homey\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20197\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n # any function called from Tcl needs to be added to TclCommands\n TclCommands.goto_home = goto_home\n commands = TclCommands(root_window)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 573 / 1223\n \n 10.1.14.12 Add Button to manual frame\n # make a new button and put it in the manual frame\n root_window.tk.call(\u2019button\u2019,\u2019.pane.top.tabs.fmanual.mybutton\u2019,\u2019-text\u2019,\u2019My Button\u2019,\u2019- \u2190command\u2019,\u2019mybutton_clicked\u2019,\u2019-height\u2019,\u20192\u2019)\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.mybutton\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20196\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n@@ -28341,15 +28341,15 @@\n = BooleanVar\n = DoubleVar\n = IntVar\n = IntVar\n = IntVar\n = IntVar\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 574 / 1223\n \n interp_state\n = IntVar\n ja_rbutton\n = StringVar\n@@ -28446,15 +28446,15 @@\n # use \u2019grid\u2019 or \u2019pack\u2019 depending on how it was originally placed\n root_window.tk.call(\u2019grid\u2019,\u2019forget\u2019,\u2019.pane.top.tabs.fmanual.jogf.zerohome.tooltouch\u2019)\n \n 10.1.14.15 Change a label\n # change label of a widget\n root_window.tk.call(\u2019setup_widget_accel\u2019,\u2019.pane.top.tabs.fmanual.mist\u2019,\u2019Downdraft\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 575 / 1223\n \n # make sure it appears (only needed in this case if the mist button was hidden)\n root_window.tk.call(\u2019grid\u2019,\u2019.pane.top.tabs.fmanual.mist\u2019,\u2019-column\u2019,\u20191\u2019,\u2019-row\u2019,\u20195\u2019,\u2019- \u2190columnspan\u2019,\u20192\u2019,\u2019-padx\u2019,\u20194\u2019,\u2019-sticky\u2019,\u2019w\u2019)\n \n 10.1.14.16 Redirect an existing command\n@@ -28484,15 +28484,15 @@\n root_window.tk.call(\u2019.toolbar.program_run\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019RUN\u2019,\u2019-width\u2019, \u2190buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_step\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019STEP\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_pause\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019PAUSE\u2019,\u2019- \u2190width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_stop\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019STOP\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_blockdelete\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Skip /\u2019 \u2190,\u2019-width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.program_optpause\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019M1\u2019,\u2019- \u2190width\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 576 / 1223\n \n root_window.tk.call(\u2019.toolbar.view_zoomin\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Zoom+\u2019,\u2019-width\u2019 \u2190,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_zoomout\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Zoom-\u2019,\u2019-width \u2190\u2019,buW,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_z\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Top X\u2019,\u2019-width\u2019,buW, \u2190\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n root_window.tk.call(\u2019.toolbar.view_z2\u2019,\u2019configure\u2019,\u2019-image\u2019,\u2019\u2019,\u2019-text\u2019,\u2019Top Y\u2019,\u2019-width\u2019,buW \u2190,\u2019-height\u2019,buH,\u2019-borderwidth\u2019,boW)\n@@ -28527,15 +28527,15 @@\n support the joint / axis changes in LinuxCNC it does not work on 2.7 or 2.6 branch!\n It has support for integrated virtual keyboard (onboard or matchbox-keyboard), so there is no need\n for a hardware keyboard or mouse, but it can also be used with that hardware. GMOCCAPY offers a\n separate settings page to configure most settings of the GUI without editing files.\n GMOCCAPY can be localized very easy, because the corresponding files are separated from the linuxcnc.po files, so there is no need to translate unneeded stuff. The files are placed in /src/po/gmoccapy. You could just copy the gmoccapy.pot file to something like it.po and translate that file with\n gtranslator or poedit. After rebuilding, you\u2019d get the GUI in your preference language. To facilitate\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 577 / 1223\n \n the sharing of the translation, GMOCCAPY is available on the Weblate web interface. GMOCCAPY is\n currently available in English, German, Spanish, Polish, Serbian and Hungarian. Feel free to help me\n to introduce more languages, be it locally or via the web. If you need help, don\u2019t hesitate to contact\n me on nieson@web.de.\n@@ -28550,15 +28550,15 @@\n it should fit to every standard screen. It is recommended to use screens with minimum resolution of\n 1024x748.\n \n 10.2.3 How to Get GMOCCAPY\n GMOCCAPY 3 is included in the standard distribution of LinuxCNC since release 2.7. So the easiest\n way to get GMOCCAPY on your controlling PC is just to download the ISO and install it from the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 578 / 1223\n \n CD/DVD/USB-stick. This allows you to receive updates with the regular Debian packages.\n In the release notes aka changelist you can track the latest bugfixes and features.\n You will get a similar screen to the following (the design may vary depending on your config):\n \n@@ -28572,15 +28572,15 @@\n take care off if you want to use all the features of the GUI.\n You will find a lot of simulation configurations (INI files) included, just to show the basics:\n \u2014 gmoccapy.ini\n \u2014 gmoccapy_4_axis.ini\n \u2014 lathe_configs/gmoccapy_lathe.ini\n \u2014 lathe_configs/gmoccapy_lathe_imperial.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 579 / 1223\n \n \u2014 gmoccapy_left_panel.ini\n \u2014 gmoccapy_right_panel.ini\n \u2014 gmoccapy_messages.ini\n \u2014 gmoccapy_pendant.ini\n@@ -28621,15 +28621,15 @@\n \n \u2014 MAX_FEED_OVERRIDE = 1.5 - Sets the maximum feed override, in the example given, you will be\n allowed to override the feed by 150%.\n \n Note\n If no value is given, it will be set to 1.0.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 580 / 1223\n \n \u2014 MIN_SPINDLE_OVERRIDE = 0.5 and MAX_SPINDLE_OVERRIDE = 1.2 - Will allow you to change\n the spindle override within a limit from 50% to 120%.\n \n Note\n@@ -28665,15 +28665,15 @@\n 10.2.4.3 Macro Buttons\n You can add macros to GMOCCAPY, similar to Touchy\u2019s way. A macro is nothing else than a NGC file.\n You are able to execute complete CNC programs in MDI mode by just pushing one button. To do so,\n you first have to specify the search path for macros:\n [RS274NGC]\n SUBROUTINE_PATH = macros\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 581 / 1223\n \n This sets the path to search for macros and other subroutines. Several subroutine paths can be separated \u201d:\u201d.\n Then you just have to add a section like this:\n Configuration of Five Macros to be Shown in the MDI Button List\n [MACROS]\n@@ -28717,15 +28717,15 @@\n G54\n G61\n G40\n G49\n G80\n G90\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 582 / 1223\n \n ;#1 = \n ;#2 = \n ;#3 = \n (DBG, Will now move machine to X = #1 , Y = #2 , Z = #3)\n@@ -28739,15 +28739,15 @@\n If you would like to use a macro without any movement, see also the notes in known problems.\n \n Macro example using the \u201dgo to position\u201d-macro\n 10.2.4.4 Embedded Tabs and Panels\n You can add embedded programs to GMOCCAPY like you can do in AXIS, Touchy and Gscreen. All is\n done by GMOCCAPY automatically if you include a few lines in your INI file in the DISPLAY section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 583 / 1223\n \n If you have never used a Glade panel, I recommend to read the excellent documentation on Glade\n VCP.\n Embedded Tab Example\n EMBED_TAB_NAME = DRO\n@@ -28791,15 +28791,15 @@\n the config folder of your machine.\n gladevcp h_buttonlist.glade\n \n will just open a new user window called h_buttonlist.glade note the difference. This one is stand\n alone, and can be moved around independent from GMOCCAPY window.\n gladevcp -c gladevcp -u hitcounter.py -H manual-example.hal manual-example.ui\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 584 / 1223\n \n will add a the panel manual-example.ui, include a custom Python handler, hitcounter.py and make\n all connections after realizing the panel according to manual-example.hal.\n hide\n \n@@ -28811,15 +28811,15 @@\n specified in the EMBED_TAB_COMMAND line, otherwise you may get an error that the HAL pin does\n not exist \u2014 this is because of race conditions loading the HAL files. Connections to GMOCCAPY HAL\n pins need to be made in the postgui HAL file specified in your INI file, because these pins do not exist\n prior of realizing the GUI.\n \n Here are some examples:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ntb_preview\n \n 585 / 1223\n \n box_right - and GMOCCAPY in MDI mode\n \n@@ -28844,15 +28844,15 @@\n Example of User Message Configuration\n MESSAGE_TEXT = This is a info-message test\n MESSAGE_TYPE = status\n MESSAGE_PINNAME = statustest\n MESSAGE_TEXT = This is a yes no dialog test\n MESSAGE_TYPE = yesnodialog\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 586 / 1223\n \n MESSAGE_PINNAME = yesnodialog\n MESSAGE_TEXT = Text can be small, big, bolditalic,\n and even be colored.\n MESSAGE_TYPE = okdialog\n@@ -28896,15 +28896,15 @@\n The widget names can the looked up in the /usr/share/gmoccapy.glade file\n 10.2.4.8 User CSS File\n Similar to the User command file it\u2019s possible to influence the appearance by cascading style sheets\n (CSS). If a file ~/.gmoccapy_css exists, its contents are loaded into the stylesheet provider and are\n so being applied to the GUI.\n A configuration-specific CSS file may be specified with an INI file setting\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 587 / 1223\n \n [DISPLAY]\n USER_CSS_FILE=filename.css\n \n If this file is specified, this file is used instead of ~/.gmoccapy_css.\n@@ -28947,15 +28947,15 @@\n \n If LOG_FILE is not set, logging happens to $HOME/.log.\n \n 10.2.5 HAL Pins\n GMOCCAPY exports several HAL pins to be able to react to hardware devices. The goal is to get a\n GUI that may be operated in a tool shop, completely/mostly without mouse or keyboard.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 588 / 1223\n \n Note\n You will have to do all connections to GMOCCAPY pins in your postgui.hal file. When GMOCCAPY is\n started, it creates the HAL pins for the GUI then it executes the post-GUI HAL file named in the INI\n file:\n@@ -28996,15 +28996,15 @@\n \u2014 gmoccapy.h-button.button-8 (bit IN)\n \u2014 gmoccapy.h-button.button-9 (bit IN)\n As the buttons in the bottom list will change according to the mode and other influences, the hardware\n buttons will activate the displayed functions. So you don\u2019t have to take care about switching functions\n around in HAL, because that is done completely by GMOCCAPY!\n For a three axes XYZ machine the HAL pins will react as shown in the following three tables:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 589 / 1223\n \n Table 10.2: Functional assignment of horizontal buttons\n (1)\n Pin\n Manual Mode\n@@ -29129,15 +29129,15 @@\n go to home directory\n one directory level up\n move selection left\n move selection right\n jump to directory as\n set in settings\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 590 / 1223\n \n Table 10.4: (continued)\n Pin\n Tool Mode\n gmoccapy.h-button.button-6\n@@ -29165,15 +29165,15 @@\n from excessive use by placing hardware buttons around the panel. They are available in a sample\n configuration like shown in the image below.\n Sample configuration \u201dgmoccapy_sim_hardware_button\u201d showing the side buttons\n \n 10.2.5.2 Velocities and Overrides\n All sliders from GMOCCAPY can be connected to hardware encoders or hardware potentiometers.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 591 / 1223\n \n Note\n For GMOCCAPY 3 some HAL pin names have changed when new controls have been implemented.\n Max velocity does not exist any more, it was replaced by rapid override due to the demand of many\n users.\n@@ -29215,15 +29215,15 @@\n \u2014 gmoccapy.spc_feed.scaled-value (float OUT) - Scaled value of the widget .SPINDLE\n \u2014 gmoccapy.spc_spindle.increase (bit IN) - As long as True the value of the slider will increase\n \u2014 gmoccapy.spc_spindle.decrease (bit IN) - As long as True the value of the slider will decrease\n \u2014 gmoccapy.spc_spindle.scale (float IN) - A value to scale the output value (handy to change units/min to units/sec)\n \u2014 gmoccapy.spc_spindle.value (float OUT) - Value of the widget\n \u2014 gmoccapy.spc_spindle.scaled-value (float OUT) - Scaled value of the widget .RAPIDS\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 592 / 1223\n \n \u2014 gmoccapy.spc_rapid.increase (bit IN) - As long as True the value of the slider will increase\n \u2014 gmoccapy.spc_rapid.decrease (bit IN) - As long as True the value of the slider will decrease\n \u2014 gmoccapy.spc_rapid.scale (float IN) - A value to scale the output value (handy to change units/min\n to units/sec)\n@@ -29265,15 +29265,15 @@\n If you use a 4 axes configuration, there will be two additional pins:\n \u2014 gmoccapy.jog.jog--plus (bit IN)\n \u2014 gmoccapy.jog.jog--minus (bit IN)\n For a C-axis you will see:\n \u2014 gmoccapy.jog.axis.jog-c-plus (bit IN)\n \u2014 gmoccapy.jog.axis.jog-c-minus (bit IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 593 / 1223\n \n 10.2.5.4 Jog Velocities and Turtle-Jog HAL Pin\n The jog velocity can be selected with the corresponding slider. The scale of the slider will be modified\n if the turtle button (the one showing a rabbit or a turtle) has been toggled. If the button is not visible,\n it might have been disabled on the settings page. If the button shows the rabbit-icon, the scale is from\n@@ -29310,15 +29310,15 @@\n \u2014 gmoccapy.delete-message (bit IN) - Will delete the first error and reset the gmoccapy.error pin\n to false after the last error has been cleared.\n \u2014 gmoccapy.warning-confirm (bit IN) - Confirms warning dialog like click on OK\n Note\n Messages or user infos will not affect the gmoccapy.error pin, but the gmoccapy.delete-message\n pin will delete the last message if no error is shown!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 594 / 1223\n \n 10.2.5.8 User Created Message HAL Pins\n GMOCCAPY may be configured to react to external errors, using 3 different user messages:\n status\n \u2014 gmoccapy.messages.status (bit IN) - Triggers the dialog.\n@@ -29357,15 +29357,15 @@\n There are three pins giving information about the program progress:\n \u2014 gmoccapy.program.length (s32 OUT) - Shows the total number of lines of the program.\n \u2014 gmoccapy.program.current-line (s32 OUT) - Indicates the current working line of the program.\n \u2014 gmoccapy.program.progress (float OUT) - Gives the program progress in percentage.\n The values may not be very accurate if you are working with subroutines or large remap procedures.\n Also loops will cause different values.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 595 / 1223\n \n 10.2.5.11 Tool Related Pins\n Tool Change Pins These pins are provided to use GMOCCAPY\u2019s internal tool change dialog, similar\n to the one known from AXIS, but with several modifications. So you will not only get the message to\n change to tool number 3, but also the description of that tool like 7.5 mm 3 flute cutter. The information\n@@ -29385,15 +29385,15 @@\n Note\n Please take care, that this connections have to be done in the postgui HAL file.\n Tool Offset Pins These pins allow you to show the active tool offset values for X and Z in the tool\n information frame. You should know that they are only active after G43 has been sent.\n \n Figure 10.16 \u2013 Tool information area\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 596 / 1223\n \n \u2014 gmoccapy.tooloffset-x (float IN)\n \u2014 gmoccapy.tooloffset-z (float IN)\n Note\n The tooloffset-x line is not needed on a mill, and will not be displayed on a mill with trivial kinematics.\n@@ -29423,15 +29423,15 @@\n 1. Touch off your workpiece in X and Y.\n 2. Measure the height of your block from the base where your tool switch is located, to the upper\n face of the block (including chuck etc.).\n 3. Push the button block height and enter the measured value.\n 4. Go to auto mode and start your program.\n Here is a small sketch:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 597 / 1223\n \n Figure 10.17 \u2013 Tool measurement data\n With the first given tool change the tool will be measured and the offset will be set automatically to\n fit the block height. The advantage of the GMOCCAPY way is, that you do not need a reference tool.\n Note\n@@ -29447,15 +29447,15 @@\n \u2014 gmoccapy.probeheight (float OUT) - The probe switch height\n \u2014 gmoccapy.searchvel (float OUT) - The velocity to search for the tool probe switch\n \u2014 gmoccapy.probevel (float OUT) - The velocity to probe tool length\n 10.2.6.2 INI File Modifications\n Modify your INI file to include the following sections.\n The RS274NGC Section\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 598 / 1223\n \n [RS274NGC]\n # is the sub, with is called when a error during tool change happens, not needed on every\n machine configuration\n ON_ABORT_COMMAND=O call\n@@ -29503,15 +29503,15 @@\n to the directory specified as SUBROUTINE_PATH, see RS274NGC Section.\n Open change.ngc with a editor and uncomment the following lines (49 and 50):\n F #<_hal[gmoccapy.probevel]>\n G38.2 Z-4\n \n You may want to modify this file to fit more your needs.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 599 / 1223\n \n 10.2.6.4 Needed HAL Connections\n Connect the tool probe in your HAL file like so:\n net probe\n \n@@ -29541,15 +29541,15 @@\n \n To enter the page you will have to click on\n and give an unlock code, which is 123 by\n default. If you want to change it at this time you will have to edit the hidden preference file, see the\n display section for details.\n The page is separated in three main tabs:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 600 / 1223\n \n 10.2.7.1 Appearance\n \n Figure 10.18 \u2013 GMOCCAPY settings page Appearance\n On this tab you will find the following options:\n@@ -29562,15 +29562,15 @@\n get active. One time set, the GUI will start every time on the place and with the size selected.\n Nevertheless the user can change the size and position using the mouse, but that will not have any\n influence on the settings.\n \u2014 Window decorated - Allows the title bar to be hidden. (default: title bar visible)\n \u2014 hide cursor - Does allow to hide the cursor, what is very useful if you use a touch screen.\n \u2014 hide tooltips - Hides the tool tips.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 601 / 1223\n \n Keyboard The checkboxes allow the user to select if he wants the on board keyboard to be shown\n immediately, when entering the MDI Mode, when entering the offset page, the tooledit widget or when\n open a program in the EDIT mode. The keyboard button on the bottom button list will not be affected\n by these settings, so you are able to show or hide the keyboard by pressing the button. The default\n@@ -29594,15 +29594,15 @@\n The letters \u201dde\u201d are for German, you will have to set them according to your locale settings. Just\n execute this file before starting LinuxCNC, it can be done also adding a starter to your local folder.\n ./config/autostart\n \n So that the layout is set automatically on starting.\n For matchbox-keyboard you will have to make your own layout, for a German layout ask in the forum.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 602 / 1223\n \n GMOCCAPY with Onboard keyboard in edit mode\n On Touch Off This gives the option whether to show the preview tab or the offset page tab when you\n enter the touch off mode by clicking the corresponding bottom button.\n \u2014 show preview\n@@ -29618,15 +29618,15 @@\n \u2014 unhomed color = red\n Note\n You can change through the DRO modes (absolute, relative, distance to go) by clicking the number\n on the DRO! If you click on the left side letter of the DRO a popup window will allow you to set the\n value of the axes, making it easier to set the value, as you will not need to go over the touch off\n bottom button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 603 / 1223\n \n size\n Allows to set the size of the DRO font, default is 28, if you use a bigger screen you may want to\n increase the size up to 56. If you do use 4 axes, the DRO font size will be 3/4 of the value, because\n of space reason.\n@@ -29668,15 +29668,15 @@\n If you select an element in the preview, the selected element will be taken as rotation center point\n and in auto mode the corresponding code line will be highlighted.\n \n File to load on start up Select the file you want to be loaded on start up. If a file is loaded, it can\n be set by pressing the current button. To avoid that any program is loaded at start up, just press the\n None button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 604 / 1223\n \n The file selection screen will use the filters you have set in the INI file, if there aren\u2019t any filters\n given, you will only see NGC files. The path will be set according to the INI settings in [DISPLAY]\n PROGRAM_PREFIX.\n Jump to dir You can set here the directory to jump to if you press the corresponding button in the\n@@ -29690,15 +29690,15 @@\n To create custom icon themes, see section Icon Theme for details.\n 10.2.7.2 Hardware\n \n Hardware MPG Scale For the different HAL pins to connect MPG wheels to, you may select individual\n scales to be applied. The main reason for this was my own test to solve this through HAL connections,\n resulting in a very complex HAL file. Imagine a user having an MPG Wheel with 100 ipr and he wants\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 605 / 1223\n \n to slow down the max. vel. from 14000 to 2000 mm/min, that needs 12000 impulses, resulting in 120\n turns of the wheel! Or an other user having a MPG Wheel with 500 ipr and he wants to set the spindle\n override which has limits from 50 to 120 % so he goes from min to max within 70 impulses, meaning\n not even 1/4 turn.\n@@ -29740,15 +29740,15 @@\n \u2014 Do not use unlock code - There will be no security check.\n \u2014 Use HAL pin to unlock - Hardware pin must be high to unlock the settings, see hardware unlock\n pin.\n Default is use unlock code (default = 123).\n Broche\n \u2014 Starting RPM - Sets the rpm to be used if the spindle is started and no S value has been set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 606 / 1223\n \n Note\n This value will be presetted according to your settings in [DISPLAY] DEFAULT_SPINDLE_SPEED of\n your INI file. If you change the settings on the settings page, that value will be default from that\n moment, your INI file will not be modified.\n@@ -29768,15 +29768,15 @@\n please take care that the \u201drabbit mode\u201d is activated, otherwise you will not be able to jog faster\n than the turtle jog velocity, which is calculated using the turtle jog factor.\n \u2014 Turtle jog factor - Sets the scale to apply for turtle jog mode (button pressed, showing the turtle).\n If you set a factor of 20, the turtle max. jog velocity will be 1/20 of the max. velocity of the machine.\n Note\n This button can be controlled using the Turtle-Jog HAL Pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 607 / 1223\n \n 10.2.7.3 Advanced Settings\n \n Tool Measurement Please check Auto Tool Measurement\n Note\n@@ -29789,15 +29789,15 @@\n \u2014 X Pos. - The X position of the tool switch.\n \u2014 Y Pos. - The Y position of the tool switch.\n \u2014 Z Pos. - The Z position of the tool switch, we will go as rapid move to this coordinate.\n \u2014 Max. Probe The distance to search for contact, an error will be launched, if no contact is\n given in this range. The distance has to be given in relative coordinates, beginning the move\n from Z Pos., so you have to give a negative value to go down!\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 608 / 1223\n \n \u2014 Probe Height - The height of your probe switch, you can measure it. Just touch off the base\n where the probe switch is located and set that to zero. Then make a tool change and watch\n the tool_offset_z value, that is the height you must enter here.\n Probe velocities\n@@ -29839,15 +29839,15 @@\n Icon themes are used to customize the look and feel of GMOCCAPY\u2019s icons.\n GMOCCAPY ships with three different icon themes:\n \u2014 classic - The classic GMOCCAPY icons.\n \u2014 material - A modern icon theme inspired by Google\u2019s Material Icons that automatically adopts its\n coloring from the selected desktop theme.\n \u2014 material-light - Derived from material but optimized for light desktop themes.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 609 / 1223\n \n The icon theme used in GMOCCAPY is a regular GTK icon theme that follows the freedestktop icon\n theme specification. Thus every valid GTK icon theme can be used as GMOCCAPY icon theme as long\n as it contains the required icons.\n GMOCCAPY scans the following directories for icon themes:\n@@ -29889,15 +29889,15 @@\n Context=Actions\n \n \u2014 Size: Nominal icon size in this directory\n \u2014 Type: Fixed, Threshold or Scalable\n \u2014 Context: Intended \u201dcategory\u201d of icons\n Basically that\u2019s everything needed to create a custom icon theme.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 610 / 1223\n \n 10.2.8.2 Symbolic Icons\n Symbolic icons are a special type of icon, usually a monochrome image. The special feature of symbolic\n icons is that the icons are automatically colored at runtime to match the desktop theme. That way,\n icon themes can be created that work well with dark and also light desktop themes (in fact, that\u2019s not\n@@ -29937,21 +29937,21 @@\n ASTUCE\n Examples of symbolic icons can be found at linuxcnc/share/gmoccapy/icons/material.\n \n 10.2.9 Lathe Specific Section\n If in the INI file LATHE = 1 is given, the GUI will change its appearance to the special needs for a\n lathe. Mainly the Y axis will be hidden and the jog buttons will be arranged in a different order.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 611 / 1223\n \n Figure 10.19 \u2013 Normal Lathe\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 612 / 1223\n \n Figure 10.20 \u2013 Back Tool Lathe\n As you see the R DRO has a black background and the D DRO is gray. This will change according to\n the active G-code G7 or G8. The active mode is visible by the black background, meaning in the shown\n images G8 is active.\n@@ -29964,15 +29964,15 @@\n \u2014 Arrow_Right or NumPad_Right - Jog Z plus\n \u2014 Arrow_up or NumPad_Up - Jog X minus\n \u2014 Arrow_Down or NumPad_Down - Jog X plus\n Back Tool Lathe:\n \u2014 Arrow_Left or NumPad_Left - Jog Z minus\n \u2014 Arrow_Right or NumPad_Right - Jog Z plus\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 613 / 1223\n \n \u2014 Arrow_up or NumPad_Up - Jog X plus\n \u2014 Arrow_Down or NumPad_Down - Jog X minus\n The tool information frame will show not only the Z offset, but also the X offset and the tool table is\n showing all lathe relevant information.\n@@ -29984,15 +29984,15 @@\n 10.2.11 Videos on YouTube\n Below is a series of videos that show GMOCCAPY in action. Unfortunately, these videos don\u2019t show\n the latest version of GMOCCAPY, but the way to use it will still be the same as in the current version.\n I will update the videos as soon as possible.\n 10.2.11.1 Basic Usage\n https://youtu.be/O5B-s3uiI6g\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 614 / 1223\n \n 10.2.11.2 Simulated Jog Wheels\n https://youtu.be/ag34SGxt97o\n 10.2.11.3 Settings Page\n https://youtu.be/AuwhSHRJoiI\n@@ -30009,15 +30009,15 @@\n 10.2.12 Known problems\n 10.2.12.1 Strange numbers in the info area\n If you get strange numbers in the info area of GMOCCAPY like:\n \n 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\n MAX_VELOCITY = xxx.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 615 / 1223\n \n 10.2.12.2 Not ending macro\n If you use a macro without movement, like this one:\n o sub\n G92.1\n@@ -30044,15 +30044,15 @@\n not require keyboard or mouse.\n It is meant to be used with a touch screen, and works in combination with a wheel/MPG and a few\n buttons and switches.\n The Handwheel tab has radio buttons to select between Feed Override, Spindle Override, Maximum\n Velocity and Jogging functions for the wheel/MPG input. Radio buttons for axis selection and increment\n for jogging are also provided.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 616 / 1223\n \n 10.3.1 Panel Configuration\n 10.3.1.1 HAL connections\n Touchy looks in the INI file, under the heading [HAL] for entries of POSTGUI_HALFILE=.\n Typically would be touchy_postgui.hal, but can be any legal filename. These commands\n@@ -30065,15 +30065,15 @@\n are preferred.\n \n For more information on HAL files and the net command see the HAL Basics.\n Touchy has several output pins that are meant to be connected to the motion controller to control\n wheel jogging:\n \u2014 touchy.jog.wheel.increment, which is to be connected to the axis.N.jog-scale pin of each axis N.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 617 / 1223\n \n \u2014 touchy.jog.wheel.N, which is to be connected to axis.N.jog-enable for each axis N.\n Note\n N represents the axis number 0-8.\n \n@@ -30105,15 +30105,15 @@\n When you start Touchy the first time, check the Preferences tab. If using a touchscreen, choose the\n option to hide the pointer for best results.\n The Status Window is a fixed height, set by the size of a fixed font. This can be affected by the Gnome\n DPI, configured in System / Preferences / Appearance / Fonts / Details. If the bottom of the screen is\n cut off, reduce the DPI setting.\n All other font sizes can be changed on the Preferences tab.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 618 / 1223\n \n 10.3.2.3 Macros\n Touchy can invoke O-word macros using the MDI interface. To configure this, in the [TOUCHY] section\n of the INI file, add one or more MACRO lines. Each should be of the following format:\n MACRO=increment xinc yinc\n@@ -30144,39 +30144,39 @@\n from GladeVCP. GladeVCP uses the GTK widget editor GLADE to build virtual control panels (VCP) by\n point and click. Gscreen combines this with Python programming to create a GUI screen for running\n a CNC machine.\n Gscreen is customizable if you want different buttons and status LEDs. Gscreen supports GladeVCP\n which is used to add controls and indicators. To customize Gscreen you use the Glade editor. Gscreen\n is not restricted to adding a custom panel on the right or a custom tab it is fully editable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.21 \u2013 Gscreen Default Screen\n \n 619 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.22 \u2013 Gscreen Silverdragon Screen\n \n 620 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.23 \u2013 Gscreen Spartan Screen\n \n 621 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 622 / 1223\n \n Figure 10.24 \u2013 Gscreen Gaxis Screen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 623 / 1223\n \n Figure 10.25 \u2013 Gscreen Industrial Screen\n Gscreen is based on Glade (the editor), PyGTK (the widget toolkit), and GladeVCP (LinuxCNC\u2019s connection to Glade and PyGTK). GladeVCP has some special widgets and actions added just for LinuxCNC\n A widget is just the generic name used for the buttons, sliders, labels etc of the PyGTK toolkit.\n 10.4.1.1 Glade File\n@@ -30184,15 +30184,15 @@\n the screen. PyGTK uses this file to actually display and react to those widgets. The Glade editor makes\n it relatively easy to build and edit this file You must use the Glade 3.38.2 editor that uses the GTK3\n widgets.\n 10.4.1.2 PyGTK\n PyGTK is the Python binding to GTK. GTK is the toolkit of visual widgets, it is programmed in C. PyGTK\n uses Python to bind with GTK.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 624 / 1223\n \n 10.4.2 GladeVCP\n GladeVCP binds LinuxCNC, HAL, PyGTK and Glade all together. LinuxCNC requires some special widgets so GladeVCP supplies them. Many are just HAL extensions to existing PyGTK widgets. GladeVCP\n creates the HAL pins for the special widgets described in the Glade file. GladeVCP also allows one\n to add Python commands to interact with the widgets, to make them do things not available in their\n@@ -30237,15 +30237,15 @@\n named widgets. This ties the theme file to the Glade file more tightly. Some of the sample screen skins\n allow the user to select any of the themes on the system. The sample gscreen is an example. Some\n will load the theme that is the same name in the config file. The sample gscreen-gaxis is an example.\n This is done by putting the theme folder in the config folder that has the INI and HAL files and naming\n it: SCREENNAME_theme (SCREENNAME being the base name of the files eg. gaxis_theme). Inside\n this folder is another folder call gtk-2.0, inside that is the theme files. If you add this file, Gscreen\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 625 / 1223\n \n will default to this theme on start up. gscreen-gaxis has a sample custom theme that looks for certain\n named widgets and changes the visual behavior of those specific widgets. The Estop and machine-on\n buttons use different colors then the rest of the buttons so that they stand out. This is done in the\n handler file by giving them specific names an by adding specific commands in the theme\u2019s gtkrc file.\n@@ -30276,15 +30276,15 @@\n about GladeVCP widgets is a prerequisite. If the existing widgets give you the function you want or\n need then no Python code needs be added, just save the Glade file in your configuration folder. If you\n need something more custom then you must do some Python programming. The name of the parent\n window needs to be window1. Gscreen assumes this name.\n Remember, if you use a custom screen option YOU are responsible for fixing it (if required) when\n updating LinuxCNC.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 626 / 1223\n \n 10.4.3 Building a simple clean-sheet custom screen\n \n Lets build a simple usable screen. Build this in the Glade editor (if using a RIP package run it from a\n terminal after using . scripts/rip-environment ).\n@@ -30298,15 +30298,15 @@\n this. (This is already done in the example.)\n \u2014 The buttons will expand as the window is made larger which is ugly so we will set the box they are\n in, to not expand (see below).\n \u2014 The button types to use depend on the VCP_action used -eg vcp_toggle_action usually require toggle\n buttons (Follow the example for now).\n \u2014 The buttons in this example are regular buttons not HAL buttons. We don\u2019t need the HAL pins.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 627 / 1223\n \n In this screen we are using VCP_actions to communicate to LinuxCNC the actions we want. This allows\n us standard functions without adding Python code in the handler file. Let\u2019s link the estop toggle button\n to the estop action Select the estop toggle button and under the general tab look for Related Action\n and click the button beside it. Now select the toggle estop action. Now the button will toggle estop on\n@@ -30314,15 +30314,15 @@\n its function. Do this for all the buttons.\n Select the gremlin widget click the common tab and set the requested height to 100 and click the\n checkbox beside it.\n Click the horizontal box that holds the buttons. Click the packing tab and click expand to No.\n Save it as tester.glade and save it in sim/gscreen/gscreen_custom/ folder. Now launch LinuxCNC and\n click to sim/gscreen/gscreen_custom/tester and start it. If all goes well our screen will pop up and the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 628 / 1223\n \n buttons will do their job. This works because the tester.ini tells gscreen to look for and load tester.glade\n and tester_handler.py. The tester_handler.py file is included in that folder and is coded just show the\n screen and not much else. Since the special widgets directly communicate with LinuxCNC you can\n still do useful things. If your screen needs are covered by the available special widgets then this is\n@@ -30366,15 +30366,15 @@\n 10.4.4.1 Adding Keybindings Functions\n Our tester example would be more useful if it responded to keyboard commands. There is a function\n called keybindings() that tries to set this up. While you can override it completely, we didn\u2019t - but it\n assumes some things:\n \u2014 It assumes the estop toggle button is call button_estop and that F1 key controls it.\n \u2014 It assumes the power button is called button_machine_on and the F2 key controls it.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 629 / 1223\n \n These are easily fixed by renaming the buttons in the Glade editor to match. But instead we are going\n to override the standard calls and add our own.\n Add these command to the handler file:\n # override Gscreen Functions\n@@ -30422,15 +30422,15 @@\n GSTAT = GStat()\n \n In the handler file under def __init__(self): add:\n GSTAT.connect(\u2019file-loaded\u2019, self.update_filepath)\n \n Then in the HandlerClass, add the function:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 630 / 1223\n \n self.update_filepath(self, obj, path):\n self.widgets.my_path_label.set_text(path)\n \n When LinuxCNC loads a new file, Gstat will send a callback message to the function update_filepath. In\n@@ -30473,15 +30473,15 @@\n 7. Initializes Python\u2019s binding to HAL to build a non-realtime component with the Gscreen name.\n 8. GladeVCP\u2019s makepins is called to parse the XML file to build HAL pins for the HAL widgets and\n register the LinuxCNC connected widgets.\n 9. Checks for a local handler file in the configuration folder or else uses the stock one from the skin\n folder.\n 10. If there is a handler file gscreen parses it, and registers the function calls into Gscreen\u2019s namespace.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 631 / 1223\n \n 11. Glade matches/registers all signal calls to functions in gscreen and the handler file.\n 12. Gscreen checks the INI file for an option preference file name otherwise it uses .gscreen_preferences\n =.\n 13. Gscreen checks to see if there is a preference function call (initialize_preferences(self)) in the\n@@ -30526,15 +30526,15 @@\n no second handler file allowed. It will only be loaded if it is present. Gscreen will search the LinuxCNC\n configuration file that was launched first for the files, then in the system skin folder.\n \n 10.4.7 User Dialog Messages\n This function is used to display pop up dialog messages on the screen. These are defined in the INI\n file and controlled by HAL pins:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 632 / 1223\n \n MESSAGE_BOLDTEXT\n is generally a title.\n MESSAGE_TEXT\n is below that and usually longer.\n@@ -30576,15 +30576,15 @@\n status bar text\n MESSAGE_DETAILS = BOTH DETAILS\n MESSAGE_TYPE = okdialog status\n MESSAGE_PINNAME = bothtest\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 633 / 1223\n \n 10.4.7.1 Copy the Stock Handler/Glade File For Modification\n If you wish to use a stock screen but modify its handler file, you need to copy the stock file to your\n config file folder. Gscreen will see this and use the copied file. But where is the original file? If using\n a RIP LinuxCNC the sample skins are in /share/gscreen/skins/SCREENNAME Installed versions of\n@@ -30623,25 +30623,25 @@\n multiple ways to touch off tools and probing work pieces. You can use LinuxCNC\u2019s external offsets\n capability to automatically raise the spindle during a pause. If you the VersaProbe option and remap\n code you can add auto tool length probing at tool changes.\n Note\n QtDragon and QtVCP are relatively new programs added into LinuxCNC. Bugs and oddities are possible. Please test carefully when using a dangerous machine. Please forward reports to the forum or\n maillist.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 634 / 1223\n \n 10.5.1.1 QtDragon\n \n Figure 10.26 \u2013 QtDragon - 3 or 4 axis sample (1440x860) in silver theme\n QtDragon is resizable from a resolution of 1280x768 to 1680x1200. It will work in window mode on\n any monitor with higher resolution but not on monitors with lower resolution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 635 / 1223\n \n 10.5.1.2 QtDragon_hd\n \n Figure 10.27 \u2013 QtDragon_hd - 3 or 4 axis sample for larger monitors (1920x1056) in dark theme\n QtDragon_hd is a similar design as QtDragon but modified to utilize the extra space of modern larger\n@@ -30656,15 +30656,15 @@\n You can only have one of each section (e.g., [HAL]) in the INI file. If you see in these docs multiple\n section options, place them all under the one appropriate section name.\n \n 10.5.2.1 Display\n In the section [DISPLAY] change the DISPLAY = assignment to read:\n \u2014 qtdragon for a small version\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 636 / 1223\n \n \u2014 qtdradon_hd for the large version.\n You can add -v, -d, -i, or -q for (respectably) verbose, debug, info or quiet output to the terminal.\n [DISPLAY]\n DISPLAY = qtvcp qtdragon\n@@ -30701,15 +30701,15 @@\n [DISPLAY]\n DEFAULT_SPINDLE_0_SPEED = 500\n SPINDLE_INCREMENT = 200\n MIN_SPINDLE_0_SPEED = 100\n MAX_SPINDLE_0_SPEED = 2500\n MAX_SPINDLE_POWER = 1500\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 637 / 1223\n \n 10.5.2.6 Jogging increments\n Set selectable jogging increments.\n These increments can be user changed.\n [DISPLAY]\n@@ -30756,15 +30756,15 @@\n panel.\n If using stackedWidget_mainTab, a button labelled User will appear.\n Pressing this button will cycle through displaying all available panels (specified for this location) on\n the main tab area.\n Sample adding a builtin panel to the utilities tab, i.e., a graphical animated machine using\n the vismach library.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 638 / 1223\n \n [DISPLAY]\n EMBED_TAB_NAME = Vismach demo\n EMBED_TAB_COMMAND = qtvcp vismach_mill_xyz\n EMBED_TAB_LOCATION = tabWidget_utilities\n@@ -30788,15 +30788,15 @@\n ~/linuxcnc/nc_files/examples/probe/basic_probe/macros:~/linuxcnc/nc_files/examples/remap- \u2190subroutines: \\\n ~/linuxcnc/nc_files/examples/ngcgui_lib/remap_lib\n \n QtVCP\u2019s NGCGUI program also need to know where to open for subroutine selection and pre-selection.\n NGCGUI_SUBFILE_PATH must point to an actual path on your system and also a path described in\n SUBROUTINE_PATHS.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 639 / 1223\n \n [DISPLAY]\n # NGCGUI subroutine path.\n # Thr path must also be in [RS274NGC] SUBROUTINE_PATH\n NGCGUI_SUBFILE_PATH = ~/linuxcnc/nc_files/examples/ngcgui_lib\n@@ -30838,15 +30838,15 @@\n jpg = image-to-gcode\n py = python\n \n 10.5.2.13 Probe/Touchplate/Laser Settings\n QtDragon has INI entries for two optional probing tab screens available. Comment/uncomment which\n ever you prefer.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 640 / 1223\n \n \u2014 Versa probe is a QtVCP ported version of a popular GladeVCP probing panel.\n \u2014 Basic Probe is a QtVCP ported version based on the third party basic probe screen.\n Both perform similar probing routines, though Versa probe optionally handles auto tool measurement.\n [PROBE]\n@@ -30888,15 +30888,15 @@\n \n 10.5.2.16 Macro Buttons\n QtDragon has up to ten convenience buttons for calling macro actions.\n These could also call OWord routines if desired.\n In the sample configurations they are labelled for moving between current user system origin (zero\n point) and Machine system origin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 641 / 1223\n \n User origin is the first MDI command in the INI list, machine origin is the second.\n This example shows how to move Z axis up first. The commands are separated by the ;.\n The label is set after the comma. The symbols \\n adds a line break.\n [MDI_COMMAND_LIST]\n@@ -30935,15 +30935,15 @@\n F1 - Estop on/off\n F2 - Machine on/off\n F12 - Style Editor\n Home - Home All Joint of the Machine\n Escape - Abort Movement\n Pause - Pause Machine Movement\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 642 / 1223\n \n 10.5.4 Buttons\n Buttons that are checkable will change their text colour when checked. This is controlled by the\n stylesheet/theme\n \n@@ -30994,15 +30994,15 @@\n This bit pin is an output to the spindle control to pause it.\n You would connect it to spindle.0.inhibit.\n qtdragon.spindle-inhibit\n \n This bit output pin can be connected to turn on a laser:\n qtdragon.btn-laser-on\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 643 / 1223\n \n This float output pin indicates the camera rotation in degrees:\n qtdragon.cam-rotation\n \n These bit/s32/float pins are related to external offsets if they are used:\n@@ -31055,15 +31055,15 @@\n \n 10.5.9 Broche\n The screen is intended to interface to a VFD, but will still work without it.\n There are a number of VFD drivers included in the LinuxCNC distribution.\n It is up to the end user to supply the appropriate driver and HAL file connections according to his own\n machine setup.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 644 / 1223\n \n 10.5.10 Auto Raise Z Axis on Spindle Pause\n QtDragon can be set up to automatically raise and lower the Z axis when the spindle is paused.\n When a program is paused, then you press the Spindle Pause button to stop the spindle and raise it\n in Z.\n@@ -31113,15 +31113,15 @@\n be called probe_points.txt. The file can be modified or updated at any time while compensation is\n disabled. When next enabled, the file will be reread and the compensation map is recalculated. This\n file is expected to be in the configuration directory.\n The probe data file is generated by a probing program, which itself is generated by an external python\n program called gcode_ripper, which can be launched from the file manager tab using the G-code\n Ripper button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 645 / 1223\n \n 10.5.11.1 Using G-code Ripper for Z level Compensation\n \n Figure 10.28 \u2013 QtDragon_hd showing G-code Ripper\n Note\n@@ -31138,15 +31138,15 @@\n \u2014 Exit gcode_ripper.\n \u2014\n \u2014 Without changing the offsets, run this program. Make sure the probe tool is installed. When complete, there will be a file in the config directory called probe_points.txt.\n \u2014 In qtdragon_hd, press the Enable Z Comp button to enable compensation. Look at the status line\n for indication of success or failure. Active compensation will be displayed beside the label: Z Level\n Comp While jogging that display should change based on the compensation component.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 646 / 1223\n \n Note\n If you use auto raise Z to lift the spindle on pause, you must combine the two with a HAL component\n and feed that to LinuxCNC\u2019s motion component.\n \n@@ -31215,15 +31215,15 @@\n \n 10.5.12 Probing\n The probe screen has been through basic testing but there could still be some minor bugs. When\n running probing routines, use extreme caution until you are familiar with how everything works.\n Probe routines run without blocking the main GUI. This gives the operator the opportunity to watch\n the DROs and stop the routine at any time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 647 / 1223\n \n Note\n Probing is very unforgiving to mistakes; be sure to check settings before using.\n \n QtDragon has 2 methods for setting Z0. The first is a touchplate, where a metal plate of known thickness is placed on top of the workpiece, then the tool is lowered until it touches the plate, triggering the\n@@ -31239,15 +31239,15 @@\n 10.5.12.1 Versa Probe\n \n Figure 10.29 \u2013 QtDragon - Versa Probe Option\n Versa probe is used to semi-automatically probe work pieces to find edges, centers and angles.\n It can also be sued to auto probe tool length at tool changes with added remap code.\n You must carefully set the Probing Parameters:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 648 / 1223\n \n \u2014 DIAMETER:: This is the diameter of the probe tip. The accuracy of probe measurements is directly\n affected by the accuracy of the probe tip diameter.\n \u2014 TRAVEL:: The distance that the probe will travel during the initial search. If the search distance\n is too short, you will receive a message like \u201dG38 finished without making contact\u201d. For safety\n@@ -31283,15 +31283,15 @@\n CLEARANCE to 0.\n There are three toggle buttons:\n \u2014 Auto Zero This selects if after probing the relevant axis is set to zero in the current user system.\n \u2014 Auto Skew This selects if after probing, the system will be rotated or just display the calculated\n rotation.\n \u2014 Tool Measure This (if integrated) turns auto tool probing on and off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 649 / 1223\n \n 10.5.12.2 Basic probe\n \n Figure 10.30 \u2013 QtDragon - Basic Probe Option\n Basic probe is used to semi-automatically probe work pieces to find edges, centers and angles. The\n@@ -31309,15 +31309,15 @@\n \u2014 Probe Search: the speed of the first rough search in machine units\n \u2014 Probe Feed: the speed of the second fine search in machine units\n \u2014 Step Off : back off and re-probe distance\n \u2014 Max XY Distance: the maximum distance the probe will search for in X and Y before failing with\n error\n \u2014 Max Z Distance: the maximum distance the probe will search for in Z before failing with error\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 650 / 1223\n \n \u2014 XY Clearance: clearance distance from probe to wall edge before rapid traversing down in Z and\n rough probing\n \u2014 Z Clearance: clearance distance from probed to top of material\n \u2014 Extra Depth: distance from top of material to desired probe depth\n@@ -31360,15 +31360,15 @@\n 3. probe wall twice (rough and fine),\n 4. move diagonally to the other wall as set by EDGE WIDTH and XY CLEARANCE,\n 5. probe wall twice,\n 6. raise probe up by Z CLEARANCE + EXTRA DEPTH 9returns to starting height),\n 7. rapid back to starting corner (now calculated using the probed walls),\n 8. if auto zero button is enabled, set X and Y of the current user system to zero.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 651 / 1223\n \n 10.5.13 Touch plate\n \n Figure 10.31 \u2013 QtDragon - Touch Plate\n You can use a conductive touch plate or equivalent to auto touch off (zero the user coordinate) for the\n@@ -31387,15 +31387,15 @@\n calculation from the touchplate height setting.\n \n 10.5.14 Auto Tool Measurement\n QtDragon can be setup to do integrated auto tool measurement using the Versa Probe widget and\n remap code. To use this feature, you will need to do some additional settings and you may want to use\n the offered HAL pin to get values in your own ngc remap procedure.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 652 / 1223\n \n Important\n Before starting the first test, do not forget to enter the probe height and probe velocities on\n the versa probe settings page.\n Tool Measurement in QtDragon is done with the following steps:\n@@ -31414,15 +31414,15 @@\n fit the block height. The advantage of this way is, that you do not need a reference tool.\n Note\n Your program must contain a tool change at the beginning. The tool will be measured, even it has\n been used before, so there is no danger if the block height has changed. There are several videos\n on you tube that demonstrate the technique using GMOCCAPY. The GMOCCAPY screen pioneered the\n technique.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 653 / 1223\n \n The sequence of events (using the default files):\n \u2014 Rapid move in Z to position defined in the INI\u2019s [TOOL_CHANGE] Z\n \u2014 Rapid move in X and Y to number defined in INI\u2019s [TOOL_CHANGE] X and Y\n \u2014 Request tool change\n@@ -31438,15 +31438,15 @@\n 10.5.14.1 Work Piece Height Probing\n \n Figure 10.33 \u2013 QtDragon_hd - Work piece Height probing\n This program probes 2 user specified locations in the Z axis and calculates the difference in heights.\n Note\n This is only available in the QtDragon_hd version.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 654 / 1223\n \n Enable Probe Position Set Buttons\n \u2014 When checked, the SET buttons are enabled.\n \u2014 This allows the user to automatically fill in the X, Y and Z parameters with the current position as\n displayed on the DROs.\n@@ -31490,15 +31490,15 @@\n Reflects screen entry.\n \u2014 qtversaprobe.probeheight (HAL_FLOAT) the toolsetter probe switch height. Reflects screen entry.\n \u2014 qtversaprobe.searchvel (HAL_FLOAT) the velocity to search for the tool probe switch\n \u2014 qtversaprobe.probevel (HAL_FLOAT) the velocity to probe tool length. Reflects screen entry.\n \u2014 qtversaprobe.backoffdist (HAL_FLOAT) the distance the probe backs off after triggering. Reflects\n screen entry.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 655 / 1223\n \n 10.5.14.3 Tool Measurement INI File Modifications\n Modify your INI file to include the following:\n QtDragon allows you to select one of two styles of touch probe routines. Versa probe works with a M6\n remap to add auto tool probing.\n@@ -31541,15 +31541,15 @@\n \u2014 fast probe\n \u2014 slow probe\n \u2014 go to TOOLCHANGE Z position\n Z_MAX_CLEAR is the Z position to go to before moving to the tool setter when using the Travel to\n Toolsetter button.\n Travel to Toolsetter Action sequence:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 656 / 1223\n \n \u2014 go to VERSA_TOOLSETTER Z_MAX_CLEAR Z position\n \u2014 go to VERSA_TOOLSETTER XY position\n \u2014 go to VERSA_TOOLSETTER Z position.\n [VERSA_TOOLSETTER]\n@@ -31595,15 +31595,15 @@\n \n 10.5.16 Laser buttons\n The LASER ON/OFF button in intended to turn an output on or off which is connected to a small laser\n crosshair projector. When the crosshair is positioned over a desired reference point on the workpiece,\n the REF LASER button can be pushed, which then sets the X and Y offsets to the values indicated by\n the LASER OFFSET fields in the Settings page.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 657 / 1223\n \n 10.5.17 Tabs Description\n Tabs allow the user to select the most appropriate info/control on the top three panels. If the on\n screen keyboard is showing and the user wishes to hide it but keep the current tab, they can do that\n by pressing the current show tab. In QtDragon, there is a splitter handle between the G-code text\n@@ -31635,15 +31635,15 @@\n \u2014 Zero Current Tool Position\n \u2014 Set Tool Offset Directly\n \u2014 Reset To Last\n 10.5.17.5 Status Tab\n A time-stamped log of important machine or system events will be shown here. Machine events would\n be more suited to an operator, where the system events may help in debugging problems.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 658 / 1223\n \n 10.5.17.6 Probe Tab\n Probing routines options are displayed on this tab. Depending on INI options, this could be VersaProbe\n or BasicProbe style. They are functionally similar. QtDragon_hd will also show a smaller graphics\n display window.\n@@ -31668,15 +31668,15 @@\n \u2014 The left arrow moves backward one HTML page\n \u2014 The right arrow moves forward one HTML page\n If you wish to include a custom default HTML page, name it default_setup.html and place it in your\n configuration folder.\n Custom QtVCP panels can be displayed in this tab by setting the EMBED_TAB_LOCATION option to\n tabWidget_setup.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 659 / 1223\n \n Figure 10.34 \u2013 QtDragon - Setup Tab Sample\n \n 10.5.17.10 Settings Tab\n The settings tab is used to set running options, probing/touchplate/laser/camera offsets and load debugging external programs.\n@@ -31690,15 +31690,15 @@\n Custom QtVCP panels can be displayed here by setting the EMBED_TAB_LOCATION option to tabWidget_uti\n 10.5.17.12 User Tab\n \n This tab will only be displayed if an embedded panel has been designated for the location stackedWidget_mai\n If more then one embedded tab has been designated, then pressing the user tab will cycle through\n them.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 660 / 1223\n \n 10.5.18 Styles\n Nearly all aspects of the GUI appearance are configurable via the QtDragon.qss stylesheet file. The\n file can be edited manually or through the stylesheet dialog widget in the GUI. To call up the dialog,\n press F12 on the main window. New styles can be applied temporarily and then saved to a new qss\n@@ -31731,15 +31731,15 @@\n \n To change the text of the mist button to air (add these lines)\n #action_mist{\n qproperty-true_state_string: \u201dAir\\\\nOn\u201d;\n qproperty-false_state_string: \u201dAir\\\\nOff\u201d;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 661 / 1223\n \n To change the Offsets display font and format:\n ToolOffsetView {\n font: 20pt \u201dLato Heavy\u201d;\n qproperty-imperial_template: \u2019%9.1f\u2019;\n@@ -31789,15 +31789,15 @@\n qproperty-spindle_down_action: true;\n }\n \n 10.5.19.2 Qt Designer and Python code\n All aspects of the GUI are fully customization through Qt Designer and/or Python code. This capability\n is included with the QtVCP development environment. The extensive use of QtVCP widgets keeps the\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 662 / 1223\n \n amount of required Python code to a minimum, allowing relatively easy modifications. The LinuxCNC\n website has extensive documentation on the installation and use of QtVCP libraries. See QtVCP for\n more information about QtVCP in general.\n QtDragon can also utilize QtVCP\u2019s rc file to do minor python code modifications without using a custom\n@@ -31805,15 +31805,15 @@\n [DISPLAY]\n USER_COMMAND_FILE = CONFIGFOLDER/qtdragonrc.py\n \n See Modifying Screens for more information about customization.\n \n Figure 10.36 \u2013 QtDragon - Customized QtDragon\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 663 / 1223\n \n 10.6 NGCGUI\n \n Figure 10.37 \u2013 NGCGUI embedded into AXIS\n \n@@ -31824,15 +31824,15 @@\n GUI.\n \u2014 PyNGCGUI is an alternate, Python implementation of NGCGUI.\n \u2014 PyNGCGUI can run as a standalone application or can be embedded as a tab page (with its own set\n of multiple subroutine tabs) in any GUI that supports embedding of GladeVCP applications AXIS,\n Touchy, Gscreen and GMOCCAPY.\n Using NGCGUI or PyNGCGUI:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 664 / 1223\n \n \u2014 Tab pages are provided for each subroutine specified in the INI file.\n \u2014 New subroutines tab pages can be added on the fly using the custom tab.\n \u2014 Each subroutine tab page provides entry boxes for all subroutine parameters.\n \u2014 The entry boxes can have a default value and an label that are identified by special comments in\n@@ -31869,15 +31869,15 @@\n \u2014 db25.ngc - creates a DB25 plug cutout\n \u2014 gosper.ngc - a recursion demo (flowsnake)\n \u2014 helix.ngc - helix or D-hole cutting\n \u2014 helix_rtheta.ngc - helix or D-hole positioned by radius and angle\n \u2014 hole_circle.ngc - equally spaced holes on a circle\n \u2014 ihex.ngc - internal hexagon\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 665 / 1223\n \n \u2014 iquad.ngc - internal quadrilateral\n \u2014 ohex.ngc - outside hexagon\n \u2014 oquad.ngc - outside quadrilateral\n \u2014 qpex_mm.ngc - demo of qpockets (mm based)\n@@ -31919,15 +31919,15 @@\n custom tab can open any of the library example subroutines or any user file if it is in the LinuxCNC\n subroutine path.\n To see special key bindings, click inside an NGCGUI tab page to get focus and then press Control-k.\n The demonstration subroutines should run on the simulated machine configurations included in the\n distribution. A user should always understand the behavior and purpose of a program before running\n on a real machine.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 666 / 1223\n \n 10.6.3 Library Locations\n In LinuxCNC installations installed from deb packages, the simulation configs for NGCGUI use symbolic links to non-user-writable LinuxCNC libraries for:\n \u2014 nc_files/ngcgui_lib NGCGUI-compatible subfiles\n \u2014 nc_files/ngcgui_lib/lathe NGCGUI-compatible lathe subfiles\n@@ -31969,15 +31969,15 @@\n ...\n \n LinuxCNC (and NGCGUI) use the first file found when searching directories in the search path. With\n this behavior, you can supersede an ngcgui_lib subfile by placing a subfile with an identical name in\n a directory that is found earlier in the path search. More information can be found in the INI chapter\n of the Integrators Manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 667 / 1223\n \n 10.6.4 Standalone Usage\n 10.6.4.1 Standalone NGCGUI\n For usage, type in a terminal:\n ngcgui --help\n@@ -32043,15 +32043,15 @@\n [-n | --noauto]\n (save but do not automatically send result)\n [-k | --keyboard]\n (use default popupkeybaord)\n [-s | --sendtoaxis]\n (send generated NGC file to AXIS GUI)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 668 / 1223\n \n Notes:\n A set of files is comprised of a preamble, subfile, postamble.\n The preamble and postamble are optional.\n One set of files can be specified from cmdline.\n@@ -32088,15 +32088,15 @@\n \n 10.6.5.2 Embedding PyNGCGUI as a GladeVCP tab page in a GUI\n The following INI file items go in the [DISPLAY] section for use with the AXIS, Gscreen, or Touchy\n GUIs. (See additional sections below for additional items needed)\n EMBED_ Items\n \u2014 EMBED_TAB_NAME = PyNGCGUI - name to appear on embedded tab\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 669 / 1223\n \n \u2014 EMBED_TAB_COMMAND = gladevcp -x {XID} pyngcgui_axis.ui - invokes GladeVCP\n \u2014 EMBED_TAB_LOCATION = name_of_location - where the embedded page is located\n Note\n The EMBED_TAB_LOCATION specifier is not used for the AXIS GUI. While PyNGCGUI can be embedded\n@@ -32133,15 +32133,15 @@\n include(\u201dfilename.inc.gcmc\u201d);\n \n By default, gcmc includes the current directory which, for LinuxCNC, will be the directory containing\n the LinuxCNC INI file. Additional directories can be prepended to the gcmc search order with the\n GCMC_INCLUDE_PATH item.\n Sample AXIS-GUI-based INI\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n [RS274NGC]\n ...\n SUBROUTINE_PATH\n USER_M_PATH\n \n 670 / 1223\n@@ -32224,15 +32224,15 @@\n Note:\n Mandatory, specifies loading of ngcgui_ttt in an AXIS tab page named ttt.\n Must follow the TKPKG = Ngcgui item.\n Item:\n [DISPLAY]TTT = path_to_truetype-tracer\n Example: [DISPLAY]TTT = truetype-tracer\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Note:\n \n 671 / 1223\n \n Optional, if not specified, attempt to use /usr/local/bin/truetype-tracer.\n Specify with absolute pathname or as a simple executable name,\n@@ -32275,15 +32275,15 @@\n LinuxCNC (and NGCGUI) must be able to find all subroutines including helper routines that are called\n from within NGCGUI subfiles. It is convenient to place utility subs in a separate directory as indicated\n in the example above.\n The distribution includes the ngcgui_lib directory and demo files for preambles, subfiles, postambles\n and helper files. To modify the behavior of the files, you can copy any file and place it in an earlier\n part of the search path. The first directory searched is [DISPLAY]PROGRAM_PREFIX. You can use this\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 672 / 1223\n \n directory but it is better practice to create dedicated directory(ies) and put them at the beginning of\n the [RS274NGC]SUBROUTINE_PATH.\n \n In the following example, files in /home/myname/linuxcnc/mysubs will be found before files in ../../nc_files/ngc\n@@ -32331,15 +32331,15 @@\n Larger font sizes may be helpful for touch screen applications .\n [DISPLAY]NGCGUI_SUBFILE = subfile_filename\n Example: [DISPLAY]NGCGUI_SUBFILE = simp.ngc\n Example: [DISPLAY]NGCGUI_SUBFILE = square.gcmc\n Example: [DISPLAY]NGCGUI_SUBFILE = \u201d\u201d\n Note: Use one or more items to specify NGCGUI-compatible subfiles or gcmc programs that\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 673 / 1223\n \n require a tab page on startup.\n A \u201dCustom\u201d tab will be created when the filename is \u201d\u201d.\n A user can use a \u201dCustom\u201d tab to browse the file system and identify preamble, subfile, and\n postamble files.\n@@ -32382,15 +32382,15 @@\n \n 10.6.6 File Requirements for NGCGUI Compatibility\n 10.6.6.1 Single-File Gcode (.ngc) Subroutine Requirements\n An NGCGUI-compatible subfile contains a single subroutine definition. The name of the subroutine\n must be the same as the filename (not including the .ngc suffix). LinuxCNC supports named or numbered subroutines, but only named subroutines are compatible with NGCGUI. For more information\n see the O-Codes chapter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 674 / 1223\n \n The first non-comment line should be a sub statement.\n The last non-comment line should be a endsub statement.\n examp.ngc:\n (info: info_text_to_appear_at_top_of_tab_page)\n@@ -32436,15 +32436,15 @@\n consequences. In LinuxCNC, existing global named parameters will be valid at subroutine execution\n and subroutines can modify or create global named parameters.\n Passing information to subroutines using global named parameters is discouraged since such usage\n requires the establishment and maintenance of a well-defined global context that is difficult to maintain. Using numbered parameters #1 thru #30 as subroutine inputs should be sufficient to satisfy a\n wide range of design requirements. NGCGUI supports some input global named parameter but their\n usage is obsolete and not documented here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 675 / 1223\n \n While input global named parameters are discouraged, LinuxCNC subroutines must use global named\n parameters for returning results. Since NGCGUI-compatible subfiles are aimed at GUI usage, return\n values are not a common requirement. However, NGCGUI is useful as a testing tool for subroutines\n which do return global named parameters and it is common for NGCGUI-compatible subfiles to call\n@@ -32490,15 +32490,15 @@\n maximum width of 320 and maximum height of 240 pixels.\n None of the conventions required for making an NGCGUI-compatible subfile preclude its use as general purpose subroutine file for LinuxCNC.\n The LinuxCNC distribution includes a library (ngcgui_lib directory) that includes both example NGCGUIcompatible subfiles and utility files to illustrate the features of LinuxCNC subroutines and NGCGUI\n usage. Another library (gcmc_lib) provides examples for subroutine files for the G-code meta compiler\n (gcmc).\n Additional user sumitted subroutines can be found on the Forum in the Subroutines Section.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 676 / 1223\n \n 10.6.6.2 Gcode-meta-compiler (.gcmc) file requirements\n Files for the Gcode-meta-compiler (gcmc) are read by NGCGUI and it creates entry boxes for variables\n tagged in the file. When a feature for the file is finalized, NGCGUI passes the file as input to the gcmc\n compiler and, if the compile is successful, the resulting G-code file is sent to LinuxCNC for execution.\n@@ -32543,15 +32543,15 @@\n //ngcgui: --imperial\n //ngcgui: --precision 5\n //ngcgui: --precision=6\n \n Options for gcmc are available with the terminal command:\n gcmc --help\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 677 / 1223\n \n A gcmc program by default uses metric mode. The mode can be set to inches with the option setting:\n //ngcgui: --imperial\n \n A preamble file, if used, can set a mode (g20 or g21) that conflicts with the mode used by a gcmc file.\n@@ -32564,22 +32564,22 @@\n \n 10.6.7 DB25 Example\n The following shows the DB25 subroutine. In the first photo you see where you fill in the blanks for\n each variable.\n \n This photo shows the backplot of the DB25 subroutine.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 678 / 1223\n \n This photo shows the use of the new button and the custom tab to create three DB25 cutouts in one\n program.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 679 / 1223\n \n 10.6.8 Creating a subroutine\n \u2014 For creating a subroutine for use with NGCGUI, the filename and the subroutine name must be the\n same.\n \u2014 The file must be placed in the subdirectory pointed to in the INI file.\n@@ -32597,15 +32597,15 @@\n # = #3 (Feedrate)\n ;Example de param\u00e8tre sans preset\n g0x0y0z1\n g3 i# f#\n g3 i[0-#]\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 680 / 1223\n \n 10.7 TkLinuxCNC GUI\n 10.7.1 Introduction\n TkLinuxCNC is one of the first graphical front-ends for LinuxCNC. It is written in Tcl and uses the Tk\n toolkit for the display. Being written in Tcl makes it very portable (it runs on a multitude of platforms).\n@@ -32621,15 +32621,15 @@\n Then, start LinuxCNC and select that INI file. The sample configuration sim/tklinuxcnc/tklinuxcnc.ini\n is already configured to use TkLinuxCNC as its front-end.\n When LinuxCNC is launched the TKLinuxCNC window is opened.\n 10.7.2.1 A typical session with TkLinuxCNC\n 1. Start LinuxCNC and select a configuration file.\n 2. Clear the E-STOP condition and turn the machine on (by pressing F1 then F2).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 681 / 1223\n \n 3. Home each axis.\n 4. Load the file to be milled.\n 5. Put the stock to be milled on the table.\n 6. Set the proper offsets for each axis by jogging and either homing again or right-clicking an axis\n@@ -32664,15 +32664,15 @@\n \u2014 Toggle flood coolant\n \u2014 Toggle spindle brake control\n 10.7.3.2 Offset display status bar\n The Offset display status bar displays the currently selected tool (selected with Txx M6), the tool\n length offset (if active), and the work offsets (set by right-clicking the coordinates).\n 1. For some of these actions it might be necessary to change the mode LinuxCNC is currently running in.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 682 / 1223\n \n 10.7.3.3 Coordinate Display Area\n The main part of the display shows the current position of the tool. The color of the position readout\n depends on the state of the axis. If the axis is unhomed the axis will be displayed in yellow letters.\n Once homed it will be displayed in green letters. If there is an error with the current axis TkLinuxCNC\n@@ -32707,15 +32707,15 @@\n the desired direction of motion. The first four axes can also be moved by the keyboard arrow keys (X\n and Y), the PAGE UP and PAGE DOWN keys (Z) and the [ and ] keys (A/4th).\n + If Continuous is selected, the motion will continue as long as the button or key is pressed. If another\n value is selected, the machine will move exactly the displayed distance each time the button is clicked\n or the key is pressed. The available values are:\n +\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 683 / 1223\n \n 1.0000, 0.1000, 0.0100, 0.0010, 0.0001\n \n + By pressing Home or the HOME key, the selected axis will be homed. Depending on your configuration, this may just set the axis value to be the absolute position 0.0, or it may make the machine\n move to a specific home location through use of home switches. See the Homing Chapter for more\n@@ -32736,15 +32736,15 @@\n a time. When the machine is not turned on, and not set to MDI mode, the code entry controls are\n unavailable.\n \n This allows you to enter a G-code command to be executed. Execute the command by pressing Enter.\n Active G-Codes This shows the modal codes that are active in the interpreter. For instance, G54\n indicates that the G54 offset is applied to all coordinates that are entered.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 684 / 1223\n \n 10.7.3.7 Jog Speed\n By moving this slider, the speed of jogs can be modified. The numbers above refer to axis units /\n second. The text box with the number is clickable. Once clicked a popup window will appear, allowing\n for a number to be entered.\n@@ -32795,15 +32795,15 @@\n Stop execution\n \n 10.8 QtPlasmaC\n 10.8.1 Preamble\n Except where noted, this guide assumes the user is using the latest version of QtPlasmaC. Version\n history can be seen by visiting this link which will show the latest available version. The installed\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 685 / 1223\n \n QtPlasmaC version is displayed in the title bar. See Update QtPlasmaC for information on updating\n QtPlasmaC.\n \n 10.8.2 License\n@@ -32819,25 +32819,25 @@\n there are enough hardware I/O pins to fulfill the requirements of a plasma configuration.\n There are three available formats:\n \u2014 16:9 with a minimum resolution of 1366 x 768\n \u2014 9:16 with a minimum resolution of 768 x 1366\n \u2014 4:3 with a minimum resolution of 1024 x 768\n Screenshot examples of QtPlasmaC are below:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 686 / 1223\n \n Figure 10.40 \u2013 16:9\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 687 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 688 / 1223\n \n Figure 10.42 \u2013 4:3\n \n 10.8.4 Installing LinuxCNC\n The preferred method for installing LinuxCNC is via an ISO image as described below.\n@@ -32845,15 +32845,15 @@\n It is possible to install and run LinuxCNC on a variety of Linux distributions however that is beyond\n the scope of this User Guide. If the user wishes to install a Linux distribution other than those recommended, they will first need to install their preferred Linux distribution and then install LinuxCNC\n v2.9 or later along with any required dependencies.\n \n 10.8.4.1 If The User Does Not Have Linux Installed\n Installation instructions are available from here.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 689 / 1223\n \n Following these instructions will yield a machine with the current stable branch (v2.8) of LinuxCNC\n on Debian Buster.\n 10.8.4.2 Package Installation (Buildbot) If The User Has Linux with LinuxCNC v2.8\n A package installation (Buildbot) uses prebuilt packages from the LinuxCNC Buildbot, instructions for\n@@ -32894,15 +32894,15 @@\n to use a reed relay as an alternative method to establish an Arc OK signal when the power\n source does not provide one.\n \n Note\n For fine tuning of Mode 0 Ark OK see Tuning Mode 0 Arc OK in the Advanced Topics section of the\n manual.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 690 / 1223\n \n 10.8.5.2 Available I/Os\n Note\n This section only touches on the hardware I/O\u2019s required for QtPlasmaC. Base machine requirements\n such as limit switches, home switches, etc. are in addition to these.\n@@ -32983,15 +32983,15 @@\n This signal senses if the torch has broken away from its cradle.\n Digital output; required.\n HAL pin name plasmac.torch-on\n Connected from a breakout board output to the torch-on input\n of the plasma power supply. This signal is used to control the\n plasma power supply and start the arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Name\n Move Up\n \n Modes\n 2\n \n@@ -33060,15 +33060,15 @@\n lower than Z HOME_OFFSET).\n \u2014 [AXIS_Z] HOME should be set to be approximately 5 mm-10 mm (0.2\u201d-0.4\u201d) below the maximum\n limit.\n \u2014 Floating Head - it is recommended that a floating head be used and that it has enough movement\n to allow for overrun during probing. Overrun can be calculated using the following formula:\n o = 0.5 * a * (v / a)^2\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 692 / 1223\n \n where: o = overrun, a = acceleration in units/s2 and v = velocity in units/s.\n Metric example: given a Z axis MAX_ACCELERATION of 600 mm/s2 and MAX_VELOCITY of 60 mm/s,\n the overrun would be 3 mm.\n Imperial example: given a Z axis MAX_ACCELERATION of 24 in/s2 and MAX_VELOCITY of 2.4 in/s,\n@@ -33096,47 +33096,47 @@\n Fill in the required entries to suit the machine wiring/breakout board configuration.\n QtPlasmaC adds two pages to the LinuxCNC configuration wizards for QtPlasmaC specific parameters,\n the two pages are QtPlasmaC options and User Buttons. Complete each of the wizards QtPlasmaC page\n to suit the machine that is being configured and the user button requirements.\n Note that PnCconf options allow user selection of Feed Override, Linear Velocity, and Jog Increments,\n whereas in StepConf these are automatically calculated and set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.43 \u2013 PnCConf QtPlasmaC Options\n \n 693 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.44 \u2013 StepConf QtPlasmaC Options\n \n 694 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 10.45 \u2013 QtPlasmaC User Buttons\n \n 695 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 696 / 1223\n \n Figure 10.46 \u2013 QtPlasmaC THCAD\n The THCAD screen will only appear if a Plasma Encoder is selected in the card screen. The the dedicated section on Mesa THCAD for more information.\n When the configuration is complete, the wizard will save a copy of the configuration that may be\n loaded and edited at a later time, a working QtPlasmaC configuration will be created in the following\n directory: ~/linuxcnc/configs/.\n The way the newly created QtPlasmaC configuration can be run from the terminal command line\n slightly differs depending the way LinuxCNC was installed:\n For a package installation (Buildbot):\n linuxcnc ~/linuxcnc/configs/__/__.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 697 / 1223\n \n For a run in place installation:\n ~/linuxcnc-dev/scripts/linuxcnc ~/linuxcnc/configs/__/__.ini\n \n After running the above command LinuxCNC should be running with the QtPlasmaC GUI visible.\n@@ -33158,25 +33158,25 @@\n For a run in place installation enter the following command in a terminal window:\n ~/linuxcnc-dev/lib/python/qtvcp/designer/install_script\n \n 10.8.5.6 Initial Setup\n The following heights diagram will help the user visualize the different heights involved in plasma\n cutting and how they are measured:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 698 / 1223\n \n Click on the Parameters Tab to view the CONFIGURATION section which shows the user settable\n parameters. It is necessary to ensure every one of these settings is tailored to the machine.\n To set the Z axis DRO relative to the Z axis MINIMUM_LIMIT, the user should perform the following\n steps. It is important to understand that in QtPlasmaC, touching off the Z axis DRO has no effect on\n the Z axis position while running a G-code program. These steps simply allow the user to more easily\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 699 / 1223\n \n set the probe height as after performing the steps, the displayed Z axis DRO value will be relative to\n Z axis MINIMUM_LIMIT.\n Note\n The user should be familiar with the recommended Z Axis Settings.\n@@ -33213,15 +33213,15 @@\n 9. If the table has a laser or camera for sheet alignment, a scribe, or uses offset probing then the\n required offsets need to be applied by following the procedure described in Peripheral Offsets.\n 10. CONGRATULATIONS! The user should now have a working QtPlasmaC Configuration.\n Note\n If the amount of time between the torch contacting the material and when the torch moves up and\n comes to rest at the Pierce Height seems excessive, see the probing section for a possible solution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 700 / 1223\n \n Important\n IF USING A Mesa Electronics THCAD THEN THE Voltage Scale VALUE WAS OBTAINED MATHEMATICALLY. IF THE USER INTENDS TO USE CUT VOLTAGES FROM A MANUFACTURE\u2019S CUT\n CHART THEN IT WOULD BE ADVISABLE TO DO MEASUREMENTS OF ACTUAL VOLTAGES AND\n FINE TUNE THE Voltage Scale AND Voltage Offset.\n@@ -33248,15 +33248,15 @@\n \n For a run in place installation enter the following lines in terminal window:\n source ~/linuxcnc-dev/scripts/rip-environment\n qtplasmac-plasmac2qt\n \n The following screen will be displayed:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 701 / 1223\n \n Table 10.6: Mandatory Settings\n Field\n INI FILE IN\n EXISTING\n@@ -33284,15 +33284,15 @@\n 2 - Estop is a button.\n \n ESTOP:1\n \n Optional Setting - This setting is not required unless the machine has a laser for sheet\n alignment. Leave this blank if it is not used/required. Leave this blank if it is not used/required.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Field\n Laser On HAL Pin\n \n Description\n Power on a laser crosshair for sheet\n alignment.\n@@ -33335,15 +33335,15 @@\n For a package installation (Buildbot) enter the following line in a terminal window:\n qtplasmac-cfg2prefs\n \n For a run in place installation enter the following lines in terminal window:\n source ~/linuxcnc-dev/scripts/rip-environment\n qtplasmac-cfg2prefs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 703 / 1223\n \n Figure 10.47 \u2013 qtplasmac-cfg2prefs\n Select the INI file of the old PlasmaC configuration, select the INI file of the new QtPlasmaC configuration, then press CONVERT.\n \n 10.8.7 Other QtPlasmaC Setup Considerations\n@@ -33357,15 +33357,15 @@\n file in the machine\u2019s configuration directory to add the appropriate cutoff frequency as measured in\n Hertz (Hz).\n For example:\n setp plasmac.lowpass-frequency 100\n \n The above example would give a cutoff frequency of 100Hz.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 704 / 1223\n \n 10.8.7.2 Contact Bounce\n Contact bounce from mechanical relays, switches, or external interference may cause some inconsistent behavior of the following switches:\n \u2014 Float Switch\n \u2014 Ohmic Probe\n@@ -33404,15 +33404,15 @@\n There are two different methods available to provide this minimum current if it is required:\n 1. A 0.1 \u03bcF film capacitor placed across the contacts.\n 2. A 1200 \u03a9 1 W resistor across the load (see calculations below).\n Schematics are shown at contact load schematics.\n More information on contact switching load can be seen on page VI of the finder General Technical\n Information document.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 705 / 1223\n \n Calculations:\n If using a Mesa card, the input resistance of a 7I96 is 4700 \u03a9 (symbol R)(always consult the product\n manual associated with the revision being used as these values sometimes vary between revisions),\n giving a contact current of 5.1 mA (symbol I) assuming a supply voltage (symbol U) of 24 V (I = U/R) 2 .\n@@ -33452,15 +33452,15 @@\n If the user would like a terminal window to open behind the GUI window then change the Terminal\n line to:\n Terminal=true\n \n Displaying a terminal can be handy for error and information messages.\n 2. In the US, the letter V is commonly used as a symbol (Voltage) and as a unit (Volt).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 706 / 1223\n \n 10.8.7.5 QtPlasmaC Files\n After a successful QtPlasmaC installation, the following files are created in the configuration directory:\n Filename\n .ini\n@@ -33512,15 +33512,15 @@\n Note\n The .prefs file is plain text and may be edited with any text editor.\n \n 10.8.7.6 INI File\n QtPlasmaC has some specific .ini file variables as follows:\n [FILTER] Section These variables are mandatory.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 707 / 1223\n \n PROGRAM_EXTENSION = .ngc,.nc,.tap G-code File (*.ngc, *.nc, *.tap)\n ngc\n = qtplasmac_gcode\n nc\n@@ -33570,15 +33570,15 @@\n = qtvcp qtplasmac_9x16 (use 9:16 resolution)\n = qtvcp qtplasmac_4x3 (use 4:3 resolution)\n \n There are multiple QtVCP options that are described here: QtVCP INI Settings\n For example the following would start a 16:9 resolution QtPlasmaC screen in full screen mode:\n DISPLAY = qtvcp -f qtplasmac\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 708 / 1223\n \n [TRAJ] Section\n This variable is mandatory.\n SPINDLES = 3\n \n@@ -33617,15 +33617,15 @@\n 1. Click the window shutdown button on the window title bar\n 2. Long press the POWER button on the MAIN Tab.\n A shutdown warning can be displayed on every shutdown by checking the Exit Warning checkbox on\n the SETTINGS Tab.\n 10.8.8.2 MAIN Tab\n Screenshot example of the QtPlasmaC MAIN Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 709 / 1223\n \n Some functions/features are only used for particular modes and are not displayed if they are not\n required by the chosen QtPlasmaC mode.\n Table 10.7: Features of the PREVIEW WINDOW\n Name\n@@ -33648,15 +33648,15 @@\n If \u201dView Material\u201d is selected on the SETTINGS Tab, this displays the\n currently selected material\u2019s Pierce Height.\n If \u201dView Material\u201d is selected on the SETTINGS Tab, this displays the\n currently selected material\u2019s Pierce Delay.\n If \u201dView Material\u201d is selected on the SETTINGS Tab, this displays the\n currently selected material\u2019s Cut Height.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 710 / 1223\n \n Table 10.7: (continued)\n Name\n CA:\n \n@@ -33730,15 +33730,15 @@\n This slider overrides the feed rate for all feed moves.\n Any value other than 100% will cause the label to flash.\n Clicking the label will return the slider to 100%.\n This slider overrides the rapid rate for all rapid moves.\n Any value other than 100% will cause the label to flash.\n Clicking the label will return the slider to 100%.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 711 / 1223\n \n Table 10.8: (continued)\n Name\n JOG\n \n@@ -33815,15 +33815,15 @@\n \n Modes\n 0, 1, 2\n \n Description\n Indicates the status of the Torch On output signal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 712 / 1223\n \n Table 10.10: (continued)\n Name\n TORCH ON ENABLE\n \n@@ -33912,15 +33912,15 @@\n LED will still show the status of the probe input, but the\n Ohmic Probe results will be ignored.\n This box will enable or disable the communications to a\n PowerMax. This button is only visible if a PM_PORT\n option is configured in the [POWERMAX] section of the\n .prefs file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 713 / 1223\n \n Table 10.10: (continued)\n Name\n Status\n \n@@ -33988,15 +33988,15 @@\n This button moves the Z axis in the negative direction.\n \n Note\n During Paused Motion, this section will be shown on top of the JOGGING panel. The following section\n will cover each button encountered in this panel. Please see CUT RECOVERY for a detailed description\n of the cut recovery functionality.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Name\n PAUSED MOTION\n FEED SLIDER\n \n FEED\n REV\n@@ -34076,15 +34076,15 @@\n This drop down button will display the following options:\n Zero - zeros the axis.\n Set - launches a dialog box to manually input the axis\u2019 coordinate.\n Divide By 2 - divides the currently displayed coordinate in the DRO by\n two.\n Set To Last - sets the axis to the previously set coordinate.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 715 / 1223\n \n 10.8.8.3 Preview Views\n The QtPlasmaC preview screen has the ability to be switched between different views and displays,\n as well as zooming in and out, and panning horizontally and vertically.\n When QtPlasmaC is first started, the Z (top down) view will be selected as the default view for a loaded\n@@ -34097,30 +34097,30 @@\n orientation, then pressing either Z or P will change the display to the newly selected view. If the user\n then wishes to display the full table while maintaining the currently selected view as the default view\n for a loaded G-code file, then pressing CLEAR will achieve this and allow the selected view orientation\n to prevail the next time a G-code file is loaded.\n 10.8.8.4 CONVERSATIONAL Tab\n Screenshot example of the QtPlasmaC CONVERSATIONAL Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 716 / 1223\n \n The CONVERSATIONAL Tab enables the user to quickly program various simple shapes for quick\n cutting without the need for CAM software.\n See Conversational Shape Library for detailed information on the Conversational feature.\n It is possible to hide this tab so the conversational feature cannot be used by an operator. This may\n be achieved either by wiring the pin to a physical key-switch or similar or it may also be set in a HAL\n file using the following command:\n setp qtplasmac.conv_disable 1\n \n 10.8.8.5 PARAMETERS Tab\n Screenshot example of the QtPlasmaC PARAMETERS Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 717 / 1223\n \n Some functions/features are only used for particular modes and are not displayed if they are not\n required by the chosen QtPlasmaC mode.\n This tab is used to display configuration parameters that are modified infrequently.\n It is possible to hide this tab so machine settings cannot be modified by unauthorized personnel. This\n@@ -34142,15 +34142,15 @@\n Description\n This sets the amount of time (in seconds) QtPlasmaC will wait\n between commanding a \u201dTorch On\u201d and receiving an Arc OK\n signal before timing out and displaying an error message.\n This sets the number of times QtPlasmaC will attempt to start\n the arc.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 718 / 1223\n \n Table 10.15: (continued)\n Name\n Retry Delay\n \n@@ -34227,15 +34227,15 @@\n This sets the distance threshold used to determine if an Initial Height\n Sense (probe) can be skipped for the current cut, see IHS Skip.\n \n Note\n If the amount of time between the torch contacting the material and when the torch moves up and\n comes to rest at the Pierce Height seems excessive, see the probing section for a possible solution.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 719 / 1223\n \n Table 10.17: CONFIGURATION - SAFETY\n Name\n Safe Height\n \n@@ -34286,15 +34286,15 @@\n \n CONFIGURATION - THC Two methods of THC activation are available and are selected with the\n Auto Activation checkbutton. Both methods begin their calculations when the current velocity of the\n torch matches the cut feed rate specified for the selected material:\n 1. Delay Activation (the default) is selected when Auto Activation is unchecked. This method uses\n a time delay set with the Delay parameter.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 720 / 1223\n \n 2. Auto Activation is selected when Auto Activation is checked. This method determines that the\n arc voltage is stable by using the Sample Counts and Sample Threshold parameters.\n Name\n Delay\n@@ -34381,15 +34381,15 @@\n Description\n The top drop down menu is used to manually select the current material\n cut parameters. If there are no materials in the material file then only the\n default material will be displayed.\n This sets the kerf width for the currently selected material. Refer to the\n Heights Diagram diagram for a visual representation.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 721 / 1223\n \n Table 10.21: (continued)\n Name\n Pierce Height\n Pierce Delay\n@@ -34451,15 +34451,15 @@\n The Cut Parameters for the new material will then need to be adjusted and saved.\n The DELETE this button is used to delete a material. After pressing it, the user will be prompted for\n a material number to be deleted, and prompted again to ensure the user is sure. After deletion, the\n material file will be reloaded and the drop down list will display the default material.\n 10.8.8.6 SETTINGS Tab\n Screenshot example of the QtPlasmaC SETTINGS Tab in 16:9 aspect ratio:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 722 / 1223\n \n This tab is used to display GUI configuration parameters, button text, and shutdown text that are\n modified infrequently as well as some utility buttons.\n It is possible to hide this tab so machine settings cannot be modified by unauthorized personnel. This\n may be achieved either by wiring the pin to a physical key-switch or similar or it may also be set in a\n@@ -34475,15 +34475,15 @@\n Foreground\n Highlight\n \n Description\n This button allows the user to change the color of the GUI Foreground.\n This button allows the user to change the color of the GUI Highlight.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 723 / 1223\n \n Table 10.22: (continued)\n Name\n LED\n Background\n@@ -34561,15 +34561,15 @@\n current tool) in the Preview Window on the MAIN Tab.\n This allows a user to change the default zoom level for the top down full\n table view in the Preview Window on the MAIN Tab.\n \n USER BUTTON ENTRIES USERBUTTON\n This section shows the text that appears on the Custom User Buttons as well as the code associated\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 724 / 1223\n \n with the user button. User buttons may be changed and the new settings used without restarting\n LinuxCNC.\n The text and/or code may be edited at any time and will be loaded ready for use if the SAVE button is\n clicked.\n@@ -34610,15 +34610,15 @@\n Prior to the backup being made, the machine log will be saved to a file in the configuration directory named machine_log__

\n@@ -43827,15 +43827,15 @@\n \n \u201dspindle-speed\u201d\n 5000\n \n \n \n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \n \n \n \n \n \n The above code produced this example showing each tab selected.\n \n 930 / 1223\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 931 / 1223\n \n Figure 12.29 \u2013 Simple Tabs Example\n \n 12.2 PyVCP Examples\n 12.2.1 AXIS\n@@ -43879,29 +43879,29 @@\n \n The -Wn makes HAL Wait for name to be loaded before proceeding.\n The pyvcp -c makes PyVCP name the panel.\n The HAL pins from panel1.xml will be named btnpanel.<_pin name_>.\n The HAL pins from panel2.xml will be named sppanel.<_pin name_>.\n Make sure the loadusr line is before any nets that make use of the PyVCP pins.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 932 / 1223\n \n 12.2.3 Jog Buttons Example\n In this example we will create a PyVCP panel with jog buttons for X, Y, and Z. This configuration will be\n built upon a Stepconf Wizard generated configuration. First we run the Stepconf Wizard and configure\n our machine, then on the Advanced Configuration Options page we make a couple of selections to add\n a blank PyVCP panel as shown in the following figure. For this example we named the configuration\n pyvcp_xyz on the Basic Machine Information page of the Stepconf Wizard.\n \n Figure 12.30 \u2013 XYZ Wizard Configuration\n The Stepconf Wizard will create several files and place them in the linuxcnc/configs/pyvcp_xyz directory. If you left the create link checked you will have a link to those files on your desktop.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 933 / 1223\n \n 12.2.3.1 Create the Widgets\n Open up the custompanel.xml file by right clicking on it and selecting open with text editor. Between\n the tags we will add the widgets for our panel.\n Look in the PyVCP Widgets Reference section of the manual for more detailed information on each\n@@ -43954,15 +43954,15 @@\n \u201dz-plus\u201d\n \u201dZ+\u201d\n \n \n \n@@ -43987,15 +43987,15 @@\n \n \n After adding the above you now will have a PyVCP panel that looks like the following attached to the\n right side of AXIS. It looks nice but it does not do anything until you connect the buttons to halui. If\n you get an error when you try and run scroll down to the bottom of the pop up window and usually\n the error is a spelling or syntax error and it will be there.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 935 / 1223\n \n 12.2.3.2 Make Connections\n To make the connections needed open up your custom_postgui.hal file and add the following.\n # connect the X PyVCP buttons\n net my-jogxminus halui.axis.x.minus <= pyvcp.x-minus\n@@ -44045,15 +44045,15 @@\n \u201dgreen\u201d\n \u201dred\u201d\n \n \n \n RIDGE\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 936 / 1223\n \n 2\n \n \n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \n \n RAISED\n 2\n
\n@@ -43993,15 +43993,15 @@\n \n \u201dspindle-speed\u201d\n 5000\n \n \n \n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \n \n \n \n \n \n The above code produced this example showing each tab selected.\n \n 975 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 976 / 1290\n \n Figure 12.29: Simple Tabs Example\n \n 12.2 PyVCP Examples\n 12.2.1 AXIS\n@@ -44039,15 +44039,15 @@\n \u2022 Add the links to HAL pins for your panel in the postgui.hal file to connect your PyVCP panel to\n LinuxCNC.\n The following is an example of a loadusr command to load two PyVCP panels and name each one so\n the connection names in HAL will be known.\n loadusr -Wn btnpanel pyvcp -c btnpanel panel1.xml\n loadusr -Wn sppanel pyvcp -c sppanel panel2.xml\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 977 / 1290\n \n The -Wn makes HAL Wait for name to be loaded before proceeding.\n The pyvcp -c makes PyVCP name the panel.\n The HAL pins from panel1.xml will be named btnpanel.<_pin name_>.\n The HAL pins from panel2.xml will be named sppanel.<_pin name_>.\n@@ -44056,27 +44056,27 @@\n 12.2.3 Jog Buttons Example\n In this example we will create a PyVCP panel with jog buttons for X, Y, and Z. This configuration will be\n built upon a Stepconf Wizard generated configuration. First we run the Stepconf Wizard and configure\n our machine, then on the Advanced Configuration Options page we make a couple of selections to add\n a blank PyVCP panel as shown in the following figure. For this example we named the configuration\n pyvcp_xyz on the Basic Machine Information page of the Stepconf Wizard.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 978 / 1290\n \n Figure 12.30: XYZ Wizard Configuration\n The Stepconf Wizard will create several files and place them in the linuxcnc/configs/pyvcp_xyz directory. If you left the create link checked you will have a link to those files on your desktop.\n 12.2.3.1 Create the Widgets\n Open up the custompanel.xml file by right clicking on it and selecting open with text editor. Between\n the tags we will add the widgets for our panel.\n Look in the PyVCP Widgets Reference section of the manual for more detailed information on each\n widget documentation des widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n In your custompanel.xml file we will add the description of the widgets.\n \n \n (\u201dHelvetica\u201d,16)\n \n \n@@ -44130,15 +44130,15 @@\n \n \n \n \n \n 979 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 980 / 1290\n \n RAISED\n 3\n \n \n The above gives us a PyVCP panel that looks like the following.\n \n 985 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 986 / 1290\n \n 12.2.5.2 The Connections\n To make it work we add the following code to the custom_postgui.hal file.\n # display the rpm based on freq * rpm per hz\n loadrt mult2\n@@ -44490,15 +44490,15 @@\n custom.hal file whereas the rev led needs to use the spindle-rev bit. You can\u2019t link the spindle-fwd bit\n twice so you use the signal that it was linked to.\n \n 12.2.6 Rapid to Home Button\n This example creates a button on the PyVCP side panel when pressed will send all the axis back to\n the home position. This example assumes you don\u2019t have a PyVCP panel.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 987 / 1290\n \n In your configuration directory create the XML file. In this example it\u2019s named rth.xml. In the rth.xml\n file add the following code to create the button.\n \n \n@@ -44513,15 +44513,15 @@\n PYVCP = rth.xml\n \n If you don\u2019t have a [HALUI] section in the INI file create it and add the following MDI command.\n MDI_COMMAND = G53 G0 X0 Y0 Z0\n \n Information about G53 and G0 G-codes.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 988 / 1290\n \n In the [HAL] section if you don\u2019t have a post gui file add the following and create a file called postgui.hal.\n POSTGUI_HALFILE = postgui.hal\n \n In the postgui.hal file add the following code to link the PyVCP button to the MDI command.\n@@ -44551,15 +44551,15 @@\n \u2022 Widget set: uses TkInter widgets.\n \u2022 User interface creation: \u201dedit XML file / run result / evaluate looks\u201d cycle.\n \u2022 No support for embedding user-defined event handling.\n \u2022 No LinuxCNC interaction beyond HAL pin I/O supported.\n GladeVCP:\n \u2022 Widget set: relies on the GTK3 widget set.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 989 / 1290\n \n \u2022 User interface creation: uses the Glade WYSIWYG user interface editor.\n \u2022 Any HAL pin change may be directed to call back into a user-defined Python event handler.\n \u2022 Any GTK signal (key/button press, window, I/O, timer, network events) may be associated with userdefined handlers in Python.\n \u2022 Direct LinuxCNC interaction: arbitrary command execution, like initiating MDI commands to call a\n@@ -44583,31 +44583,31 @@\n make setuid then run . ./scripts/rip-environment. More information about a git checkout is on the\n LinuxCNC wiki page.\n \n Run the sample GladeVCP panel integrated into AXIS like PyVCP as follows:\n $ cd configs/sim/axis/gladevcp\n $ linuxcnc gladevcp_panel.ini\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Run the same panel, but as a tab inside AXIS:\n $ cd configs/sim/axis/gladevcp\n $ linuxcnc gladevcp_tab.ini\n \n 990 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n To run this panel inside Touchy:\n $ cd configs/sim/touchy/gladevcp\n $ linuxcnc gladevcp_touchy.ini\n \n 991 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 992 / 1290\n \n 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\n names), mixed setups are possible as well - for instance a panel on the right hand side, and one or\n more tabs for less-frequently used parts of the interface.\n 12.3.2.1 Exploring the example panel\n@@ -44622,15 +44622,15 @@\n The buttons in the Commands frame are MDI Action widgets - pressing them will execute an MDI\n command in the interpreter. The third button Execute Oword subroutine is an advanced example - it\n takes several HAL pin values from the Settings frame, and passes them as parameters to the Oword\n subroutine. The actual parameters received by the routine are displayed by (DEBUG, ) commands see ../../nc_files/oword.ngc for the subroutine body.\n 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\n and configs/sim/axis/gladevcp/gladevcp_panel.ini.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 993 / 1290\n \n 12.3.2.2 Exploring the User Interface description\n The user interface is created with the Glade UI editor - to explore it, you need to have Glade installed.\n To edit the user interface, run the command\n $ glade configs/axis/gladevcp/manual-example.ui\n@@ -44665,15 +44665,15 @@\n Glade contains an internal Python interpreter, and only Python 3 is supported. This is true for Debian\n Bullseye, Ubuntu 21 and Mint 21 or later. Older versions will not work, you will get a Python error.\n 12.3.3.2 Running Glade to create a new user interface\n This section just outlines the initial LinuxCNC-specific steps. For more information and a tutorial on\n Glade, see http://glade.gnome.org. Some Glade tips & tricks may also be found on youtube.\n Either modify an existing UI component by running glade .ui or start a new one by just running the glade command from the shell.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 994 / 1290\n \n \u2022 If LinuxCNC was not installed from a package, the LinuxCNC shell environment needs to be set up\n with source /scripts/rip-environment, otherwise Glade won\u2019t find the LinuxCNCspecific widgets.\n \u2022 When asked for unsaved preferences, just accept the defaults and hit Close.\n \u2022 From Toplevels (toolbar), pick GtkWindow (first entry) as top level window. Set window1 as ID in\n@@ -44691,15 +44691,15 @@\n You\u2019re now ready to give it a try (while LinuxCNC, e.g. AXIS is running) it with:\n gladevcp myui.ui\n \n GladeVCP creates a HAL component named like the basename of the UI file - myui in this case - unless\n overridden by the -c option. If running AXIS, just try Show HAL configuration and\n inspect its pins.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 995 / 1290\n \n You might wonder why widgets contained a HAL_Hbox or HAL_Table appear greyed out (inactive).\n 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\n halui.machine.is-on or one of the halui.mode signals, to assure some widgets appear active only\n in a certain state.\n@@ -44734,15 +44734,15 @@\n [DISPLAY]\n # add GladeVCP panel where PyVCP used to live:\n GLADEVCP= -c example -u ./hitcounter.py ./manual-example.ui\n \n The command line actually run by AXIS for the above is:\n halcmd loadusr -Wn example gladevcp -c example -x {XID} -u ./hitcounter.py ./manual-example \u2190.ui\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 996 / 1290\n \n The file specifiers like ./hitcounter.py, ./manual-example.ui, etc. indicate that the files are located\n in the same directory as the INI file. You might have to copy them to you directory (alternatively,\n specify a correct absolute or relative path to the file(s)).\n \n@@ -44778,15 +44778,15 @@\n 12.3.3.7 Integrating into Touchy\n To do add a GladeVCP tab to Touchy, edit your INI file as follows:\n [DISPLAY]\n # add GladeVCP panel as a tab\n EMBED_TAB_NAME=GladeVCP demo\n EMBED_TAB_COMMAND=gladevcp -c gladevcp -x {XID} -u ./hitcounter.py -H ./gladevcp-touchy.hal \u2190./manual-example.ui\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 997 / 1290\n \n [RS274NGC]\n # gladevcp Demo specific Oword subs live here\n SUBROUTINE_PATH = ../../nc_files/gladevcp_lib\n \n@@ -44831,15 +44831,15 @@\n Re-parent GladeVCP into an existing window XID instead of creating a new top level\n window\n \n \u2190-\n \n \u2190-\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 998 / 1290\n \n -u FILE::\n Use File\u2019s as additional user defined modules with handlers\n -U USEROPT::\n pass USEROPTs to Python modules\n@@ -44872,15 +44872,15 @@\n So, in case you run GladeVCP from a separate shell window (i.e., not started by the GUI in an embedded\n fashion):\n \u2022 You cannot rely on the POSTGUI_HALFILE INI option causing the HAL commands being run at the\n right point in time, so comment that out in the INI file.\n \u2022 Explicitly pass the HAL command file which refers to GladeVCP pins to GladeVCP with the -H\n option (see previous section).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 999 / 1290\n \n 12.3.6 HAL Widget reference\n GladeVCP includes a collection of Gtk widgets with attached HAL pins called HAL Widgets, intended\n to control, display or otherwise interact with the LinuxCNC HAL layer. They are intended to be used\n with the Glade user interface editor. With proper installation, the HAL Widgets should show up in\n@@ -44911,15 +44911,15 @@\n Exceptions to this rule currently are:\n \n \u2022 HAL_Spinbutton and HAL_ComboBox, which have two pins: a -f (float) and a \n (s32) pin\n \u2022 HAL_ProgressBar, which has a -value input pin, and a -scale input\n pin.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1000 / 1290\n \n 12.3.6.2 Python attributes and methods of HAL Widgets\n HAL widgets are instances of GtKWidgets and hence inherit the methods, properties and signals of the\n applicable GtkWidget class. For instance, to figure out which GtkWidget-related methods, properties\n and signals a HAL_Button has, lookup the description of GtkButton in the PyGObject API Reference.\n@@ -44957,15 +44957,15 @@\n doesn\u2019t make sense. You might use setp _pinname_ _value_ in the associated HAL file for testing\n though.\n \n It is perfectly OK to set an output HAL pin\u2019s value with halcomp[pinname] = value provided this HAL\n pin is not associated with a widget, that is, has been created by the hal_glib.GPin(halcomp.newpin(\n method (see GladeVCP Programming for an example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1001 / 1290\n \n 12.3.6.4 The hal-pin-changed signal\n Event-driven programming means that the UI tells your code when \u201dsomething happens\u201d - through\n a callback, like when a button was pressed. The output HAL widgets (those which display a HAL\n pin\u2019s value) like LED, Bar, VBar, Meter, etc., support the hal-pin-changed signal, which may cause a\n@@ -44983,15 +44983,15 @@\n \u2022 HAL_ToggleButton, HAL_CheckButton: retains on/off state. Important signal: toggled\n \u2022 HAL_RadioButton: a one-of-many group. Important signal: toggled (per button).\n \u2022 Important common methods: set_active(), get_active()\n \u2022 Important properties: label, image\n \n Figure 12.31: Check button\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1002 / 1290\n \n Figure 12.32: Radio buttons\n \n Figure 12.33: Toggle button\n \n@@ -45009,15 +45009,15 @@\n -s\n out s32 pin\n To make a scale useful in Glade, add an Adjustment (General \u2192 Adjustment \u2192 New or existing adjustment) and edit the adjustment object. It defines the default/min/max/increment values. Also, set\n adjustment Page size and Page increment to zero to avoid warnings.\n \n Figure 12.34: Example HAL_HScale\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1003 / 1290\n \n 12.3.6.7 SpinButton\n HAL SpinButton is derived from GtkSpinButton and holds two pins:\n -f\n out FLOAT pin\n@@ -45047,15 +45047,15 @@\n -delta-scaled\n out FLOAT pin\n hal_dial has the following properties:\n cpr\n Sets the Counts per Revolution, allowed values are in the range from 25 to 360\n default = 100\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1004 / 1290\n \n show_counts\n Set this to False, if you want to hide the counts display in the middle of the widget.\n default = True\n label\n@@ -45100,15 +45100,15 @@\n \u2022 [widget name].get_scaled_value()\n Will return the counts value as a float\n \u2022 [widget name].get_delta_scaled_value()\n Will return the counts value as a float\n \u2022 [widget name].set_label(\u201dstring\u201d)\n Sets the label content with \u201dstring\u201d\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1005 / 1290\n \n There are two GObject signals emitted:\n \u2022 count_changed\n Emitted when the widget\u2019s count changes eg. from being wheel scrolled.\n \u2022 scale_changed\n@@ -45133,15 +45133,15 @@\n \u2022 Wheel up = increase counts\n \u2022 Wheel down = reduce counts\n As moving the mouse the drag and drop way may be faster than the widget can update itself, you\n may loose counts turning to fast. It is recommended to use the mouse wheel, and only for very rough\n movements the drag and drop way.\n jogwheel exports its count value as HAL pin:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1006 / 1290\n \n -s\n out s32 pin\n jogwheel has the following properties:\n size\n@@ -45164,15 +45164,15 @@\n \u2022 [widget name].get_value()\n Will return the counts value as integer\n \u2022 [widget name].set_label(\u201dstring\u201d)\n Sets the label content with \u201dstring\u201d\n \n Figure 12.37: Example JogWheel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1007 / 1290\n \n 12.3.6.10 Speed Control\n 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.\n The value is controlled with two button to increase or decrease the value. The increment will change\n as long a button is pressed. The value of each increment as well as the time between two changes\n@@ -45212,15 +45212,15 @@\n Float\n The min allowed value.\n Allowed values are 0.0 to 99999.0.\n Default is 0.0.\n If you change this value, the increment will be reset to default, so it might be necessary to set\n afterwards a new increment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1008 / 1290\n \n max\n Float\n The max allowed value.\n Allowed values are 0.001 to 99999.0.\n@@ -45267,15 +45267,15 @@\n There are also Python methods to modify the widget:\n [widget name].set_adjustment(gtk-adjustment)\n \n You can assign a existing adjustment to the control, that way it is easy to replace existing sliders\n without many code changes. Be aware, that after changing the adjustment you may need to set a new\n increment, as it will be reset to its default (100 steps from MIN to MAX):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1009 / 1290\n \n \u2022 [widget name].get_value()\n Will return the counts value as float\n \u2022 [widget name].set_value(float(value))\n Sets the widget to the commanded value\n@@ -45304,15 +45304,15 @@\n \u2022 State_Sensitive_Table\n \u2022 HAL_HBox (deprecated)\n These containers are meant to be used to insensitize (grey out) or hide their children.\n Insensitized children will not respond to input.\n HAL_HideTable\n Has one HAL BIT input pin which controls if its child widgets are hidden or not.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1010 / 1290\n \n Pin: , .\n in bit pin\n If the pin is low then child widgets are visible which is the default state.\n HAL_Table and HAL_Hbox\n@@ -45350,15 +45350,15 @@\n pick_color_on, pick_color_off\n Colors for ON and OFF states.\n These may be represented as #RRRRGGGGBBBB strings and are optional properties which have\n precedence over on_color and off_color.\n led_size\n LED radius (for square - half of LED\u2019s side)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1011 / 1290\n \n led_shape\n LED Shape.\n Valid values are 0 for round, 1 for oval and 2 for square shapes.\n led_blink_rate\n@@ -45392,15 +45392,15 @@\n scale\n Value scale.\n Sets the maximum absolute value of input. Same as setting the .scale pin.\n A float, range from -224 to +2 24.\n green_limit\n Green zone lower limit\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1012 / 1290\n \n yellow_limit\n Yellow zone lower limit\n red_limit\n Red zone lower limit\n@@ -45432,15 +45432,15 @@\n a float value from the ListStore.\n If you\u2019re confused like me about how to edit ComboBox ListStores and CellRenderer, see https://youtu.be/Z5_F-rW2cL8.\n 12.3.6.16 Bars\n HAL_Bar and HAL_VBar widgets for horizontal and vertical bars representing float values.\n HAL_Bar and HAL_VBar each have one input FLOAT HAL pin.\n HAL_Bar and HAL_VBar both bars have the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1013 / 1290\n \n invert\n Swap min and max direction.\n An inverted HBar grows from right to left, an inverted VBar from top to bottom.\n min, max\n@@ -45482,15 +45482,15 @@\n Define up bounds of color zones.\n By default only one zone is enabled. If you want more then one zone set z0_border and z1_border\n to desired values so zone 0 will fill from 0 to first border, zone 1 will fill from first to second border\n and zone 2 from last border to 1.\n Borders are set as fractions.\n Valid values range from 0 to 1.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1014 / 1290\n \n Figure 12.41: Horizontal bar\n \n Figure 12.42: Vertical bar\n \n@@ -45515,15 +45515,15 @@\n bg_color\n Background color of meter.\n z0_color, z1_color, z2_color\n Colors of different value zones.\n Defaults are green, yellow and red.\n For description of zones see z*_border properties.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1015 / 1290\n \n z0_border, z1_border\n Define up bounds of color zones.\n By default only one zone is enabled. If you want more then one zone set z0_border and z1_border\n to desired values so zone 0 will fill from min to first border, zone 1 will fill from first to second\n@@ -45549,15 +45549,15 @@\n show_velocity\n This displays the tool speed.\n Default = true.\n use_commanded\n This selects the DRO to use: commanded or actual values.\n Default = true.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1016 / 1290\n \n metric_units\n This selects the DRO to use: metric or imperial units.\n Default = true.\n show_rapids\n@@ -45603,15 +45603,15 @@\n May be any of x, y, y2 , z, z2 , p (perspective).\n Defaults to z view.\n enable_dro\n Type = boolean.\n Whether to draw a DRO on the plot or not.\n Default = true.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1017 / 1290\n \n mouse_btn_mode\n Type = integer.\n Mouse button handling: leads to different functions of the button:\n \u2022 0 = default: left rotate, middle move, right zoom\n@@ -45657,15 +45657,15 @@\n \u2022 If you set all the plotting options false but show_offsets true you get an offsets page instead of\n a graphics plot.\n \u2022 If you get the zoom distance before changing the view then reset the zoom distance, it is much\n more user friendly.\n \u2022 if you select an element in the preview, the selected element will be used as rotation center\n point\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1018 / 1290\n \n Figure 12.44: Gremlin Example\n \n 12.3.6.20 HAL_Offset\n The HAL_Offset widget is used to display the offset of a single axis.\n@@ -45683,15 +45683,15 @@\n reference_type\n 0:G5x 1:tool 2:G92 3:Rotation around Z\n \n 12.3.6.21 DRO widget\n The DRO widget is used to display the current axis position.\n It has the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1019 / 1290\n \n display_units_mm\n Used to toggle the display units between metric and imperial. Default is False.\n actual\n Select actual (feedback) position or commanded position. Default is True.\n@@ -45730,15 +45730,15 @@\n \u2022 The DRO widget is a modified gtk label widget. As such, much of what can be done to a gtk\n label can be done to the DRO widget.\n \u2022 The font properties may also be set from a css stylesheet which has the highest priority and\n will override values set by GObject properties.\n There a couple ways to directly control the widget using Python.\n Using GObject to set the above listed properties\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1020 / 1290\n \n [widget name].set_property(\u201ddisplay_units_mm\u201d, True)\n [widget name].set_property(\u201dactual\u201d, True)\n [widget name].set_property(\u201ddiameter\u201d, True)\n [widget name].set_property(\u201dmm_text_template\u201d, \u201d%10.3f\u201d)\n@@ -45782,15 +45782,15 @@\n 12.3.6.22 Combi_DRO widget\n The Combi_DRO widget is used to display the current, the relative axis position and the distance to go\n in one DRO.\n By clicking on the DRO the Order of the DRO will toggle around.\n In Relative Mode the actual coordinate system will be displayed.\n Combi_DRO has the following properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1021 / 1290\n \n joint_number\n Used to select which axis (technically which joint) is displayed.\n On a trivialkins machine (mill, lathe, router) axis/joint numbers are:\n 0:X 1:Y 2:Z etc.\n@@ -45832,15 +45832,15 @@\n toggle_readout\n A left mouse click will toggle the DRO readout through the different modes [\u201dRel\u201d, \u201dAbs\u201d, \u201dDTG\u201d].\n By unchecking the box you can disable that behavior. The toggling can still be done with [widget\n name].toggle_readout().\n Value must be boolean.\n Default is TRUE.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1022 / 1290\n \n cycle_time\n The time the DRO waits between two polls.\n This setting should only be changed if you use more than 5 DRO at the same time, i.e. on a 6 axis\n config, to avoid that the DRO slows down the main application too much.\n@@ -45881,15 +45881,15 @@\n \u2013 [\u201dAbs\u201d, \u201dDTG\u201d, \u201dRel\u201d]\n \u2022 [widget name].get_position()\n Returns the position of the DRO as a list of floats.\n The order is independent of the order shown on the DRO and will be given as [Absolute , relative\n , DTG].\n \u2013 Absolute = the machine coordinates, depends on the actual property will give actual or commanded position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1023 / 1290\n \n \u2013 Relative = will be the coordinates of the actual coordinate system.\n \u2013 DTG = the distance to go.\n Will mostly be 0, as this function should not be used while the machine is moving, because of time\n delays.\n@@ -45924,15 +45924,15 @@\n \u2022 [widget name].system\n The actual system, as mentioned in the system_changed signal.\n \u2022 [widget name].homed\n True if the joint is homed.\n \u2022 [widget name].machine_units\n 0 if Imperial, 1 if Metric.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1024 / 1290\n \n Figure 12.45: Example: Three Combi_DRO in a window\n X = Relative Mode\n Y = Absolute Mode\n Z = DTG Mode\n@@ -45957,15 +45957,15 @@\n Sets the file filter for the objects to be shown.\n Must be a string containing a comma separated list of extensions to be shown.\n Default is \u201dngc,py\u201d.\n sortorder\n Sets the sorting order of the displayed icon.\n Must be an integer value from 0 to 3, where:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1025 / 1290\n \n \u2022 0 = ASCENDING (sorted according to file names)\n \u2022 1 = DESCENDING (sorted according to file names)\n \u2022 2 = FOLDERFIRST (show the folders first, then the files), default\n \u2022 3 = FILEFIRST (show the files first, then the folders)\n@@ -46009,15 +46009,15 @@\n [widget name].btn_sel_next.emit(\u201dclicked\u201d)\n [widget name].btn_get_selected.emit(\u201dclicked\u201d)\n [widget name].btn_dir_up.emit(\u201dclicked\u201d)\n [widget name].btn_exit.emit(\u201dclicked\u201d)\n \n The widget will emit the following signals:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1026 / 1290\n \n \u2022 selected\n This signal is emitted when the user selects an icon.\n It will return a string containing a file path if a file has been selected, or None if a directory has been\n selected.\n@@ -46032,15 +46032,15 @@\n \u2013 state is a boolean and will be True or False.\n \u2022 exit\n This signal is emitted when the exit button has been pressed to close the IconView.\n Mostly needed if the application is started as stand alone.\n \n Figure 12.46: Iconview Example\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1027 / 1290\n \n 12.3.6.24 Calculator widget\n This is a simple calculator widget, that can be used for numerical input.\n You can preset the display and retrieve the result or that preset value.\n calculator has the following properties:\n@@ -46075,15 +46075,15 @@\n font\n Display font to use\n hide_columns\n This will hide the given columns.\n The columns are designated (in order) as such: s,t,p,x,y,z,a,b,c,u,v,w,d,i,j,q.\n You can hide any number of columns including the select and comments.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1028 / 1290\n \n lathe_display_type\n Show lathe format\n There a couple ways to directly control the widget using Python.\n Using goobject to set the above listed properties:\n@@ -46124,15 +46124,15 @@\n Convenience method to hide buttons.\n You must call this after show_all().\n \u2022 [widget name].get_selected_tool()\n Return the user selected (highlighted) tool number.\n \u2022 [widget name].set_selected_tool(toolnumber)\n Selects (highlights) the requested tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1029 / 1290\n \n Figure 12.47: Tooleditor Example\n \n 12.3.6.26 Offsetpage\n The Offsetpage widget is used to display/edit the offsets of all the axes.\n@@ -46159,15 +46159,15 @@\n mm_text_template\n You can use Python formatting to display the position with different precision.\n imperial_text_template\n You can use Python formatting to display the position with different precision.\n There a couple ways to directly control the widget using Python.\n Using goobject to set the above listed properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1030 / 1290\n \n [widget name].set_property(\u201dhighlight_color\u201d,gdk.Color(\u2019blue\u2019))\n [widget name].set_property(\u201dforeground_color\u201d,gdk.Color(\u2019black\u2019))\n [widget name].set_property(\u201dhide_columns\u201d,\u201dxyzabcuvwt\u201d)\n [widget name].set_property(\u201dhide_rows\u201d,\u201d123456789abc\u201d)\n@@ -46193,15 +46193,15 @@\n This is a list of a list of offset-name/user-name pairs.\n The default text is the same as the offset name.\n \u2022 [widget name].get_names()\n This returns a list of a list of row-keyword/user-name pairs.\n The user name column is editable, so saving this list is user friendly.\n See set_names above.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1031 / 1290\n \n Figure 12.48: Offsetpage Example\n \n 12.3.6.27 HAL_sourceview widget\n \n@@ -46222,15 +46222,15 @@\n Sets the line to highlight.\n Uses the sourceview line numbers.\n \u2022 [widget name].get_line_number()\n Returns the currently highlighted line.\n \u2022 [widget name].line_up()\n Moves the highlighted line up one line.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1032 / 1290\n \n \u2022 [widget name].line_down()\n Moves the highlighted line down one line.\n \u2022 [widget name].load_file(\u2019filename\u2019)\n Loads a file.\n@@ -46252,15 +46252,15 @@\n use_double_click\n Boolean, True enables the mouse double click feature and a double click on an entry will submit\n that command.\n It is not recommended to use this feature on real machines, as a double click on a wrong entry\n may cause dangerous situations.\n Using goobject to set the above listed properties:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1033 / 1290\n \n [widget name].set_property(\u201dfont_size_tree\u201d,10)\n [widget name].set_property(\u201dfont_size_entry\u201d,20)\n [widget name].set_property(\u201duse_double_click\u201d,False)\n \n@@ -46273,15 +46273,15 @@\n \n Figure 12.50: HAL widgets in a bitmap Example\n \n 12.3.7 Action Widgets Reference\n GladeVCP includes a collection of \u201dcanned actions\u201d called VCP Action Widgets for the Glade user\n interface editor.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1034 / 1290\n \n Other than HAL widgets, which interact with HAL pins, VCP Actions interact with LinuxCNC and the\n G-code interpreter.\n \n VCP Action Widgets are derived from the Gtk.Action widget.\n@@ -46304,15 +46304,15 @@\n The command string may use special keywords to access important functions.\n \u2022 ACTION for access to the ACTION command library.\n \u2022 GSTAT for access to the Gstat status message library.\n \u2022 INFO for access to collected data from the INI file.\n \u2022 HAL for access to the HAL linuxcnc Python module\n \u2022 STAT for access to LinuxCNC\u2019s raw status via the LinuxCNC Python module.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1035 / 1290\n \n \u2022 CMD for access to LinuxCNC\u2019s commands via the LinuxCNC Python module.\n \u2022 EXT for access to the handler file functions if available.\n \u2022 linuxcnc for access to the LinuxCNC Python module.\n \u2022 self for access to the widget instance.\n@@ -46346,15 +46346,15 @@\n that the requested operation is running:\n \u2022 The Run toggle sends an AUTO_RUN command and waits in the pressed state until the interpreter is\n idle again.\n \u2022 The Stop toggle is inactive until the interpreter enters the active state (is running G-code) and then\n allows user to send AUTO_ABORT command.\n \u2022 The MDI toggle sends given MDI command and waits for its completion in pressed inactive state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1036 / 1290\n \n 12.3.7.4 The Action_MDI Toggle and Action_MDI widgets\n These widgets provide a means to execute arbitrary MDI commands.\n The Action_MDI widget does not wait for command completion as the Action_MDI Toggle does, which\n remains disabled until command complete.\n@@ -46374,15 +46374,15 @@\n 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\n works:\n \u2022 assume you have a HAL SpinBox named speed, and you want to pass its current value as a parameter\n in an MDI command.\n \u2022 The HAL SpinBox will have a float-type HAL pin named speed-f (see HalWidgets description).\n \u2022 To substitute this value in the MDI command, insert the HAL pin name enclosed like so: ${pin-name}\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1037 / 1290\n \n \u2022 for the above HAL SpinBox, we could use (MSG, \u201dThe speed is: ${speed-f}\u201d) just to show what\u2019s\n happening.\n The example UI file is configs/apps/gladevcp/mdi-command-example/speed.ui. Here\u2019s what you\n get when running it:\n@@ -46398,15 +46398,15 @@\n Figure 12.54: Action_MDI Advanced Example\n \n 12.3.7.8 Preparing for an MDI Action, and cleaning up afterwards\n 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\n might get changed by the command or subroutine - for example, a probing subroutine will very likely\n set the feed value quite low. With no further precautions, your previous feed setting will be overwritten by the probing subroutine\u2019s value.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1038 / 1290\n \n 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\n any state before executing the MDI Action, and to restore it to previous values afterwards. The signal\n names are mdi-command-start and mdi-command-stop; the handler names can be set in Glade like\n any other handler.\n@@ -46443,15 +46443,15 @@\n \u2022 mode-related:\n \u2013 mode-manual: emitted when LinuxCNC enters manual mode,\n \u2013 mode-mdi: emitted when LinuxCNC enters MDI mode,\n \u2013 mode-auto: emitted when LinuxCNC enters automatic mode,\n \u2022 interpreter-related: emitted when the G-code interpreter changes into that mode\n \u2013 interp-run\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1039 / 1290\n \n \u2013 interp-idle\n \u2013 interp-paused\n \u2013 interp-reading\n \u2013 interp-waiting\n@@ -46492,15 +46492,15 @@\n print(INFO.MACHINE_IS_METRIC)\n ACTION.SET_ERROR_MESSAGE(\u2019Something went wrong\u2019)\n \n More information can be found here: GladeVCP Libraries modules. There is a sample configuration\n that demonstrates using the core library with GladeVCP\u2019s action Python widgets and with a Python\n handler file. Try loading sim/axis/gladevcp/gladevcp_panel_tester.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1040 / 1290\n \n 12.3.8.3 An example: adding custom user callbacks in Python\n This is just a minimal example to convey the idea - details are laid out in the rest of this section.\n GladeVCP can not only manipulate or display HAL pins, you can also write regular event handlers in\n Python. This could be used, among others, to execute MDI commands. Here\u2019s how you do it:\n@@ -46535,15 +46535,15 @@\n The overall approach is as follows:\n \u2022 Design your UI with Glade, and set signal handlers where you want actions associated with a widget.\n \u2022 Write a Python module which contains callable objects (see handler models below).\n \u2022 Pass your module\u2019s path name to GladeVCP with the -u option.\n \u2022 GladeVCP imports the module, inspects it for signal handlers and connects them to the widget tree.\n \u2022 The main event loop is run.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1041 / 1290\n \n For simple tasks it is sufficient to define functions named after the Glade signal handlers. These will be\n called when the corresponding event happens in the widget tree. Here\u2019s a trivial example - it assumes\n that the pressed signal of a Gtk Button or HAL Button is linked to a callback called on_button_press:\n nhits = 0\n@@ -46589,15 +46589,15 @@\n self.active = False\n # connect to client-events from the host GUI\n def on_map_event(self, widget, data=None):\n top = widget.get_toplevel()\n print(\u201dmap event\u201d)\n top.connect(\u2019client-event\u2019, self.event)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1042 / 1290\n \n If during module inspection GladeVCP finds a function get_handlers, it calls it as follows:\n get_handlers(halcomp,builder,useropts)\n \n The arguments are:\n@@ -46632,15 +46632,15 @@\n screen). And the HAL component isn\u2019t ready as well, so its unsafe to access pins values in your\n __init__() method.\n If you want to have a callback to execute at program start after it is safe to access HAL pins, then a\n connect a handler to the realize signal of the top level window1 (which might be its only real purpose).\n At this point GladeVCP is done with all setup tasks, the HAL file has been run, and GladeVCP is about\n to enter the Gtk main loop.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1043 / 1290\n \n 12.3.8.7 Multiple callbacks with the same name\n Within a class, method names must be unique. However, it is OK to have multiple class instances\n passed to GladeVCP by get_handlers() with identically named methods. When the corresponding\n signal occurs, these methods will be called in definition order - module by module, and within a module,\n@@ -46680,15 +46680,15 @@\n are saved and to be restored. In the case of signature mismatch, a new INI file with default settings\n is generated.\n 12.3.8.10 Using persistent variables\n If you want any of Gtk widget state, HAL widgets output pin\u2019s values and/or class attributes of your\n handler class to be retained across invocations, proceed as follows:\n \u2022 Import the gladevcp.persistence module.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1044 / 1290\n \n \u2022 Decide which instance attributes, and their default values you want to have retained, if any.\n \u2022 Decide which widgets should have their state retained.\n \u2022 Describe these decisions in your handler class\u2019 \\__init()__ method through a nested dictionary\n as follows:\n@@ -46729,15 +46729,15 @@\n ini.restore_state(obj)\n Restore HAL out pins and obj\u2019s attributes as saved/initialized to default as above.\n 12.3.8.11 Saving the state on GladeVCP shutdown\n To save the widget and/or variable state on exit, proceed as follows:\n \u2022 Select some interior widget (type is not important, for instance a table).\n \u2022 In the Signals tab, select GtkObject. It should show a destroy signal in the first column.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1045 / 1290\n \n \u2022 Add the handler name, e.g. on_destroy, to the second column.\n \u2022 Add a Python handler like below:\n import gtk\n ...\n@@ -46776,15 +46776,15 @@\n 12.3.8.14 Adding HAL pins\n If you need HAL pins which are not associated with a specific HAL widget, add them as follows:\n import hal_glib\n ...\n # in your handler class __init__():\n self.example_trigger = hal_glib.GPin(halcomp.newpin(\u2019example-trigger\u2019, hal.HAL_BIT, hal. \u2190HAL_IN))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1046 / 1290\n \n To get a callback when this pin\u2019s value changes, associate a value-change callback with this pin, add:\n self.example_trigger.connect(\u2019value-changed\u2019, self._on_example_trigger_change)\n \n and define a callback method (or function, in this case leave out the self parameter):\n@@ -46826,15 +46826,15 @@\n self.max_value = hal_glib.GPin(halcomp.newpin(\u2019max-value\u2019, hal.HAL_FLOAT, hal. \u2190HAL_IN))\n self.max_value.connect(\u2019value-changed\u2019, self._on_max_value_change)\n inifile = linuxcnc.ini(os.getenv(\u201dINI_FILE_NAME\u201d))\n mmin = float(inifile.find(\u201dMETER\u201d, \u201dMIN\u201d) or 0.0)\n self.meter = self.builder.get_object(\u2019meter\u2019)\n self.meter.min = mmin\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1047 / 1290\n \n def get_handlers(halcomp,builder,useropts):\n return [HandlerClass(halcomp,builder,useropts)]\n \n 12.3.8.17 Value-changed callback with hal_glib\n@@ -46873,15 +46873,15 @@\n window1.visible to False, and ignore an initial unmap event.\n 2. My GladeVCP program starts, but no window appears where I expect it to be?\n The window AXIS allocates for GladeVCP will obtain the natural size of all its child widgets\n combined. It is the child widget\u2019s job to request a size (width and/or height). However, not all\n widgets do request a width greater than 0, for instance the Graph widget in its current form. If\n there\u2019s such a widget in your Glade file and it is the one which defines the layout you might want\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1048 / 1290\n \n to set its width explicitly. Note that setting the window1 width and height properties in Glade\n does not make sense because this window will be orphaned during re-parenting and hence its\n geometry will have no impact on layout (see above). The general rule is: if you manually run a UI\n file with gladevcp and its window has reasonable geometry, it should come up in AXIS\n@@ -46920,15 +46920,15 @@\n \u2022 If you\u2019re using HAL_table or HAL_HBox widgets, be aware they have an HAL pin associated with it\n which is off by default. This pin controls whether these container\u2019s children are active or not.\n \n 12.3.11 Implementation note: Key handling in AXIS\n We believe key handling works OK, but since it is new code, we\u2019re telling about it you so you can\n watch out for problems; please let us know of errors or odd behavior. This is the story:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1049 / 1290\n \n AXIS uses the TkInter widget set. GladeVCP applications use Gtk widgets and run in a separate\n process context. They are hooked into AXIS with the Xembed protocol. This allows a child application\n like GladeVCP to properly fit in a parent\u2019s window, and - in theory - have integrated event handling.\n However, this assumes that both parent and child application properly support the Xembed protocol,\n@@ -46964,15 +46964,15 @@\n identically-named files within subdirectories of the system directory specified by LINUXNC_AUX_GLADEVCP\n (e.g., /usr/share/linuxcnc/aux_gladevcp). This provision allows a developer to test an application by\n exporting GLADEVCP_EXTRAS to specify a private application directory without removing a systeminstalled application directory. Messages indicating rejected duplicates are printed to stdout.\n \n Support for auxiliary GladeVCP applications requires a Python module named importlib. This module\n may not be available in older installations like Ubuntu-Lucid.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1050 / 1290\n \n 12.4 GladeVCP Library modules\n Libraries are prebuilt Python modules that give added features to GladeVCP. In this way you can select\n what features you want - yet don\u2019t have to build common ones yourself.\n \n@@ -47019,15 +47019,15 @@\n MAX_LINEAR_JOG_VEL = 300 units per minute\n DEFAULT_ANGULAR_JOG_VEL =\n MIN_ANGULAR_JOG_VEL =\n MAX_ANGULAR_JOG_VEL =\n MAX_FEED_OVERRIDE =\n MAX_TRAJ_VELOCITY =\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1051 / 1290\n \n AVAILABLE_SPINDLES = int(self.INI.find(\u201dTRAJ\u201d, \u201dSPINDLES\u201d) or 1)\n DEFAULT_SPINDLE_0_SPEED = 200\n MAX_SPINDLE_0_SPEED = 2500\n MAX_SPINDLE_0_OVERRIDE = 100\n@@ -47077,15 +47077,15 @@\n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n INFO = Info()\n \n To access INFO data use this general syntax:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1052 / 1290\n \n home_state = INFO.NO_HOME_REQUIRED\n if INFO.MACHINE_IS_METRIC is True:\n print(\u2019Metric based\u2019)\n \n@@ -47124,15 +47124,15 @@\n ACTION.SET_TOOL_OFFSET(axis,value,fixture = False)\n ACTION.RUN()\n ACTION.ABORT()\n ACTION.PAUSE()\n ACTION.SET_MAX_VELOCITY_RATE(rate)\n ACTION.SET_RAPID_RATE(rate)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ACTION.SET_FEED_RATE(rate)\n ACTION.SET_SPINDLE_RATE(rate)\n ACTION.SET_JOG_RATE(rate)\n ACTION.SET_JOG_INCR(incr)\n ACTION.SET_JOG_RATE_ANGULAR(rate)\n ACTION.SET_JOG_INCR_ANGULAR(incr, text)\n@@ -47173,15 +47173,15 @@\n get_jog_info (num)\n jnum_check(num)\n ensure_mode(modes)\n open_filter_program(filename, filter)\n \n 1053 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1054 / 1290\n \n 12.5 QtVCP\n QtVCP is an infrastructure to build custom CNC screens or control panels for LinuxCNC.\n It displays a .ui file built with Qt Designer screen editor and combines this with Python programming\n to create a GUI screen for running a CNC machine.\n@@ -47189,54 +47189,54 @@\n code for even finer grain customization.\n \n 12.5.1 Showcase\n Few examples of QtVCP built screens and virtual control panels:\n \n Figure 12.55: QtDragon - 3/4-Axis Sample\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.56: QtDefault - 3-Axis Sample\n \n 1055 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.57: QtAxis - Self Adjusting Axis Sample\n \n 1056 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.58: Blender - 4-Axis Sample\n \n 1057 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1058 / 1290\n \n Figure 12.59: X1mill - 4-Axis Sample\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.60: cam_align - Camera Alignment VCP\n \n 1059 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.61: test_panel - Test Panel VCP\n \n 12.5.2 Overview\n Two files are used, individually or in combination, to add customizations:\n \n 1060 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1061 / 1290\n \n \u2022 A UI file that is a XML file made with Qt Designer graphical editor.\n \u2022 A handler file which is a Python code text file.\n Normally QtVCP uses the stock UI and handler file, but you can specify QtVCP to use local UI and\n handler files.\n@@ -47268,15 +47268,15 @@\n \n Options\n \u2022 -d Debugging on.\n \u2022 -i Enable info output.\n \u2022 -v Enable verbose debug output.\n \u2022 -q Enable only error debug output.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1062 / 1290\n \n \u2022 -a Set window always on top.\n \u2022 -c NAME HAL component name. Default is to use the UI file name.\n \u2022 -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\n -g +XOFFSET+YOFFSET for just position. Example: -g 200x400+0+100\n@@ -47310,15 +47310,15 @@\n The Qt Designer editor makes it relatively easy to build and edit this file.\n 12.5.2.4 Handler Files\n A handler file is a file containing Python code, which adds to QtVCP default routines.\n A handler file allows one to modify defaults, or add logic to a QtVCP screen without having to modify\n QtVCP\u2019s core code. In this way you can have custom behaviors.\n If present a handler file will be loaded. Only one file is allowed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1063 / 1290\n \n 12.5.2.5 Libraries Modules\n QtVCP, as built, does little more than display the screen and react to widgets. For more prebuilt\n behaviors there are available libraries (found in lib/python/qtvcp/lib in RIP LinuxCNC install).\n Libraries are prebuilt Python modules that add features to QtVCP. In this way you can select what\n@@ -47348,15 +47348,15 @@\n QtVCP will look for a folder named (in the launched configuration folder that holds\n the INI file).\n In that folder, QtVCP will load any of the available following files:\n \u2022 .ui,\n \u2022 _handler.py, and\n \u2022 .qss.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1064 / 1290\n \n 12.5.2.8 Modifying Stock Screens\n There are three ways to customize a screen/panel.\n Stylesheets can be used to set Qt properties. If a widget uses properties then they usually can be\n modified by stylesheets.\n@@ -47400,15 +47400,15 @@\n # You call this function without the usual preceding \u2019self.\u2019\n # This is because will will not be patching it into the original handler class instance\n # It will only be called from code in this file.\n def test_function(obj):\n print(dir(obj))\n # This is a new function we will added to the existing handler class instance.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1065 / 1290\n \n # Notice it calls the unbounded function with \u2019self\u2019 as an parameter \u2019self\u2019 is the only\n global reference available.\n # It references the window instance.\n def on_keycall_F10(self,event,state,shift,cntrl):\n@@ -47460,15 +47460,15 @@\n # function that calls our new function (of the same name)\n # defined in this file\n self.after_override__ = types.MethodType(after_override__, self)\n \n If you wish to modify a stock screen with full control, copy its UI and handler file to your configuration folder.\n There is a QtVCP panel to help with this:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1066 / 1290\n \n \u2022 Open a terminal and run the following command:\n qtvcp copy_dialog\n \n \u2022 Select the screen and destination folder in the dialog\n@@ -47484,40 +47484,40 @@\n QtVCP can be used to create control panels that interface with HAL.\n 12.5.3.1 Builtin Panels\n There are several builtin HAL panels available.\n In a terminal type qtvcp to see a list:\n test_panel\n Collection of useful widgets for testing HAL components, including speech of LED state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.62: QtVCP HAL Test Builtin Panel\n cam_align\n A camera display widget for rotational alignment.\n \n 1067 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.63: cam_align - Camera Alignment VCP\n sim_panel\n A small control panel to simulate MPG jogging controls etc.\n For simulated configurations.\n \n 1068 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.64: QtVCP Sim Builtin Panel\n vismach_mill_xyz\n 3D OpenGL view of a 3-axis milling machine.\n \n 1069 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1070 / 1290\n \n Figure 12.65: QtVismach - 3-Axis Mill Builtin Panel\n You can load these from the terminal or from a HAL file with this basic command:\n loadusr qtvcp test_panel\n \n@@ -47526,15 +47526,15 @@\n \n In this way HAL will wait till the HAL pins are made before continuing on.\n 12.5.3.2 Custom Panels\n You can of course make your own panel and load it.\n If you made a UI file named my_panel.ui and a HAL file named my_panel.hal, you would then load\n this from a terminal with:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1071 / 1290\n \n halrun -I -f my_panel.hal\n \n Example HAL file loading a QtVCP panel\n # load realtime components\n@@ -47583,15 +47583,15 @@\n 1\n \n In this case we load qtvcp using -Wn which waits for the panel to finish loading before continuing\n to run the next HAL command.\n This is to ensure that the panel created HAL pins are actually done in case they are used in the\n rest of the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1072 / 1290\n \n 12.5.4 Build A Simple Clean-sheet Custom Screen\n \n Figure 12.66: QtVCP Ugly custom screen\n 12.5.4.1 Overview\n@@ -47607,15 +47607,15 @@\n \n Add qtvcp_plugin.py link to the Qt Designer Search Path Then you must add a link to the\n qtvcp_plugin.py in one of the folders that Qt Designer will search into.\n In a RIP version of LinuxCNC qtvcp_plugin.py will be:\n \u2019~/LINUXCNC_PROJECT_NAME/lib/python/qtvcp/plugins/qtvcp_plugin.py\u2019\n For a Package installed version it should be:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1073 / 1290\n \n \u2019usr/lib/python2.7/qtvcp/plugins/qtvcp_plugin.py\u2019 or\n \u2019usr/lib/python2.7/dist-packages/qtvcp/plugins/qtvcp_plugin.py\u2019\n Make a symbolic link to the above file and move it to one of the places Qt Designer searches in.\n Qt Designer searches in these two place for links (pick one):\n@@ -47651,15 +47651,15 @@\n This widget doesn\u2019t add anything visually but sets up some common options.\n It\u2019s recommended to always add this widget before any other.\n Right click on the main window, not the ScreenOptions widget, and set the layout as vertical to make\n the ScreenOptions fullsized.\n Add Panel Content On the right hand side there is a panel with tabs for a Property editor and an\n Object inspector.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1074 / 1290\n \n On the Object inspector click on the ScreenOptions.\n Then switch to the Property Editor and, under the ScreenOptions heading, toggle filedialog_option.\n Drag and drop a GCodeGraphics widget and a GcodeEditor widget.\n Place and resize them as you see fit leaving some room for buttons.\n@@ -47686,21 +47686,21 @@\n Do the same for all the other button with the addition of:\n \u2022 With the Home button we must also change the joint_number property to -1.\n This tells the controller to home all the axes rather then a specific axis.\n \u2022 With the Pause button:\n \u2013 Under the Indicated_PushButton heading check the indicator_option.\n \u2013 Under the QAbstactButton heading check checkable.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.67: Qt Designer: Selecting Pause Button\u2019s Properties\n \n 1075 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1076 / 1290\n \n Save The .ui File We then need to save this design as tester.ui in the sim/qtvcp folder.\n We are saving it as tester as that is a file name that QtVCP recognizes and will use a built in handler\n file to display it.\n 12.5.4.4 Handler file\n@@ -47733,15 +47733,15 @@\n \u2022 after the screen is built,\n \u2022 after all the POSTGUI_HALFILEs are run.\n In our example there are no HAL pins to connect.\n \n 12.5.5 Handler File In Detail\n Handler files are used to create custom controls using Python.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.5.5.1 Overview\n Here is a sample handler file.\n It\u2019s broken up in sections for ease of discussion.\n ############################\n # **** IMPORT SECTION **** #\n ############################\n@@ -47788,15 +47788,15 @@\n def initialized__(self):\n pass\n def processed_key_event__(self,receiver,event,is_pressed,key,code,shift,cntrl):\n # when typing in MDI, we don\u2019t want keybinding to call functions\n \n 1077 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1078 / 1290\n \n # so we catch and process the events directly.\n # We do want ESC, F1 and F2 to call keybinding functions though\n if code not in(QtCore.Qt.Key_Escape,QtCore.Qt.Key_F1 ,QtCore.Qt.Key_F2,\n QtCore.Qt.Key_F3,QtCore.Qt.Key_F5,QtCore.Qt.Key_F5):\n@@ -47847,15 +47847,15 @@\n #######################\n # CALLBACKS FROM FORM #\n #######################\n #####################\n # GENERAL FUNCTIONS #\n #####################\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n # keyboard jogging from key binding calls\n # double the rate if fast is true\n def kb_jog(self, state, joint, direction, fast = False, linear = True):\n if not STATUS.is_man_mode() or not STATUS.machine_is_on():\n return\n if linear:\n@@ -47904,15 +47904,15 @@\n def on_keycall_ZPOS(self,event,state,shift,cntrl):\n self.kb_jog(state, 2, 1, shift)\n def on_keycall_ZNEG(self,event,state,shift,cntrl):\n self.kb_jog(state, 2, -1, shift)\n \n 1079 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1080 / 1290\n \n def on_keycall_APOS(self,event,state,shift,cntrl):\n pass\n #self.kb_jog(state, 3, 1, shift, False)\n def on_keycall_ANEG(self,event,state,shift,cntrl):\n@@ -47947,15 +47947,15 @@\n 12.5.5.5 INITIALIZE Section\n Like all Python libraries the +__init__+ function is called when the library is first instantiated.\n This is where you would set up defaults, as well as reference variables and global variables.\n The widget references are not available at this point.\n The variables halcomp, widgets and paths give access to QtVCP\u2019s HAL component, widgets, and path\n info respectively.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1081 / 1290\n \n 12.5.5.6 SPECIAL FUNCTIONS Section\n There are several special functions that QtVCP looks for in the handler file.\n If QtVCP finds these it will call them, if not it will silently ignore them.\n class_patch__(self):\n@@ -47993,15 +47993,15 @@\n The Linux system will not shutdown if using this function, you will have to do that yourself.\n QtVCP/LinuxCNC will terminate without a prompt once this function returns.\n closing_cleanup__(self):\n This function is called just before the screen closes. It can be used to do cleanup before closing.\n 12.5.5.7 STATUS CALLBACKS Section\n By convention this is where you would put functions that are callbacks from STATUS definitions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1082 / 1290\n \n 12.5.5.8 CALLBACKS FROM FORM Section\n By convention this is where you would put functions that are callbacks from the widgets connected\n to the MainWindow in the Qt Designer editor.\n 12.5.5.9 GENERAL FUNCTIONS Section\n@@ -48031,15 +48031,15 @@\n 12.5.6.1 Overview\n In the Qt Designer editor:\n \u2022 You create user function slots\n \u2022 You connect the slots to widgets using signals.\n In the handler file:\n \u2022 You create the slot\u2019s functions defined in Qt Designer.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1083 / 1290\n \n 12.5.6.2 Using Qt Designer to add Slots\n When you have loaded your screen into Qt Designer, add a plain PushButton to the screen.\n You could change the name of the button to something interesting like test_button.\n There are two ways to edit connections - This is the graphical way.\n@@ -48055,15 +48055,15 @@\n \u2022 You can now edit a new slot name.\n \u2022 Erase the default name slot() and change it to test_button()\n \u2022 Press the OK button.\n \u2022 You\u2019ll be back to the Configure Connections dialog.\n \u2022 Now you can select your new slot in the slot list.\n \u2022 Then press OK and save the file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1084 / 1290\n \n Figure 12.68: Qt Designer Signal/Slot Selection\n \n 12.5.6.3 Python Handler Changes\n Now you must add the function to the handler file.\n@@ -48080,15 +48080,15 @@\n \n In fact it doesn\u2019t matter where in the handler class you put the commands but by convention this is\n where to put it.\n Save the handler file.\n Now when you load your screen and press the button it should print the name of the button in the\n terminal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1085 / 1290\n \n 12.5.7 More Information\n QtVCP Builtin Virtual Control Panels\n QtVCP Widgets\n QtVCP Libraries\n@@ -48105,25 +48105,25 @@\n In a terminal type qtvcp list to see a list.\n 12.6.1.1 copy\n Used for copying QtVCP\u2019s builtin Screens/VCP Panels/QtVismach code to a folder so one can\n customize it.\n In a terminal run:\n qtvcp copy\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1086 / 1290\n \n Figure 12.69: QtVCP copy Dialog - Screen, VCP Panel or QtVismach Code Copy Panel\n \n 12.6.1.2 spindle_belts\n This panel is designed to display additional RS485 VFD data and also to configure a 4 sheave, 2 belt\n spindle drive via a series of buttons.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1087 / 1290\n \n In addition, it is also a useful template to use for your custom panel because it includes:\n \u2022 Display of additional HAL data\n \u2022 Buttons and button groups\n \u2022 Dynamic changes to button enabled/disabled state based on the state of other buttons\n@@ -48136,15 +48136,15 @@\n \u2022 A custom component that scales the VFD frequency to obtain the desired spindle speed.\n \u2022 A belt driven spindle that uses two belts and an intermediate idler pulley much like a drill press.\n \u2022 Connect the input pins qtdragon.belts. in your postgui HAL file.\n The belts are broken into two button groups, the front belts and the rear belts. These are numbered as\n per the plate on the machine. Buttons in a group are mutually exclusive, i.e., only one can be selected\n in the group.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1088 / 1290\n \n Additionally, it\u2019s not possible to have both belts on the same level with this kind of mechanism because\n you cannot fit two belts to the one idler pulley sheave. So if a belt is selected, its opposite button is\n disabled. E.g., if belt 3 is selected, belt 7 is disabled.\n Add these lines to the [DISPLAY] section in your .ini file\n@@ -48171,15 +48171,15 @@\n \u2022 The dial\u2019s range can be adjusted from a drop down menu.\n \u2022 The output can be scaled with the spinbox.\n \u2022 A combobox can be used to automatically select and connect to a signal.\n loadusr qtvcp test_dial\n \n Figure 12.70: QtVCP test_dial Panel - Test Dial VCP\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.6.1.4 test_button\n \u2022 This panel has a button that will set a HAL pin.\n \u2022 The button can be selected as a momentary or a toggle button.\n \u2022 The button\u2019s indicator color can be adjusted from a drop down menu.\n \u2022 You can add more buttons from the drop down menu.\n \u2022 You can load a Halmeter from the drop down menu.\n@@ -48201,15 +48201,15 @@\n \u2022 A combobox can be used to automatically select and connect to a pin/signal.\n \u2022 You can add more LEDs from the drop down menu.\n \u2022 The LED can be detached from the main windows.\n Here is how to load test_led from a HAL script:\n \n 1089 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1090 / 1290\n \n loadusr qtvcp test_led\n loadusr qtvcp -o 4 test_led\n \n The -o switch sets how many LEDs the panel starts with.\n@@ -48217,24 +48217,24 @@\n \n Figure 12.72: QtVCP test_dial Panel - Test LED VCP\n \n 12.6.1.6 test_panel\n Collection of useful widgets for testing HAL component, including speech of LED state.\n loadusr qtvcp test_panel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.73: QtVCP test_panel - HAL Component Testing Panel\n \n 12.6.1.7 cam_align\n A camera display widget for rotational alignment.\n \n 1091 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1092 / 1290\n \n Figure 12.74: QtVCP cam_align Panel - Camera Based Alignment Panel\n Usage Add these lines to the INI file:\n [DISPLAY]\n EMBED_TAB_NAME = cam_align\n@@ -48248,15 +48248,15 @@\n You can add window width and height size, rotation increment, and camera number from the INI with\n -o options.\n EMBED_TAB_COMMAND = halcmd loadusr -Wn qtvcp_embed qtvcp -d -c qtvcp_embed -x {XID} -o size \u2190=400,400 -o rotincr=.2 -o camnumber=0 cam_align\n \n Mouse controls:\n \u2022 left mouse single click - increase cross hair rotation one increment\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1093 / 1290\n \n \u2022 right mouse single click - decrease cross hair rotation one increment\n \u2022 middle mouse single click - cycle through rotation increments\n \u2022 left mouse hold and scroll - scroll camera zoom\n \u2022 right mouse hold and scroll - scroll cross hair rotation angle\n@@ -48281,95 +48281,95 @@\n If you want to hide both, use a comma between them with no spaces.\n The -a option will make the panel always-on-top of all windows.\n loadusr qtvcp sim_panel\n \n Here we load the panel with no MPG selection buttons and the always-on-top option.\n loadusr qtvcp -a -o hide=groupBoxSelection sim_panel\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1094 / 1290\n \n Figure 12.75: QtVCP sim_panel - Simulated Controls Panel For Screen Testing.\n \n 12.6.1.9 tool_dialog\n Manual tool change dialog that gives tool description.\n loadusr -Wn tool_dialog qtvcp -o speak_on -o audio_on tool_dialog\n \n Options:\n \u2022 -o notify_on - use desktop notify dialogs instead of QtVCP native ones.\n \u2022 -o audio_on - play sound on tool change\n \u2022 -o speak_on - speak announcement of tool change\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.76: QtVCP tool_dialog - Manual Tool Change Dialog\n \n 12.6.2 vismach 3D Simulation Panels\n These panels are prebuilt simulation of common machine types.\n These are also embed-able in other screens such as AXIS or GMOCCAPY.\n 12.6.2.1 QtVCP vismach_mill_xyz\n 3D OpenGL view of a 3-Axis milling machine.\n loadusr qtvcp vismach_mill_xyz\n \n 1095 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1096 / 1290\n \n Figure 12.77: QtVCP vismach_mill_xyz - 3-Axis Mill 3D View Panel\n \n 12.6.2.2 QtVCP vismach_router_atc\n 3D OpenGL view of a 3-Axis router style, gantry bed milling machine.\n This particular panel shows how to define and connect the model parts in the handler file, rather then\n importing the pre-built model from QtVCP\u2019s vismach library.\n loadusr qtvcp vismach_router_atc\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1097 / 1290\n \n Figure 12.78: QtVCP vismach_router_atc - 3-Axis Gantry Bed Mill 3D View Panel\n \n 12.6.2.3 QtVCP vismach_scara\n 3D OpenGL view of a SCARA based milling machine.\n loadusr qtvcp vismach_scara\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.79: QtVCP vismach_scara - SCARA Mill 3D View Panel\n \n 12.6.2.4 QtVCP vismach_millturn\n 3D OpenGL view of a 3-Axis milling machine with an A axis/spindle.\n loadusr qtvcp vismach_millturn\n \n 1098 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.80: QtVCP vismach_millturn - 4 Axis MillTurn 3D View Panel\n \n 12.6.2.5 QtVCP vismach_mill_5axis_gantry\n 3D OpenGL view of a 5-Axis gantry type milling machine.\n loadusr qtvcp vismach_mill_5axis_gantry\n \n 1099 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1100 / 1290\n \n Figure 12.81: QtVCP vismach_mill_5axis_gantry - 5-AxIs Gantry Mill 3D View Panel\n \n 12.6.2.6 QtVCP vismach_fanuc_200f\n 3D openGL view of a 6 joint robotic arm.\n loadusr qtvcp vismach_fanuc_200f\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1101 / 1290\n \n Figure 12.82: QtVCP vismach_fanuc_200f - 6 Joint Robotic Arm\n \n 12.6.3 Custom Virtual Control Panels\n You can of course make your own panel and load it.\n@@ -48397,15 +48397,15 @@\n # connect pins\n net bit-input1\n \n test_panel.checkbox_1\n \n classicladder.0.in-00\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1102 / 1290\n \n net bit-hide\n \n test_panel.checkbox_4\n \n@@ -48457,15 +48457,15 @@\n There are panels available that are included with LinuxCNC. To see a list open a terminal and type\n qtvcp and press return.\n You will get a help printout and a list of builtin screen and panels.\n Pick any of the names from the panel list and add that to the COMMAND entry after qtvcp.\n The builtin panel search path is share/qtvcp/panels/PANELNAME.\n Run-In-Place and installed versions of LinuxCNC have these in different locations on the system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1103 / 1290\n \n 12.6.4.3 Location of Custom Panels\n Custom panels can be embedded too -either a modified builtin panel or a new user-built one.\n When loading panels, QtVCP looks in the configuration folders path for qtvcp/panels/PANELNAME/PANELNAME.ui.\n PANNELNAME being any valid string with no spaces. If no path is found there, then looks in the\n@@ -48501,15 +48501,15 @@\n 12.7 QtVCP Widgets\n Qtscreen uses QtVCP widgets for LinuxCNC integration.\n Widget is the general name for the UI objects such as buttons and labels in PyQt.\n You are free to use any available default widgets in the Qt Designer editor.\n There are also special widgets made for LinuxCNC that make integration easier. These are split in\n two, heading on the right side of the editor:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1104 / 1290\n \n \u2022 One is for HAL only widgets.\n \u2022 The other is for CNC control widgets.\n You are free to mix them in any way on your panel.\n \n@@ -48533,15 +48533,15 @@\n Figure 12.83: QtVCP LED: LED Indicator Widget\n A LED like indicator that optionally follows a HAL pin\u2019s logic.\n halpin_option\n Selects if the LED follows an input HAL pin or program state.\n diameter\n Diameter of the LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1105 / 1290\n \n color\n Color of the LED when on.\n off_color\n Color of the LED when off.\n@@ -48565,15 +48565,15 @@\n This widget allows the user to check a box to set a HAL pin true or false.\n It is based on PyQt\u2019s QCheckButton.\n 12.7.1.5 RadioButton Widget\n This widget allows a user to set HAL pins true or false. Only one RadioButton widget of a group\n can be true at a time.\n It is based on PyQt\u2019s QRadioButton.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1106 / 1290\n \n 12.7.1.6 Gauge - Round Dial Gauge Widget\n \n Figure 12.84: QtVCP Gauge: Round Dial Gauge Widget\n Round Gauge can be used in a LinuxCNC GUI to display an input parameter on the dial face.\n@@ -48595,15 +48595,15 @@\n This is the number of ticks/gauge readings on the gauge face.\n It should be set to a number that ensures the text readings around the gauge face are readable.\n The minimum allowed value is 2.\n zone1_color\n Zone1 extends from the maximum reading to the threshold point.\n It can be set to any RGB color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1107 / 1290\n \n zone2_color\n Zone2 extends from the threshold point to the minimum reading, which is 0.\n It can be set to any RGB color.\n bezel_color\n@@ -48630,15 +48630,15 @@\n This widget is used to indicate level or value, usually of a HAL s32/float pin.\n you can also disable the HAL pin and use Qt signals or python commands to change the level.\n HalBar is a subclass of the Bar widget, so it inherits these properties\n \n \u2022 stepColorList: a list of color strings, the number of colors defines the number of bars.\n \u2022 backgroundColor: a QColor definition of the background color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1108 / 1290\n \n \u2022 setMaximum: an integer that defines the maximum level of indication.\n \u2022 setMinimum: an integer that defines the lowest level of indication.\n \u2022 pinType: to select HAL pins type:\n \u2013 NONE no HAL pin will be added\n@@ -48655,15 +48655,15 @@\n qproperty-stepColorList: \u2019green,green,#00b600,#00b600,#00d600,#00d600,yellow,yellow,red \u2190,red\u2019;\n }\n \n 12.7.1.8 HALPad - HAL Buttons Joypad\n \n Figure 12.86: QtVCP HALPad: HAL Buttons Joypad\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1109 / 1290\n \n This widget looks and acts like a 5 buttons D-pad, with an LED ring.\n Each button has an selectable type (Bit, S32 or Float) output HAL pin.\n The LED center ring has selectable colors for off and on and is controlled by a bit HAL pin.\n HALPad ENUMS There are enumerated constants used:\n@@ -48700,15 +48700,15 @@\n File or resource path to an image to display in the described button location.\n If the reset button is pressed in the Qt Designer editor property, the image will not be displayed\n (allowing optional text).\n left_text , right_text , center_text , top_text , bottom_text\n A text string to be displayed in the described button location.\n If left blank an image can be designated to be displayed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1110 / 1290\n \n true_color , false_color\n Color selection for the center LED ring to be displayed when the .light.center HAL\n pin is True or False.\n text_color\n@@ -48729,15 +48729,15 @@\n 12.7.5.1 [IndicatedPushButton] below for more info.\n \n It also has other options.\n It is based on PyQt\u2019s QPushButton.\n 12.7.1.10 focusOverlay - Focus Overlay Widget\n This widget places a colored overlay over the screen, usually while a dialog is showing.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Figure 12.87: Focus overlay example for confirm close prompt\n Used to create a focused feel and to draw attention to critical information.\n It can also show a translucent image.\n It can also display message text and buttons.\n This widget can be controlled with STATUS messages.\n 12.7.1.11 gridLayout - Grid Layout Widget\n@@ -48745,15 +48745,15 @@\n Disabled widgets typically have a different color and do not respond to actions.\n It is based on PyQt\u2019s QGridLayout.\n 12.7.1.12 hal_label - HAL Label Widget\n This widget displays values sent to it.\n \n 1111 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1112 / 1290\n \n Values can be sent from:\n \u2022 HAL pins\n The input pin can be selected as Bit, S32, Float or no pin selected\n \u2022 Programmatically\n@@ -48788,15 +48788,15 @@\n When using floats you can set a formatting string.\n You must set the digitCount property to an appropriate setting to display the largest number.\n Properties\n pin_name\n Option string to be used as the HAL pin name.\n If set to an empty string the widget name will be used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1113 / 1290\n \n bit_pin_type\n Selects the input pin as type BIT.\n s32_pin_type\n Selects the input pin as type S32.\n@@ -48827,15 +48827,15 @@\n a large view of a widget and a smaller multi widget view.\n It is different from a stacked widget as it can pull a widget from anywhere in the screen and place it\n in its page with a different layout than it originally had.\n The original widget must be in a layout for switcher to put it back.\n In Qt Designer you will:\n \u2022 Add the WidgetSwitcher widget on screen.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1114 / 1290\n \n \u2022 Right click the WidgetSwitcher and add a page.\n \u2022 Populate it with the widgets/layouts you wish to see in a default form.\n \u2022 Add as many pages as there are views to switch to.\n \u2022 On each page, add a layout widget.\n@@ -48868,15 +48868,15 @@\n Estop , Machine On , Auto , mdi , manual , run , run_from_line status\n Gets line number from STATUS message gcode-line-selected.\n run_from_line slot\n Gets line number from Qt Designer int/str slot setRunFromLine.\n abort , pause , load dialog\n Requires a dialog widget present.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1115 / 1290\n \n Camview dialog\n Requires camview dialog widget present.\n origin offset dialog\n Requires origin offset dialog widget present.\n@@ -48917,15 +48917,15 @@\n spindle fwd , spindle backward , spindle stop , spindle up , spindle down , view change\n Set view_type_string.\n limits override , flood , mist , block delete , optional stop , mdi command\n Set command_string, i.e.,calls a hard coded MDI command\n INI mdi number\n Set ini_mdi_number, i.e., calls an INI based MDI command\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1116 / 1290\n \n dro absolute , dro relative , dro dtg , exit screen\n Closes down LinuxCNC\n Override limits\n Temporarily override hard limits\n@@ -48964,15 +48964,15 @@\n Then in the INI file, under the heading [MDI_COMMAND_LIST] add appropriate lines.\n The commands are separated by the ;.\n The label is set after the comma, and \\n symbol adds a line break.\n [MDI_COMMAND_LIST]\n MDI_COMMAND = G0 Z25;X0 Y0;Z0, Goto\\nUser\\nZero\n MDI_COMMAND = G53 G0 Z0;G53 G0 X0 Y0, Goto\\nMachn\\nZero\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Action buttons are subclassed from\n for more information about:\n \n 1117 / 1290\n \n 12.7.5.1 [IndicatedPushButton]. See the following sections\n@@ -49006,15 +49006,15 @@\n If the button is set checkable, it will indicate which axis is selected.\n If you press and hold the button a pop up menu will show allowing one to:\n \u2022 Zero the axis\n \u2022 Divide the axis by 2\n \u2022 Set the axis arbitrarily\n \u2022 Reset the axis to the last number recorded\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1118 / 1290\n \n You must have selected an entry dialog that corresponds to the dialog_code_string, usually this is\n selected from the screenOptions widget.\n You can select the property halpin_option, it will then set a HAL pin true when the axis is selected.\n The property joint_number should be set to the appropriate joint number. The property axis_letter\n@@ -49049,15 +49049,15 @@\n DROLabel {\n font: 25pt \u201dLato Heavy\u201d;\n qproperty-imperial_template: \u2019%9.4f\u2019;\n qproperty-metric_template: \u2019%10.3f\u2019;\n qproperty-angular_template: \u2019%11.2f\u2019;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1119 / 1290\n \n DROLabel[isHomed=false] {\n color: red;\n }\n DROLabel[isHomed=true] {\n@@ -49103,15 +49103,15 @@\n qproperty-styleFont4: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont5: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont6: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFont7: \u201dTimes,12,-1,0,90,0,0,0,0,0\u201d;\n qproperty-styleFontMargin: \u201dTimes,14,-1,0,90,0,0,0,0,0\u201d;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1120 / 1290\n \n For GcodeDisplay widget\u2019s default G-code lexer:\n \u2022 styleColor0 = Default: Everything not part of the groups below\n \u2022 styleColor1 = LineNo and Comments: Nxxx and comments (characters inside of and including\n () or anything after ; (when used outside of parenthesis) with the exception of the note below)\n@@ -49132,15 +49132,15 @@\n \u201dstyle name, size, -1, 0, bold setting (0-99), italics (0-1),\n underline (0-1),0,0,0\u201d\n It is based on PyQt\u2019s QsciScintilla.\n 12.7.2.8 GcodeEditor - G-code Program Editor Widget\n This is an extension of the GcodeDisplay widget that adds editing convenience.\n It is based on PyQt\u2019s QWidget which incorporates GcodeDisplay widget.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1121 / 1290\n \n 12.7.2.9 GCodeGraphics - G-code Graphic Backplot Widget\n \n Figure 12.88: QtVCP GcodeGraphics: G-code Graphic Backplot Widget\n This displays the current G-code in a graphical form.\n@@ -49157,15 +49157,15 @@\n \n _view (string)\n Sets the default view orientation on GUI load.\n Valid choices for a lathe are p, y, y2. For other screens, valid choices are p, x, y, z, z2.\n The following shows an example of how to set this property (referenced using the widget user\n selected name):\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n #gcodegraphics{\n qproperty-_view: z;\n }\n \n _dro (bool)\n Determines whether or not to show the DRO.\n@@ -49214,15 +49214,15 @@\n The following shows an example of how to set this property:\n #gcodegraphics{\n qproperty-overlay_color: blue;\n }\n \n 1122 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n background_color (primary, secondary, or RGBA formatted color)\n Sets the default background color.\n The following shows an example of how to set this property:\n #gcodegraphics{\n qproperty-background_color: blue;\n }\n@@ -49269,15 +49269,15 @@\n qproperty-MouseButtonMode: 1;\n }\n \n There are 12 valid modes:\n \n 1123 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Mode\n 0\n 1\n 2\n 3\n 4\n@@ -49359,15 +49359,15 @@\n \u2022 rotate-up\n \u2022 rotate-down\n \u2022 overlay-dro-on\n \u2022 overlay-dro-off\n \u2022 overlay-offsets-on\n \u2022 overlay-offsets-off\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \u2022 alpha-mode-on\n \u2022 alpha-mode-off\n \u2022 inhibit-selection-on\n \u2022 inhibit-selection-off\n \u2022 dimensions-on\n \u2022 dimensions-off\n@@ -49408,15 +49408,15 @@\n This will be the text set when the option is False.\n You can use Qt rich text code for different fonts/colors etc.\n Typical template for metric mode in false state, might be: Imperial Mode.\n It is based on PyQt\u2019s QLabel.\n \n 1125 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1126 / 1290\n \n 12.7.2.11 StatusLabel - Controller Variables State Label Display Widget\n This will display a label based on selectable status of the machine controller.\n You can change how the status will be displayed by substituting python formatting code in the text\n template. You can also use rich text for different fonts/colors etc.\n@@ -49455,15 +49455,15 @@\n jograte_angular_status\n Shows the current QtVCP based Angular Jog Rate.\n jogincr_status\n Shows the current QtVCP based Jog increment.\n jogincr_angular_status\n Shows the current QtVCP based Angular Jog increment.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1127 / 1290\n \n machine_state_status\n Shows the current machine interpreter state using the text described from the machine_state_list.\n The interpreter states are:\n \u2022 Estopped\n@@ -49502,15 +49502,15 @@\n tool_number_status\n Returns the tool number of the current loaded tool.\n tool_offset_status\n Returns the offset of the current loaded tool, indexed by index_number to select axis (0=x,1=y,etc.).\n user_system_status\n Shows the active user coordinate system (G5x setting).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1128 / 1290\n \n Other Properties\n index_number\n Integer that specifies the tool status index to display.\n state_label_list\n@@ -49539,15 +49539,15 @@\n Toggles between 2 images: axis not homed, axis homed.\n *watch_all_homed\n Would toggle between 2 images: not all homed, all homed.\n *watch_hard_limits\n Would toggle between 2 images or one per joint.\n Here is an example of using it to display an icon of Z axis homing state:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1129 / 1290\n \n Figure 12.89: QtVCP StatusImageSwitcher: Controller Status Image Switcher\n In the properties section notice that:\n \u2022 watch_axis_homed is checked\n \u2022 axis_letter is set to Z\n@@ -49560,15 +49560,15 @@\n \n \u2022 Right click the image name and you should see Copy path.\n \u2022 Click Copy path.\n \u2022 Now double click the image list property so the dialog shows.\n \u2022 Click the New button.\n \u2022 Paste the image path in the entry box.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1130 / 1290\n \n Do that again for the next image.\n Use a clear image to represent a hidden icon.\n You can test the images display from the image list by changing the image number. In this case 0 is\n unhomed and 1 would be homed.\n@@ -49602,15 +49602,15 @@\n notify_option\n Hooking into the desktop notification bubbles for error and messages.\n notify_max_messages\n Number of messages shown on screen at one time.\n catch_close_option\n Catching the close event to pop up a \u2019are you sure\u2019 prompt.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1131 / 1290\n \n close_overlay_color\n Color of transparent layer shown when quitting.\n catch_error_option\n Monitoring of the LinuxCNC error channel.\n@@ -49652,15 +49652,15 @@\n tool_overlay_color\n Color of transparent layer shown when the tool dialog is shown.\n ToolUseDesktopNotify\n Option to use desktop notify dialogs for manual tool change dialog.\n ToolFrameless\n Frameless dialogs can not be easily moved by users.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1132 / 1290\n \n fileDialog_option\n Sets up the file choosing dialog.\n file_overlay_color\n Color of transparent layer shown when the file dialog is shown.\n@@ -49698,15 +49698,15 @@\n Color of transparent layer shown when the machineLog dialog is shown.\n runFromLineDialog_option\n Sets up a dialog to display starting options when starting machine execution from a arbitrary\n line.\n runFromLine_overlay_color\n Color of transparent layer shown when the runFromLine dialog is shown.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1133 / 1290\n \n Setting Properties Programmatically The screen designer chooses the default settings of the\n screenOptions widget.\n Once chosen, most won\u2019t ever need to be changed. But if needed, some can be changed in the handler\n file or in stylesheets.\n@@ -49749,15 +49749,15 @@\n Turns all sounds on or off.\n [MCH_MSG_OPTIONS]\n mchnMsg_play_sound (bool)\n To play alert sound when dialog pops.\n mchnMsg_speak_errors (bool)\n To use Espeak to speak error messages.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1134 / 1290\n \n mchnMsg_speak_text (bool)\n To use Espeak to speak all other messages.\n mchnMsg_sound_type (str)\n Sound to play when messages displayed. See notes below.\n@@ -49797,15 +49797,15 @@\n \u2013 DONE\n \u2013 ATTENTION\n \u2013 RING\n \u2013 LOGIN\n \u2013 LOGOUT\n \u2013 BELL\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1135 / 1290\n \n These Sound options require python3-gst1.0 installed.\n \u2022 Audio Files\n You can also specify a file path to an arbitrary audio file.\n You can use ~ in path to substitute for the user home file path.\n@@ -49839,15 +49839,15 @@\n jograte_angular_rate\n Selects a angular jograte slider.\n max_velocity_rate\n Selects a maximum velocity rate slider.\n alertState\n String to define style change: read-only, under, over and normal.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1136 / 1290\n \n alertUnder\n Sets the float value that signals the stylesheet for under warning.\n alertOver\n Sets the float value that signals the stylesheet for over warning.\n@@ -49883,15 +49883,15 @@\n diameter\n Diameter of the LED.\n color\n Color of the LED when on.\n off_color\n Color of the LED when off.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1137 / 1290\n \n alignment\n Qt Alignment hint.\n state\n Current state of LED (for testing in Qt Designer).\n@@ -49928,15 +49928,15 @@\n \u2022 Rapid override rate\n It is based on PyQt\u2019s QProgressBar.\n 12.7.2.19 SystemToolButton - User System Selection Widget\n This widget allows you to manually select a G5x user system by pressing and holding.\n If you don\u2019t set the button text it will automatically update to the current system.\n It is based on PyQt\u2019s QToolButton.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1138 / 1290\n \n 12.7.2.20 MacroTab - Special Macros Widget\n \n Figure 12.90: QtVCP MacroTab: Special Macros Widget\n This widget allows a user to select and adjust special macro programs for doing small jobs.\n@@ -49954,15 +49954,15 @@\n ; MACROOPTIONS = load:yes,save:yes,default:default.txt,path:~/macros\n \n MACROCOMMAND This is the first line in the O-word file.\n It is a comma separated list of text to display above an entry.\n There will be one for every variable required in the O-word function.\n If the macro does not require variables, leave it empty:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1139 / 1290\n \n ; MACROCOMMAND=\n \n MACRODEFAULTS This must be the second line in the O-word file.\n It is a comma separated list of the default values for each variable in the O-word function.\n@@ -49999,15 +49999,15 @@\n MACROOPTIONS This optional line must be the fourth line in the O-word file.\n It is a comma separated list of keyword and data:\n LOAD:yes\n Shows a load button.\n SAVE:yes\n Shows a save button.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1140 / 1290\n \n 12.7.2.21 MDILine - MDI Commands Line Entry Widget\n One can enter MDI commands here.\n A popup keyboard is available.\n Embedded Commands There are also embedded commands available from this widget.\n@@ -50044,15 +50044,15 @@\n Disconnects a pin from a signal.\n An error will result if the pin does not exist.\n Running LinuxCNC from terminal may help determine the root cause as error messages from\n hal_lib.c will be displayed there.\n \u2022 Syntax: unlinkp \n \u2022 Example: unlinkp motion.jog-stop\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1141 / 1290\n \n The MDILine function spindle_inhibit can be used by a GUI\u2019s handler file to inhibit M3, M4, and M5\n spindle commands if necessary.\n \n It is based on PyQt\u2019s QLineEdit.\n@@ -50063,15 +50063,15 @@\n default):\n MDI_HISTORY_FILE = \u2019~/.axis_mdi_history\u2019\n \n 12.7.2.23 MDITouchy - Touch Screen MDI Entry Widget\n \n Figure 12.91: QtVCP MDITouchy: Touch Screen MDI Entry Widget\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1142 / 1290\n \n This widget displays buttons and entry lines to use for entering MDI commands.\n Based on LinuxCNC\u2019s Touchy screen\u2019s MDI entry process, its large buttons are most useful for touch\n screens.\n To use MDITouchy:\n@@ -50110,15 +50110,15 @@\n G90\n O endsub\n \n Notice the name of the sub matches the file name and macro name exactly, including case.\n When you invoke the macro by pressing the Macro button you can enter values for parameters (xinc\n and yinc in our example).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1143 / 1290\n \n These are passed to the macro as positional parameters: #1, #2\u2026 #N respectively.\n Parameters you leave empty are passed as value 0.\n If there are several different macros, press the Macro button repeatedly to cycle through them.\n In this simple example, if you enter -1 for xinc and invoke the running of the MDI cycle, a rapid G0\n@@ -50131,15 +50131,15 @@\n Figure 12.92: QtVCP OriginOffsetsView: Origins View and Setting Widget\n This widget allows one to visualize and modify User System Origin offsets directly.\n It will update LinuxCNC\u2019s Parameter file for changes made or found.\n The settings can only be changed in LinuxCNC after homing and when the motion controller is idle.\n The display and entry will change between metric and imperial, based on LinuxCNC\u2019s current G20 /\n G21 setting.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1144 / 1290\n \n The current in-use user system will be highlighted.\n Extra actions can be integrated to manipulate settings.\n These actions depend on extra code added either to a combined widget, like originoffsetview dialog,\n or the screens handler code.\n@@ -50178,15 +50178,15 @@\n It can selectably react to:\n \u2022 Machine on\n \u2022 Interpreter idle\n \u2022 E-stop off\n \u2022 All-homed\n It is based on PyQt\u2019s QGridLayout.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.7.2.26 MachineLog - Machine Events Journal Display Widget\n FIXME MachineLog documentation\n 12.7.2.27 JointEnableWidget - FIXME\n FIXME JointEnableWidget documentation\n 12.7.2.28 StatusImageSwitcher - Controller Status Image Switching Widget\n This widget will display images based on LinuxCNC status.\n@@ -50195,15 +50195,15 @@\n \u2022 the state of all homed,\n \u2022 the state of a certain axis homed,\n \u2022 the state of hard limits.\n It is based on PyQt\u2019s FIXME\n \n 1145 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1146 / 1290\n \n 12.7.2.29 FileManager - File Loading Selector Widget\n \n Figure 12.93: QtVCP FileManager: File Loading Selector Widget\n This widget is used to select files to load.\n@@ -50218,15 +50218,15 @@\n \n Stylesheets Properties\n doubleClickSelection (bool)\n Determines whether or not to require double clicking on a folder.\n Single clicking a folder (False) is enabled by default and is intended for touch screen users.\n The following shows an example of how to set this property:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1147 / 1290\n \n #filemanager {\n qproperty-doubleClickSelection: True;\n }\n \n@@ -50249,15 +50249,15 @@\n The tool settings can only be changed in LinuxCNC after homing and when the motion controller is\n idle.\n The display and entry will change between metric and imperial based on LinuxCNC\u2019s current G20/G21\n setting.\n The current in-use tool will be highlighted, and the current selected tool will be highlighted in a\n different color.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1148 / 1290\n \n The checkbox beside each tool can be used to select too for an action that depends on extra code\n added either to a combined widget, like the toolOffsetView dialog or the screens handler code.\n Typical actions are load selected tool, delete selected tools, etc.\n Clicking on the columns and rows allows one to adjust the settings.\n@@ -50297,30 +50297,30 @@\n delete_tools()\n Deletes the currently checkbox selected tools.\n get_checked_list()\n Returns a list of tools selected by checkboxs.\n set_all_unchecked()\n Uncheck all selected tools.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Example for handler file executing aforementioned functions.\n self.w.tooloffsetview.add_tool()\n self.w.tooloffsetview.delete_tools()\n toolList = self.w.tooloffsetview.get_checked_list()\n self.w.tooloffsetview.set_all_unchecked()\n \n 12.7.2.32 BasicProbe - Simple Mill Probing Widget\n \n Figure 12.95: QtVCP BasicProbe: Simple Mill Probing Widget\n Widget for probing on a mill. Used by the QtDragon screen.\n \n 1149 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1150 / 1290\n \n 12.7.2.33 VersaProbe - Mill Probing Widget\n \n Figure 12.96: QtVCP VersaProbe: Mill Probing Widget\n Widget for probing on a mill. Used by the QtDragon screen.\n@@ -50338,15 +50338,15 @@\n \n \u2022 Add a function to call a dialog:\n This function must build a message dict to send to the dialog.\n This message will be passed back in the general message with the addition of the return variable.\n It is possible to add extra user information to the message. The dialog will ignore these and pass\n them back.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1151 / 1290\n \n NAME\n Launches code name of dialog to show.\n ID\n A unique id so we process only a dialog that we requested.\n@@ -50387,15 +50387,15 @@\n TYPE (OK|YESNO|OKCANCEL) , ICON (QUESTION|INFO|CRITICAL|WARNING) , PINNAME\n Not implemented yet.\n FOCUSTEXT (overlay text|None)\n Text to display if focus overlay is used. Use None for no text.\n FOCUSCOLOR (QColor(_R, G, B, A_))\n Color to use if focus overlay is used.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1152 / 1290\n \n PLAYALERT\n Sound to play if sound is available, i.e., SPEAK .\n When using STATUS \u2019s request-dialog function, the default launch name is MESSAGE.\n It is based on PyQt\u2019s QMessagebox.\n@@ -50405,15 +50405,15 @@\n This is used as a manual tool change prompt.\n It has HAL pins to connect to the machine controller. The pins are named the same as the original\n AXIS manual tool prompt and works the same.\n The tool change dialog can only be launched by HAL pins.\n If there is a Focus Overlay widget present, it will signal it to display.\n It is based on PyQt\u2019s QMessagebox.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1153 / 1290\n \n 12.7.3.3 FileDialog - Load and Save File Chooser Dialog Widget\n \n Figure 12.98: QtVCP FileDialog: Load and Save File Chooser Widget\n This is used to load G-code files.\n@@ -50429,15 +50429,15 @@\n \u2019FILENAME\u2019:\u2019~/linuxcnc/nc_files/someprogram.txt\u2019,\n \u2019EXTENSIONS\u2019:\u2019Text Files (*.txt);;ALL Files (*.*)\u2019\n }\n ACTION.CALL_DIALOG(mess)\n \n And for a save dialog\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1154 / 1290\n \n mess = {\u2019NAME\u2019:\u2019SAVE\u2019,\u2019ID\u2019:\u2019_MY_DIALOG_\u2019,\n \u2019TITLE\u2019:\u2019Save Some text File\u2019,\n \u2019FILENAME\u2019:\u2019~/linuxcnc/nc_files/someprogram.txt\u2019,\n \u2019EXTENSIONS\u2019:\u2019Text Files (*.txt);;ALL Files (*.*)\u2019\n@@ -50449,15 +50449,15 @@\n \n Figure 12.99: QtVCP OriginOffsetDialog: Origin Offset Setting Widget\n This widget allows one to modify User System origin offsets directly in a dialog form.\n If there is an Focus Overlay widget present, it will signal it to display.\n When using STATUS \u2019s request-dialog function, the default launch name is ORIGINOFFSET.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1155 / 1290\n \n 12.7.3.5 ToolOffsetDialog - Tool Offset Setting Dialog Widget\n \n Figure 12.100: QtVCP ToolOffsetDialog: Tool Offset Setting Dialog Widget\n This widget allows one to modify Tool offsets directly in a dialog form.\n@@ -50477,61 +50477,61 @@\n 12.7.3.8 EntryDialog - Edit Line Dialog Widget\n This is a dialog to display an edit line for information entry, such as origin offset.\n It returns the entry via STATUS messages using a Python DICT.\n The DICT contains at minimum, the name of the dialog requested and an ID code.\n When using \u0300 \u0300STATUS \u0300 \u0300\u2019s request-dialog function, the default launch name is ENTRY.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1156 / 1290\n \n 12.7.3.9 CalculatorDialog - Calculator Dialog Widget\n \n Figure 12.101: QtVCP CalculatorDialog: Calculator Dialog Widget\n This is a dialog to display a calculator for numeric entry, such as origin offset.\n It returns the entry via STATUS messages using a Python DICT.\n The DICT contains at minimum, the name of the dialog requested and an ID code.\n When using \u0300 \u0300STATUS \u0300 \u0300\u2019s request-dialog function, the default launch name is CALCULATOR.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.7.3.10 RunFromLine - Run-From-Line Dialog Widget\n \n Figure 12.102: QtVCP RunFromLine: Run-From-Line Dialog Widget\n Dialog to preset spindle settings before running a program from a specific line.\n It is based on PyQt\u2019s QDialog.\n \n 1157 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1158 / 1290\n \n 12.7.3.11 VersaProbeDialog - Part Touch Probing Dialog Widget\n \n Figure 12.103: QtVCP VersaProbeDialog: Part Touch Probing Dialog Widget\n This is a dialog to display a part probing screen based on Verser Probe v2.\n It is based on PyQt\u2019s QDialog.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1159 / 1290\n \n 12.7.3.12 MachineLogDialog - Machine and Debugging Logs Dialog Widget\n \n Figure 12.104: QtVCP MachineLogDialog: Machine and Debugging Logs Dialog Widget\n This is a dialog to display the machine log and QtVCP\u2019s debugging log.\n It is based on PyQt\u2019s QDialog.\n \n 12.7.4 Other Widgets\n Other available widgets:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1160 / 1290\n \n 12.7.4.1 NurbsEditor - NURBS Editing Widget\n \n Figure 12.105: QtVCP NurbsEditor: NURBS Editing Widget\n The Nurbs editor allows you to manipulate a NURBS based geometry on screen and then convert\n@@ -50540,15 +50540,15 @@\n It is based on PyQt\u2019s QDialog.\n 12.7.4.2 JoyPad - 5 button D-pad Widget\n It is the base class for the HALPad widget.\n This widget looks and acts like a 5 button D-pad, with a LED like indicators in a ring.\n You can put text or icons in each of the button positions.\n You can connect to output signals when the buttons are pressed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1161 / 1290\n \n There are also input slots to change the color of the indicator(s).\n ENUMS There are enumerated constants used to reference indicator positions.\n They are used in Qt Designer editor\u2019s property editor or in Python code.\n NONE , LEFT, L , RIGHT, R , CENTER, C , TOP, T , BOTTOM, B , LEFTRIGHT, X , TOPBOTTOM, A\n@@ -50585,15 +50585,15 @@\n The set_highlight() function must be used prior to set the indicator to use.\n Signals These signals will be sent when buttons are pressed.\n They can be connected to in Qt Designer editor or Python code.\n The first two output a string that indicates the button pressed:\n \n joy_btn_pressed (string) , joy_btn_released (string) , joy_l_pressed (bool) , joy_l_released (boo\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1162 / 1290\n \n They are based on PyQt\u2019s Signal (QtCore.pyqtSignal())\n Slots Slots can be connected to in Qt Designer editor or Python code:\n set_colorStateTrue() , set_colorStateFalse() , set_colorState(_bool_) , set_true_color(_str_)\n \n@@ -50631,15 +50631,15 @@\n \n 12.7.4.3 WebWidget\n This widget will create a html/pdf viewing page using the QtWebKit or QtWebEngine libraries. The\n newer QtWebEngine is preferred if both are on the system.\n If the QtWebEngine library is used with the QtDesigner editor, a placeholder QWidget will show in\n Qesigner. This will be replaced with thw QtWebEngine widget at run time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1163 / 1290\n \n 12.7.5 BaseClass/Mixin Widgets\n These widgets are used to combine different properties and behaviours into other widgets.\n You will see them as a collapsible header in the Qt Designer properties column.\n 12.7.5.1 IndicatedPushButtons\n@@ -50668,15 +50668,15 @@\n Indicated_PushButton #button_estop{\n qproperty-on_color: black;\n qproperty-off_color: yellow;\n }\n \n Options IndicatedPushButton have exclusive options:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1164 / 1290\n \n indicator_HAL_pin_option\n Adds a halpin, named -led that controls the button indicator state.\n indicator_status_option\n Makes the LED indicate the state of these selectable LinuxCNC status:\n@@ -50718,15 +50718,15 @@\n }\n \n Here is how you specify a particular widget by its objectName in Qt Designer:\n ActionButton #estop button [isEstopped=false] {\n color: yellow;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1165 / 1290\n \n Often, having the button disabled and enabled based on the state of LinuxCNC\u2019s motion controller is\n necessary.\n There are several properties that can be selected to aid with this:\n \n@@ -50766,15 +50766,15 @@\n \n 12.7.6 Import-Only Widgets\n These widgets are usually the base class widget for other QtVCP widgets.\n They are not available directly from the Qt Designer editor but could be imported and manually\n inserted.\n They could also be subclassed to make a similar widget with new features.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1166 / 1290\n \n 12.7.6.1 Auto Height\n Widget for measuring two heights with a probe.\n For setup.\n 12.7.6.2 G-code Utility\n@@ -50795,15 +50795,15 @@\n You can also specify subroutines to be pre-opened in tabs.\n [DISPLAY]\n # NGCGUI subroutine path.\n # This path must also be in [RS274NGC] SUBROUTINE_PATH\n NGCGUI_SUBFILE_PATH = ~/linuxcnc/nc_files/examples/ngcgui_lib\n # pre selected programs tabs\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1167 / 1290\n \n # specify filenames only, files must be in the NGCGUI_SUBFILE_PATH\n NGCGUI_SUBFILE = slot.ngc\n NGCGUI_SUBFILE = qpocket.ngc\n \n@@ -50827,15 +50827,15 @@\n (info: feedrate -- simple example for setting feedrate)\n o sub\n #\n = #1 (= 6 Feed Rate) ; comments in brackets will be shown in ngcui\n f#\n o endsub\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1168 / 1290\n \n 12.7.6.6 Qt PDF\n Allows adding loadable PDFs to a screen.\n 12.7.6.7 Qt Vismach\n Use this to build/add OpenGl simulated machines.\n@@ -50868,15 +50868,15 @@\n For example, you can catch machine on and off messages.\n \n The example below shows the two common ways of connecting signals, one of them using lambda.\n lambda is used to strip off or manipulate arguments from the status message before calling the\n function. You can see the difference in the called function signature: The one that uses lambda does\n not accept the status object - lambda did not pass it to the function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1169 / 1290\n \n \u2022 Place these commands into the [INITIALIZE] section of the Python handler file:\n STATUS.connect(\u2019state-on\u2019, self.on_state_on)\n STATUS.connect(\u2019state-off\u2019, lambda: w, self.on_state_off())\n \n@@ -50921,15 +50921,15 @@\n GET_JOG_FROM_NAME = {\u2019X\u2019:0,\u2019Y\u2019:1,\u2019Z\u2019:2}\n NO_HOME_REQUIRED = False\n HOME_ALL_FLAG\n JOINT_TYPE = self.INI.find(section, \u201dTYPE\u201d) or \u201dLINEAR\u201d\n JOINT_SEQUENCE_LIST\n JOINT_SYNC_LIST\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1170 / 1290\n \n JOG_INCREMENTS = None\n ANGULAR_INCREMENTS = None\n GRID_INCREMENTS\n DEFAULT_LINEAR_JOG_VEL = 15 units per minute\n@@ -50973,15 +50973,15 @@\n \n 12.8.2.4 Helpers\n There are some helper functions - mostly used for widget support:\n \n get_error_safe_setting(_self_, _heading_, _detail_, default=_None_) , convert_metric_to_mac\n Get filter extensions in Qt format.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1171 / 1290\n \n 12.8.2.5 Usage\n \u2022 Import Info module\n Add this Python code to your import section:\n ############################\n@@ -51016,15 +51016,15 @@\n # **** IMPORT SECTION **** #\n ############################\n from qtvcp.core import Action\n \n \u2022 Instantiate Action module\n Add this Python code to your instantiate section:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n ACTION = Action()\n \n \u2022 Access ACTION commands\n@@ -51065,15 +51065,15 @@\n ACTION.ZERO_G92_OFFSET()\n ACTION.ZERO_ROTATIONAL_OFFSET()\n ACTION.ZERO_G5X_OFFSET(num)\n ACTION.RECORD_CURRENT_MODE()\n \n 1172 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n ACTION.RESTORE_RECORDED_MODE()\n ACTION.SET_SELECTED_AXIS(jointnum)\n ACTION.DO_JOG(jointnum, direction)\n ACTION.JOG(jointnum, direction, rate, distance=0)\n ACTION.TOGGLE_FLOOD()\n ACTION.SET_FLOOD_ON()\n@@ -51111,15 +51111,15 @@\n 12.8.4 Tool\n This library handles tool offset file changes.\n \n LinuxCNC doesn\u2019t handle third party manipulation of the tool file well.\n \n 1173 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1174 / 1290\n \n 12.8.4.1 Helpers\n \n GET_TOOL_INFO(_toolnumber_)\n This will return a Python list of information on the requested tool number.\n@@ -51155,15 +51155,15 @@\n LinuxCNC supports tool wear by adding tool wear information into tool entries above 10000.\n \n This also requires remap code to add the wear offsets t tool change time.\n \n 12.8.5 Path\n Path module gives reference to important files paths.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.8.5.1 Referenced Paths\n \n PATH.PREFS_FILENAME\n The preference file path.\n PATH.WORKINGDIR\n The directory QtVCP was launched from.\n@@ -51202,15 +51202,15 @@\n PATH.PLUGIN\n The QtVCP widget plugin folder.\n PATH.VISMACHDIR\n Directory where prebuilt Vismach files are found.\n \n 1175 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1176 / 1290\n \n Not currently used:\n PATH.LOCALEDIR\n Locale translation folder.\n PATH.DOMAIN\n@@ -51244,15 +51244,15 @@\n \u2022 Import VCPWindow module\n Add this Python code to your import section:\n ############################\n # **** IMPORT SECTION **** #\n ############################\n from qtvcp.qt_makegui import VCPWindow\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1177 / 1290\n \n \u2022 Instantiate VCPWindow module+ Add this Python code to your instantiate section:\n ###########################################\n # **** INSTANTIATE LIBRARIES SECTION **** #\n ###########################################\n@@ -51291,15 +51291,15 @@\n Load Calibration program:\n AUX_PRGM.load_calibration()\n \n keyboard_onboard()\n Load onboard/Matchbox keyboard\n AUX_PRGM.keyboard_onboard()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1178 / 1290\n \n 12.8.7.2 Usage\n \u2022 Import Aux_program_loader module\n Add this Python code to your import section:\n ############################\n@@ -51333,15 +51333,15 @@\n \n Keylookup requires code under the processed_key_event function to call KEYBIND.call().\n Most handler files already have this code.\n \n In the handler file, under the initialized function use this general syntax to create keybindings:\n KEYBIND.add_call(\u201dDEFINED_KEY\u201d,\u201dFUNCTION TO CALL\u201d, USER DATA)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Here we add a keybinding for F10, F11 and F12:\n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # at this point:\n # the widgets are instantiated.\n@@ -51391,15 +51391,15 @@\n Qt.Key_Shift: \u201dKey_Shift\u201d,\n Qt.Key_Control: \u201dKey_Control\u201d,\n Qt.Key_Meta: \u201dKey_Meta\u201d,\n # Qt.Key_Alt: \u201dKey_Alt\u201d,\n \n 1179 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Qt.Key_AltGr: \u201dKey_AltGr\u201d,\n Qt.Key_CapsLock: \u201dKey_CapsLock\u201d,\n Qt.Key_NumLock: \u201dKey_NumLock\u201d,\n Qt.Key_ScrollLock: \u201dKey_ScrollLock\u201d,\n Qt.Key_F1: \u201dKey_F1\u201d,\n Qt.Key_F2: \u201dKey_F2\u201d,\n@@ -51458,15 +51458,15 @@\n Qt.Key_Asterisk: \u201dKey_Asterisk\u201d,\n Qt.Key_Plus: \u201dKey_Plus\u201d,\n Qt.Key_Comma: \u201dKey_Comma\u201d,\n Qt.Key_Minus: \u201dKey_Minus\u201d,\n \n 1180 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n Qt.Key_Period: \u201dKey_Period\u201d,\n Qt.Key_Slash: \u201dKey_Slash\u201d,\n Qt.Key_0: \u201dKey_0\u201d,\n Qt.Key_1: \u201dKey_1\u201d,\n Qt.Key_2: \u201dKey_2\u201d,\n Qt.Key_3: \u201dKey_3\u201d,\n@@ -51509,15 +51509,15 @@\n _DETAIL\n Text hidden unless clicked on.\n _PINNAME\n Basename of the HAL pin(s).\n \n 1181 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1182 / 1290\n \n _TYPE\n Specifies whether it is a: Status message - shown in the status bar and the notify dialog.\n Requires no user intervention. OK message - requiring the user to click OK to close the dialog.\n OK messages have two HAL pins:\n@@ -51560,15 +51560,15 @@\n 12.8.10 Notify\n Notify module is used to send messages that are integrated into the desktop.\n It uses the pynotify library.\n Ubuntu/Mint does not follow the standard so you can\u2019t set how long the message stays up for.\n I suggest fixing this with the notify-osd package available from this PPA (DISCONTINUED due to\n move of Ubuntu to Gnome).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1183 / 1290\n \n Notify keeps a list of all the alarm messages since starting in self.alarmpage.\n If you click \u2019Show all messages\u2019 in the notify popup, it will print them to the terminal.\n The ScreenOptions widget can automatically set up the notify system.\n Typically STATUS messages are used to sent notify messages.\n@@ -51601,15 +51601,15 @@\n \u2022 play sounds using the beep library (currently blocks while beeping),\n \u2022 speak words using the espeak library (non blocking while speaking).\n There are default alert sounds using Mint or FreeDesktop default sounds.\n You can play arbitrary sounds or even songs by specifying the path.\n STATUS has messages to control Player module.\n The ScreenOptions widget can automatically set up the audio system.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1184 / 1290\n \n 12.8.12.1 Sounds\n Alerts There are default alerts to choose from:\n \u2022 ERROR\n \u2022 READY\n@@ -51643,15 +51643,15 @@\n 12.8.12.3 Example\n To play sounds upon STATUS messages, use these general syntaxes:\n STATUS.emit(\u2019play-alert\u2019,\u2019LOGOUT\u2019)\n STATUS.emit(\u2019play-alert\u2019,\u2019BEEP\u2019)\n STATUS.emit(\u2019play-alert\u2019,\u2019SPEAK This is a test screen for Q t V C P\u2019)\n STATUS.emit(\u2019play-sound\u2019, \u2019PATH TO SOUND\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1185 / 1290\n \n 12.8.13 Virtual Keyboard\n This library allows you to use STATUS messages to launch a virtual keyboard.\n It uses Onboard or Matchbox libraries for the keyboard.\n \n@@ -51678,15 +51678,15 @@\n # **** instantiate libraries section **** #\n ###########################################\n TOOLBAR = ToolBarActions()\n \n 12.8.14.4 Examples\n \u2022 Assigning Tool Actions To Toolbar Buttons\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1186 / 1290\n \n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # At this point:\n@@ -51727,15 +51727,15 @@\n Some require HAL pins to be connected for movement.\n From a terminal (pick one):\n qtvcp vismach_mill_xyz\n qtvcp vismach_scara\n qtvcp vismach_millturn\n qtvcp vismach_5axis_gantry\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1187 / 1290\n \n 12.8.15.2 Primitives Library\n Provides the basic building blocks of a simulated machine.\n Collection\n A collection is an object of individual machine parts.\n@@ -51775,15 +51775,15 @@\n \n Track\n Move and rotate an object to point from one capture() \u2019d coordinate system to another.\n Base object to hold coordinates for primitive shapes.\n CylinderX, CylinderY, CylinderZ\n Build a cylinder on the X, Y or Z axis by giving endpoint (X, Y, or Z) and radii coordinates.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1188 / 1290\n \n Sphere\n Build a sphere from center and radius coordinates.\n \n TriangleXY, TriangleXZ, TriangleYZ\n@@ -51822,15 +51822,15 @@\n # **** IMPORT SECTION **** #\n ############################\n import mill_xyz as MILL\n \n Instantiate and use the simulation widget Instantiate the simulation widget and add it to the\n screen\u2019s main layout:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1189 / 1290\n \n ##########################################\n # Special Functions called from QtVCP\n ##########################################\n # At this point:\n@@ -51849,30 +51849,30 @@\n Vismach is a set of Python functions that can be used to create and animate models of machines.\n This chapter is about the Qt embedded version of Vismach, also see: https://sa-cnc.com/linuxcncvismach/ .\n \n 12.9.1 Introduction\n Vismach displays the model in a 3D viewport and the model parts are animated as the values of\n associated HAL pins change.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1190 / 1290\n \n Figure 12.107: QtVismach 3D Viewport\n The Vismach 3D viewport view can be manipulated as follows:\n \u2022 zoom by scroll wheel\n \u2022 pan by middle button drag\n \u2022 rotate by right-button drag\n \u2022 tilt by left button drag\n A Vismach model takes the form of a Python script and can use standard Python syntax.\n This means that there is more than one way to lay out the script, but in the examples given in this\n document the simplest and most basic of them will be used.\n The basic sequence in creating the Vismach model is:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1191 / 1290\n \n 1. Create the parts\n 2. Define how they move\n 3. Assemble into movement groups\n \n@@ -51941,15 +51941,15 @@\n |\n |---tool\n |\n |---tooltip\n |\n |---(tool cylinder function)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1192 / 1290\n \n As you can see, the lowest parts must exist first before those can be grouped with others into an\n assembly. So you build upwards from lowest point in tree and assemble them together.\n The same is applicable for any design of machine: look at the machine arm example and you will see\n that it starts with the tip and adds to the larger part of the arm, then it finally groups with the base.\n@@ -51986,15 +51986,15 @@\n part = AsciiOBJ(data=\u201dv 0.123 0.234 0.345 1.0 ...\u201d)\n \n \u2022 STL model parts are added to the Vismach space in the same locations as they were created in the\n STL or OBJ space, i.e. ideally with a rotational point at their origin.\n \n It is much easier to move while building if the origin of the model is at a rotational pivot point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1193 / 1290\n \n 12.9.5.2 Build from Geometric Primitives\n Alternatively parts can be created inside the model script from a range of shape primitives.\n Many shapes are created at the origin and need to be moved to the required location after creation.\n \n@@ -52029,15 +52029,15 @@\n 12.9.6.1 Translating Model parts\n part1 = Translate([part1], x, y, z)\n Move part1 the specified distances in x, y and z.\n 12.9.6.2 Rotating Model Parts\n part1 = Rotate([part1], theta, x, y, z)\n Rotate the part by angle theta [degrees] about an axis between the origin and x, y, z.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1194 / 1290\n \n 12.9.7 Animating Parts\n To animate the model controlled by the values of HAL pins there are four functions: HalTranslate,\n HalRotate, HalToolCylinder and HalToolTriangle.\n For parts to move inside an assembly they need to have their HAL motions defined before being\n@@ -52076,15 +52076,15 @@\n Defines the axis of rotation from the origin the point of coordinates (x,y,z).\n When the part is moved back away from the origin to its correct location, the axis of rotation\n can be considered to remain \u201dembedded\u201d in the part.\n angle_scale\n Rotation angles are in degrees, so for a rotary joint with a 0-1 scaling you would need to use\n an angle scale of 360.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1195 / 1290\n \n 12.9.7.3 HalToolCylinder\n \n tool = HalToolCylinder()\n Make a cylinder to represent a cylindrical mill tool, based on the tool table and current loaded\n@@ -52115,15 +52115,15 @@\n \u2022 Move the head to the spindle or spindle to the head.\n \u2022 Create the draw bar.\n \u2022 Define the motion of the draw bar.\n \u2022 Assemble the three parts into a head assembly.\n \u2022 Define the motion of the head assembly.\n In this example the spindle rotation is indicated by rotation of a set of drive dogs:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1196 / 1290\n \n #Drive dogs\n dogs = Box(-6,-3,94,6,3,100)\n dogs = Color([1,1,1,1],[dogs])\n dogs = HalRotate([dogs],c,\u201dspindle\u201d,360,0,0,1)\n@@ -52165,15 +52165,15 @@\n For example [1,0,0,0.5] for a 50% opacity red.\n myhud = Hud()\n Creates a heads-up display in the Vismach GUI to display items such as axis positions, titles, or\n messages.\n myhud = Hud()\n myhud.show(\u201dMill_XYZ\u201d)\u2018\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1197 / 1290\n \n myhud = HalHud()\n A more advanced version of the Hud that allows HAL pins to be displayed:\n myhud = HalHud()\n myhud.set_background_color(0,.1,.2,0)\n@@ -52215,15 +52215,15 @@\n \n Add it to the Window class Collection so it is never moved from the origin.\n v.model = Collection([origin, model, world])\n \n Start from the cutting tip and work your way back. Add each collection to the model at the origin and\n run the script to confirm the location, then rotate/translate and run the script to confirm again.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.9.11 Basic structure of a QtVismach script\n # imports\n import hal\n from qtvcp.lib.qt_vismach.qt_vismach import *\n # create HAL pins here if needed\n #c = hal.component(\u201dsamplegui\u201d)\n@@ -52266,15 +52266,15 @@\n # if you call this file directly from python3, it will display a PyQt5 window\n # good for confirming the parts of the assembly.\n if __name__ == \u2019__main__\u2019:\n main(model, tooltip, work, size=600, hud=None, lat=-75, lon=215)\n \n 1198 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1199 / 1290\n \n 12.9.12 Builtin Vismach Sample Panels\n QtVCP builtin Vismach Panels\n \n 12.10 QtVCP: Building Custom Widgets\n@@ -52302,15 +52302,15 @@\n \u2022 Injecting important variables,\n \u2022 Calling an extra setup function\n \u2022 Calling a closing cleanup function at shutdown.\n These functions are not called when the Qt Designer editor displays the widgets.\n When QtVCP builds a screen from the .ui file:\n 1. It searches for all the HAL-ified widgets.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1200 / 1290\n \n 2. It finds the ScreenOptions widget, to collect information it needs to inject into the other widgets\n 3. It instantiates each widget and if it is a HAL-ified widget, calls the hal_init() function.\n hal_init() is defined in the base class and it:\n a. Adds variables such as the preference file to every HAL-ified widget.\n@@ -52363,15 +52363,15 @@\n #\n \n 2\n \n y\n 3y\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1201 / 1290\n \n In this case we need access to:\n y\n \n PyQt\u2019s QtWidgets library,\n@@ -52443,15 +52443,15 @@\n #!/usr/bin/env python3\n ###############################\n # Imports\n ###############################\n from PyQt5.QtCore import pyqtProperty\n from qtvcp.widgets.led_widget import LED\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n from qtvcp.core import Status\n ###########################################\n # **** instantiate libraries section **** #\n ###########################################\n STATUS = Status()\n ##########################################\n@@ -52501,15 +52501,15 @@\n def reset_is_on(self):\n self.is_on = False\n #######################################\n # Qt Designer properties\n \n 1202 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1203 / 1290\n \n #######################################\n invert_state_status = pyqtProperty(bool, get_invert_state, set_invert_state, \u2190reset_invert_state)\n is_estopped_status = pyqtProperty(bool, get_is_estopped, set_is_estopped, \u2190reset_is_estopped)\n is_on_status = pyqtProperty(bool, get_is_on, set_is_on, reset_is_on)\n@@ -52579,15 +52579,15 @@\n self.setState(False)\n self.is_estopped = False\n self.is_on = False\n self.invert_state = False\n \n #\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n y\n \n 1\n \n Defines the name of our custom widget and what other class it inherits from.\n In this case we inherit LED - a QtVCP widget that represents a status light.\n@@ -52648,15 +52648,15 @@\n self.PREFS_\n the instance of an optional preference file\n self.SETTINGS_\n the Qsettings object\n We could use this information to create HAL pins or look up image paths etc.\n STATUS.connect(\u2019state-estop\u2019, lambda w:self._flip_state(True))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1205 / 1290\n \n Lets look at this line more closely:\n \u2022 STATUS is very common theme is widget building.\n STATUS uses GObject message system to send messages to widgets that register to it.\n This line is the registering process.\n@@ -52703,15 +52703,15 @@\n return self.is_on\n def reset_is_on(self):\n self.is_on = False\n \n This is how Qt Designer sets the attributes of the widget.\n This can also be called directly in the widget.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1206 / 1290\n \n #######################################\n # Qt Designer properties\n #######################################\n invert_state_status = pyqtProperty(bool, get_invert_state, set_invert_state, \u2190reset_invert_state)\n@@ -52751,15 +52751,15 @@\n self._last = 0\n self._block_signal = False\n self._auto_label_flag = True\n SettingMenu = QMenu()\n for system in(\u2019G54\u2019, \u2019G55\u2019, \u2019G56\u2019, \u2019G57\u2019, \u2019G58\u2019, \u2019G59\u2019, \u2019G59.1\u2019, \u2019G59.2\u2019, \u2019G59.3\u2019):\n Button = QAction(QIcon(\u2019exit24.png\u2019), system, self)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1207 / 1290\n \n Button.triggered.connect(self[system.replace(\u2019.\u2019,\u2019_\u2019)])\n SettingMenu.addAction(Button)\n self.setMenu(SettingMenu)\n self.dialog = EntryDialog()\n@@ -52802,15 +52802,15 @@\n def ChangeState(self, joint):\n if int(joint) != self._joint:\n self._block_signal = True\n self.setChecked(False)\n self._block_signal = False\n self.hal_pin.set(False)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1208 / 1290\n \n ##############################\n # required class boiler code #\n ##############################\n def __getitem__(self, item):\n@@ -52857,15 +52857,15 @@\n HomeLabel[homed=true] {\n color: green;\n }\n HomeLabel[homed=false] {\n color: red;\n }\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 12.10.6 Use Stylesheets To Change Custom Widget Properties\n class Label(QLabel):\n def __init__(self, parent=None):\n super(Label, self).__init__(parent)\n alternateFont0 = self.font\n # Qproperty getter and setter\n@@ -52910,15 +52910,15 @@\n return Lcnc_GridLayout(parent)\n def name(self):\n return \u201dLcnc_GridLayout\u201d\n def group(self):\n \n 1209 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n return \u201dLinuxCNC - HAL\u201d\n def icon(self):\n return QtGui.QIcon(QtGui.QPixmap(ICON.get_path(\u2019lcnc_gridlayout\u2019)))\n def toolTip(self):\n return \u201dHAL enable/disable GridLayout widget\u201d\n def whatsThis(self):\n@@ -52967,15 +52967,15 @@\n def domXml(self):\n return \u2019\\n\u2019\n def includeFile(self):\n return \u201dqtvcp.widgets.system_tool_button\u201d\n \n 1210 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1211 / 1290\n \n 12.10.7.3 Making a plugin with a MenuEntry dialog box\n It possible to add an entry to the dialog that pops up when you right click the widget in the layout.\n This can do things such as selecting options in a more convenient way.\n This is the plugin used for action buttons.\n@@ -53021,15 +53021,15 @@\n def createWidget(self, parent):\n return ActionButton(parent)\n # This method returns the name of the custom widget class\n def name(self):\n return \u201dActionButton\u201d\n # Returns the name of the group in Qt Designer\u2019s widget box\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n def group(self):\n return \u201dLinuxCNC - Controller\u201d\n # Returns the icon\n def icon(self):\n return QtGui.QIcon(QtGui.QPixmap(ICON.get_path(\u2019actionbutton\u2019)))\n # Returns a tool tip short description\n@@ -53070,15 +53070,15 @@\n self.setWindowTitle(self.tr(\u201dSet Options\u201d))\n def updateWidget(self):\n formWindow = QDesignerFormWindowInterface.findFormWindow(self.widget)\n if formWindow:\n \n 1212 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1213 / 1290\n \n formWindow.cursor().setProperty(\u201destop_action\u201d,\n QtCore.QVariant(self.c_estop.isChecked()))\n self.accept()\n class ActionButtonMenuEntry(QPyDesignerTaskMenuExtension):\n@@ -53117,15 +53117,15 @@\n if self.w.PREFS_:\n # variable name (entry name, default value, type, section name)\n self.int_value = self.w.PREFS_.getpref(\u2019Integer_value\u2019, 75, int, \u2019CUSTOM_FORM_ENTRIES\u2019)\n self.string_value = self.w.PREFS_.getpref(\u2019String_value\u2019, \u2019on\u2019, str, \u2019 \u2190CUSTOM_FORM_ENTRIES\u2019)\n \n Writing preferences at close time In the closing_cleanup__() function, add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1214 / 1290\n \n if self.w.PREFS_:\n # variable name (entry name, variable name, type, section name)\n self.w.PREFS_.putpref(\u2019Integer_value\u2019, self.integer_value, int, \u2019CUSTOM_FORM_ENTRIES\u2019)\n self.w.PREFS_.putpref(\u2019String_value\u2019, self.string_value, str, \u2019CUSTOM_FORM_ENTRIES\u2019)\n@@ -53160,15 +53160,15 @@\n Being able to edit a style on a running screen is convenient.\n Import StyleSheetEditor module in the IMPORT SECTION:\n from qtvcp.widgets.stylesheeteditor import StyleSheetEditor as SSE\n \n Instantiate StyleSheetEditor module in the INSTANTIATE SECTION:\n STYLEEDITOR = SSE()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1215 / 1290\n \n Create a keybinding in the INITIALIZE SECTION: Under the +__init__.(self, halcomp, widgets,\n paths):+ function add:\n KEYBIND.add_call(\u2019Key_F12\u2019,\u2019on_keycall_F12\u2019)\n \n@@ -53212,15 +53212,15 @@\n def return_value(self, w, message):\n num = message.get(\u2019RETURN\u2019)\n id_code = bool(message.get(\u2019ID\u2019) == \u2019FORM__NUMBER\u2019)\n name = bool(message.get(\u2019NAME\u2019) == \u2019ENTRY\u2019)\n if id_code and name and num is not None:\n print(\u2019The {} number from {} was: {}\u2019.format(name, id_code, num))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1216 / 1290\n \n This catches all general messages so it must check the dialog type and id code to confirm it\u2019s our\n dialog. In this case we had requested an ENTRY dialog and our unique id was FORM_NUMBER, so now we\n know the message is for us. ENTRY or CALCULATOR dialogs return a float number.\n \n@@ -53255,15 +53255,15 @@\n Edit the object name, text, and button type for an appropriate action.\n In this example the:\n \u2022 submenu name must be menuRecent,\n \u2022 actions names must be actionAbout, actionQuit, actionMyFunction\n Loads the toolbar_actions library in the IMPORT SECTION\n from qtvcp.lib.toolbar_actions import ToolBarActions\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1217 / 1290\n \n Instantiate ToolBarActions module in the INSTANTIATE LIBRARY SECTION\n TOOLBAR = ToolBarActions()\n \n Configure submenus and actions in the SPECIAL FUNCTIONS SECTION Under the def initialized_\n@@ -53310,15 +53310,15 @@\n if tab in( self.w.tab_auto, self.w.tab_graphics):\n ACTION.RUN(line=0)\n elif tab == self.w.tab_files:\n self.w.filemanager.load()\n elif tab == self.w.tab_mdi:\n self.w.mditouchy.run_command()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1218 / 1290\n \n This function assumes there is a Tab widget, named mainTab, that has tabs with the names tab_auto,\n tab_graphics, tab_filemanager and tab_mdi.\n In this way the cycle start button works differently depending on what tab is shown.\n This is simplified - checking state and error trapping might be helpful.\n@@ -53357,15 +53357,15 @@\n \u2022 Call it btn_toggle_continuous.\n \u2022 Set the AbstractButton property checkable to True.\n \u2022 Set the ActionButton properties incr_imperial_number and incr_mm_number to 0.\n \u2022 Use Qt Designer\u2019s slot editor to use the button signal clicked(bool) to call form\u2019s handler function\n toggle_continuous_clicked().\n See Using Qt Designer To Add Slots section for more information.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1219 / 1290\n \n Then add this code snippets to the handler file under the initialized__ function:\n # at this point:\n # the widgets are instantiated.\n # the HAL pins are built but HAL is not set ready\n@@ -53410,15 +53410,15 @@\n We can \u201dclass patch\u201d the library to redirect the function call. In the IMPORT SECTION add:\n from qtvcp.widgets.file_manager import FileManager as FM\n \n Here we are going to:\n 1. Keep a reference to the original function (1) so we can still call it\n 2. Redirect the class to call our custom function (2) in the handler file instead.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1220 / 1290\n \n ##########################################\n # Special Functions called from QtVCP\n #\n ##########################################\n@@ -53464,15 +53464,15 @@\n #####################\n # GENERAL FUNCTIONS #\n #####################\n def our_load(self,fname):\n print(fname)\n self.w.filemanager.super__load(fname)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1221 / 1290\n \n 12.11.11 Adding Widgets Programmatically\n In some situation it is only possible to add widgets with Python code rather then using the Qt\n Designer editor.\n When adding QtVCP widgets programmatically, sometimes there are extra steps to be taken.\n@@ -53514,15 +53514,15 @@\n def __init__(self,halcomp,widgets,paths):\n self.hal = halcomp\n self.w = widgets\n self.PATHS = paths\n STATUS.connect(\u2019actual-spindle-speed-changed\u2019, \\\n lambda w,speed: self.update_spindle(speed))\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1222 / 1290\n \n Add the widgets to the tab We need to make sure the Qt Designer widgets are already built before\n we try to add to them. For this, we add a call to self.make_corner_widgets() function to build our\n extra widgets at the right time, i.e. under the initialized__() function:\n ##########################################\n@@ -53627,15 +53627,15 @@\n 4\n \n This sets it as green when on.\n This is the extra function call required with some QtVCP widgets.\n If HAL_NAME is omitted it will use the widget\u2019s objectName if there is one.\n It gives the special widgets reference to:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1223 / 1290\n \n self.HAL_GCOMP\n the HAL component instance\n self.HAL_NAME\n This widget\u2019s name as a string\n@@ -53728,15 +53728,15 @@\n 12.11.12 Update/Read Objects Periodically\n Sometimes you need to update a widget or read a value regularly that isn\u2019t covered by normal\n libraries.\n Here we update an LED based on a watched HAL pin every 100 ms.\n We assume there is an LED named led in the Qt Designer UI file.\n Load the Qhal library for access to QtVCP\u2019s HAL component In the IMPORT SECTION add:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1224 / 1290\n \n from qtvcp.core import Qhal\n \n Instantiate Qhal In the INSTANTIATE LIBRARY SECTION add:\n QHAL = Qhal()\n@@ -53778,15 +53778,15 @@\n ########################\n # widgets allows access to widgets from the QtVCP files\n # at this point the widgets and hal pins are not instantiated\n def __init__(self,halcomp,widgets,paths):\n # directly select ZMQ message receiving\n self.w.screen_options.setProperty(\u2019use_receive_zmq_option\u2019,True)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1225 / 1290\n \n This allows an external program to call functions in the handler file.\n Add a function to be called on ZMQ message reception Let\u2019s add a specific function for testing.\n You will need to run LinuxCNC from a terminal to see the printed text.\n #####################\n@@ -53845,15 +53845,15 @@\n \n 1\n \n You will need to know the signature of the function you wish to call. Also note that the message is\n converted to a JSON object. This is because ZMQ sends byte messages not Python objects. json\n converts Python objects to bytes and will be converted back when received.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1226 / 1290\n \n 12.11.13.2 ZMQ Messages Writing\n You may also want to communicate with an external program from the screen.\n In the ScreenOptions widget, you can select the property use_send_zmq_message. You can also set\n this property directly in the handler file, as in this sample.\n@@ -53897,15 +53897,15 @@\n topic, message = sock.recv_multipart()\n print(\u2019{} sent message:{}\u2019.format(topic,json.loads(message)))\n \n 12.11.14 Sending Messages To Status Bar Or Desktop Notify Dialogs\n There are several ways to report information to the user.\n A status bar is used for short information to show the user.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1227 / 1290\n \n Not all screens have a status bar.\n \n Status bar usage example\n self.w.statusbar.showMessage(message, timeout * 1000)\n@@ -53945,15 +53945,15 @@\n #####################\n # general functions #\n #####################\n def focusInChanged(self, widget):\n if isinstance(widget.parent(),type(self.w.gcode_editor.editor)):\n print(\u2019G-code Editor\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1228 / 1290\n \n elif isinstance(widget,type(self.w.gcodegraphics)):\n print(\u2019G-code Display\u2019)\n elif isinstance(widget.parent(),type(self.w.mdihistory) ):\n print(\u2019MDI History\u2019)\n@@ -53996,15 +53996,15 @@\n # if the -o option has \u2019camnumber=\u2019 in it, assume it\u2019s the camera number \u2190to use\n elif \u2019camnumber=\u2019 in self.w.USEROPTIONS_[num]:\n try:\n number = int(self.w.USEROPTIONS_[num].strip(\u2019camnumber=\u2019))\n except Exception as e:\n #\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1229 / 1290\n \n print(\u2019Error with cam_align camera selection - not a number - using \u21900\u2019)\n # set the camera number either as default or if -o option changed the \u2019number\u2019\n variable, to that number.\n self.w.camview._camNum = number\n@@ -54036,15 +54036,15 @@\n \u2022 the .ui file,\n \u2022 the handler file, and\n \u2022 possibly the .qss theme file.\n \n 12.12.3 QtVCP Startup To Shutdown\n QtVCP source is located in +src/emc/usr_intf/qtvcp+ folder of LinuxCNC source tree.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1230 / 1290\n \n 12.12.3.1 QtVCP Startup\n When QtVCP first starts:\n 1. It must decide if this object is a screen or a panel.\n 2. It searches for and collects information about paths of required files and useful folders.\n@@ -54078,15 +54078,15 @@\n CONFIGPATH\n Path of the launched configuration\n BASEDIR\n General path, used to derive all paths\n BASENAME\n Generic name used to derive all paths\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1231 / 1290\n \n LIBDIR\n Path of QtVCP\u2019s Python library\n HANDLER\n Path of handler file\n@@ -54122,15 +54122,15 @@\n \n Keybinding is always a difficult-to-get-right-in-all-cases affair.\n \n Custom keybinding functions are to be defined in the handler file.\n Most importantly widgets that require regular key input and not jogging, should be checked for in the\n processed_key_event__ function.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1232 / 1290\n \n 12.12.5.4 Preference File\n Some QtVCP widgets use the preference file to record important information.\n This requires the preference file to be set up early in the widget initialization process.\n The easiest way to do this is to use the ScreenOptions widget.\n@@ -54161,15 +54161,15 @@\n By default, if there is a preference file, the dialogs will remember their last size/placement.\n It is possible to override this so they open in the same location each time.\n 12.12.5.7 Styles (Themes)\n While it is possible to set styles in Qt Designer, it is more convenient to change them later if they are\n all set in a separate .qss file.\n The file should be put in the same location as the handler file.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1233 / 1290\n \n Chapter 13\n \n User Interface Programming\n 13.1 Panelui\n@@ -54199,15 +54199,15 @@\n loadrt sampler cfg=u depth=1025\n #uncomment to validate the panelui INI file\n #loadusr pyui\n # -d = debug, -v = verbose debug\n # -d will show you keypress identification and commands called\n # -v is for develeper info\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1234 / 1290\n \n loadusr -W panelui -d\n # using simulated buttons instead of the MESA 7I73 card\n # so we load the sim_matrix_kb component to convert HAL pins to keyscan codes\n loadrt sim_matrix_kb\n@@ -54248,15 +54248,15 @@\n This allows one to change the prefix of the HAL pins from panelui to an arbitrary name.\n ZMQ Messaging Setup\n [ZMQ_SETUP]\n TOPIC = \u2019QTVCP\u2019\n SOCKET = \u2019tcp://127.0.0.1:5690\u2019\n ENABLE = True\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1235 / 1290\n \n This sets up and enables ZMQ based messaging. TOPIC and SOCKET must match the listening program.\n Radio Buttons Radiobutons allow only one button in the group to be active at a time. Each group\n has its own output pin, separate from each button in the group. Radio button definitions start with\n the text RADIO_BUTTON inside single brackets.\n@@ -54310,15 +54310,15 @@\n \n Toggle Buttons Togglebuttons only change state on each press of the button. Toggle button definitions start with the text TOGGLE_BUTTON inside single brackets.\n [TOGGLE_BUTTONS]\n # Each button name inside double brackets, must be unique and is case sensitive.\n # This button, named \u2019tool_change\u2019is controller by the row 2 column 5 key.\n # It has a BIT output, will output 1 on true state and 0 on false state.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1236 / 1290\n \n # It also has a status pin which will follow its current state.\n # DEFAULT sets this to true when first initialized.\n # The _COMMAND are not used since OUTPUT is not set to COMMAND but validation will\n # add the lines regardless\n@@ -54362,15 +54362,15 @@\n \u2022 required argument: axis number (int)\n spindle_forward_adjust\n \u2022 optional argument: starting RPM (int) - default 100\n \u2022 Description: If the spindle is stopped it will start in the forward direction. If it is already running it\n will increase or decrease the rpm depending on what direction the spindle is running in.\n spindle_forward\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1237 / 1290\n \n \u2022 optional argument: starting RPM (int) - default 100\n spindle_reverse\n \u2022 optional argument: starting RPM (int) - default 100\n spindle_reverse_adjust\n@@ -54396,15 +54396,15 @@\n \u2022 Description: Move Z axis to the given machine position\n feed_hold\n \u2022 required argument: state (bool 0 or 1)\n feed_override\n \u2022 required argument: rate (float)\n rapid_override\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n \u2022 required argument: rate (float 0-1)\n spindle_override\n \u2022 required argument: rate (float)\n max_velocity\n \u2022 required argument: rate (float)\n optional_stop\n@@ -54436,15 +54436,15 @@\n STATUS_PIN = False\n DEFAULT = FALSE\n TRUE_STATE = 1\n FALSE_STATE = 0\n \n 1238 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1239 / 1290\n \n Here is a sample program that will receive the message and print it to the terminal.\n import zmq\n import json\n # ZeroMQ Context\n@@ -54488,15 +54488,15 @@\n print(wname.metadata)\n # Print the calling widgets internal metadata (from config \u2190file)\n # Call a mdi command to print a msg in LinuxCNC.\n # This requires LinuxCNC to be homed, but does not check for that.\n # parent commands expect a widget_instance - None is substituted\n self.parent.mdi(None,\u2019(MSG, Hello Linuxcnc World!)\u2019)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1240 / 1290\n \n # Each call to this function will cycle the mode of LinuxCNC.\n def cycle_mode(self, wname, m):\n if self.current_mode == 0:\n self.current_mode = 1\n@@ -54533,15 +54533,15 @@\n \u2022 establish connections to the command, status and error NML channels as needed\n \u2022 poll the status channel, either periodically or as needed\n \u2022 before sending a command, determine from status whether it is in fact OK to do so (for instance,\n there is no point in sending a Run command if task is in the ESTOP state, or the interpreter is not\n idle)\n \u2022 send the command by using one of the linuxcnc command channel methods\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1241 / 1290\n \n To retrieve messages from the error channel, poll the error channel periodically, and process any\n messages retrieved.\n \u2022 poll the status channel, either periodically or as needed\n \u2022 print any error message and explore the exception code\n@@ -54579,15 +54579,15 @@\n angular_units\n (returns float) - machine angular units per deg, reflects [TRAJ]ANGULAR_UNITS INI value.\n aout\n (returns tuple of floats) - current value of the analog output pins.\n axes\n (returns integer) - number of axes. Derived from [TRAJ]COORDINATES INI value.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1242 / 1290\n \n axis\n (returns tuple of dicts) - reflecting current axis values. See The axis dictionary.\n axis_mask\n (returns integer) - mask of axis available as defined by [TRAJ]COORDINATES in the INI file.\n@@ -54629,15 +54629,15 @@\n exec_state\n (returns integer) - task execution state. One of EXEC_ERROR, EXEC_DONE, EXEC_WAITING_FOR_MO\n EXEC_WAITING_FOR_MOTION_QUEUE, EXEC_WAITING_FOR_IO, EXEC_WAITING_FOR_MOTION_A\n EXEC_WAITING_FOR_DELAY, EXEC_WAITING_FOR_SYSTEM_CMD, EXEC_WAITING_FOR_SPINDLE_\n feed_hold_enabled\n (returns boolean) - enable flag for feed hold.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1243 / 1290\n \n feed_override_enabled\n (returns boolean) - enable flag for feed override.\n feedrate\n (returns float) - current feedrate override, 1.0 = 100%.\n@@ -54679,15 +54679,15 @@\n joint\n (returns tuple of dicts) - reflecting current joint values. See The joint dictionary.\n joint_actual_position\n (returns tuple of floats) - actual joint positions.\n joint_position\n (returns tuple of floats) - Desired joint positions.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1244 / 1290\n \n joints\n (returns integer) - number of joints. Reflects [KINS]JOINTS INI value.\n kinematics_type\n (returns integer) - The type of kinematics. One of:\n@@ -54729,15 +54729,15 @@\n \u2022 MOTION_TYPE_TOOLCHANGE\n \u2022 MOTION_TYPE_PROBING\n \u2022 MOTION_TYPE_INDEXROTARY\n \u2022 Or 0 if no motion is currently taking place.\n optional_stop\n (returns integer) - option stop flag.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1245 / 1290\n \n paused\n (returns boolean) - motion paused flag.\n pocket_prepped\n (returns integer) - A Tx command completed, and this pocket is prepared. -1 if no prepared\n@@ -54778,15 +54778,15 @@\n state\n (returns integer) - current command execution status. One of RCS_DONE, RCS_EXEC, RCS_ERROR.\n task_mode\n (returns integer) - current task mode. one of MODE_MDI, MODE_AUTO, MODE_MANUAL.\n task_paused\n (returns integer) - task paused flag.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1246 / 1290\n \n task_state\n (returns integer) - current task state. one of STATE_ESTOP, STATE_ESTOP_RESET, STATE_ON,\n STATE_OFF.\n tool_in_spindle\n@@ -54825,15 +54825,15 @@\n 13.2.3.3 The joint dictionary\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*import linuxcnc\n s = linuxcnc.stat()\n s.poll()\n print(\u201dJoint 1 homed: \u201d, s.joint[1][\u201dhomed\u201d])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1247 / 1290\n \n For each joint, the following dictionary keys are available:\n backlash\n (returns float) - Backlash in machine units. configuration parameter, reflects [JOINT_n]BACKLASH.\n enabled\n@@ -54870,15 +54870,15 @@\n min_position_limit\n (returns float) - minimum limit (soft limit) for joint motion, in machine units. configuration parameter, reflects [JOINT_n]MIN_LIMIT.\n min_soft_limit\n (returns integer) - non-zero means min_position_limit was exceeded.\n output\n (returns float) - commanded output position.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1248 / 1290\n \n override_limits\n (returns integer) - non-zero means limits are overridden.\n units\n (returns float) - joint units per mm, or per degree for angular joints.\n@@ -54916,15 +54916,15 @@\n Other commands may be sent only in appropriate state, and those tests can be a bit tricky. For\n instance, an MDI command can be sent only if:\n \u2022 ESTOP has not been triggered, and\n \u2022 the machine is turned on and\n \u2022 the axes are homed and\n \u2022 the interpreter is not running and\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1249 / 1290\n \n \u2022 the mode is set to MDI mode\n so an appropriate test before sending an MDI command through linuxcnc.command.mdi() could be:\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*import linuxcnc\n@@ -54965,15 +54965,15 @@\n c.mode(linuxcnc.MODE_MDI)\n c.mode(linuxcnc.MODE_AUTO)\n \n jjogmode, joint_num_or_axis_index)\n jjogmode, joint_num_or_axis_index, velocity)\n jjogmode, joint_num_or_axis_index, velocity, increment)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1250 / 1290\n \n c.mode(linuxcnc.MODE_MANUAL)\n c.override_limits()\n c.program_open(\u201dfoo.ngc\u201d)\n c.reset_interpreter()\n@@ -55010,15 +55010,15 @@\n Constants\n FLOOD_ON\n FLOOD_OFF\n home(int)\n home a given joint.\n jog(command-constant, bool, int[, float[, float]])\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1251 / 1290\n \n Syntax\n jog(command, jjogmode, joint_num_or_axis_index, velocity[, distance])\n jog(linuxcnc.JOG_STOP, jjogmode, joint_num_or_axis_index)\n jog(linuxcnc.JOG_CONTINUOUS, jjogmode, joint_num_or_axis_index, velocity)\n@@ -55061,15 +55061,15 @@\n program_open(string)\n open an NGC file.\n rapidrate()\n set rapid override factor\n reset_interpreter()\n reset the RS274NGC interpreter\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1252 / 1290\n \n set_adaptive_feed(int)\n set adaptive feed flag\n set_analog_output(int, float)\n set analog output pin to value\n@@ -55106,15 +55106,15 @@\n # Increase speed of spindle 0 by 100rpm. Spindle must be on first.\n c.spindle(linuxcnc.INCREASE)\n # Increase speed of spindle 2 by 100rpm. Spindle must be on first.\n c.spindle(linuxcnc.SPINDLE_INCREASE, 2)\n # Set speed of spindle 0 to 1024 rpm.\n c.spindle.(linuxcnc.SPINDLE_FORWARD, 1024)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1253 / 1290\n \n # Set speed of spindle 1 to -666 rpm.\n c.spindle.(linuxcnc.SPINDLE_REVERSE, 666, 1)\n # Stop spindle 0.\n c.spindle.(linuxcnc.SPINDLE_OFF)\n@@ -55155,15 +55155,15 @@\n kind, text = error\n if kind in (linuxcnc.NML_ERROR, linuxcnc.OPERATOR_ERROR):\n typus = \u201derror\u201d\n else:\n typus = \u201dinfo\u201d\n print(typus, text)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 13.2.7 Reading INI file values\n Here\u2019s an example for reading values from an INI file through the linuxcnc.ini object:\n #!/usr/bin/env python3\n # -*- coding: utf-8 -*# run as:\n # python3 ini-example.py ~/emc2-dev/configs/sim/axis/axis_mm.ini\n import sys\n@@ -55197,15 +55197,15 @@\n 13.2.8.1 members\n \n npts\n number of points.\n \n 1254 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1255 / 1290\n \n 13.2.8.2 methods\n \n start(float)\n start the position logger and run every ARG seconds\n@@ -55242,15 +55242,15 @@\n +\n Create new pin.\n Arguments: pin name suffix, pin type, and pin direction. For parameters, the arguments are:\n parameter name suffix, parameter type, and parameter direction.\n .Example:\n h.newpin(\u201din\u201d, hal.HAL_FLOAT, hal.HAL_IN)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1256 / 1290\n \n ready\n Tells the HAL system the component is initialized. Locks out adding pins.\n unready\n Allows a component to add pins after ready() has been called. One should call ready() on the\n@@ -55283,15 +55283,15 @@\n Read a pin, param, or signal directly.\n Example\n value = hal.get_value(\u201diocontrol.0.emc-enable-in\u201d)\n \n get_info_pins()\n Returns a list of dicts of all system pins.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n listOfDicts = hal.get_info_pins()\n pinName1 = listOfDicts[0].get(\u2019NAME\u2019)\n pinValue1 = listOfDicts[0].get(\u2019VALUE\u2019)\n pinType1 = listOfDicts[0].get(\u2019TYPE\u2019)\n pinDirection1 = listOfDicts[0].get(\u2019DIRECTION\u2019)\n \n@@ -55327,15 +55327,15 @@\n get_type\n Get the HAL object\u2019s type.\n Returns an integer.\n h.in.get_type()\n \n 1257 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1258 / 1290\n \n get_dir\n Get the HAL object direction type.\n Returns an integer.\n h.in.get_dir()\n@@ -55369,15 +55369,15 @@\n GStat is a Python class used to send messages from LinuxCNC to other Python programs. It uses\n GObject to deliver messages, making it easy to listen for specific information. This is referred to\n as event-driven programming, which is more efficient then every program polling LinuxCNC at the\n same time. GladeVCP, Gscreen, Gmoccapy and QtVCP use GStat extensively. GStat is in the hal_glib\n module.\n Overview\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1259 / 1290\n \n \u2022 First, a program imports the hal_glib module and instantiates GStat.\n \u2022 Then it connects to the messages it wishes to monitor.\n \u2022 GStat checks LinuxCNC\u2019s status every 100 ms and if there are differences from the last check, it\n will send a callback message to all the connected programs with the current status.\n@@ -55415,15 +55415,15 @@\n h.newpin(\u201dg21\u201d, hal.HAL_BIT, hal.HAL_OUT)\n h.ready()\n # connect a GSTAT message to a callback function\n GSTAT.connect(\u201dmetric-mode-changed\u201d,mode_changed)\n # force GSTAT to initialize states\n GSTAT.forced_update()\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1260 / 1290\n \n # loop till exit\n try:\n GLib.MainLoop().run()\n except KeyboardInterrupt:\n@@ -55460,15 +55460,15 @@\n def get_handlers(halcomp,builder,useropts):\n return [HandlerClass(halcomp,builder,useropts)]\n \n 13.4.2.3 QtVCP Python extension code pattern\n QtVCP extends GStat, so must be loaded differently but all the messages are available in QtVCP.\n This handler file assumes there are three QLabels named:\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1261 / 1290\n \n \u2022 state_label\n \u2022 e_state_label\n \u2022 interp_state_label\n #!/usr/bin/env python3\n@@ -55505,15 +55505,15 @@\n state-off\n (returns nothing) - Sent when LinuxCNC is in machine off state.\n homed\n (returns string) - Sent as each joint is homed.\n all-homed\n (returns nothing) - Sent when all defined joints are homed.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1262 / 1290\n \n not-all-homed\n (returns string) - Sends a list of joints not currently homed.\n override_limits_changed\n (returns string) - Sent if LinuxCNC has been directed to override its limits.\n@@ -55554,15 +55554,15 @@\n It is expected to be in the machine\u2019s native units regardless of the current unit mode .\n jogincrement-changed\n (returns float, text) - Sent when jog increment has changed.\n LinuxCNC does not have an internal jog increment.\n This is GStat\u2019s internal jog increment.\n It is expected to be in the machine\u2019s native units regardless of the current unit mode .\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1263 / 1290\n \n jogincrement-angular-changed\n (returns float, text) - Sent when angular jog increment has changed.\n LinuxCNC does not have an internal angular jog increment.\n This is GStat\u2019s internal angular jog increment.\n@@ -55603,15 +55603,15 @@\n current-z-rotation\n (returns float) - Sent as the current rotatated angle around the Z axis changes\n requested-spindle-speed-changed\n (returns float) - Sent when the current requested RPM changes\n actual-spindle-speed-changed\n (returns float) - Sent when the actual RPM changes based on the HAL pin spindle.0.speed-in.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n spindle-override-changed\n (returns float) - Sent when the spindle override value changes\n in percent\n feed-override-changed\n (returns float) - Sent when the feed override value changes\n in percent\n@@ -55653,15 +55653,15 @@\n g-code-changed\n (returns string) - Sent when active G-code change\n metric-mode-changed\n (returns bool) - Sent when G21 status changes\n \n 1264 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1265 / 1290\n \n user-system-changed\n (returns string) - Sent when the reference coordinate system (G5x) changes\n mdi-line-selected\n (returns string, string) - intended to be sent when an MDI line is selected by user.\n@@ -55706,15 +55706,15 @@\n This depends on the widget/libraries used.\n mdi-history-changed\n (returns None) - intended to be sent when an MDI history needs to be reloaded.\n This depends on the widget/libraries used.\n \n for a\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1266 / 1290\n \n machine-log-changed\n (returns None) - intended to be sent when machine log has changed.\n This depends on the widget/libraries used.\n update-machine-log\n@@ -55758,15 +55758,15 @@\n integer represents the kind of error. ERROR, TEXT or DISPLAY\n string is the actual error message.\n This depends on the widget/libraries used.\n general\n (returns Python dict) - intended to be sent when message must be sent that is not covered by a\n more specific message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1267 / 1290\n \n General message should be used a sparsely as reasonable because all object connected to it will\n have to parse it.\n It uses a Python dict for communication.\n The dict should include and be checked for a unique id keyname pair:\n@@ -55800,15 +55800,15 @@\n (None) set_jog_increments\n (float, string) get_jog_increments\n (None) is_all_homed\n (nothing) - This will return the current state of all_homed (BOOL).\n machine_is_on\n (nothing) - This will return the current state of machine (BOOL).\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1268 / 1290\n \n estop_is_clear\n (nothing) - This will return the state of Estop (BOOL)\n set_tool_touchoff\n (tool,axis,value) - This command will\n@@ -55847,15 +55847,15 @@\n joint-selection-changed message.\n get_selected_joint\n (None) - returns integer representing the internal selected joint number.\n set_selected_axis\n (string) - records the selected axis letter internally.\n Requests the axis to be selected by emitting the axis-selection-changed message.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1269 / 1290\n \n get_selected_axis\n (None) - returns string representing the internal selected axis letter.\n is_man_mode\n (None) is_mdi_mode\n@@ -55875,30 +55875,30 @@\n state-tags branch.\n \n 13.5 Vismach\n Vismach is a set of Python functions that can be used to create and animate models of machines.\n Vismach displays the model in a 3D viewport and the model parts are animated as the values of\n associated HAL pins change.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1270 / 1290\n \n The Vismach viewport view can be manipulated as follows:\n \u2022 zoom by scroll wheel or right button drag,\n \u2022 pan by left button drag,\n \u2022 rotate by middle-button drag or shift-drag.\n A Vismach model takes the form of a Python script and can use standard Python syntax. This means\n that there is more than one way to lay out the script, but in the examples given in this document I will\n use the simplest and most basic of them.\n The basic sequence in creating the Vismach model is\n \u2022 Create the HAL pins that control the motion.\n \u2022 Create the parts.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1271 / 1290\n \n \u2022 Define how they move.\n \u2022 Assemble into movement groups.\n \n 13.5.1 Start the script\n@@ -55938,15 +55938,15 @@\n \u2022 cylinder = CylinderX(x1, r1, x2, r2) + cylinder = CylinderY(y1, r1, y2, r2) + cylinder\n = CylinderZ(z1, r1, z2, r2)\n Creates a (optionally tapered) cylinder on the given axis with the given radii at the given points on\n the axis.\n \u2022 sphere = Sphere(x, y, z, r)\n Creates a sphere of radius r at (x,y,z)\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1272 / 1290\n \n \u2022 triangle = TriangleXY(x1, y1, x2, y2, x3, y3, z1, z2) + triangle = TriangleXZ(x1, z1,\n x2, z2, x3, z3, y1, y2) + triangle = TriangleYZ(y1, z1, y2, z2, y3, z3, x1, x2)\n Creates a triangular plate between planes defined by the last two values parallel to the specified\n plane, with vertices given by the three coordinate pairs.\n@@ -55984,15 +55984,15 @@\n The function arguments are:\n \u2013 first a collection/part which can be pre-created earlier in the script, or could be created at this\n point if preferred eg part1 = HalTranslate([Box(....)], ...).\n \u2013 The HAL component is the next argument, ie the object returned by the comp = hal.component(...)\n command. After that is the name of the HAL in that will animate the motion, this needs to match\n an existing HAL pin that is part of the HAL component created earlier in the script.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1273 / 1290\n \n \u2013 Then follow the X, Y, Z scales.\n For a Cartesian machine created at 1:1 scale this would typically be 1,0,0 for a motion in the\n positive X direction.\n However if the STL file happened to be in cm and the machine was in inches, this could be fixed\n@@ -56033,15 +56033,15 @@\n head = AsciiSTL(filename=\u201d./head.stl\u201d)\n head = Color([0.3,0.3,0.3,1],[head])\n head = Translate([head],0,0,4)\n head = Collection([head, tool, dogs, draw])\n head = HalTranslate([head],c,\u201dZ\u201d,0,0,0.1)\n # base\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1274 / 1290\n \n base = AsciiSTL(filename=\u201d./base.stl\u201d)\n base = Color([0.5,0.5,0.5,1],[base])\n # mount head on it\n base = Collection([head, base])\n@@ -56082,15 +56082,15 @@\n import hal\n #create the HAL component and pins\n comp = hal.component(\u201dcompname\u201d)\n comp.newpin(\u201dpin_name\u201d, hal.HAL_FLOAT, hal.HAL_IN)\n ...\n #create the floor, tool and work\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n floor = Box(-50, -50, -3, 50, 50, 0)\n work = Capture()\n tooltip = Capture()\n ...\n #Build and assemble the model\n part1 = Collection([Box(-6,-3,94,6,3,100)])\n@@ -56101,23 +56101,23 @@\n #create a top-level model\n model = Collection([base, saddle, head, carousel])\n #Start the visualization\n main(model, tooltip, work, 100, lat=-75, lon=215)\n \n 1275 / 1290\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1276 / 1290\n \n Part III\n \n Glossary, Copyright & History\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1277 / 1290\n \n Chapter 14\n \n Overleaf\n \n@@ -56137,15 +56137,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1278 / 1290\n \n Chapter 15\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -56179,15 +56179,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1279 / 1290\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -56232,15 +56232,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1280 / 1290\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -56283,15 +56283,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1281 / 1290\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -56335,15 +56335,15 @@\n Rapid\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum speed of the machine. It is often desirable to limit the rapid rate when testing a G-code\n program for the first time.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1282 / 1290\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -56385,28 +56385,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1283 / 1290\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1284 / 1290\n \n Chapter 16\n \n Copyright\n 16.1 Legal Section\n@@ -56434,15 +56434,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1285 / 1290\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any\n such manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -56491,15 +56491,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front\n cover must present the full title with all words of the title equally prominent and visible. You may add\n other material on the covers in addition. Copying with changes limited to the covers, as long as they\n preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying\n in other respects.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1286 / 1290\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access\n@@ -56545,15 +56545,15 @@\n Version. N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any\n Invariant Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1287 / 1290\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -56594,15 +56594,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1288 / 1290\n \n this License provided that you also include the original English version of this License. In case of a\n disagreement between the translation and the original English version of this License, the original\n English version will prevail.\n 9. TERMINATION\n@@ -56630,15 +56630,15 @@\n is included in the section entitled \u201dGNU Free Documentation License\u201d.\n If you have no Invariant Sections, write \u201dwith no Invariant Sections\u201d instead of saying which ones\n are invariant. If you have no Front-Cover Texts, write \u201dno Front-Cover Texts\u201d instead of \u201dFront-Cover\n Texts being LIST\u201d; likewise for Back-Cover Texts.\n If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License,\n to permit their use in free software.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1289 / 1290\n \n Chapter 17\n \n LinuxCNC History\n 17.1 Origin\n@@ -56670,15 +56670,15 @@\n interested in improving EMC. Many people requested or coded small improvements to the code. Ray\n Henry wanted to refine the user interface. Since Ray was reluctant to try tampering with the C code\n in which the user interface was written, a simpler method was sought. Fred Proctor of NIST suggested a scripting language and wrote code to interface the Tcl/Tk scripting language to the internal\n NML communications of EMC. With this tool Ray went on to write a Tcl/Tk program that became the\n predominant user interface for EMC at the time.\n For NIST\u2019s perspective, see this paper written by William Shackleford and Frederick Proctor, describing the history of EMC and its transition to open source.\n \n-\fLinuxCNC V2.9.1, 04 Nov 2023\n+\fLinuxCNC V2.9.1, 06 Nov 2023\n \n 1290 / 1290\n \n By this time interest in EMC as beginning to pick up substantially. As more and more people attempted\n installation of EMC, the difficulty of patching a Linux kernel with the real time extensions and of\n compiling the EMC code became glaringly obvious. Many attempts to document the process and\n write scripts were attempted, some with moderate success. The problem of matching the correct\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_zh_CN.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_zh_CN.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_zh_CN.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Getting_Started_zh_CN.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Getting Started V2.9.1, 04 Nov 2023'\n+Title: 'Getting Started V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Getting Started V2.9.1, 04 Nov 2023\n+Getting Started V2.9.1, 06 Nov 2023\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n ii\n \n Contents\n 1 About LinuxCNC\n \n 1\n@@ -113,15 +113,15 @@\n \n 10\n \n 3.7 Review Latency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 10\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n iii\n \n 3.8 Set fixed ip address - only for mesa card.\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n@@ -251,15 +251,15 @@\n 7.2 GNU Free Documentation License\n \n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 31\n 31\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n iv\n \n The LinuxCNC Team\n \n This handbook is a work in progress. If you are able to help with writing, editing, or graphic preparation please contact any member of the writing team or join and send an email to emc-users@lists.sourceforge\n Copyright \u00a9 2000-2020 LinuxCNC.org\n@@ -277,15 +277,15 @@\n trademark Linux\u00ae is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds,\n owner of the mark on a world-wide basis.\n The LinuxCNC project is not affiliated with Debian\u00ae. Debian is a registered trademark owned by\n Software in the Public Interest, Inc.\n The LinuxCNC project is not affiliated with UBUNTU\u00ae. UBUNTU is a registered trademark owned\n by Canonical Limited.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 1 / 35\n \n Chapter 1\n \n About LinuxCNC\n 1.1 The Software\n@@ -312,15 +312,15 @@\n \u2022 It can simultaneously move up to 9 axes and supports a variety of interfaces.\n \u2022 The control can operate true servos (analog or PWM) with the feedback loop closed by the LinuxCNC\n software at the computer, or open loop with step-servos or stepper motors.\n \u2022 Motion control features include: cutter radius and length compensation, path deviation limited to\n a specified tolerance, lathe threading, synchronized axis motion, adaptive feedrate, operator feed\n override, and constant velocity control.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 2 / 35\n \n \u2022 Support for non-Cartesian motion systems is provided via custom kinematics modules. Available\n architectures include hexapods (Stewart platforms and similar concepts) and systems with rotary\n joints to provide motion such as PUMA or SCARA robots.\n \u2022 LinuxCNC runs on Linux using real time extensions.\n@@ -353,15 +353,15 @@\n 1.3.2 Mailing List\n An Internet Mailing List is a way to put questions out for everyone on that list to see and answer at\n their convenience. You get better exposure to your questions on a mailing list than on the IRC but\n answers take longer. In a nutshell you e-mail a message to the list and either get daily digests or\n individual replies back depending on how you set up your account.\n You can subscribe to the emc-users mailing list at: https://lists.sourceforge.net/lists/listinfo/emc-users\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 3 / 35\n \n 1.3.3 Web Forum\n A web forum can be found at https://forum.linuxcnc.org or by following the link at the top of the\n linuxcnc.org home page.\n This is quite active but the demographic is more user-biased than the mailing list. If you want to be\n@@ -371,15 +371,15 @@\n A Wiki site is a user maintained web site that anyone can add to or edit.\n \n The user maintained LinuxCNC Wiki site contains a wealth of information and tips at: https://wiki.linuxcnc.or\n \n 1.3.5 Bug Reports\n Report bugs to the LinuxCNC github bug tracker.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 4 / 35\n \n Chapter 2\n \n System Requirements\n 2.1 Minimum Requirements\n@@ -407,15 +407,15 @@\n LinuxCNC requires a kernel modified for realtime use to control real machine hardware. It can,\n however run on a standard kernel in simulation mode for purposes such as checking G-code, testing\n config files and learning the system. To work with these kernel versions there are two versions of\n LinuxCNC distributed. The package names are \u201dlinuxcnc\u201d and \u201dlinuxcnc-uspace\u201d.\n The realtime kernel options are preempt-rt, RTAI and Xenomai.\n You can discover the kernel version of your system with the command:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 5 / 35\n \n uname -a\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n@@ -451,15 +451,15 @@\n an extended time will give you the info you need to determine suitability.\n \n 2.3.2 Video Cards\n If your installation pops up with 800 x 600 screen resolution then most likely Debian does not recognize\n your video card or monitor. This can sometimes be worked-around by installing drivers or creating /\n editing Xorg.conf files.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 6 / 35\n \n Chapter 3\n \n Getting LinuxCNC\n This section describes how to install LinuxCNC version 2.9 on a PC already running Debian Bookworm (Debian 12). LinuxCNC requires the PREEMPT_RT real time kernel to ensure the strict timing\n@@ -488,15 +488,15 @@\n sudo apt install linuxcnc-uspace linuxcnc-uspace-dev\n \n Optionally you can install mesaflash if you are using a Mesa card:\n sudo apt install mesaflash\n \n Reboot and log in again as the same user. Open a terminal window and check PREEMPT_RT is installed:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 7 / 35\n \n uname -v\n \n PREEMPT_RT should be displayed in the results.\n That\u2019s it! You are done! You will find LinuxCNC under the CNC menu.\n@@ -526,15 +526,15 @@\n \n Raspberry Pis (and most other Single Board Computers, or SBUs) are ARM64 machines. These instructions will feature arm64 kernel and can\u2019t be used for AMD64 machines (which is what many PCs\n are, including all Intel based machines).\n \n 1. Download a Debian Bookworm image from https://raspi.debian.net/daily-images/ and burn to an\n SD card and install in the usual way.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 8 / 35\n \n There have been reported black screen lockout with the \u201dtested\u201d images on some Pis. It may be\n that removing dtoverlay=vc4-fkms-v3d-pi4 from /boot/config.txt resolves that problem. These\n instructions were tested using the 2023/05/15 daily build.\n \n@@ -574,15 +574,15 @@\n disable_overscan=1\n dtparam=audio=off\n \n Save and exit nano NOTE: These commands (a) use video graphics resources for 3D acceleration\n (increases performance considerably), (b) don\u2019t overscan (fixes some black border issues), and (c)\n don\u2019t use audio (unknown performance enhancement)\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 9 / 35\n \n The first command is only tested on RasPi 4 models, and it specifically references pi4. We have\n commented it out as on one test it seems to cause the Pi to hang. Experiment at your own\n risk.\n \n@@ -615,15 +615,15 @@\n 3.5 Bookworm Tweaks\n 3.5.1 Basic Tweaks\n To make life easy, there are some standard tweaks you can make to Bookworm which should work on\n both X86 and the pi.\n From the menu settings/Power manager set the power settings to suit your needs. You can turn off\n screen saver and screen lock here Install geany and grub-customizer (x86/AMD64 only):\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 10 / 35\n \n sudo apt install geany grub-customizer\n \n Finally now geany is installed, enable auto login\n sudo geany /etc/lightdm/lightdm.conf\n@@ -656,15 +656,15 @@\n latency-histogram --nobase --sbins 1000\n \n How to evaluate latency is covered in the LinuxCNC documents Among other things, latency is affected\n by: BIOS settings; Isolcpus and other boot time settings; Kernel version used\n \n Optimal latency settings are still subject to review following recent changes to the Linux kernel.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 11 / 35\n \n 3.8 Set fixed ip address - only for mesa card.\n Usually we set up the mesa card to have the ip address 10.10.10.10. We need to set a fixed ip address\n of 10.10.10.1 to the network interface that connects to it. Type:\n ip a\n@@ -704,15 +704,15 @@\n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-de\n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-es\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 12 / 35\n \n pin: release o=http://buildbot2.highlab.com/debian/\n Pin-Priority: 500\n package: linuxcnc-uspace-doc-fr\n pin: release o=http://buildbot2.highlab.com/debian/\n@@ -755,15 +755,15 @@\n The r8168-dkms and r8125-dkms drivers are in the non-free packages which are not included in\n sources.list by default.\n You can see your driver if you type the following to identify your NIC name:\n ip a\n \n Now display the NIC info eg:\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 13 / 35\n \n sudo apt install ethtool\n ethtool -i enps02\n \n If it seems you could benefit from this driver, continue Type:\n@@ -800,15 +800,15 @@\n sudo apt purge r8168-dkms\n \n 3.11 Installing a later kernel\n Since the release of Debian Bullseye (Linux kernel 5.10), real time performance has been disappointing. In particular, network latency when communicating with a Mesa ethernet card has been generating Error Finishing Read Errors. This means that the network latency left insufficient time for the\n servo thread cycle to complete in time.\n This appears to have been more prevalent with Realtek Network interfaces. Fortunately, each iteration of the Linux kernel has improved results, particularly since the release of 6.x kernels. Debian\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 14 / 35\n \n Bookworm (Debian 12) is using the 6.1 kernel which is quite good. In our testing, we found that latency improved by 265% if we used the 6.3 kernel. We have compiled this version of the kernel for\n your convenience. This image was updated to the final 6.3 kernel on 1 May 2023 and may be updated\n form time to time.\n Only try installing it if you have exhausted all options by following the steps below:\n@@ -904,21 +904,21 @@\n simulation only\n machine control\n & simulation\n machine control\n & simulation\n simulation only\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n LinuxCNC v2.8 and above is not supported on Ubuntu Lucid or older.\n \n 15 / 35\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 16 / 35\n \n Chapter 4\n \n Running LinuxCNC\n 4.1 Invoking LinuxCNC\n@@ -945,15 +945,15 @@\n applications like PyVCP or GladeVCP.\n \u2013 attic - Obsolete or historical configurations.\n The sim configurations are often the most useful starting point for new users and are organized around\n supported GUIs:\n \u2022 axis - Keyboard and Mouse GUI\n \u2022 craftsman - Touch Screen GUI (no longer maintained ???)\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 17 / 35\n \n \u2022 gmoccapy - Touch Screen GUI\n \u2022 gscreen - Touch Screen GUI\n \u2022 pyvcp_demo - Python Virtual Control Panel\n \u2022 qtaxis - Touch Screen GUI, axis lookalike\n@@ -984,15 +984,15 @@\n \u2022 tormach\n A complete system may be required to use these configurations.\n The apps items are typically either:\n 1. utilities that don\u2019t require starting linuxcnc\n 2. demonstrations of applications that can be used with linuxcnc\n \u2022 info - creates a file with system information that may be useful for problem diagnosis.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 18 / 35\n \n \u2022 gladevcp - Example GladeVCP applications.\n \u2022 halrun - Starts halrun in an terminal.\n \u2022 latency - Applications to investigate latency\n \u2013 latency-histogram-1 - histogram for single servo thread\n@@ -1009,15 +1009,15 @@\n Figure 4.1: LinuxCNC Configuration Selector\n Click any of the listed configurations to display specific information about it. Double-click a configuration or click OK to start the configuration.\n Select Create Desktop Shortcut and then click OK to add an icon on the Ubuntu desktop to directly\n launch this configuration without showing the Configuration Selector screen.\n When you select a configuration from the Sample Configurations section, it will automatically place a\n copy of that config in the ~/linuxcnc/configs directory.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 19 / 35\n \n 4.3 Next steps in configuration\n After finding the sample configuration that uses the same interface hardware as your machine (or a\n simulator configuration), and saving a copy to your home directory, you can customize it according to\n the details of your machine. Refer to the Integrator Manual for topics on configuration.\n@@ -1044,15 +1044,15 @@\n HAL files, local modifications will then prevail.\n The Configuration selector makes a symbolic link in the user configuration directory (named hallib)\n that points to the system HAL file library. This link simplifies copying a library file. For example, to\n copy the library core_sim.hal file in order to make local modifications:\n cd ~/linuxcnc/configs/name_of_configuration\n cp hallib/core_sim.hal core_sim.hal\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 20 / 35\n \n Chapter 5\n \n Updating LinuxCNC\n Updating LinuxCNC to a new minor release (ie to a new version in the same stable series, for example\n@@ -1084,15 +1084,15 @@\n \n You should be running on Debian Buster, Bullseye or Bookworm or Ubuntu 20.04 \u201dFocal Fossa\u201d or\n newer. LinuxCNC will not run on older distributions than these.\n You will also need to check which realtime kernel is being used:\n uname -r\n 6.1.0-10-rt-amd64\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 21 / 35\n \n If you see (as above) -rt- in the kernel name then you are running the preempt-rt kernel and should\n install the \u201duspace\u201d version of LinuxCNC. You should also install uspace for \u201dsim\u201d configs on nonrealtime kernels\n If you see -rtai- in the kernel name then you are running RTAI realtime. See below for the LinuxCNC\n version to install. At this moment there are (tmporariliy) no RTAI packages for LinuxCNC 2.9.0 but it\n@@ -1124,15 +1124,15 @@\n deb https://linuxcnc.org buster base\n 2.9-rtpreempt\n deb https://linuxcnc.org bullseye base\n 2.9-uspace\n deb https://linuxcnc.org bookworm base\n 2.9-uspace\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 22 / 35\n \n \u2022 Click Add Source, then Close in the Software Sources window. If it pops up a window informing\n you that the information about available software is out-of-date, click the Reload button.\n \n 5.1.2 Upgrading to the new version\n@@ -1152,15 +1152,15 @@\n \n 5.1.3 Ubuntu\n \u2022 Click on the Dash Home icon in the top left.\n \u2022 In the Search field, type \u201dupdate\u201d, then click on the Update Manager icon.\n \u2022 Click the Check button to fetch the list of packages available.\n \u2022 Click the Install Updates button to install the new versions of all packages.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 23 / 35\n \n 5.2 Updating without Network\n To update without a network connection you need to download the .deb then install it with dpkg. The\n .debs can be found in https://linuxcnc.org/dists/ .\n You have to drill down from the above link to find the correct deb for your installation. Open a terminal\n@@ -1196,15 +1196,15 @@\n In the extremely unlikely event that you are using canterp, know that the module has moved from\n /usr/lib/libcanterp.so to /usr/lib/linuxcnc/canterp.so, and the [TASK]INTERPRETER setting\n correspondingly needs to change from libcanterp.so to canterp.so.\n \n 5.4 Updating Configuration Files (for 2.9.x)\n No changes should be necessary to configuration files when moving from 2.8 to 2.9\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 24 / 35\n \n 5.4.1 Spindle limits in the INI\n It is now possible to add settings to the [SPINDLE] section of the INI file\n MAX_FORWARD_VELOCITY = 20000 The maximum spindle speed (in rpm)\n MIN_FORWARD_VELOCITY = 3000 The minimum spindle speed (in rpm)\n@@ -1230,15 +1230,15 @@\n \n 5.6 New Drivers\n A framework for controlling ModBus devices using the serial ports on many Mesa cards has been\n introduced. http://linuxcnc.org/docs/2.9/html/drivers/mesa_modbus.html\n \n A new GPIO driver for any GPIO which is supported by the gpiod library is now included: http://linuxcnc.org/docs/2.9/html/drivers/hal_gpio.html\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 25 / 35\n \n Chapter 6\n \n Glossary\n A listing of terms and what they mean. Some terms have a general meaning and several additional\n@@ -1272,15 +1272,15 @@\n Backlash Compensation\n Any technique that attempts to reduce the effect of backlash without actually removing it from\n the mechanical system. This is typically done in software in the controller. This can correct the\n final resting place of the part in motion but fails to solve problems related to direction changes\n while in motion (think circular interpolation) and motion that is caused when external forces\n (think cutting tool pulling on the work piece) are the source of the motion.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 26 / 35\n \n Ball Screw\n A type of lead-screw that uses small hardened steel balls between the nut and screw to reduce\n friction. Ball-screws have very low friction and backlash, but are usually quite expensive.\n Ball Nut\n@@ -1325,15 +1325,15 @@\n EMCIO\n The module within LinuxCNC that handles general purpose I/O, unrelated to the actual motion\n of the axes.\n EMCMOT\n The module within LinuxCNC that handles the actual motion of the cutting tool. It runs as a\n real-time program and directly controls the motors.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 27 / 35\n \n Encoder\n A device to measure position. Usually a mechanical-optical device, which outputs a quadrature\n signal. The signal can be counted by special hardware, or directly by the parport with LinuxCNC.\n Feed\n@@ -1376,15 +1376,15 @@\n Joint Coordinates\n These specify the angles between the individual joints of the machine. See also Kinematics\n Jog\n Manually moving an axis of a machine. Jogging either moves the axis a fixed amount for each\n key-press, or moves the axis at a constant speed as long as you hold down the key. In manual\n mode, jog speed can be set from the graphical interface.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 28 / 35\n \n kernel-space\n Code running inside the kernel, as opposed to code running in userspace. Some realtime systems (like RTAI) run realtime code in the kernel and non-realtime code in userspace, while other\n realtime systems (like Preempt-RT) run both realtime and non-realtime code in userspace.\n Kinematics\n@@ -1428,15 +1428,15 @@\n Rapid\n Fast, possibly less precise motion of the tool, commonly used to move between cuts. If the tool\n meets the workpiece or the fixturing during a rapid, it is probably a bad thing!\n Rapid rate\n The speed at which a rapid motion occurs. In auto or MDI mode, rapid rate is usually the maximum speed of the machine. It is often desirable to limit the rapid rate when testing a G-code\n program for the first time.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 29 / 35\n \n Real-time\n Software that is intended to meet very strict timing deadlines. On Linux, in order to meet these\n requirements it is necessary to install a realtime kernel such as RTAI or Preempt-RT, and build\n the LinuxCNC software to run in the special real-time environment. Realtime software can run\n@@ -1478,28 +1478,28 @@\n The module within LinuxCNC that coordinates the overall execution and interprets the part program.\n Tcl/Tk\n A scripting language and graphical widget toolkit with which several of LinuxCNCs GUIs and\n selection wizards were written.\n Traverse Move\n A move in a straight line from the start point to the end point.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 30 / 35\n \n Units\n See \u201dMachine Units\u201d, \u201dDisplay Units\u201d, or \u201dProgram Units\u201d.\n Unsigned Integer\n A whole number that has no sign. In HAL it is known as u32. (An unsigned 32-bit integer has a\n usable range of zero to 4,294,967,296.)\n World Coordinates\n This is the absolute frame of reference. It gives coordinates in terms of a fixed reference frame\n that is attached to some point (generally the base) of the machine tool.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 31 / 35\n \n Chapter 7\n \n Legal Section\n Translations of this file provided in the source tree are not legally binding.\n@@ -1526,15 +1526,15 @@\n We have designed this License in order to use it for manuals for free software, because free software\n needs free documentation: a free program should come with manuals providing the same freedoms\n that the software does. But this License is not limited to software manuals; it can be used for any\n textual work, regardless of subject matter or whether it is published as a printed book. We recommend\n this License principally for works whose purpose is instruction or reference.\n 1. APPLICABILITY AND DEFINITIONS\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 32 / 35\n \n This License applies to any manual or other work that contains a notice placed by the copyright holder\n saying it can be distributed under the terms of this License. The \u201dDocument\u201d, below, refers to any\n such manual or work. Any member of the public is a licensee, and is addressed as \u201dyou\u201d.\n A \u201dModified Version\u201d of the Document means any work containing the Document or a portion of it,\n@@ -1583,15 +1583,15 @@\n these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover.\n Both covers must also clearly and legibly identify you as the publisher of these copies. The front\n cover must present the full title with all words of the title equally prominent and visible. You may add\n other material on the covers in addition. Copying with changes limited to the covers, as long as they\n preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying\n in other respects.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 33 / 35\n \n If the required texts for either cover are too voluminous to fit legibly, you should put the first ones\n listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.\n If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with\n each Opaque copy a publicly-accessible computer-network location containing a complete Transparent copy of the Document, free of added material, which the general network-using public has access\n@@ -1637,15 +1637,15 @@\n Version. N. Do not retitle any existing section as \u201dEndorsements\u201d or to conflict in title with any\n Invariant Section.\n If the Modified Version includes new front-matter sections or appendices that qualify as Secondary\n Sections and contain no material copied from the Document, you may at your option designate some\n or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the\n Modified Version\u2019s license notice. These titles must be distinct from any other section titles.\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 34 / 35\n \n You may add a section entitled \u201dEndorsements\u201d, provided it contains nothing but endorsements of\n your Modified Version by various parties\u2014for example, statements of peer review or that the text has\n been approved by an organization as the authoritative definition of a standard.\n You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as\n@@ -1686,15 +1686,15 @@\n placed on covers that surround only the Document within the aggregate. Otherwise they must appear\n on covers around the whole aggregate.\n 8. TRANSLATION\n Translation is considered a kind of modification, so you may distribute translations of the Document\n under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections\n in addition to the original versions of these Invariant Sections. You may include a translation of\n \n-\fGetting Started V2.9.1, 04 Nov 2023\n+\fGetting Started V2.9.1, 06 Nov 2023\n \n 35 / 35\n \n this License provided that you also include the original English version of this License. In case of a\n disagreement between the translation and the original English version of this License, the original\n English version will prevail.\n 9. TERMINATION\n"}]}, {"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_zh_CN.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_zh_CN.pdf", "unified_diff": null, "details": [{"source1": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_zh_CN.pdf", "source2": "./usr/share/doc/linuxcnc/LinuxCNC_Integrator_zh_CN.pdf", "comments": ["Document info"], "unified_diff": "@@ -1,4 +1,4 @@\n CreationDate: \"D:20231105115916-00'00'\"\n Creator: 'DBLaTeX-0.3.12'\n Producer: 'xdvipdfmx (20220710)'\n-Title: 'Integrator Information V2.9.1, 04 Nov 2023'\n+Title: 'Integrator Information V2.9.1, 06 Nov 2023'\n"}, {"source1": "pdftotext {} -", "source2": "pdftotext {} -", "unified_diff": "@@ -1,10 +1,10 @@\n-Integrator Information V2.9.1, 04 Nov 2023\n+Integrator Information V2.9.1, 06 Nov 2023\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n ii\n \n Contents\n 1 Stepper Information\n \n 1\n@@ -125,15 +125,15 @@\n \n 18\n \n 3.12.3Wiring Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n \n 18\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 1 / 18\n \n Chapter 1\n \n Stepper Information\n 1.1 Stepper Motor Operation\n@@ -152,15 +152,15 @@\n the time that each coil can exert its full magnetic attraction on the rotor reduces, thereby reducing\n the overall torque. This relationship between speed and torque is largely inversely proportional.\n In the below example, the charging time for three coils is shown when the applied voltage is stepped\n from 0 V to 40 V. While all three coils can easily reach the full current limit of 5 amps (A), the time\n taken varies for each coil. The 4 milli-Henry (mH) coil (blue trace) takes twice as long to reach full\n current than the 2 mH coil (green trace), and the 8 mH (red trace) coil takes twice as long again:\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 2 / 18\n \n If the rate at which step changes are applied to the coils is significantly shorter than the rise time,\n it\u2019s easy to see that the winding has less time to attain full magnetic attraction on the rotor, and thus\n maximum torque is curtailed. In the below example the 2 mH coil can achieve the full 5 A limit before\n the step voltage is removed, but the 4 mH and 8 mH coils cannot:\n@@ -179,15 +179,15 @@\n In most stepper-based CNC systems the voltage of the supply feeding the stepper driver is several\n orders of magnitude greater than the voltage of the motor itself. A typical NEMA23 stepper motor\n may have a rating of only a handful of volts, yet the power supply and driver could be operating at\n 48 VDC or more.\n Nearly all modern stepper motor drivers on the market today are constant-current types. That is,\n the current being applied to each winding is fixed irrespective of how much voltage is being applied.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 3 / 18\n \n Most drivers accomplish this by monitoring the current being drawn through the motor windings and\n rapidly switching the outputs on and off at a very high frequency to maintain this current. Depending\n on the drivers being used, it may even be possible to hear this high frequency whistling in the motors\n themselves when stationary. Because the voltage is rapidly switched on and off to maintain the winding\n@@ -232,15 +232,15 @@\n introduced.\n Several methods exist to help control the effects of resonance, all with varying degrees of complexity,\n effectiveness and side effects:\n \u2022 Microstepping can help reduce resonance by using smaller step changes in current between each\n step. These smaller step changes cause less ringing in the motor and windings and thus cause less\n excitation at the point of resonance.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 4 / 18\n \n \u2022 Ensuring the motor is never operated at a particular frequency for a sustained period is a very basic\n method of reducing resonance, always accelerating or decelerating through the resonant peak.\n \u2022 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\n employed.\n@@ -279,15 +279,15 @@\n in leadscrews, flex in gantries, runout in the spindle and cutting tool, static friction in the stepper\n motor itself, stepper detent error , etc.) that will render such small amounts of resolution completely\n meaningless. In practice, microstepping at rates in excess of 4x or 8x on a CNC machine fitted with\n leadscrews serves little purpose. In some cases it may even be more beneficial to run at lower degrees\n of microstepping or even full steps, and operate the stepper motor through a gear reduction to obtain\n the necessary resolution and torque gains.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 5 / 18\n \n 1.5 Open and Closed Loop\n In the simplest CNC systems employing stepper motors, the host computer and/or stepper driver\n receives no feedback from the motor that it has achieved the desired outcome when commanded to\n begin stepping. The assumption by the software, driver and end user is that the motor operated\n@@ -307,15 +307,15 @@\n to the downstream driver as it would normally when running in open loop. In these situations the\n drivers usually include an alarm output which signals the software to halt when the load placed on\n the stepper becomes too great for the driver to compensate without losing steps.\n More advanced implementations of closed loop operation bring the encoder signal all the way back\n to the host computer, but require that a much higher hardware and software overhead be installed to\n manage the encoder feedback and calculation and delivery of drive compensation.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 6 / 18\n \n Chapter 2\n \n Stepper Timing\n This page is for step and direction timing of stepper drives.\n@@ -378,15 +378,15 @@\n support/motorcontrolmanuals/stepperdrives/g201rev16.html\n \n 1000\n \n Falling\n Edge\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 7 / 18\n \n Gecko\n@@ -479,15 +479,15 @@\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g201rev16.html\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g212rev15.html\n http://www.geckodrive.com\n support/motorcontrolmanuals/stepperdrives/g213vrev7.html\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 8 / 18\n \n Gecko\n@@ -625,15 +625,15 @@\n http://granitedevices.fi/assets/files/vsde_160_manual.pdf\n http://granitedevices.fi/assets/files/vsde_160_dualdc_manual.pdf\n http://www.jvl.dk/files/pdf/lb043gb.pdf\n http://www.jvl.dk/files/pdf/lb043gb.pdf\n http://www.piclist.com/techref/io/stepper/linistep/index.htm\n http://www.piclist.com/techref/io/stepper/THB6064/index.htm\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n 9 / 18\n \n *Motion\n@@ -858,15 +858,15 @@\n http://www.kelinginc.net/kL6852.pdf\n https://www.sherline.com/-\n \n http://www.lewetz.de/download/ibstep3se.pdf\n http://www.compumotor.com\n manuals/ZETA/ZETA_Rev_A_Entire.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n www.cncdrive.com\n Dugong\n \n Step\n@@ -1105,15 +1105,15 @@\n http://leadshine.com/UploadFile/Down/EM503d_P.pdf\n http://leadshine.com/UploadFile/Down/EM705d_P.pdf\n http://leadshine.com/UploadFile/Down/EM806d_P.pdf\n http://leadshineusa.com/UploadFile/Down/M415Bm.pdf\n http://leadshineusa.com/UploadFile/Down/M542V2m.pdf\n http://leadshineusa.com/UploadFile/Down/M752m.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n Manufacturer\n Model\n \n Step\n Time\n 1500\n@@ -1292,15 +1292,15 @@\n 5000\n \n Rising\n Edge\n \n http://cnc4you.co.uk/resources/CW5045.pdf\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 12 / 18\n \n Chapter 3\n \n Best Wiring Practices\n 3.1 Electrical Noise\n@@ -1329,15 +1329,15 @@\n this discussion the terms earth and common must be made distinct from each other to avoid confusion.\n \n 3.3 Wire Selection and Use\n Wire comes in many types, sizes and configurations. Wading through all the wire available is a monumental task of its own, but for the purposes of this article it is only necessary to consider the types of\n wires typically used when wiring a CNC controller. Additionally, how the wire is to be used can have\n some effect on the overall system. What follows are some tips that may prove helpful.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 13 / 18\n \n 3.3.1 Single Conductor Wire\n Wire comes in two forms: solid conductor and stranded. Solid core wire is generally cheaper than\n stranded, but more likely to break if used in applications where repeated bending is expected. Fortunately, the prevalence of stranded wire on the market means that its use should be encouraged\n wherever possible.\n@@ -1378,15 +1378,15 @@\n is more bulky than foil and does not provide 100% coverage, but is more flexible than foil shielded\n types. Coverage is typically 70% to 95% depending on how tight the braid has been constructed.\n Despite the lower coverage of braided shield, the effectiveness is greater than foil shielding due to\n the increased bulk of the braid, and copper being a better conductor than aluminum.\n 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 multiconductor cable may also be shielded along with an overall shield being applied to the entire cable\n jacket.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 14 / 18\n \n 3.4 AC Line Voltage\n The incoming mains AC that powers the CNC system can pick up and carry noise into the power\n supplies and other equipment. For example, if the incoming supply is also used to feed large motors,\n electrical noise may be generated on the line feeding the CNC components. Although most modern\n@@ -1424,15 +1424,15 @@\n supply may have optically-isolated signal input lines which provide complete electrical separation of\n the driver\u2019s input and output circuitry for safety and noise immunity purposes. Tying the stepper\n motor and logic control supply commons together in this case may have a detrimental impact on the\n operation of the system.\n In general it makes most sense to keep the commons of the various DC PSUs used in the CNC system\n separate from each other, and separate from the AC mains earth unless there is a specific requirement\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 15 / 18\n \n to tie them together. In most cases the common points of the heavy-duty power sections of the CNC\n system (eg, stepper motor or servo motor drivers, spindle motors etc) will be segregated from common\n points of the electrically-sensitive sections of the CNC (control interface boards, limit switches, tool\n probe circuitry etc) to prevent cross-contamination of the two systems.\n@@ -1472,15 +1472,15 @@\n electrically hostile environments. When grounding the shield in the cable, terminate to the mains\n earth.\n If the controller and interfacing devices can withstand higher control signals, consider altering the\n wiring and power supply requirements to use a bigger voltage for signaling (eg, 12V or 24V). The\n same 2V EMI noise spike that could corrupt a 3.3V limit switch signal will be far less likely to cause\n issues with a limit switch operating with a 24V signal.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 16 / 18\n \n 3.8 Stepper or Servo Motor Drivers\n The metal housing of the driver should be connected to the local mains earth in the CNC system.\n Some driver enclosures will indicate a specific terminal as being the earthing point, in which case this\n point must be connected to earth via a dedicated wire.\n@@ -1515,15 +1515,15 @@\n each other has the tendency to exacerbate EMI interference. Separate conductors by as much distance as possible. If two conductors must cross over each other make the crossing as close to a 90\n degree angle as possible.\n Avoid long loops of excess wire at any peripheral devices - they are great antennas for receiving or\n transmitting noise. Where possible, run wires in close proximity to large earthed structures. If the\n controller enclosure features a large metallic back plate that is earthed, secure all control wiring\n against this surface as much as possible while wiring between two points.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 17 / 18\n \n 3.11 Mechanical Noise\n Very few mechanical switches (eg, an axis limit switch or tool probe input) will close or open perfectly\n when operated. More often than not the switch contacts will physically bounce against each other\n several times within a very short space of time when operated. This may be interpreted by the machine\n@@ -1557,15 +1557,15 @@\n \n 3.12.1 Hardware Documentation\n At a minimum, make sure to save any documentation associated with the installed hardware in a safe\n place. Stepper controllers, break out boards, power supplies, VFDs, interfaces and controllers, servo\n and stepper drivers and any associated device settings are all critical components of the system and\n their documentation should be kept at hand for easy reference.\n \n-\fIntegrator Information V2.9.1, 04 Nov 2023\n+\fIntegrator Information V2.9.1, 06 Nov 2023\n \n 18 / 18\n \n 3.12.2 Wiring Schematics\n As the CNC machine is wired, make sure to draw up a schematic that can be referenced to later. The\n schematic does not have to be all that neat, but it should be understandable in such a way that it\n could be easily interpreted at a later date, ideally by anyone who may need to service the equipment.\n"}]}]}]}]}, {"source1": "linuxcnc-uspace_2.9.1-2_amd64.deb", "source2": "linuxcnc-uspace_2.9.1-2_amd64.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2023-11-05 11:59:16.000000 debian-binary\n--rw-r--r-- 0 0 0 115012 2023-11-05 11:59:16.000000 control.tar.xz\n--rw-r--r-- 0 0 0 26857632 2023-11-05 11:59:16.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 115032 2023-11-05 11:59:16.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 26855532 2023-11-05 11:59:16.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -4578,15 +4578,15 @@\n -rw-r--r-- 0 root (0) root (0) 2108 2023-11-05 11:59:16.000000 ./usr/share/man/man1/mitsub_vfd.1.gz\n -rw-r--r-- 0 root (0) root (0) 1126 2023-11-05 11:59:16.000000 ./usr/share/man/man1/monitor-xhc-hb04.1.gz\n -rw-r--r-- 0 root (0) root (0) 1047 2023-11-05 11:59:16.000000 ./usr/share/man/man1/motion-logger.1.gz\n -rw-r--r-- 0 root (0) root (0) 2586 2023-11-05 11:59:16.000000 ./usr/share/man/man1/moveoff_gui.1.gz\n -rw-r--r-- 0 root (0) root (0) 1973 2023-11-05 11:59:16.000000 ./usr/share/man/man1/mqtt-publisher.1.gz\n -rw-r--r-- 0 root (0) root (0) 1010 2023-11-05 11:59:16.000000 ./usr/share/man/man1/ngcgui.1.gz\n -rw-r--r-- 0 root (0) root (0) 1202 2023-11-05 11:59:16.000000 ./usr/share/man/man1/panelui.1.gz\n--rw-r--r-- 0 root (0) root (0) 617 2023-11-05 11:59:16.000000 ./usr/share/man/man1/pi500_vfd.1.gz\n+-rw-r--r-- 0 root (0) root (0) 615 2023-11-05 11:59:16.000000 ./usr/share/man/man1/pi500_vfd.1.gz\n -rw-r--r-- 0 root (0) root (0) 942 2023-11-05 11:59:16.000000 ./usr/share/man/man1/pmx485-test.1.gz\n -rw-r--r-- 0 root (0) root (0) 858 2023-11-05 11:59:16.000000 ./usr/share/man/man1/pmx485.1.gz\n -rw-r--r-- 0 root (0) root (0) 1023 2023-11-05 11:59:16.000000 ./usr/share/man/man1/pncconf.1.gz\n -rw-r--r-- 0 root (0) root (0) 1038 2023-11-05 11:59:16.000000 ./usr/share/man/man1/puma560gui.1.gz\n -rw-r--r-- 0 root (0) root (0) 1038 2023-11-05 11:59:16.000000 ./usr/share/man/man1/pumagui.1.gz\n -rw-r--r-- 0 root (0) root (0) 1014 2023-11-05 11:59:16.000000 ./usr/share/man/man1/pyngcgui.1.gz\n -rw-r--r-- 0 root (0) root (0) 1034 2023-11-05 11:59:16.000000 ./usr/share/man/man1/pyui.1.gz\n@@ -4607,21 +4607,21 @@\n -rw-r--r-- 0 root (0) root (0) 1492 2023-11-05 11:59:16.000000 ./usr/share/man/man1/shuttle.1.gz\n -rw-r--r-- 0 root (0) root (0) 560 2023-11-05 11:59:16.000000 ./usr/share/man/man1/sim-torch.1.gz\n -rw-r--r-- 0 root (0) root (0) 1494 2023-11-05 11:59:16.000000 ./usr/share/man/man1/sim_pin.1.gz\n -rw-r--r-- 0 root (0) root (0) 1032 2023-11-05 11:59:16.000000 ./usr/share/man/man1/simulate_probe.1.gz\n -rw-r--r-- 0 root (0) root (0) 1044 2023-11-05 11:59:16.000000 ./usr/share/man/man1/stepconf.1.gz\n -rw-r--r-- 0 root (0) root (0) 2119 2023-11-05 11:59:16.000000 ./usr/share/man/man1/svd-ps_vfd.1.gz\n -rw-r--r-- 0 root (0) root (0) 1133 2023-11-05 11:59:16.000000 ./usr/share/man/man1/teach-in.1.gz\n--rw-r--r-- 0 root (0) root (0) 718 2023-11-05 11:59:16.000000 ./usr/share/man/man1/thermistor.1.gz\n+-rw-r--r-- 0 root (0) root (0) 716 2023-11-05 11:59:16.000000 ./usr/share/man/man1/thermistor.1.gz\n -rw-r--r-- 0 root (0) root (0) 1002 2023-11-05 11:59:16.000000 ./usr/share/man/man1/tooledit.1.gz\n -rw-r--r-- 0 root (0) root (0) 1226 2023-11-05 11:59:16.000000 ./usr/share/man/man1/touchy.1.gz\n -rw-r--r-- 0 root (0) root (0) 1125 2023-11-05 11:59:16.000000 ./usr/share/man/man1/update_ini.1.gz\n -rw-r--r-- 0 root (0) root (0) 3450 2023-11-05 11:59:16.000000 ./usr/share/man/man1/vfdb_vfd.1.gz\n -rw-r--r-- 0 root (0) root (0) 3123 2023-11-05 11:59:16.000000 ./usr/share/man/man1/vfs11_vfd.1.gz\n--rw-r--r-- 0 root (0) root (0) 635 2023-11-05 11:59:16.000000 ./usr/share/man/man1/wj200_vfd.1.gz\n+-rw-r--r-- 0 root (0) root (0) 634 2023-11-05 11:59:16.000000 ./usr/share/man/man1/wj200_vfd.1.gz\n -rw-r--r-- 0 root (0) root (0) 1014 2023-11-05 11:59:16.000000 ./usr/share/man/man1/xhc-hb04-accels.1.gz\n -rw-r--r-- 0 root (0) root (0) 3950 2023-11-05 11:59:16.000000 ./usr/share/man/man1/xhc-hb04.1.gz\n -rw-r--r-- 0 root (0) root (0) 8219 2023-11-05 11:59:16.000000 ./usr/share/man/man1/xhc-whb04b-6.1.gz\n -rw-r--r-- 0 root (0) root (0) 1069 2023-11-05 11:59:16.000000 ./usr/share/man/man1/xyzac-trt-gui.1.gz\n -rw-r--r-- 0 root (0) root (0) 1069 2023-11-05 11:59:16.000000 ./usr/share/man/man1/xyzbc-trt-gui.1.gz\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/man/man3/\n -rw-r--r-- 0 root (0) root (0) 646 2023-11-05 11:59:16.000000 ./usr/share/man/man3/hal_add_funct_to_thread.3hal.gz\n@@ -4689,56 +4689,56 @@\n -rw-r--r-- 0 root (0) root (0) 477 2023-11-05 11:59:16.000000 ./usr/share/man/man9/abs.9.gz\n -rw-r--r-- 0 root (0) root (0) 468 2023-11-05 11:59:16.000000 ./usr/share/man/man9/abs_s32.9.gz\n -rw-r--r-- 0 root (0) root (0) 481 2023-11-05 11:59:16.000000 ./usr/share/man/man9/and2.9.gz\n -rw-r--r-- 0 root (0) root (0) 1370 2023-11-05 11:59:16.000000 ./usr/share/man/man9/anglejog.9.gz\n -rw-r--r-- 0 root (0) root (0) 195 2023-11-05 11:59:16.000000 ./usr/share/man/man9/at_pid.9.gz\n -rw-r--r-- 0 root (0) root (0) 763 2023-11-05 11:59:16.000000 ./usr/share/man/man9/axistest.9.gz\n -rw-r--r-- 0 root (0) root (0) 392 2023-11-05 11:59:16.000000 ./usr/share/man/man9/bin2gray.9.gz\n--rw-r--r-- 0 root (0) root (0) 961 2023-11-05 11:59:16.000000 ./usr/share/man/man9/biquad.9.gz\n+-rw-r--r-- 0 root (0) root (0) 960 2023-11-05 11:59:16.000000 ./usr/share/man/man9/biquad.9.gz\n -rw-r--r-- 0 root (0) root (0) 522 2023-11-05 11:59:16.000000 ./usr/share/man/man9/bitslice.9.gz\n--rw-r--r-- 0 root (0) root (0) 446 2023-11-05 11:59:16.000000 ./usr/share/man/man9/bitwise.9.gz\n+-rw-r--r-- 0 root (0) root (0) 447 2023-11-05 11:59:16.000000 ./usr/share/man/man9/bitwise.9.gz\n -rw-r--r-- 0 root (0) root (0) 5513 2023-11-05 11:59:16.000000 ./usr/share/man/man9/bldc.9.gz\n -rw-r--r-- 0 root (0) root (0) 558 2023-11-05 11:59:16.000000 ./usr/share/man/man9/blend.9.gz\n--rw-r--r-- 0 root (0) root (0) 3606 2023-11-05 11:59:16.000000 ./usr/share/man/man9/carousel.9.gz\n+-rw-r--r-- 0 root (0) root (0) 3607 2023-11-05 11:59:16.000000 ./usr/share/man/man9/carousel.9.gz\n -rw-r--r-- 0 root (0) root (0) 728 2023-11-05 11:59:16.000000 ./usr/share/man/man9/charge_pump.9.gz\n -rw-r--r-- 0 root (0) root (0) 769 2023-11-05 11:59:16.000000 ./usr/share/man/man9/clarke2.9.gz\n -rw-r--r-- 0 root (0) root (0) 673 2023-11-05 11:59:16.000000 ./usr/share/man/man9/clarke3.9.gz\n -rw-r--r-- 0 root (0) root (0) 614 2023-11-05 11:59:16.000000 ./usr/share/man/man9/clarkeinv.9.gz\n -rw-r--r-- 0 root (0) root (0) 1209 2023-11-05 11:59:16.000000 ./usr/share/man/man9/classicladder.9.gz\n -rw-r--r-- 0 root (0) root (0) 698 2023-11-05 11:59:16.000000 ./usr/share/man/man9/comp.9.gz\n -rw-r--r-- 0 root (0) root (0) 388 2023-11-05 11:59:16.000000 ./usr/share/man/man9/constant.9.gz\n--rw-r--r-- 0 root (0) root (0) 417 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_bit_float.9.gz\n+-rw-r--r-- 0 root (0) root (0) 418 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_bit_float.9.gz\n -rw-r--r-- 0 root (0) root (0) 388 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_bit_s32.9.gz\n -rw-r--r-- 0 root (0) root (0) 389 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_bit_u32.9.gz\n -rw-r--r-- 0 root (0) root (0) 512 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_float_s32.9.gz\n -rw-r--r-- 0 root (0) root (0) 512 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_float_u32.9.gz\n -rw-r--r-- 0 root (0) root (0) 483 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_s32_bit.9.gz\n--rw-r--r-- 0 root (0) root (0) 417 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_s32_float.9.gz\n+-rw-r--r-- 0 root (0) root (0) 413 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_s32_float.9.gz\n -rw-r--r-- 0 root (0) root (0) 487 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_s32_u32.9.gz\n -rw-r--r-- 0 root (0) root (0) 483 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_u32_bit.9.gz\n -rw-r--r-- 0 root (0) root (0) 417 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_u32_float.9.gz\n -rw-r--r-- 0 root (0) root (0) 487 2023-11-05 11:59:16.000000 ./usr/share/man/man9/conv_u32_s32.9.gz\n--rw-r--r-- 0 root (0) root (0) 1015 2023-11-05 11:59:16.000000 ./usr/share/man/man9/corexy_by_hal.9.gz\n+-rw-r--r-- 0 root (0) root (0) 1014 2023-11-05 11:59:16.000000 ./usr/share/man/man9/corexy_by_hal.9.gz\n -rw-r--r-- 0 root (0) root (0) 1025 2023-11-05 11:59:16.000000 ./usr/share/man/man9/counter.9.gz\n--rw-r--r-- 0 root (0) root (0) 437 2023-11-05 11:59:16.000000 ./usr/share/man/man9/dbounce.9.gz\n+-rw-r--r-- 0 root (0) root (0) 438 2023-11-05 11:59:16.000000 ./usr/share/man/man9/dbounce.9.gz\n -rw-r--r-- 0 root (0) root (0) 587 2023-11-05 11:59:16.000000 ./usr/share/man/man9/ddt.9.gz\n--rw-r--r-- 0 root (0) root (0) 490 2023-11-05 11:59:16.000000 ./usr/share/man/man9/deadzone.9.gz\n+-rw-r--r-- 0 root (0) root (0) 489 2023-11-05 11:59:16.000000 ./usr/share/man/man9/deadzone.9.gz\n -rw-r--r-- 0 root (0) root (0) 821 2023-11-05 11:59:16.000000 ./usr/share/man/man9/debounce.9.gz\n -rw-r--r-- 0 root (0) root (0) 783 2023-11-05 11:59:16.000000 ./usr/share/man/man9/demux.9.gz\n -rw-r--r-- 0 root (0) root (0) 508 2023-11-05 11:59:16.000000 ./usr/share/man/man9/differential.9.gz\n--rw-r--r-- 0 root (0) root (0) 591 2023-11-05 11:59:16.000000 ./usr/share/man/man9/div2.9.gz\n--rw-r--r-- 0 root (0) root (0) 610 2023-11-05 11:59:16.000000 ./usr/share/man/man9/edge.9.gz\n+-rw-r--r-- 0 root (0) root (0) 590 2023-11-05 11:59:16.000000 ./usr/share/man/man9/div2.9.gz\n+-rw-r--r-- 0 root (0) root (0) 609 2023-11-05 11:59:16.000000 ./usr/share/man/man9/edge.9.gz\n -rw-r--r-- 0 root (0) root (0) 2502 2023-11-05 11:59:16.000000 ./usr/share/man/man9/encoder.9.gz\n -rw-r--r-- 0 root (0) root (0) 1213 2023-11-05 11:59:16.000000 ./usr/share/man/man9/encoder_ratio.9.gz\n -rw-r--r-- 0 root (0) root (0) 1805 2023-11-05 11:59:16.000000 ./usr/share/man/man9/enum.9.gz\n--rw-r--r-- 0 root (0) root (0) 1755 2023-11-05 11:59:16.000000 ./usr/share/man/man9/eoffset_per_angle.9.gz\n+-rw-r--r-- 0 root (0) root (0) 1754 2023-11-05 11:59:16.000000 ./usr/share/man/man9/eoffset_per_angle.9.gz\n -rw-r--r-- 0 root (0) root (0) 946 2023-11-05 11:59:16.000000 ./usr/share/man/man9/estop_latch.9.gz\n -rw-r--r-- 0 root (0) root (0) 511 2023-11-05 11:59:16.000000 ./usr/share/man/man9/feedcomp.9.gz\n -rw-r--r-- 0 root (0) root (0) 1263 2023-11-05 11:59:16.000000 ./usr/share/man/man9/filter_kalman.9.gz\n--rw-r--r-- 0 root (0) root (0) 439 2023-11-05 11:59:16.000000 ./usr/share/man/man9/flipflop.9.gz\n+-rw-r--r-- 0 root (0) root (0) 440 2023-11-05 11:59:16.000000 ./usr/share/man/man9/flipflop.9.gz\n -rw-r--r-- 0 root (0) root (0) 1160 2023-11-05 11:59:16.000000 ./usr/share/man/man9/gantry.9.gz\n -rw-r--r-- 0 root (0) root (0) 281 2023-11-05 11:59:16.000000 ./usr/share/man/man9/gantrykins.9.gz\n -rw-r--r-- 0 root (0) root (0) 782 2023-11-05 11:59:16.000000 ./usr/share/man/man9/gearchange.9.gz\n -rw-r--r-- 0 root (0) root (0) 169 2023-11-05 11:59:16.000000 ./usr/share/man/man9/gentrivkins.9.gz\n -rw-r--r-- 0 root (0) root (0) 695 2023-11-05 11:59:16.000000 ./usr/share/man/man9/gladevcp.9.gz\n -rw-r--r-- 0 root (0) root (0) 408 2023-11-05 11:59:16.000000 ./usr/share/man/man9/gray2bin.9.gz\n -rw-r--r-- 0 root (0) root (0) 845 2023-11-05 11:59:16.000000 ./usr/share/man/man9/hal_bb_gpio.9.gz\n@@ -4754,105 +4754,105 @@\n -rw-r--r-- 0 root (0) root (0) 21214 2023-11-05 11:59:16.000000 ./usr/share/man/man9/hostmot2.9.gz\n -rw-r--r-- 0 root (0) root (0) 422 2023-11-05 11:59:16.000000 ./usr/share/man/man9/hypot.9.gz\n -rw-r--r-- 0 root (0) root (0) 988 2023-11-05 11:59:16.000000 ./usr/share/man/man9/ilowpass.9.gz\n -rw-r--r-- 0 root (0) root (0) 489 2023-11-05 11:59:16.000000 ./usr/share/man/man9/integ.9.gz\n -rw-r--r-- 0 root (0) root (0) 560 2023-11-05 11:59:16.000000 ./usr/share/man/man9/invert.9.gz\n -rw-r--r-- 0 root (0) root (0) 948 2023-11-05 11:59:16.000000 ./usr/share/man/man9/joyhandle.9.gz\n -rw-r--r-- 0 root (0) root (0) 4375 2023-11-05 11:59:16.000000 ./usr/share/man/man9/kins.9.gz\n--rw-r--r-- 0 root (0) root (0) 573 2023-11-05 11:59:16.000000 ./usr/share/man/man9/knob2float.9.gz\n+-rw-r--r-- 0 root (0) root (0) 572 2023-11-05 11:59:16.000000 ./usr/share/man/man9/knob2float.9.gz\n -rw-r--r-- 0 root (0) root (0) 832 2023-11-05 11:59:16.000000 ./usr/share/man/man9/latencybins.9.gz\n -rw-r--r-- 0 root (0) root (0) 3198 2023-11-05 11:59:16.000000 ./usr/share/man/man9/lcd.9.gz\n -rw-r--r-- 0 root (0) root (0) 422 2023-11-05 11:59:16.000000 ./usr/share/man/man9/limit1.9.gz\n -rw-r--r-- 0 root (0) root (0) 543 2023-11-05 11:59:16.000000 ./usr/share/man/man9/limit2.9.gz\n--rw-r--r-- 0 root (0) root (0) 775 2023-11-05 11:59:16.000000 ./usr/share/man/man9/limit3.9.gz\n+-rw-r--r-- 0 root (0) root (0) 777 2023-11-05 11:59:16.000000 ./usr/share/man/man9/limit3.9.gz\n -rw-r--r-- 0 root (0) root (0) 1242 2023-11-05 11:59:16.000000 ./usr/share/man/man9/limit_axis.9.gz\n -rw-r--r-- 0 root (0) root (0) 997 2023-11-05 11:59:16.000000 ./usr/share/man/man9/lincurve.9.gz\n -rw-r--r-- 0 root (0) root (0) 808 2023-11-05 11:59:16.000000 ./usr/share/man/man9/lineardeltakins.9.gz\n--rw-r--r-- 0 root (0) root (0) 1184 2023-11-05 11:59:16.000000 ./usr/share/man/man9/logic.9.gz\n+-rw-r--r-- 0 root (0) root (0) 1185 2023-11-05 11:59:16.000000 ./usr/share/man/man9/logic.9.gz\n -rw-r--r-- 0 root (0) root (0) 856 2023-11-05 11:59:16.000000 ./usr/share/man/man9/lowpass.9.gz\n -rw-r--r-- 0 root (0) root (0) 1693 2023-11-05 11:59:16.000000 ./usr/share/man/man9/lut5.9.gz\n -rw-r--r-- 0 root (0) root (0) 373 2023-11-05 11:59:16.000000 ./usr/share/man/man9/maj3.9.gz\n--rw-r--r-- 0 root (0) root (0) 505 2023-11-05 11:59:16.000000 ./usr/share/man/man9/match8.9.gz\n+-rw-r--r-- 0 root (0) root (0) 506 2023-11-05 11:59:16.000000 ./usr/share/man/man9/match8.9.gz\n -rw-r--r-- 0 root (0) root (0) 1760 2023-11-05 11:59:16.000000 ./usr/share/man/man9/matrix_kb.9.gz\n -rw-r--r-- 0 root (0) root (0) 1075 2023-11-05 11:59:16.000000 ./usr/share/man/man9/max31855.9.gz\n -rw-r--r-- 0 root (0) root (0) 919 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mesa_7i65.9.gz\n--rw-r--r-- 0 root (0) root (0) 1029 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mesa_pktgyro_test.9.gz\n--rw-r--r-- 0 root (0) root (0) 1200 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mesa_uart.9.gz\n+-rw-r--r-- 0 root (0) root (0) 1028 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mesa_pktgyro_test.9.gz\n+-rw-r--r-- 0 root (0) root (0) 1199 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mesa_uart.9.gz\n -rw-r--r-- 0 root (0) root (0) 885 2023-11-05 11:59:16.000000 ./usr/share/man/man9/message.9.gz\n--rw-r--r-- 0 root (0) root (0) 854 2023-11-05 11:59:16.000000 ./usr/share/man/man9/millturn.9.gz\n--rw-r--r-- 0 root (0) root (0) 443 2023-11-05 11:59:16.000000 ./usr/share/man/man9/minmax.9.gz\n+-rw-r--r-- 0 root (0) root (0) 853 2023-11-05 11:59:16.000000 ./usr/share/man/man9/millturn.9.gz\n+-rw-r--r-- 0 root (0) root (0) 442 2023-11-05 11:59:16.000000 ./usr/share/man/man9/minmax.9.gz\n -rw-r--r-- 0 root (0) root (0) 6637 2023-11-05 11:59:16.000000 ./usr/share/man/man9/motion.9.gz\n--rw-r--r-- 0 root (0) root (0) 3092 2023-11-05 11:59:16.000000 ./usr/share/man/man9/moveoff.9.gz\n+-rw-r--r-- 0 root (0) root (0) 3091 2023-11-05 11:59:16.000000 ./usr/share/man/man9/moveoff.9.gz\n -rw-r--r-- 0 root (0) root (0) 411 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mult2.9.gz\n--rw-r--r-- 0 root (0) root (0) 1149 2023-11-05 11:59:16.000000 ./usr/share/man/man9/multiclick.9.gz\n--rw-r--r-- 0 root (0) root (0) 679 2023-11-05 11:59:16.000000 ./usr/share/man/man9/multiswitch.9.gz\n--rw-r--r-- 0 root (0) root (0) 1053 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mux16.9.gz\n--rw-r--r-- 0 root (0) root (0) 462 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mux2.9.gz\n+-rw-r--r-- 0 root (0) root (0) 1148 2023-11-05 11:59:16.000000 ./usr/share/man/man9/multiclick.9.gz\n+-rw-r--r-- 0 root (0) root (0) 680 2023-11-05 11:59:16.000000 ./usr/share/man/man9/multiswitch.9.gz\n+-rw-r--r-- 0 root (0) root (0) 1052 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mux16.9.gz\n+-rw-r--r-- 0 root (0) root (0) 463 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mux2.9.gz\n -rw-r--r-- 0 root (0) root (0) 578 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mux4.9.gz\n -rw-r--r-- 0 root (0) root (0) 628 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mux8.9.gz\n -rw-r--r-- 0 root (0) root (0) 1781 2023-11-05 11:59:16.000000 ./usr/share/man/man9/mux_generic.9.gz\n--rw-r--r-- 0 root (0) root (0) 574 2023-11-05 11:59:16.000000 ./usr/share/man/man9/near.9.gz\n+-rw-r--r-- 0 root (0) root (0) 573 2023-11-05 11:59:16.000000 ./usr/share/man/man9/near.9.gz\n -rw-r--r-- 0 root (0) root (0) 368 2023-11-05 11:59:16.000000 ./usr/share/man/man9/not.9.gz\n--rw-r--r-- 0 root (0) root (0) 485 2023-11-05 11:59:16.000000 ./usr/share/man/man9/offset.9.gz\n--rw-r--r-- 0 root (0) root (0) 1508 2023-11-05 11:59:16.000000 ./usr/share/man/man9/ohmic.9.gz\n+-rw-r--r-- 0 root (0) root (0) 486 2023-11-05 11:59:16.000000 ./usr/share/man/man9/offset.9.gz\n+-rw-r--r-- 0 root (0) root (0) 1507 2023-11-05 11:59:16.000000 ./usr/share/man/man9/ohmic.9.gz\n -rw-r--r-- 0 root (0) root (0) 762 2023-11-05 11:59:16.000000 ./usr/share/man/man9/oneshot.9.gz\n -rw-r--r-- 0 root (0) root (0) 1142 2023-11-05 11:59:16.000000 ./usr/share/man/man9/opto_ac5.9.gz\n -rw-r--r-- 0 root (0) root (0) 454 2023-11-05 11:59:16.000000 ./usr/share/man/man9/or2.9.gz\n--rw-r--r-- 0 root (0) root (0) 1237 2023-11-05 11:59:16.000000 ./usr/share/man/man9/orient.9.gz\n+-rw-r--r-- 0 root (0) root (0) 1236 2023-11-05 11:59:16.000000 ./usr/share/man/man9/orient.9.gz\n -rw-r--r-- 0 root (0) root (0) 5662 2023-11-05 11:59:16.000000 ./usr/share/man/man9/pid.9.gz\n--rw-r--r-- 0 root (0) root (0) 4333 2023-11-05 11:59:16.000000 ./usr/share/man/man9/plasmac.9.gz\n+-rw-r--r-- 0 root (0) root (0) 4332 2023-11-05 11:59:16.000000 ./usr/share/man/man9/plasmac.9.gz\n -rw-r--r-- 0 root (0) root (0) 1969 2023-11-05 11:59:16.000000 ./usr/share/man/man9/pwmgen.9.gz\n -rw-r--r-- 0 root (0) root (0) 673 2023-11-05 11:59:16.000000 ./usr/share/man/man9/rosekins.9.gz\n -rw-r--r-- 0 root (0) root (0) 369 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sample_hold.9.gz\n -rw-r--r-- 0 root (0) root (0) 1980 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sampler.9.gz\n -rw-r--r-- 0 root (0) root (0) 405 2023-11-05 11:59:16.000000 ./usr/share/man/man9/scale.9.gz\n -rw-r--r-- 0 root (0) root (0) 521 2023-11-05 11:59:16.000000 ./usr/share/man/man9/scaled_s32_sums.9.gz\n -rw-r--r-- 0 root (0) root (0) 518 2023-11-05 11:59:16.000000 ./usr/share/man/man9/select8.9.gz\n -rw-r--r-- 0 root (0) root (0) 915 2023-11-05 11:59:16.000000 ./usr/share/man/man9/serport.9.gz\n -rw-r--r-- 0 root (0) root (0) 1909 2023-11-05 11:59:16.000000 ./usr/share/man/man9/setsserial.9.gz\n -rw-r--r-- 0 root (0) root (0) 1312 2023-11-05 11:59:16.000000 ./usr/share/man/man9/siggen.9.gz\n -rw-r--r-- 0 root (0) root (0) 1250 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sim_axis_hardware.9.gz\n -rw-r--r-- 0 root (0) root (0) 1295 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sim_encoder.9.gz\n -rw-r--r-- 0 root (0) root (0) 686 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sim_home_switch.9.gz\n -rw-r--r-- 0 root (0) root (0) 475 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sim_matrix_kb.9.gz\n--rw-r--r-- 0 root (0) root (0) 1127 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sim_parport.9.gz\n+-rw-r--r-- 0 root (0) root (0) 1126 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sim_parport.9.gz\n -rw-r--r-- 0 root (0) root (0) 610 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sim_spindle.9.gz\n -rw-r--r-- 0 root (0) root (0) 586 2023-11-05 11:59:16.000000 ./usr/share/man/man9/simple_tp.9.gz\n -rw-r--r-- 0 root (0) root (0) 459 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sphereprobe.9.gz\n -rw-r--r-- 0 root (0) root (0) 1846 2023-11-05 11:59:16.000000 ./usr/share/man/man9/spindle.9.gz\n -rw-r--r-- 0 root (0) root (0) 494 2023-11-05 11:59:16.000000 ./usr/share/man/man9/spindle_monitor.9.gz\n -rw-r--r-- 0 root (0) root (0) 6157 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sserial.9.gz\n -rw-r--r-- 0 root (0) root (0) 3748 2023-11-05 11:59:16.000000 ./usr/share/man/man9/stepgen.9.gz\n--rw-r--r-- 0 root (0) root (0) 779 2023-11-05 11:59:16.000000 ./usr/share/man/man9/steptest.9.gz\n+-rw-r--r-- 0 root (0) root (0) 778 2023-11-05 11:59:16.000000 ./usr/share/man/man9/steptest.9.gz\n -rw-r--r-- 0 root (0) root (0) 1942 2023-11-05 11:59:16.000000 ./usr/share/man/man9/streamer.9.gz\n -rw-r--r-- 0 root (0) root (0) 490 2023-11-05 11:59:16.000000 ./usr/share/man/man9/sum2.9.gz\n -rw-r--r-- 0 root (0) root (0) 831 2023-11-05 11:59:16.000000 ./usr/share/man/man9/supply.9.gz\n -rw-r--r-- 0 root (0) root (0) 1345 2023-11-05 11:59:16.000000 ./usr/share/man/man9/thc.9.gz\n -rw-r--r-- 0 root (0) root (0) 1255 2023-11-05 11:59:16.000000 ./usr/share/man/man9/thcud.9.gz\n -rw-r--r-- 0 root (0) root (0) 1035 2023-11-05 11:59:16.000000 ./usr/share/man/man9/threads.9.gz\n -rw-r--r-- 0 root (0) root (0) 363 2023-11-05 11:59:16.000000 ./usr/share/man/man9/threadtest.9.gz\n -rw-r--r-- 0 root (0) root (0) 1181 2023-11-05 11:59:16.000000 ./usr/share/man/man9/time.9.gz\n--rw-r--r-- 0 root (0) root (0) 584 2023-11-05 11:59:16.000000 ./usr/share/man/man9/timedelay.9.gz\n+-rw-r--r-- 0 root (0) root (0) 583 2023-11-05 11:59:16.000000 ./usr/share/man/man9/timedelay.9.gz\n -rw-r--r-- 0 root (0) root (0) 779 2023-11-05 11:59:16.000000 ./usr/share/man/man9/timedelta.9.gz\n -rw-r--r-- 0 root (0) root (0) 450 2023-11-05 11:59:16.000000 ./usr/share/man/man9/tof.9.gz\n -rw-r--r-- 0 root (0) root (0) 507 2023-11-05 11:59:16.000000 ./usr/share/man/man9/toggle.9.gz\n--rw-r--r-- 0 root (0) root (0) 657 2023-11-05 11:59:16.000000 ./usr/share/man/man9/toggle2nist.9.gz\n--rw-r--r-- 0 root (0) root (0) 448 2023-11-05 11:59:16.000000 ./usr/share/man/man9/ton.9.gz\n+-rw-r--r-- 0 root (0) root (0) 658 2023-11-05 11:59:16.000000 ./usr/share/man/man9/toggle2nist.9.gz\n+-rw-r--r-- 0 root (0) root (0) 449 2023-11-05 11:59:16.000000 ./usr/share/man/man9/ton.9.gz\n -rw-r--r-- 0 root (0) root (0) 469 2023-11-05 11:59:16.000000 ./usr/share/man/man9/tp.9.gz\n -rw-r--r-- 0 root (0) root (0) 886 2023-11-05 11:59:16.000000 ./usr/share/man/man9/tpcomp.9.gz\n -rw-r--r-- 0 root (0) root (0) 453 2023-11-05 11:59:16.000000 ./usr/share/man/man9/tristate_bit.9.gz\n -rw-r--r-- 0 root (0) root (0) 485 2023-11-05 11:59:16.000000 ./usr/share/man/man9/tristate_float.9.gz\n -rw-r--r-- 0 root (0) root (0) 642 2023-11-05 11:59:16.000000 ./usr/share/man/man9/updown.9.gz\n -rw-r--r-- 0 root (0) root (0) 1278 2023-11-05 11:59:16.000000 ./usr/share/man/man9/userkins.9.gz\n -rw-r--r-- 0 root (0) root (0) 967 2023-11-05 11:59:16.000000 ./usr/share/man/man9/watchdog.9.gz\n -rw-r--r-- 0 root (0) root (0) 514 2023-11-05 11:59:16.000000 ./usr/share/man/man9/wcomp.9.gz\n -rw-r--r-- 0 root (0) root (0) 780 2023-11-05 11:59:16.000000 ./usr/share/man/man9/weighted_sum.9.gz\n -rw-r--r-- 0 root (0) root (0) 785 2023-11-05 11:59:16.000000 ./usr/share/man/man9/xhc_hb04_util.9.gz\n--rw-r--r-- 0 root (0) root (0) 494 2023-11-05 11:59:16.000000 ./usr/share/man/man9/xor2.9.gz\n--rw-r--r-- 0 root (0) root (0) 872 2023-11-05 11:59:16.000000 ./usr/share/man/man9/xyzab_tdr_kins.9.gz\n+-rw-r--r-- 0 root (0) root (0) 493 2023-11-05 11:59:16.000000 ./usr/share/man/man9/xor2.9.gz\n+-rw-r--r-- 0 root (0) root (0) 871 2023-11-05 11:59:16.000000 ./usr/share/man/man9/xyzab_tdr_kins.9.gz\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/metainfo/\n -rw-r--r-- 0 root (0) root (0) 715 2023-10-08 12:02:22.000000 ./usr/share/metainfo/linuxcnc-uspace.metainfo.xml\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/mime/\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/mime/packages/\n -rw-r--r-- 0 root (0) root (0) 305 2023-10-08 12:02:22.000000 ./usr/share/mime/packages/linuxcnc-uspace.xml\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/qtvcp/\n drwxr-xr-x 0 root (0) root (0) 0 2023-11-05 11:59:16.000000 ./usr/share/qtvcp/images/\n"}, {"source1": "./etc/linuxcnc/rtapi.conf", "source2": "./etc/linuxcnc/rtapi.conf", "unified_diff": "@@ -1,11 +1,11 @@\n # DO NOT EDIT THIS FILE !\n #\n # ../scripts/rtapi.conf. Generated from rtapi.conf.in by configure. \n-# on Sat Apr 27 13:40:46 -12 2024\n+# on Sat May 31 22:57:20 +14 2025\n #\n \n # A few parameters from emc2/Makefile.inc\n EMC2_HOME=/usr\n KERNELDIR=\n RTLIB_DIR=/usr/lib/linuxcnc/modules\n MODULE_EXT=.so\n"}, {"source1": "./usr/lib/linuxcnc/realtime", "source2": "./usr/lib/linuxcnc/realtime", "unified_diff": "@@ -10,15 +10,15 @@\n # removed when the job has ended and is used throughout the LinuxCNC\n # infrastructure. The script has no effect for the PREEMPT realtime kernel.\n # The script is not meant to be started a boot time - it could be, though.\n # X-Interactive: false\n ### END INIT INFO\n #\n # ../scripts/realtime. Generated from realtime.in by configure. \n-# on Sat Apr 27 13:40:46 -12 2024\n+# on Sat May 31 22:57:20 +14 2025\n #\n \n export LANG=C\n \n GREP=/usr/bin/grep\n PS=/usr/bin/ps\n \n"}, {"source1": "./usr/share/man/man1/pi500_vfd.1.gz", "source2": "./usr/share/man/man1/pi500_vfd.1.gz", "unified_diff": null, "details": [{"source1": "pi500_vfd.1", "source2": "pi500_vfd.1", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/user_comps/pi500_vfd/pi500_vfd.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH PI500_VFD \"1\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH PI500_VFD \"1\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n pi500_vfd \\- Powtran PI500 Modbus driver\n .SH SYNOPSIS\n .B pi500_vfd\n .SH PINS\n .TP\n"}]}, {"source1": "./usr/share/man/man1/thermistor.1.gz", "source2": "./usr/share/man/man1/thermistor.1.gz", "unified_diff": null, "details": [{"source1": "thermistor.1", "source2": "thermistor.1", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/user_comps/thermistor.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH THERMISTOR \"1\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH THERMISTOR \"1\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n thermistor \\- compute temperature indicated by a thermistor\n .SH SYNOPSIS\n .B thermistor\n .SH DESCRIPTION\n \n"}]}, {"source1": "./usr/share/man/man1/wj200_vfd.1.gz", "source2": "./usr/share/man/man1/wj200_vfd.1.gz", "unified_diff": null, "details": [{"source1": "wj200_vfd.1", "source2": "wj200_vfd.1", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/user_comps/wj200_vfd/wj200_vfd.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH WJ200_VFD \"1\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH WJ200_VFD \"1\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n wj200_vfd \\- Hitachi wj200 modbus driver\n .SH SYNOPSIS\n .B wj200_vfd\n .SH PINS\n .TP\n"}]}, {"source1": "./usr/share/man/man9/abs.9.gz", "source2": "./usr/share/man/man9/abs.9.gz", "unified_diff": null, "details": [{"source1": "abs.9", "source2": "abs.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/abs.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH ABS \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH ABS \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n abs \\- Compute the absolute value and sign of the input signal\n .SH SYNOPSIS\n .HP\n .B loadrt abs [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/abs_s32.9.gz", "source2": "./usr/share/man/man9/abs_s32.9.gz", "unified_diff": null, "details": [{"source1": "abs_s32.9", "source2": "abs_s32.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/abs_s32.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH ABS_S32 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH ABS_S32 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n abs_s32 \\- Compute the absolute value and sign of the input signal\n .SH SYNOPSIS\n .HP\n .B loadrt abs_s32 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/and2.9.gz", "source2": "./usr/share/man/man9/and2.9.gz", "unified_diff": null, "details": [{"source1": "and2.9", "source2": "and2.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/and2.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH AND2 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH AND2 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n and2 \\- Two-input AND gate\n .SH SYNOPSIS\n .HP\n .B loadrt and2 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/anglejog.9.gz", "source2": "./usr/share/man/man9/anglejog.9.gz", "unified_diff": null, "details": [{"source1": "anglejog.9", "source2": "anglejog.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/anglejog.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH ANGLEJOG \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH ANGLEJOG \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n anglejog \\- Jog two axes (or joints) at an angle\n .SH SYNOPSIS\n \n This component accepts a dynamic counts-in input (typically from a\n manual pulse generator (MPG)) and static angle and scale factor\n"}]}, {"source1": "./usr/share/man/man9/axistest.9.gz", "source2": "./usr/share/man/man9/axistest.9.gz", "unified_diff": null, "details": [{"source1": "axistest.9", "source2": "axistest.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/axistest.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH AXISTEST \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH AXISTEST \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n axistest \\- Used to allow testing of an axis. Used IN PnCconf.\n .SH SYNOPSIS\n .HP\n .B loadrt axistest [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/bin2gray.9.gz", "source2": "./usr/share/man/man9/bin2gray.9.gz", "unified_diff": null, "details": [{"source1": "bin2gray.9", "source2": "bin2gray.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/bin2gray.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH BIN2GRAY \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH BIN2GRAY \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n bin2gray \\- convert a number to the gray-code representation\n .SH SYNOPSIS\n .HP\n .B loadrt bin2gray [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/biquad.9.gz", "source2": "./usr/share/man/man9/biquad.9.gz", "unified_diff": null, "details": [{"source1": "biquad.9", "source2": "biquad.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/biquad.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH BIQUAD \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH BIQUAD \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n biquad \\- Biquad IIR filter\n .SH SYNOPSIS\n .HP\n .B loadrt biquad [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/bitslice.9.gz", "source2": "./usr/share/man/man9/bitslice.9.gz", "unified_diff": null, "details": [{"source1": "bitslice.9", "source2": "bitslice.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/bitslice.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH BITSLICE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH BITSLICE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n bitslice \\- Converts an unsigned-32 input into individual bits\n .SH SYNOPSIS\n .HP\n .B loadrt bitslice [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]] [personality=\\fIP,P,...\\fB]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/bitwise.9.gz", "source2": "./usr/share/man/man9/bitwise.9.gz", "unified_diff": null, "details": [{"source1": "bitwise.9", "source2": "bitwise.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/bitwise.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH BITWISE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH BITWISE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n bitwise \\- Computes various bitwise operations on the two input values\n .SH SYNOPSIS\n .HP\n .B loadrt bitwise [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/bldc.9.gz", "source2": "./usr/share/man/man9/bldc.9.gz", "unified_diff": null, "details": [{"source1": "bldc.9", "source2": "bldc.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/bldc.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH BLDC \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH BLDC \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n bldc \\- BLDC and AC-servo control component \n .SH SYNOPSIS\n .B loadrt bldc cfg=qi6,aH\\fB\n .SH DESCRIPTION\n \n"}]}, {"source1": "./usr/share/man/man9/blend.9.gz", "source2": "./usr/share/man/man9/blend.9.gz", "unified_diff": null, "details": [{"source1": "blend.9", "source2": "blend.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/blend.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH BLEND \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH BLEND \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n blend \\- Perform linear interpolation between two values\n .SH SYNOPSIS\n .HP\n .B loadrt blend [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/carousel.9.gz", "source2": "./usr/share/man/man9/carousel.9.gz", "unified_diff": null, "details": [{"source1": "carousel.9", "source2": "carousel.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/carousel.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CAROUSEL \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CAROUSEL \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n carousel \\- Orient a toolchanger carousel using various encoding schemes\n .SH SYNOPSIS\n \n .B loadrt carousel pockets=\\fIN\\fR[,\\fIN\\fR]\n .B encoding=\\fIssss\\fR[,\\fIsss\\fR]\\fB\n"}]}, {"source1": "./usr/share/man/man9/charge_pump.9.gz", "source2": "./usr/share/man/man9/charge_pump.9.gz", "unified_diff": null, "details": [{"source1": "charge_pump.9", "source2": "charge_pump.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/charge_pump.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CHARGE_PUMP \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CHARGE_PUMP \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n charge_pump \\- Create a square-wave for the 'charge pump' input of some controller boards\n .SH SYNOPSIS\n .HP\n .B loadrt charge_pump\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/clarke2.9.gz", "source2": "./usr/share/man/man9/clarke2.9.gz", "unified_diff": null, "details": [{"source1": "clarke2.9", "source2": "clarke2.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/clarke2.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CLARKE2 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CLARKE2 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n clarke2 \\- Two input version of Clarke transform\n .SH SYNOPSIS\n .HP\n .B loadrt clarke2 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/clarke3.9.gz", "source2": "./usr/share/man/man9/clarke3.9.gz", "unified_diff": null, "details": [{"source1": "clarke3.9", "source2": "clarke3.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/clarke3.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CLARKE3 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CLARKE3 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n clarke3 \\- Clarke (3 phase to cartesian) transform\n .SH SYNOPSIS\n .HP\n .B loadrt clarke3 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/clarkeinv.9.gz", "source2": "./usr/share/man/man9/clarkeinv.9.gz", "unified_diff": null, "details": [{"source1": "clarkeinv.9", "source2": "clarkeinv.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/clarkeinv.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CLARKEINV \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CLARKEINV \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n clarkeinv \\- Inverse Clarke transform\n .SH SYNOPSIS\n .HP\n .B loadrt clarkeinv [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/comp.9.gz", "source2": "./usr/share/man/man9/comp.9.gz", "unified_diff": null, "details": [{"source1": "comp.9", "source2": "comp.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/comp.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH COMP \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH COMP \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n comp \\- Two input comparator with hysteresis\n .SH SYNOPSIS\n .HP\n .B loadrt comp [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/constant.9.gz", "source2": "./usr/share/man/man9/constant.9.gz", "unified_diff": null, "details": [{"source1": "constant.9", "source2": "constant.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/constant.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONSTANT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONSTANT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n constant \\- Use a parameter to set the value of a pin\n .SH SYNOPSIS\n .HP\n .B loadrt constant [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_bit_float.9.gz", "source2": "./usr/share/man/man9/conv_bit_float.9.gz", "unified_diff": null, "details": [{"source1": "conv_bit_float.9", "source2": "conv_bit_float.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_bit_float.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_BIT_FLOAT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_BIT_FLOAT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_bit_float \\- Convert a value from bit to float\n .SH SYNOPSIS\n .HP\n .B loadrt conv_bit_float [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_bit_s32.9.gz", "source2": "./usr/share/man/man9/conv_bit_s32.9.gz", "unified_diff": null, "details": [{"source1": "conv_bit_s32.9", "source2": "conv_bit_s32.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_bit_s32.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_BIT_S32 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_BIT_S32 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_bit_s32 \\- Convert a value from bit to s32\n .SH SYNOPSIS\n .HP\n .B loadrt conv_bit_s32 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_bit_u32.9.gz", "source2": "./usr/share/man/man9/conv_bit_u32.9.gz", "unified_diff": null, "details": [{"source1": "conv_bit_u32.9", "source2": "conv_bit_u32.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_bit_u32.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_BIT_U32 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_BIT_U32 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_bit_u32 \\- Convert a value from bit to u32\n .SH SYNOPSIS\n .HP\n .B loadrt conv_bit_u32 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_float_s32.9.gz", "source2": "./usr/share/man/man9/conv_float_s32.9.gz", "unified_diff": null, "details": [{"source1": "conv_float_s32.9", "source2": "conv_float_s32.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_float_s32.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_FLOAT_S32 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_FLOAT_S32 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_float_s32 \\- Convert a value from float to s32\n .SH SYNOPSIS\n .HP\n .B loadrt conv_float_s32 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_float_u32.9.gz", "source2": "./usr/share/man/man9/conv_float_u32.9.gz", "unified_diff": null, "details": [{"source1": "conv_float_u32.9", "source2": "conv_float_u32.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_float_u32.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_FLOAT_U32 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_FLOAT_U32 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_float_u32 \\- Convert a value from float to u32\n .SH SYNOPSIS\n .HP\n .B loadrt conv_float_u32 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_s32_bit.9.gz", "source2": "./usr/share/man/man9/conv_s32_bit.9.gz", "unified_diff": null, "details": [{"source1": "conv_s32_bit.9", "source2": "conv_s32_bit.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_s32_bit.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_S32_BIT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_S32_BIT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_s32_bit \\- Convert a value from s32 to bit\n .SH SYNOPSIS\n .HP\n .B loadrt conv_s32_bit [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_s32_float.9.gz", "source2": "./usr/share/man/man9/conv_s32_float.9.gz", "unified_diff": null, "details": [{"source1": "conv_s32_float.9", "source2": "conv_s32_float.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_s32_float.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_S32_FLOAT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_S32_FLOAT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_s32_float \\- Convert a value from s32 to float\n .SH SYNOPSIS\n .HP\n .B loadrt conv_s32_float [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_s32_u32.9.gz", "source2": "./usr/share/man/man9/conv_s32_u32.9.gz", "unified_diff": null, "details": [{"source1": "conv_s32_u32.9", "source2": "conv_s32_u32.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_s32_u32.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_S32_U32 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_S32_U32 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_s32_u32 \\- Convert a value from s32 to u32\n .SH SYNOPSIS\n .HP\n .B loadrt conv_s32_u32 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_u32_bit.9.gz", "source2": "./usr/share/man/man9/conv_u32_bit.9.gz", "unified_diff": null, "details": [{"source1": "conv_u32_bit.9", "source2": "conv_u32_bit.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_u32_bit.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_U32_BIT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_U32_BIT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_u32_bit \\- Convert a value from u32 to bit\n .SH SYNOPSIS\n .HP\n .B loadrt conv_u32_bit [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_u32_float.9.gz", "source2": "./usr/share/man/man9/conv_u32_float.9.gz", "unified_diff": null, "details": [{"source1": "conv_u32_float.9", "source2": "conv_u32_float.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_u32_float.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_U32_FLOAT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_U32_FLOAT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_u32_float \\- Convert a value from u32 to float\n .SH SYNOPSIS\n .HP\n .B loadrt conv_u32_float [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/conv_u32_s32.9.gz", "source2": "./usr/share/man/man9/conv_u32_s32.9.gz", "unified_diff": null, "details": [{"source1": "conv_u32_s32.9", "source2": "conv_u32_s32.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/conv_u32_s32.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH CONV_U32_S32 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH CONV_U32_S32 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n conv_u32_s32 \\- Convert a value from u32 to s32\n .SH SYNOPSIS\n .HP\n .B loadrt conv_u32_s32 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/corexy_by_hal.9.gz", "source2": "./usr/share/man/man9/corexy_by_hal.9.gz", "unified_diff": null, "details": [{"source1": "corexy_by_hal.9", "source2": "corexy_by_hal.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/corexy_by_hal.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH COREXY_BY_HAL \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH COREXY_BY_HAL \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n corexy_by_hal \\- CoreXY kinematics\n .SH SYNOPSIS\n .HP\n .B loadrt corexy_by_hal [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/dbounce.9.gz", "source2": "./usr/share/man/man9/dbounce.9.gz", "unified_diff": null, "details": [{"source1": "dbounce.9", "source2": "dbounce.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/dbounce.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH DBOUNCE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH DBOUNCE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n dbounce \\- alternative debounce component\n .SH SYNOPSIS\n \n This component is similar to the \\fBdebounce\\fR component\n \n"}]}, {"source1": "./usr/share/man/man9/ddt.9.gz", "source2": "./usr/share/man/man9/ddt.9.gz", "unified_diff": null, "details": [{"source1": "ddt.9", "source2": "ddt.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/ddt.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH DDT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH DDT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n ddt \\- Compute the derivative of the input function\n .SH SYNOPSIS\n .HP\n .B loadrt ddt [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/deadzone.9.gz", "source2": "./usr/share/man/man9/deadzone.9.gz", "unified_diff": null, "details": [{"source1": "deadzone.9", "source2": "deadzone.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/deadzone.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH DEADZONE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH DEADZONE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n deadzone \\- Return the center if within the threshold\n .SH SYNOPSIS\n .HP\n .B loadrt deadzone [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/demux.9.gz", "source2": "./usr/share/man/man9/demux.9.gz", "unified_diff": null, "details": [{"source1": "demux.9", "source2": "demux.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/demux.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH DEMUX \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH DEMUX \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n demux \\- Select one of several output pins by integer and/or or individual bits.\n .SH SYNOPSIS\n .HP\n .B loadrt demux [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]] [personality=\\fIP,P,...\\fB]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/differential.9.gz", "source2": "./usr/share/man/man9/differential.9.gz", "unified_diff": null, "details": [{"source1": "differential.9", "source2": "differential.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/differential.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH DIFFERENTIAL \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH DIFFERENTIAL \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n differential \\- kinematics for a differential transmission\n .SH SYNOPSIS\n .HP\n .B loadrt differential [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/div2.9.gz", "source2": "./usr/share/man/man9/div2.9.gz", "unified_diff": null, "details": [{"source1": "div2.9", "source2": "div2.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/div2.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH DIV2 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH DIV2 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n div2 \\- Quotient of two floating point inputs\n .SH SYNOPSIS\n .HP\n .B loadrt div2 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/edge.9.gz", "source2": "./usr/share/man/man9/edge.9.gz", "unified_diff": null, "details": [{"source1": "edge.9", "source2": "edge.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/edge.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH EDGE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH EDGE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n edge \\- Edge detector\n .SH SYNOPSIS\n .HP\n .B loadrt edge [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/eoffset_per_angle.9.gz", "source2": "./usr/share/man/man9/eoffset_per_angle.9.gz", "unified_diff": null, "details": [{"source1": "eoffset_per_angle.9", "source2": "eoffset_per_angle.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/eoffset_per_angle.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH EOFFSET_PER_ANGLE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH EOFFSET_PER_ANGLE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n eoffset_per_angle \\- Compute External Offset Per Angle\n .SH SYNOPSIS\n .HP\n .B loadrt eoffset_per_angle [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/estop_latch.9.gz", "source2": "./usr/share/man/man9/estop_latch.9.gz", "unified_diff": null, "details": [{"source1": "estop_latch.9", "source2": "estop_latch.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/estop_latch.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH ESTOP_LATCH \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH ESTOP_LATCH \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n estop_latch \\- Software ESTOP latch\n .SH SYNOPSIS\n .HP\n .B loadrt estop_latch [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/feedcomp.9.gz", "source2": "./usr/share/man/man9/feedcomp.9.gz", "unified_diff": null, "details": [{"source1": "feedcomp.9", "source2": "feedcomp.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/feedcomp.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH FEEDCOMP \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH FEEDCOMP \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n feedcomp \\- Multiply the input by the ratio of current velocity to the feed rate.\n .SH SYNOPSIS\n .HP\n .B loadrt feedcomp [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/filter_kalman.9.gz", "source2": "./usr/share/man/man9/filter_kalman.9.gz", "unified_diff": null, "details": [{"source1": "filter_kalman.9", "source2": "filter_kalman.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/filter_kalman.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH FILTER_KALMAN \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH FILTER_KALMAN \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n filter_kalman \\- Unidimensional Kalman filter, also known as linear quadratic estimation (LQE)\n .SH SYNOPSIS\n .HP\n .B loadrt filter_kalman [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/flipflop.9.gz", "source2": "./usr/share/man/man9/flipflop.9.gz", "unified_diff": null, "details": [{"source1": "flipflop.9", "source2": "flipflop.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/flipflop.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH FLIPFLOP \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH FLIPFLOP \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n flipflop \\- D type flip-flop\n .SH SYNOPSIS\n .HP\n .B loadrt flipflop [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/gantry.9.gz", "source2": "./usr/share/man/man9/gantry.9.gz", "unified_diff": null, "details": [{"source1": "gantry.9", "source2": "gantry.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/gantry.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH GANTRY \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH GANTRY \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n gantry \\- LinuxCNC HAL component for driving multiple joints from a single axis.\n .SH SYNOPSIS\n .HP\n .B loadrt gantry [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]] [personality=\\fIP,P,...\\fB]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/gearchange.9.gz", "source2": "./usr/share/man/man9/gearchange.9.gz", "unified_diff": null, "details": [{"source1": "gearchange.9", "source2": "gearchange.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/gearchange.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH GEARCHANGE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH GEARCHANGE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n gearchange \\- Select from one two speed ranges\n .SH SYNOPSIS\n The output will be a value scaled for the selected gear, and clamped to\n the min/max values for that gear.\n The scale of gear 1 is assumed to be 1, so the output device scale\n"}]}, {"source1": "./usr/share/man/man9/gray2bin.9.gz", "source2": "./usr/share/man/man9/gray2bin.9.gz", "unified_diff": null, "details": [{"source1": "gray2bin.9", "source2": "gray2bin.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/gray2bin.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH GRAY2BIN \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH GRAY2BIN \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n gray2bin \\- convert a gray-code input to binary\n .SH SYNOPSIS\n .HP\n .B loadrt gray2bin [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/histobins.9.gz", "source2": "./usr/share/man/man9/histobins.9.gz", "unified_diff": null, "details": [{"source1": "histobins.9", "source2": "histobins.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/histobins.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH HISTOBINS \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH HISTOBINS \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n histobins \\- histogram bins utility for scripts/hal-histogram\n .SH SYNOPSIS\n \n Usage:\n Read availablebins pin for the number of bins available.\n"}]}, {"source1": "./usr/share/man/man9/homecomp.9.gz", "source2": "./usr/share/man/man9/homecomp.9.gz", "unified_diff": null, "details": [{"source1": "homecomp.9", "source2": "homecomp.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/homecomp.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH HOMECOMP \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH HOMECOMP \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n homecomp \\- homing module template\n .SH SYNOPSIS\n .HP\n Custom Homing module loaded with \\fB[EMCMOT]HOMEMOD=homecomp\\fR\n \n"}]}, {"source1": "./usr/share/man/man9/hypot.9.gz", "source2": "./usr/share/man/man9/hypot.9.gz", "unified_diff": null, "details": [{"source1": "hypot.9", "source2": "hypot.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/hypot.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH HYPOT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH HYPOT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n hypot \\- Three-input hypotenuse (Euclidean distance) calculator\n .SH SYNOPSIS\n .HP\n .B loadrt hypot [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/ilowpass.9.gz", "source2": "./usr/share/man/man9/ilowpass.9.gz", "unified_diff": null, "details": [{"source1": "ilowpass.9", "source2": "ilowpass.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/ilowpass.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH ILOWPASS \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH ILOWPASS \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n ilowpass \\- Low-pass filter with integer inputs and outputs\n .SH SYNOPSIS\n .HP\n .B loadrt ilowpass [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/integ.9.gz", "source2": "./usr/share/man/man9/integ.9.gz", "unified_diff": null, "details": [{"source1": "integ.9", "source2": "integ.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/integ.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH INTEG \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH INTEG \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n integ \\- Integrator with gain pin and windup limits\n .SH SYNOPSIS\n .HP\n .B loadrt integ [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/invert.9.gz", "source2": "./usr/share/man/man9/invert.9.gz", "unified_diff": null, "details": [{"source1": "invert.9", "source2": "invert.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/invert.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH INVERT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH INVERT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n invert \\- Compute the inverse of the input signal\n .SH SYNOPSIS\n The output will be the mathematical inverse of the input, ie \\fBout\\fR = 1/\\fBin\\fR.\n The parameter \\fBdeadband\\fR can be used to control how close to 0 the denominator can be\n before the output is clamped to 0. \\fBdeadband\\fR must be at least 1e-8, and must be positive.\n"}]}, {"source1": "./usr/share/man/man9/joyhandle.9.gz", "source2": "./usr/share/man/man9/joyhandle.9.gz", "unified_diff": null, "details": [{"source1": "joyhandle.9", "source2": "joyhandle.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/joyhandle.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH JOYHANDLE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH JOYHANDLE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n joyhandle \\- sets nonlinear joypad movements, deadbands and scales\n .SH SYNOPSIS\n .HP\n .B loadrt joyhandle [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/knob2float.9.gz", "source2": "./usr/share/man/man9/knob2float.9.gz", "unified_diff": null, "details": [{"source1": "knob2float.9", "source2": "knob2float.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/knob2float.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH KNOB2FLOAT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH KNOB2FLOAT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n knob2float \\- Convert counts (probably from an encoder) to a float value\n .SH SYNOPSIS\n .HP\n .B loadrt knob2float [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/latencybins.9.gz", "source2": "./usr/share/man/man9/latencybins.9.gz", "unified_diff": null, "details": [{"source1": "latencybins.9", "source2": "latencybins.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/latencybins.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH LATENCYBINS \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH LATENCYBINS \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n latencybins \\- comp utility for scripts/latency-histogram\n .SH SYNOPSIS\n \n Usage:\n Read availablebins pin for the number of bins available.\n"}]}, {"source1": "./usr/share/man/man9/limit1.9.gz", "source2": "./usr/share/man/man9/limit1.9.gz", "unified_diff": null, "details": [{"source1": "limit1.9", "source2": "limit1.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/limit1.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH LIMIT1 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH LIMIT1 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n limit1 \\- Limit the output signal to fall between min and max\n .SH SYNOPSIS\n .HP\n .B loadrt limit1 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/limit2.9.gz", "source2": "./usr/share/man/man9/limit2.9.gz", "unified_diff": null, "details": [{"source1": "limit2.9", "source2": "limit2.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/limit2.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH LIMIT2 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH LIMIT2 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n limit2 \\- Limit the output signal to fall between min and max and limit its slew rate to less than maxv per second. When the signal is a position, this means that position and velocity are limited.\n .SH SYNOPSIS\n .HP\n .B loadrt limit2 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/limit3.9.gz", "source2": "./usr/share/man/man9/limit3.9.gz", "unified_diff": null, "details": [{"source1": "limit3.9", "source2": "limit3.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/limit3.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH LIMIT3 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH LIMIT3 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n limit3 \\- Follow input signal while obeying limits\n .SH SYNOPSIS\n Limit the output signal to fall between min and max, limit its slew\n rate to less than maxv per second, and limit its second derivative to\n less than maxa per second squared. When the signal is a position,\n"}]}, {"source1": "./usr/share/man/man9/limit_axis.9.gz", "source2": "./usr/share/man/man9/limit_axis.9.gz", "unified_diff": null, "details": [{"source1": "limit_axis.9", "source2": "limit_axis.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/limit_axis.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH LIMIT_AXIS \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH LIMIT_AXIS \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n limit_axis \\- Dynamic range based axis limits\n .SH SYNOPSIS\n .HP\n .B loadrt limit_axis [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]] [personality=\\fIP,P,...\\fB]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/lincurve.9.gz", "source2": "./usr/share/man/man9/lincurve.9.gz", "unified_diff": null, "details": [{"source1": "lincurve.9", "source2": "lincurve.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/lincurve.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH LINCURVE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH LINCURVE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n lincurve \\- one-dimensional lookup table\n .SH SYNOPSIS\n .HP\n .B loadrt lincurve [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]] [personality=\\fIP,P,...\\fB]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/logic.9.gz", "source2": "./usr/share/man/man9/logic.9.gz", "unified_diff": null, "details": [{"source1": "logic.9", "source2": "logic.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/logic.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH LOGIC \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH LOGIC \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n logic \\- LinuxCNC HAL component providing configurable logic functions\n .SH SYNOPSIS\n \n .B loadrt logic\n .B [count=N|names=name1[,name2...]]\n"}]}, {"source1": "./usr/share/man/man9/lowpass.9.gz", "source2": "./usr/share/man/man9/lowpass.9.gz", "unified_diff": null, "details": [{"source1": "lowpass.9", "source2": "lowpass.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/lowpass.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH LOWPASS \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH LOWPASS \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n lowpass \\- Low-pass filter\n .SH SYNOPSIS\n .HP\n .B loadrt lowpass [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/lut5.9.gz", "source2": "./usr/share/man/man9/lut5.9.gz", "unified_diff": null, "details": [{"source1": "lut5.9", "source2": "lut5.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/lut5.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH LUT5 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH LUT5 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n lut5 \\- Arbitrary 5-input logic function based on a look-up table\n .SH SYNOPSIS\n .HP\n .B loadrt lut5 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n", "details": [{"source1": "html2text {}", "source2": "html2text {}", "unified_diff": "@@ -1,12 +1,12 @@\n .\\\"******************************************************************* .\\\" .\\\"\n This file was extracted from hal/components/lut5.comp using halcompile.g. .\\\"\n Modify the source file. .\\\"\n .\\\"******************************************************************* .TH LUT5\n-\"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\" .SH NAME lut5 \\-\n+\"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\" .SH NAME lut5 \\-\n Arbitrary 5-input logic function based on a look-up table .SH SYNOPSIS .HP .B\n loadrt lut5 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]] .SH DESCRIPTION\n .B lut5 constructs a logic function with up to 5 inputs using a \\fBl\\fRook-\n \\fBu\\fRp \\fBt\\fRable. The value for \\fBfunction\\fR can be determined by writing\n the truth table, and computing the sum of \\fBall\\fR the \\fBweights\\fR for which\n the output value would be \\fRTRUE\\fR. The weights are hexadecimal not decimal\n so hexadecimal math must be used to sum the weights. A wiki page has a\n"}]}]}, {"source1": "./usr/share/man/man9/maj3.9.gz", "source2": "./usr/share/man/man9/maj3.9.gz", "unified_diff": null, "details": [{"source1": "maj3.9", "source2": "maj3.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/maj3.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MAJ3 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MAJ3 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n maj3 \\- Compute the majority of 3 inputs\n .SH SYNOPSIS\n .HP\n .B loadrt maj3 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/match8.9.gz", "source2": "./usr/share/man/man9/match8.9.gz", "unified_diff": null, "details": [{"source1": "match8.9", "source2": "match8.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/match8.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MATCH8 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MATCH8 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n match8 \\- 8-bit binary match detector\n .SH SYNOPSIS\n .HP\n .B loadrt match8 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/max31855.9.gz", "source2": "./usr/share/man/man9/max31855.9.gz", "unified_diff": null, "details": [{"source1": "max31855.9", "source2": "max31855.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/max31855.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MAX31855 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MAX31855 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n max31855 \\- Support for the MAX31855 Thermocouple-to-Digital converter using bitbanged spi\n .SH SYNOPSIS\n .HP\n .B loadrt max31855 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]] [personality=\\fIP,P,...\\fB]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/mesa_7i65.9.gz", "source2": "./usr/share/man/man9/mesa_7i65.9.gz", "unified_diff": null, "details": [{"source1": "mesa_7i65.9", "source2": "mesa_7i65.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/drivers/mesa_7i65.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MESA_7I65 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MESA_7I65 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n mesa_7i65 \\- Support for the Mesa 7i65 Octuple Servo Card\n .SH SYNOPSIS\n .HP\n .B loadrt mesa_7i65\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/mesa_pktgyro_test.9.gz", "source2": "./usr/share/man/man9/mesa_pktgyro_test.9.gz", "unified_diff": null, "details": [{"source1": "mesa_pktgyro_test.9", "source2": "mesa_pktgyro_test.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/mesa_pktgyro_test.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MESA_PKTGYRO_TEST \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MESA_PKTGYRO_TEST \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n mesa_pktgyro_test \\- PktUART simple test with Microstrain 3DM-GX3-15 gyro\n .SH SYNOPSIS\n .HP\n .B loadrt mesa_pktgyro_test [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/mesa_uart.9.gz", "source2": "./usr/share/man/man9/mesa_uart.9.gz", "unified_diff": null, "details": [{"source1": "mesa_uart.9", "source2": "mesa_uart.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/drivers/mesa_uart.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MESA_UART \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MESA_UART \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n mesa_uart \\- An example component demonstrating how to access the Hostmot2 UART\n .SH SYNOPSIS\n .HP\n .B loadrt mesa_uart [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/message.9.gz", "source2": "./usr/share/man/man9/message.9.gz", "unified_diff": null, "details": [{"source1": "message.9", "source2": "message.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/message.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MESSAGE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MESSAGE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n message \\- Display a message\n .SH SYNOPSIS\n .HP\n .B loadrt message [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]] [messages=\\fIN\\fB]\n .RS 4\n"}]}, {"source1": "./usr/share/man/man9/millturn.9.gz", "source2": "./usr/share/man/man9/millturn.9.gz", "unified_diff": null, "details": [{"source1": "millturn.9", "source2": "millturn.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/millturn.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MILLTURN \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MILLTURN \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n millturn \\- Switchable kinematics for a mill-turn machine\n .SH SYNOPSIS\n .HP\n .B loadrt millturn [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/minmax.9.gz", "source2": "./usr/share/man/man9/minmax.9.gz", "unified_diff": null, "details": [{"source1": "minmax.9", "source2": "minmax.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/minmax.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MINMAX \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MINMAX \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n minmax \\- Track the minimum and maximum values of the input to the outputs\n .SH SYNOPSIS\n .HP\n .B loadrt minmax [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/moveoff.9.gz", "source2": "./usr/share/man/man9/moveoff.9.gz", "unified_diff": null, "details": [{"source1": "moveoff.9", "source2": "moveoff.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/moveoff.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MOVEOFF \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MOVEOFF \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n moveoff \\- Component for HAL-only offsets\n .SH SYNOPSIS\n .HP\n .B loadrt moveoff [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]] [personality=\\fIP,P,...\\fB]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/mult2.9.gz", "source2": "./usr/share/man/man9/mult2.9.gz", "unified_diff": null, "details": [{"source1": "mult2.9", "source2": "mult2.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/mult2.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MULT2 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MULT2 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n mult2 \\- Product of two inputs\n .SH SYNOPSIS\n .HP\n .B loadrt mult2 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/multiclick.9.gz", "source2": "./usr/share/man/man9/multiclick.9.gz", "unified_diff": null, "details": [{"source1": "multiclick.9", "source2": "multiclick.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/multiclick.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MULTICLICK \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MULTICLICK \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n multiclick \\- Single-, double-, triple-, and quadruple-click detector\n .SH SYNOPSIS\n .HP\n .B loadrt multiclick [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/multiswitch.9.gz", "source2": "./usr/share/man/man9/multiswitch.9.gz", "unified_diff": null, "details": [{"source1": "multiswitch.9", "source2": "multiswitch.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/multiswitch.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MULTISWITCH \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MULTISWITCH \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n multiswitch \\- This component toggles between a specified number of output bits.\n .SH SYNOPSIS\n .HP\n .B loadrt multiswitch personality=\\fIP\\fB [cfg=\\fIN\\fB]\n .RS 4\n"}]}, {"source1": "./usr/share/man/man9/mux16.9.gz", "source2": "./usr/share/man/man9/mux16.9.gz", "unified_diff": null, "details": [{"source1": "mux16.9", "source2": "mux16.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/mux16.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MUX16 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MUX16 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n mux16 \\- Select from one of sixteen input values\n .SH SYNOPSIS\n .HP\n .B loadrt mux16 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/mux2.9.gz", "source2": "./usr/share/man/man9/mux2.9.gz", "unified_diff": null, "details": [{"source1": "mux2.9", "source2": "mux2.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/mux2.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MUX2 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MUX2 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n mux2 \\- Select from one of two input values\n .SH SYNOPSIS\n .HP\n .B loadrt mux2 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/mux4.9.gz", "source2": "./usr/share/man/man9/mux4.9.gz", "unified_diff": null, "details": [{"source1": "mux4.9", "source2": "mux4.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/mux4.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MUX4 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MUX4 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n mux4 \\- Select from one of four input values\n .SH SYNOPSIS\n .HP\n .B loadrt mux4 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/mux8.9.gz", "source2": "./usr/share/man/man9/mux8.9.gz", "unified_diff": null, "details": [{"source1": "mux8.9", "source2": "mux8.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/mux8.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH MUX8 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH MUX8 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n mux8 \\- Select from one of eight input values\n .SH SYNOPSIS\n .HP\n .B loadrt mux8 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/near.9.gz", "source2": "./usr/share/man/man9/near.9.gz", "unified_diff": null, "details": [{"source1": "near.9", "source2": "near.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/near.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH NEAR \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH NEAR \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n near \\- Determine whether two values are roughly equal.\n .SH SYNOPSIS\n .HP\n .B loadrt near [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/not.9.gz", "source2": "./usr/share/man/man9/not.9.gz", "unified_diff": null, "details": [{"source1": "not.9", "source2": "not.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/not.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH NOT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH NOT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n not \\- Inverter\n .SH SYNOPSIS\n .HP\n .B loadrt not [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/offset.9.gz", "source2": "./usr/share/man/man9/offset.9.gz", "unified_diff": null, "details": [{"source1": "offset.9", "source2": "offset.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/offset.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH OFFSET \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH OFFSET \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n offset \\- Adds an offset to an input, and subtracts it from the feedback value.\n .SH SYNOPSIS\n .HP\n .B loadrt offset [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/ohmic.9.gz", "source2": "./usr/share/man/man9/ohmic.9.gz", "unified_diff": null, "details": [{"source1": "ohmic.9", "source2": "ohmic.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/ohmic.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH OHMIC \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH OHMIC \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n ohmic \\- LinuxCNC HAL component that uses a Mesa THCAD for ohmic sensing\n .SH SYNOPSIS\n .HP\n .B loadrt ohmic [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/oneshot.9.gz", "source2": "./usr/share/man/man9/oneshot.9.gz", "unified_diff": null, "details": [{"source1": "oneshot.9", "source2": "oneshot.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/oneshot.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH ONESHOT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH ONESHOT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n oneshot \\- one-shot pulse generator\n .SH SYNOPSIS\n .HP\n .B loadrt oneshot [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/or2.9.gz", "source2": "./usr/share/man/man9/or2.9.gz", "unified_diff": null, "details": [{"source1": "or2.9", "source2": "or2.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/or2.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH OR2 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH OR2 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n or2 \\- Two-input OR gate\n .SH SYNOPSIS\n .HP\n .B loadrt or2 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/orient.9.gz", "source2": "./usr/share/man/man9/orient.9.gz", "unified_diff": null, "details": [{"source1": "orient.9", "source2": "orient.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/orient.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH ORIENT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH ORIENT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n orient \\- Provide a PID command input for orientation mode based on current spindle position, target angle and orient mode\n .SH SYNOPSIS\n .HP\n .B loadrt orient [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/plasmac.9.gz", "source2": "./usr/share/man/man9/plasmac.9.gz", "unified_diff": null, "details": [{"source1": "plasmac.9", "source2": "plasmac.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/plasmac.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH PLASMAC \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH PLASMAC \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n plasmac \\- A plasma cutter controller\n .SH SYNOPSIS\n .HP\n .B loadrt plasmac\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/sample_hold.9.gz", "source2": "./usr/share/man/man9/sample_hold.9.gz", "unified_diff": null, "details": [{"source1": "sample_hold.9", "source2": "sample_hold.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/sample_hold.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SAMPLE_HOLD \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SAMPLE_HOLD \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n sample_hold \\- Sample and Hold\n .SH SYNOPSIS\n .HP\n .B loadrt sample_hold [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/scale.9.gz", "source2": "./usr/share/man/man9/scale.9.gz", "unified_diff": null, "details": [{"source1": "scale.9", "source2": "scale.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/scale.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SCALE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SCALE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n scale \\- LinuxCNC HAL component that applies a scale and offset to its input\n .SH SYNOPSIS\n .HP\n .B loadrt scale [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/scaled_s32_sums.9.gz", "source2": "./usr/share/man/man9/scaled_s32_sums.9.gz", "unified_diff": null, "details": [{"source1": "scaled_s32_sums.9", "source2": "scaled_s32_sums.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/scaled_s32_sums.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SCALED_S32_SUMS \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SCALED_S32_SUMS \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n scaled_s32_sums \\- Sum of four inputs (each with a scale)\n .SH SYNOPSIS\n .HP\n .B loadrt scaled_s32_sums [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/select8.9.gz", "source2": "./usr/share/man/man9/select8.9.gz", "unified_diff": null, "details": [{"source1": "select8.9", "source2": "select8.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/select8.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SELECT8 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SELECT8 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n select8 \\- 8-bit binary match detector\n .SH SYNOPSIS\n .HP\n .B loadrt select8 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/serport.9.gz", "source2": "./usr/share/man/man9/serport.9.gz", "unified_diff": null, "details": [{"source1": "serport.9", "source2": "serport.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/drivers/serport.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SERPORT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SERPORT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n serport \\- Hardware driver for the digital I/O bits of the 8250 and 16550 serial port.\n .SH SYNOPSIS\n \n .B loadrt serport io=\\fIaddr[,addr...]\\fR\n .PP\n"}]}, {"source1": "./usr/share/man/man9/sim_axis_hardware.9.gz", "source2": "./usr/share/man/man9/sim_axis_hardware.9.gz", "unified_diff": null, "details": [{"source1": "sim_axis_hardware.9", "source2": "sim_axis_hardware.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/sim_axis_hardware.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SIM_AXIS_HARDWARE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SIM_AXIS_HARDWARE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n sim_axis_hardware \\- A component to simulate home and limit switches\n .SH SYNOPSIS\n .HP\n .B loadrt sim_axis_hardware [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/sim_home_switch.9.gz", "source2": "./usr/share/man/man9/sim_home_switch.9.gz", "unified_diff": null, "details": [{"source1": "sim_home_switch.9", "source2": "sim_home_switch.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/sim_home_switch.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SIM_HOME_SWITCH \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SIM_HOME_SWITCH \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n sim_home_switch \\- Home switch simulator\n .SH SYNOPSIS\n .HP\n .B loadrt sim_home_switch [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/sim_matrix_kb.9.gz", "source2": "./usr/share/man/man9/sim_matrix_kb.9.gz", "unified_diff": null, "details": [{"source1": "sim_matrix_kb.9", "source2": "sim_matrix_kb.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/sim_matrix_kb.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SIM_MATRIX_KB \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SIM_MATRIX_KB \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n sim_matrix_kb \\- convert HAL pin inputs to keycodes\n .SH SYNOPSIS\n .HP\n .B loadrt sim_matrix_kb [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/sim_parport.9.gz", "source2": "./usr/share/man/man9/sim_parport.9.gz", "unified_diff": null, "details": [{"source1": "sim_parport.9", "source2": "sim_parport.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/sim_parport.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SIM_PARPORT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SIM_PARPORT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n sim_parport \\- A component to simulate the pins of the hal_parport component\n .SH SYNOPSIS\n .HP\n .B loadrt sim_parport [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/sim_spindle.9.gz", "source2": "./usr/share/man/man9/sim_spindle.9.gz", "unified_diff": null, "details": [{"source1": "sim_spindle.9", "source2": "sim_spindle.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/sim_spindle.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SIM_SPINDLE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SIM_SPINDLE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n sim_spindle \\- Simulated spindle with index pulse\n .SH SYNOPSIS\n .HP\n .B loadrt sim_spindle [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/simple_tp.9.gz", "source2": "./usr/share/man/man9/simple_tp.9.gz", "unified_diff": null, "details": [{"source1": "simple_tp.9", "source2": "simple_tp.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/simple_tp.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SIMPLE_TP \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SIMPLE_TP \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n simple_tp \\- This component is a single axis simple trajectory planner, same as used for jogging in LinuxCNC.\n .SH SYNOPSIS\n Used by PNCconf to allow testing of acceleration and velocity values for an axis.\n .SH FUNCTIONS\n .TP\n"}]}, {"source1": "./usr/share/man/man9/sphereprobe.9.gz", "source2": "./usr/share/man/man9/sphereprobe.9.gz", "unified_diff": null, "details": [{"source1": "sphereprobe.9", "source2": "sphereprobe.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/sphereprobe.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SPHEREPROBE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SPHEREPROBE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n sphereprobe \\- Probe a pretend hemisphere\n .SH SYNOPSIS\n .HP\n .B loadrt sphereprobe [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/spindle.9.gz", "source2": "./usr/share/man/man9/spindle.9.gz", "unified_diff": null, "details": [{"source1": "spindle.9", "source2": "spindle.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/spindle.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SPINDLE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SPINDLE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n spindle \\- Control a spindle with different acceleration and deceleration and optional gear change scaling\n .SH SYNOPSIS\n .HP\n .B loadrt spindle [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/spindle_monitor.9.gz", "source2": "./usr/share/man/man9/spindle_monitor.9.gz", "unified_diff": null, "details": [{"source1": "spindle_monitor.9", "source2": "spindle_monitor.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/spindle_monitor.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SPINDLE_MONITOR \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SPINDLE_MONITOR \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n spindle_monitor \\- spindle at-speed and underspeed detection\n .SH SYNOPSIS\n .HP\n .B loadrt spindle_monitor [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/steptest.9.gz", "source2": "./usr/share/man/man9/steptest.9.gz", "unified_diff": null, "details": [{"source1": "steptest.9", "source2": "steptest.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/steptest.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH STEPTEST \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH STEPTEST \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n steptest \\- Used by Stepconf to allow testing of acceleration and velocity values for an axis.\n .SH SYNOPSIS\n .HP\n .B loadrt steptest [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/sum2.9.gz", "source2": "./usr/share/man/man9/sum2.9.gz", "unified_diff": null, "details": [{"source1": "sum2.9", "source2": "sum2.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/sum2.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH SUM2 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH SUM2 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n sum2 \\- Sum of two inputs (each with a gain) and an offset\n .SH SYNOPSIS\n .HP\n .B loadrt sum2 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/thc.9.gz", "source2": "./usr/share/man/man9/thc.9.gz", "unified_diff": null, "details": [{"source1": "thc.9", "source2": "thc.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/thc.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH THC \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH THC \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n thc \\- Torch Height Control\n .SH SYNOPSIS\n .HP\n .B loadrt thc\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/thcud.9.gz", "source2": "./usr/share/man/man9/thcud.9.gz", "unified_diff": null, "details": [{"source1": "thcud.9", "source2": "thcud.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/thcud.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH THCUD \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH THCUD \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n thcud \\- Torch Height Control Up/Down Input\n .SH SYNOPSIS\n .HP\n .B loadrt thcud\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/threadtest.9.gz", "source2": "./usr/share/man/man9/threadtest.9.gz", "unified_diff": null, "details": [{"source1": "threadtest.9", "source2": "threadtest.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/threadtest.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH THREADTEST \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH THREADTEST \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n threadtest \\- LinuxCNC HAL component for testing thread behavior\n .SH SYNOPSIS\n .HP\n .B loadrt threadtest [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/time.9.gz", "source2": "./usr/share/man/man9/time.9.gz", "unified_diff": null, "details": [{"source1": "time.9", "source2": "time.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/time.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TIME \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TIME \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n time \\- Time on in Hours, Minutes, Seconds\n .SH SYNOPSIS\n .HP\n .B loadrt time [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/timedelay.9.gz", "source2": "./usr/share/man/man9/timedelay.9.gz", "unified_diff": null, "details": [{"source1": "timedelay.9", "source2": "timedelay.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/timedelay.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TIMEDELAY \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TIMEDELAY \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n timedelay \\- The equivalent of a time-delay relay\n .SH SYNOPSIS\n .HP\n .B loadrt timedelay [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/timedelta.9.gz", "source2": "./usr/share/man/man9/timedelta.9.gz", "unified_diff": null, "details": [{"source1": "timedelta.9", "source2": "timedelta.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/timedelta.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TIMEDELTA \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TIMEDELTA \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n timedelta \\- LinuxCNC HAL component that measures thread scheduling timing behavior\n .SH SYNOPSIS\n .HP\n .B loadrt timedelta [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/tof.9.gz", "source2": "./usr/share/man/man9/tof.9.gz", "unified_diff": null, "details": [{"source1": "tof.9", "source2": "tof.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/tof.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TOF \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TOF \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n tof \\- IEC TOF timer - delay falling edge on a signal\n .SH SYNOPSIS\n .HP\n .B loadrt tof [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/toggle.9.gz", "source2": "./usr/share/man/man9/toggle.9.gz", "unified_diff": null, "details": [{"source1": "toggle.9", "source2": "toggle.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/toggle.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TOGGLE \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TOGGLE \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n toggle \\- 'push-on, push-off' from momentary pushbuttons\n .SH SYNOPSIS\n .HP\n .B loadrt toggle [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/toggle2nist.9.gz", "source2": "./usr/share/man/man9/toggle2nist.9.gz", "unified_diff": null, "details": [{"source1": "toggle2nist.9", "source2": "toggle2nist.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/toggle2nist.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TOGGLE2NIST \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TOGGLE2NIST \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n toggle2nist \\- toggle button to nist logic\n .SH SYNOPSIS\n .HP\n .B loadrt toggle2nist [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/ton.9.gz", "source2": "./usr/share/man/man9/ton.9.gz", "unified_diff": null, "details": [{"source1": "ton.9", "source2": "ton.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/ton.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TON \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TON \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n ton \\- IEC TON timer - delay rising edge on a signal\n .SH SYNOPSIS\n .HP\n .B loadrt ton [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/tp.9.gz", "source2": "./usr/share/man/man9/tp.9.gz", "unified_diff": null, "details": [{"source1": "tp.9", "source2": "tp.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/tp.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TP \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TP \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n tp \\- IEC TP timer - generate a high pulse of defined duration on rising edge\n .SH SYNOPSIS\n .HP\n .B loadrt tp [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/tpcomp.9.gz", "source2": "./usr/share/man/man9/tpcomp.9.gz", "unified_diff": null, "details": [{"source1": "tpcomp.9", "source2": "tpcomp.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/tpcomp.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TPCOMP \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TPCOMP \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n tpcomp \\- Trajectory Planning (tp) module skeleton\n .SH SYNOPSIS\n .HP\n Custom Trajectory Planning module loaded with \\fB[TRAJ]TPMOD=tpcomp\\fR\n \n"}]}, {"source1": "./usr/share/man/man9/tristate_bit.9.gz", "source2": "./usr/share/man/man9/tristate_bit.9.gz", "unified_diff": null, "details": [{"source1": "tristate_bit.9", "source2": "tristate_bit.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/tristate_bit.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TRISTATE_BIT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TRISTATE_BIT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n tristate_bit \\- Place a signal on an I/O pin only when enabled, similar to a tristate buffer in electronics\n .SH SYNOPSIS\n .HP\n .B loadrt tristate_bit [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/tristate_float.9.gz", "source2": "./usr/share/man/man9/tristate_float.9.gz", "unified_diff": null, "details": [{"source1": "tristate_float.9", "source2": "tristate_float.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/tristate_float.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH TRISTATE_FLOAT \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH TRISTATE_FLOAT \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n tristate_float \\- Place a signal on an I/O pin only when enabled, similar to a tristate buffer in electronics\n .SH SYNOPSIS\n .HP\n .B loadrt tristate_float [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/updown.9.gz", "source2": "./usr/share/man/man9/updown.9.gz", "unified_diff": null, "details": [{"source1": "updown.9", "source2": "updown.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/updown.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH UPDOWN \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH UPDOWN \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n updown \\- Counts up or down, with optional limits and wraparound behavior\n .SH SYNOPSIS\n .HP\n .B loadrt updown [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/userkins.9.gz", "source2": "./usr/share/man/man9/userkins.9.gz", "unified_diff": null, "details": [{"source1": "userkins.9", "source2": "userkins.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/userkins.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH USERKINS \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH USERKINS \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n userkins \\- Template for user-built kinematics\n .SH SYNOPSIS\n .HP\n .B loadrt userkins [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/wcomp.9.gz", "source2": "./usr/share/man/man9/wcomp.9.gz", "unified_diff": null, "details": [{"source1": "wcomp.9", "source2": "wcomp.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/wcomp.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH WCOMP \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH WCOMP \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n wcomp \\- Window comparator\n .SH SYNOPSIS\n .HP\n .B loadrt wcomp [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/xhc_hb04_util.9.gz", "source2": "./usr/share/man/man9/xhc_hb04_util.9.gz", "unified_diff": null, "details": [{"source1": "xhc_hb04_util.9", "source2": "xhc_hb04_util.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/xhc_hb04_util.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH XHC_HB04_UTIL \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH XHC_HB04_UTIL \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n xhc_hb04_util \\- xhc-hb04 convenience utility\n .SH SYNOPSIS\n .HP\n .B loadrt xhc_hb04_util [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}, {"source1": "./usr/share/man/man9/xor2.9.gz", "source2": "./usr/share/man/man9/xor2.9.gz", "unified_diff": null, "details": [{"source1": "xor2.9", "source2": "xor2.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/xor2.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH XOR2 \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH XOR2 \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n xor2 \\- Two-input XOR (exclusive OR) gate\n .SH SYNOPSIS\n .HP\n .B loadrt xor2 [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH FUNCTIONS\n"}]}, {"source1": "./usr/share/man/man9/xyzab_tdr_kins.9.gz", "source2": "./usr/share/man/man9/xyzab_tdr_kins.9.gz", "unified_diff": null, "details": [{"source1": "xyzab_tdr_kins.9", "source2": "xyzab_tdr_kins.9", "unified_diff": "@@ -2,15 +2,15 @@\n .\\\"*******************************************************************\n .\\\"\n .\\\" This file was extracted from hal/components/xyzab_tdr_kins.comp using halcompile.g.\n .\\\" Modify the source file.\n .\\\"\n .\\\"*******************************************************************\n \n-.TH XYZAB_TDR_KINS \"9\" \"2024-04-27\" \"LinuxCNC Documentation\" \"HAL Component\"\n+.TH XYZAB_TDR_KINS \"9\" \"2025-05-31\" \"LinuxCNC Documentation\" \"HAL Component\"\n .SH NAME\n \n xyzab_tdr_kins \\- Switchable kinematics for 5 axis machine with rotary table A and B\n .SH SYNOPSIS\n .HP\n .B loadrt xyzab_tdr_kins [count=\\fIN\\fB|names=\\fIname1\\fB[,\\fIname2...\\fB]]\n .SH DESCRIPTION\n"}]}]}]}]}]}