Skip to content

Commit

Permalink
Merge tag 'v2.9.2' into andypugh/2.9-rtai
Browse files Browse the repository at this point in the history
LinuxCNC v2.9.2
  • Loading branch information
andypugh committed Dec 24, 2023
2 parents 86f756f + ac9a84a commit 94a1e80
Show file tree
Hide file tree
Showing 38 changed files with 225 additions and 140 deletions.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.9.1
2.9.2
69 changes: 69 additions & 0 deletions debian/changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,72 @@
linuxcnc (1:2.9.2) UNRELEASED; urgency=medium

* Add dither option to PWMGen for improved analog resolution
* axis: Fix run-from-line - bug #2771
* debian/changelog: fix epoch & white space
* deleted craftsman gui, as it is not python 2 nor gtk3 based and not mantained for a long period
* deleted gmoccapy plasma, as glade panels are still in gtk2
* Docs: Many updates
* fix hardcoded description in Spanish language Closes: #1057312
* Fixes warnings for possible string truncation with strncpy()
* Gladevcp: fix error on missing filter program
* gmoccapy: Fixed Inappropriate Logical Expression (#2769)
* gmoccapy: fixes error when trying to hide the turtle-jog button in gmoccapy
* hal_glib -add get_linuxcnc_version function
* Increase size of STACK_ENTRY_LEN
* Merge pull request #2567 from petterreinholdtsen/2.9-gcode-g38.2
* Merge pull request #2757 from dpslwk/patch-1
* Merge pull request #2761 from LinuxCNC/s_code_fix
* Merge pull request #2765 from LinuxCNC/pncconf_fix_missing_ssport
* Merge pull request #2772 from hansu/fix-debian-1057312
* Merge pull request #2775 from smoe/translation_breaking_po4a
* Merge pull request #2782 from Sigma1912/patch-2
* Merge pull request #2783 from Sigma1912/patch-3
* Merge pull request #2790 from havardAasen/fix-string-truncation
* Merge pull request #2791 from havardAasen/havardAasen-patch-1
* Merge pull request #2795 from havardAasen/build-dependency
* motion control: allow the spindle to be on with speed of 0
* motion: fix brake/direction setting when S command is sent.
* motion.c: Improve handling of misc_error pin names See #2780 #2773
* pmx483-test: change package message to python3-serial
* pncconf - change spindle stepgen enable from spindle-enable to machine-is-on
* pncconf -fix HAL load command for 2 serialports
* qtaxis -add version string to log
* qtdragon -add a default 'factor' to avoid error message
* qtdragon_hd -fix stylesheets for 5 axis, adjust qtdragon.ui
* qtdragon/hd -add version messages to about and log
* qtdragon/hd -fix spindle override quick setting buttons
* qtdragon/hd -update version after fixing probing bug
* qtplasmac docs: update python serial version
* qtplasmac: fix 5th axis buttons
* qtplasmac: fix case switching in run from line
* qtplasmac: fix gcode filter comments error
* qtplasmac: fix imperial cut parameter ranges
* qtplasmac: fix power button styling
* qtplasmac: fix removal of temporary materials in run from line
* qtplasmac: fix run from line code restoration
* qtplasmac: fix string formatting and version check
* qtplasmac: fix translation error in pmx485_check
* qtplasmac: fix updater typo, document update_log.txt
* qtplasmac: prevent extra temporary material addition from conversational
* qtplasmac: rework versioning due to master branch diverging
* qtvcp -add vismach obj files to search, change path from debug to info
* qtvcp -auto_height: improve logging/status output
* qtvcp -copy panel: update to check for the qtvcp/screens or panels path
* qtvcp -docs: the 'copy_dialog' panel changed to just 'copy'
* qtvcp -notify: silence annoying error message
* qtvcp -probe routines:fix spindle start on error or abort
* qtvcp -touchoff_subprogram: fix typos so it works properly.
* Restore functionality of NO_PROBE ini settings
* revert changes for strncat()
* RTAI: Fix build against RTAI+GNU11
* snprintf uses %d on a double (issue 2784)
* stdglue.py: Fix error on loading stdglue remaps using an R word. (The previous code errored on attempted comparison between dict and float)
* tests: status.state should be checked against command execution status
* Update build-dependency for OpenGL
* Update combi_dro.py

-- andypugh <[email protected]> Wed, 20 Dec 2023 13:19:18 +0000

linuxcnc (1:2.9.1) unstable; urgency=medium

* Add 7I94T, 7I97T, 7I76EU card support
Expand Down
2 changes: 1 addition & 1 deletion debian/control.top.in
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Build-Depends:
intltool,
libboost-python-dev,
libepoxy-dev,
libgl1-mesa-dev | libgl1-mesa-swx11-dev,
libgl-dev | libgl1-mesa-dev,
libglu1-mesa-dev,
libgtk2.0-dev,
libgtk-3-dev,
Expand Down
9 changes: 8 additions & 1 deletion docs/man/man9/motion.9
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
motion \- accepts NML motion commands, interacts with HAL in realtime

.SH SYNOPSIS
\fBloadrt motmod [base_period_nsec=\fIperiod\fB] [base_thread_fp=\fI0 or 1\fB] [servo_period_nsec=\fIperiod\fB] [traj_period_nsec=\fIperiod\fB] [num_joints=\fI[1-16]\fB] [num_dio=\fI[1-64]\fB] [num_aio=\fI[1-64]\fB] [num_misc_error=\fI[0-64]\fB] [num_spindles=\fI[1-8]\fB]\fR \fB[unlock_joints_mask=\fR\fIjointmask\fR\fB]\fR \fB[num_extrajoints=\fI[0-16]\fB]\fR
\fBloadrt motmod [base_period_nsec=\fIperiod\fB] [base_thread_fp=\fI0 or 1\fB] [servo_period_nsec=\fIperiod\fB] [traj_period_nsec=\fIperiod\fB] [num_joints=\fI[1-16]\fB] [num_dio=\fI[1-64]\fB] [num_aio=\fI[1-64]\fB] [num_misc_error=\fI[0-64]\fB | names_misc_errors] [num_spindles=\fI[1-8]\fB]\fR \fB[unlock_joints_mask=\fR\fIjointmask\fR\fB]\fR \fB[num_extrajoints=\fI[0-16]\fB]\fR

The limits for the following items are compile-time settings:
.br
Expand All @@ -26,6 +26,13 @@ The limits for the following items are compile-time settings:
.br
.ns
.TP
\fBnames_misc_errors\fR: A comma-separated list of names for extra error inputs.
This parameter is mutually exclusive with num_misc_error.
If using num_misc_error the additional error input pins will have names like \fBmotion.misc-error-00\fR whereas \fBnames_misc_errors=overtemp,undertemp\fR will
create hal pins \fBmotion.err-overtemp\fR and \fBmotion.err-undertemp\fR
.br
.ns
.TP
\fBnum_spindles\fR: Maximum number of spindles is set by EMCMOT_MAX_SPINDLES

.P
Expand Down
9 changes: 4 additions & 5 deletions docs/src/config/ini-config.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -1295,19 +1295,18 @@ image::images/encoder-scale.png[align="center"]

The _<num>_ specifies the spindle number 0 ... (num_spindles-1) +
The value of _num_spindles_ is set by `[TRAJ]SPINDLES=` . +
By default maximum velocity of the spindle in forward and reverse is approximately
2147483000 RPM. +
By default maximum velocity of the spindle in forward and reverse is approximately 2147483000 RPM. +
By default minimum velocity of the spindle in forward and reverse is 0 RPM. +
By default the increment is 100 RPM. +
You change these default by setting the following INI variables:

[NOTE]
These settings are for the motion controller component. Control screens can limit
these settings further.
These settings are for the motion controller component.
Control screens can limit these settings further.

* `MAX_FORWARD_VELOCITY = 20000`
The maximum spindle speed (in rpm) for the specified spindle. Optional.
This will also set MIN_FORWARD_VELOCITY to the negative value unless overridden.
This will also set MAX_REVERSE_VELOCITY to the negative value unless overridden.
* `MIN_FORWARD_VELOCITY = 3000`
The minimum spindle speed (in rpm) for the specified spindle. Optional.
Many spindles have a minimum speed below which they should not be run.
Expand Down
11 changes: 3 additions & 8 deletions docs/src/config/iov2.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -53,18 +53,13 @@ INI file options:
.[EMCIO] section
PROTOCOL_VERSION = 2 :: Defaults to 2. Setting to 1 will emulate old iocontrol behaviour.

EMCIO = iov2 -support-start-change :: 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 this is better
backwards compatibility.
EMCIO = iov2 -support-start-change :: 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 this is better backwards compatibility.

.[TASK] section
IO_ERROR :: Printf-style template for operator error display (negative toolchanger fault codes).
No quoting needed. Example: `IO_ERROR = Toolchanger fault %d`. Default: toolchanger error %d.
IO_ERROR :: Printf-style template for operator error display (negative toolchanger fault codes). No quoting needed. Example: `IO_ERROR = Toolchanger fault %d`. Default: toolchanger error %d.

.[EMC] section +
DEBUG :: To get a (quite detailed) trace,
set either the RCS debugging flag (0x00000200) to turn on RCS debugging messages all over LinuxCNC or use the new iocontrol debugging bit (0x00001000) only for iov2 messages.
DEBUG :: To get a (quite detailed) trace, set either the RCS debugging flag (0x00000200) to turn on RCS debugging messages all over LinuxCNC or use the new iocontrol debugging bit (0x00001000) only for iov2 messages.

== Pins

Expand Down
2 changes: 1 addition & 1 deletion docs/src/drivers/hal_gpio.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ The version of libgpiod-dev installed can be determined by the command "gpioinfo

* 'hal_gpio.reset' - Only exported if there are pins defined in the reset list. This should be placed after the "write" function, and should be in the same thread.

Typically the 'read' function will be early in the call list, before any encoder counters and the 'write' function will be later in the call list, after stepgen.make-pulses.
Typically the 'read' function will be early in the call list, before any encoder counters and the 'write' function will be later in the call list, after `stepgen.make-pulses`.


== Pin Identification
Expand Down
2 changes: 1 addition & 1 deletion docs/src/getting-started/running-linuxcnc.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ new users and are organized around supported GUIs:
* 'qtdragon_hd' - Touch Screen GUI, high definition
* 'qtplasmac' - Touch Screen GUI, for plasma tables
* 'qttouchy' - Touch Screen GUI
* 'tklinuxcnc' - Keyboard and Mouse Gui (no longer maintained)
* 'tklinuxcnc' - Keyboard and Mouse GUI (no longer maintained)
* 'touchy' - Touch Screen GUI
* 'woodpecker' - Touch Screen GUI
A GUI configuration directory may contain subdirectories with
Expand Down
2 changes: 1 addition & 1 deletion docs/src/getting-started/updating-linuxcnc.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ Versions of LinuxCNC before 2.9.0 used to handle an incorrect
`[TASK]INTERPRETER` setting by automatically falling back to using the
default G-code interpreter.

As of 2.9.0, an incorrect `[TASK]INTERPRETER` value will cause
Since 2.9.0, an incorrect `[TASK]INTERPRETER` value will cause
LinuxCNC to refuse to start up. Fix this condition by deleting the
`[TASK]INTERPRETER` setting from your INI file, so that LinuxCNC will
use the default G-code interpreter.
Expand Down
2 changes: 1 addition & 1 deletion docs/src/gui/gladevcp.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -2817,7 +2817,7 @@ See the getting-started/running-linuxcnc section for 'Adding Configuration Selec

For testing, a runtime specification of auxiliary applications may be specified using the exported environmental variable: GLADEVCP_EXTRAS.
This variable should be a path list of one or more configuration directories separated by a (:).
Typically, this variable would be set in a shell starting `linuxcnc` or in a user's `~/.profile startup` script.
Typically, this variable would be set in a shell starting `linuxcnc` or in a user's `~/.profile` startup script.
Example:

----
Expand Down
3 changes: 1 addition & 2 deletions docs/src/gui/qtdragon.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,7 @@ DISPLAY = qtvcp qtdragon

To keep track of preferences, QtDragon looks for a preference text file.
Add the following entry under the `[DISPLAY]` heading. +
It can use `~` for home directory or `WORKINGFOLDER` or `CONFIGFOLDER`
to represent QtVCP's idea of those directories: +
It can use `~` for home directory or `WORKINGFOLDER` or `CONFIGFOLDER` to represent QtVCP's idea of those directories: +
This example will save the file in the config folder of the launch screen.
(Other options are possible see the QtVCP's screenoption widget docs.)

Expand Down
2 changes: 2 additions & 0 deletions docs/src/plasma/qtplasmac.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,8 @@ After running a new configuration for the first time the following files will be
|===
|Filename |Function
|<machine_name>_material.cfg |File for storing the material settings from the MATERIAL section of the <<plasma:parameters-tab,PARAMETERS Tab>>.
|update_log.txt |File for storing log of major updates. +
Major updates are those that make any modification to a user's configuration.
|qtvcp.prefs |File containing the QtVCP preferences.
|qtplasmac.qss |File storing the stylesheet for the currently loaded session of QtPlasmaC.
|===
Expand Down
2 changes: 1 addition & 1 deletion lib/python/gladevcp/combi_dro.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,7 +350,7 @@ def _get_current_system(self):
if code >= 540 and code <= 590:
return "G%s" % int((code / 10))
elif code > 590 and code <= 593:
return "G%s" % int((code / 10.0))
return "G%s" % (code / 10.0)
return "Rel"

# Get the units used according to gcode
Expand Down
2 changes: 1 addition & 1 deletion lib/python/qtvcp/lib/qtplasmac/updater.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ def move_options_to_prefs_file_iniwrite(inifile):
os.remove(tmpFile)
except Exception as e:
return(False, True, e)
return(True, False, 'Updated to V1.227.219')
return(True, False, 'Updated to V2.9-227.219')

def get_offsets(data, oType):
x = y = d = 0
Expand Down
2 changes: 1 addition & 1 deletion nc_files/remap_lib/python-stdglue/stdglue.py
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ def cycle_prolog(self,**words):
if not "r" in self.sticky_params[r.name]:
return "%s: cycle requires R word" % (r.name)
else:
if self.sticky_params[r.name] <= 0.0:
if self.sticky_params[r.name]['r'] <= 0.0:
return "%s: R word must be > 0 if used (%.4f)" % (r.name, words["r"])

if "l" in words:
Expand Down
33 changes: 18 additions & 15 deletions share/qtvcp/screens/qtplasmac/qtplasmac_handler.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
VERSION = '1.236.292'
VERSION = '236.301'
LCNCVER = '2.9'
DOCSVER = LCNCVER

'''
qtplasmac_handler.py
Expand Down Expand Up @@ -322,10 +324,10 @@ def __init__(self, halcomp, widgets, paths):

# called by qtvcp.py
def initialized__(self):
if linuxcnc.version.rsplit('.', 1)[0] != LCNCVER:
if '.'.join(linuxcnc.version.split('.')[:2]) != LCNCVER:
msg0 = _translate('HandlerClass', 'LinuxCNC version should be')
msg1 = _translate('HandlerClass', 'The detected version is')
STATUS.emit('error', linuxcnc.OPERATOR_ERROR, '{} {}\n{} {}'.format(msg0, LCNCVER, msg1, linuxcnc.version.rsplit('.', 1)[0]))
STATUS.emit('error', linuxcnc.OPERATOR_ERROR, '{} {}\n{} {}'.format(msg0, LCNCVER, msg1, linuxcnc.version.split('.')[:2]))
quit()
ucFile = os.path.join(self.PATHS.CONFIGPATH, 'qtplasmac_custom.py')
if os.path.isfile(ucFile):
Expand Down Expand Up @@ -4688,30 +4690,31 @@ def new_material_clicked(self, repeat, value):
except:
if not matNum:
msg0 = _translate('HandlerClass', 'A material number is required')
msgs = '{}.\n\n{}:'.format(msg0, msg1)
msgs = '{}.\n\n{}'.format(msg0, msg1)
else:
msg0 = _translate('HandlerClass', 'is not a valid number')
msgs = '{} {}.\n\n{}:'.format(matNum, msg0, msg1)
msgs = '{} {}.\n\n{}'.format(matNum, msg0, msg1)
continue
if matNum in self.materialNumList:
msg0 = _translate('HandlerClass', 'Material')
msg2 = _translate('HandlerClass', 'is in use')
msgs = '{} #{} {}.\n\n{}:'.format(msg0, matNum, msg2, msg1)
msgs = '{} #{} {}.\n\n{}'.format(msg0, matNum, msg2, msg1)
continue
elif matNum >= 1000000:
msg0 = _translate('HandlerClass', 'Material numbers need to be less than 1000000')
msgs = '{}.\n\n{}:'.format(msg0, msg1)
msgs = '{}.\n\n{}'.format(msg0, msg1)
continue
break
msg1 = 'Enter New Material Name'
msg1 = _translate('HandlerClass', 'Enter New Material Name')
msgs = msg1
virtkb = 3
while(1):
valid, matNam = self.dialog_input(virtkb, head, msg1, btn1, btn2)
valid, matNam = self.dialog_input(virtkb, head, '{}:'.format(msgs), btn1, btn2)
if not valid:
return
if not matNam:
msg0 = _translate('HandlerClass', 'Material name is required')
msgs = '{}.\n\n{}:'.format(msg0, msg1)
msgs = '{}.\n\n{}'.format(msg0, msg1)
continue
break
mat = [matNum, matNam]
Expand All @@ -4738,24 +4741,24 @@ def delete_material_clicked(self):
except:
if not matNum:
msg0 = _translate('HandlerClass', 'A material number is required')
msgs = '{}.\n\n\{}:'.format(msg0, msg1)
msgs = '{}.\n\n{}'.format(msg0, msg1)
else:
msg0 = _translate('HandlerClass', 'is not a valid number')
msgs = '{} {}.\n\n{}:'.format(matNum, msg0, msg1)
msgs = '{} {}.\n\n{}'.format(matNum, msg0, msg1)
continue
if matNum == self.defaultMaterial:
msg0 = _translate('HandlerClass', 'Default material cannot be deleted')
msgs = '{}.\n\n{}:'
msgs = '{}.\n\n{}'.format(msg0, msg1)
continue
elif matNum >= 1000000 and matNum in self.materialList:
msg0 = _translate('HandlerClass', 'Temporary material')
msg3 = _translate('HandlerClass', 'cannot be deleted')
msgs = '{} #{} {}.\n\n{}:'.format(msg0, matNum, msg3, msg1)
msgs = '{} #{} {}.\n\n{}'.format(msg0, matNum, msg3, msg1)
continue
elif matNum not in self.materialNumList:
msg0 = _translate('HandlerClass', 'Material')
msg3 = _translate('HandlerClass', 'does not exist')
msgs = '{} #{} {}.\n\n{}:'.format(msg0, matNum, msg3, msg1)
msgs = '{} #{} {}.\n\n{}'.format(msg0, matNum, msg3, msg1)
continue
break
head = _translate('HandlerClass', 'Delete Material')
Expand Down
6 changes: 6 additions & 0 deletions share/qtvcp/screens/qtplasmac/versions.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ <h2>QtPlasmaC Version History - LinuxCNC 2.9</h2>
</table>
<br>
<!--- ****** ADD NEXT VERSION BELOW THIS LINE ****** --->
<br><b><u>236.301 2023 Dec 13</u></b>
<ul style="margin:0;">
<li>fix string formatting</li>
<li>fix parsing linuxcnc version</li>
</ul>

<br><b><u>236.300 2023 Nov 07</u></b>
<ul style="margin:0;">
<li>fix gcode filter comments error</li>
Expand Down
14 changes: 8 additions & 6 deletions src/emc/motion/command.c
Original file line number Diff line number Diff line change
Expand Up @@ -1609,12 +1609,14 @@ void emcmotCommandHandler_locked(void *arg, long servo_period)
emcmotStatus->spindle_status[n].speed = emcmotCommand->vel;
emcmotStatus->spindle_status[n].css_factor = emcmotCommand->ini_maxvel;
emcmotStatus->spindle_status[n].xoffset = emcmotCommand->acc;
if (emcmotCommand->vel >= 0) {
emcmotStatus->spindle_status[n].direction = 1;
} else {
emcmotStatus->spindle_status[n].direction = -1;
}
emcmotStatus->spindle_status[n].brake = 0; //disengage brake
if (emcmotCommand->state) {
if (emcmotCommand->vel >= 0) {
emcmotStatus->spindle_status[n].direction = 1;
} else {
emcmotStatus->spindle_status[n].direction = -1;
}
emcmotStatus->spindle_status[n].brake = 0; //disengage brake
}
apply_spindle_limits(&emcmotStatus->spindle_status[n]);
}
emcmotStatus->atspeed_next_feed = emcmotCommand->wait_for_spindle_at_speed;
Expand Down
2 changes: 1 addition & 1 deletion src/emc/motion/control.c
Original file line number Diff line number Diff line change
Expand Up @@ -1906,7 +1906,7 @@ static void output_to_hal(void)
*(emcmot_hal_data->spindle[spindle_num].spindle_speed_out_abs) = fabs(speed);
*(emcmot_hal_data->spindle[spindle_num].spindle_speed_out_rps_abs) = fabs(speed / 60);
*(emcmot_hal_data->spindle[spindle_num].spindle_on) =
((emcmotStatus->spindle_status[spindle_num].state * speed) !=0) ? 1 : 0;
((emcmotStatus->spindle_status[spindle_num].state) !=0) ? 1 : 0;
*(emcmot_hal_data->spindle[spindle_num].spindle_forward) = (speed > 0) ? 1 : 0;
*(emcmot_hal_data->spindle[spindle_num].spindle_reverse) = (speed < 0) ? 1 : 0;
*(emcmot_hal_data->spindle[spindle_num].spindle_brake) =
Expand Down
Loading

0 comments on commit 94a1e80

Please sign in to comment.