add belt peel guard to prevent deflection on long prints as they leave the belt end

This commit is contained in:
Stewart Allen 2021-03-08 21:57:28 -05:00
commit c8ec0aa498
5 changed files with 19 additions and 2 deletions

2
app.js
View file

@ -167,6 +167,8 @@ function initModule(mod, file, dir) {
time: time,
guid: guid,
mkdirs: util.mkdir,
isfile: util.isfile,
confdir: util.confdir,
datadir: util.datadir,
lastmod: lastmod,
obj2string: obj2string,

View file

@ -341,6 +341,7 @@
outputLayerRetract: false,
outputOriginCenter: true,
outputLoopLayers: "",
outputPeelGuard: 0,
outputInvertX: false,
outputInvertY: false,
detectThinWalls: false,

View file

@ -1788,7 +1788,8 @@
arcTolerance: UC.newInput(LANG.ad_arct_s, {title:LANG.ad_arct_l, bound:UC.bound(0,1.0), convert:UC.toFloat, modes:FDM, show:() => { return isDanger() && isNotBelt() }}),
antiBacklash: UC.newInput(LANG.ad_abkl_s, {title:LANG.ad_abkl_l, bound:UC.bound(0,3), convert:UC.toInt, modes:FDM}),
fdmSep: UC.newBlank({class:"pop-sep", modes:FDM}),
gcodePauseLayers: UC.newInput(LANG.ag_paws_s, {title:LANG.ag_paws_l, modes:FDM, comma:true}),
outputPeelGuard: UC.newInput(LANG.ag_peel_s, {title:LANG.ag_peel_l, convert:UC.toInt, modes:FDM, comma:true, show:isBelt}),
gcodePauseLayers: UC.newInput(LANG.ag_paws_s, {title:LANG.ag_paws_l, modes:FDM, comma:true, show:isNotBelt}),
outputLoopLayers: UC.newInput(LANG.ag_loop_s, {title:LANG.ag_loop_l, modes:FDM, comma:true, show:isBelt}),
outputLayerRetract: UC.newBoolean(LANG.ad_lret_s, onBooleanClick, {title:LANG.ad_lret_l, modes:FDM}),

View file

@ -47,6 +47,9 @@
lout = null,
last = null,
zpos = 0,
bmax = 0,
blast = 0,
blastz = 0,
process = settings.process,
loops = process.outputLoopLayers,
zhop = process.zHopDistance || 0, // range
@ -55,6 +58,7 @@
retSpeed = process.outputRetractSpeed * 60, // range
retDwell = process.outputRetractDwell || 0, // range
timeDwell = retDwell / 1000,
peelGuard = process.outputPeelGuard || 0,
arcDist = isBelt || !isDanger ? 0 : (process.arcTolerance || 0),
originCenter = process.outputOriginCenter,
offset = originCenter ? null : {
@ -272,7 +276,7 @@
let epos = isBelt ? { x: pos.x, y: pos.y, z: pos.z } : pos;
if (isBelt) {
epos.x = originCenter ? -pos.x : device.bedWidth - pos.x;
epos.z = pos.z * icos;
epos.z = blastz = pos.z * icos;
epos.y = -pos.y + epos.z * bcos;
lout = epos;
}
@ -335,6 +339,7 @@
(process.firstSliceHeight || process.sliceHeight) : path.height);
zpos = path.z || zpos;
bmax = Math.max(bmax, pos.z * icos);
subst.z = subst.Z = zpos.round(3);
subst.e = subst.E = outputLength;
subst.layer = layer;
@ -342,6 +347,12 @@
if (isBelt) {
pos.z = zpos;
if (peelGuard && bmax > peelGuard && blast < peelGuard) {
peelGuard += 50;
append(`G0 Z${(blast + 55).round(decimals)} F200 ; peel guard`);
append(`G0 Z${blastz.round(decimals)} F200 ; unpeel`);
}
blast = bmax;
}
if (pauseCmd && pause.indexOf(layer) >= 0) {

View file

@ -585,6 +585,8 @@ kiri.lang['en-us'] = {
ag_menu: "gcode",
ag_nozl_s: "nozzle",
ag_nozl_l: "select output nozzle or head",
ag_peel_s: "peel guard",
ag_peel_l: ["starting at this belt z positoin","periodically roll the print off and","back on to the belt to unstick it","and prevent rolling deflection"],
ag_paws_s: "pause layers",
ag_paws_l: ["comma-separated list of layers","to inject pause commands before"],
ag_loop_s: "loop layers",