GPX_settings.jinja2
1 <form class="form-horizontal well" id="gpx_settings"> 2 <fieldset> 3 <legend>GPX</legend> 4 <div class="control-group"> 5 <div class="controls" data-toggle="tooltip" title="{{ _('Use GPX to translate between gcode and x3g. Change takes effect on next connect.') }}"> 6 <label class="checkbox"> 7 <input type="checkbox" data-bind="checked: settings.plugins.GPX.enabled"> {{ _('Enable GPX') }} 8 </label> 9 </div> 10 <div class="controls" data-toggle="tooltip" title="{{ _("There's a lot of start gcode out there that doesn't assert the entire coordinate system off the bat, letting left over state from manual moves and/or prints confuse things. This checkbox forces a G92 X0 Y0 Z0 A0 B0 to occur before anything else. Do *not* use if you're continuing a print with manually edited g-code.") }}"> 11 <label class="checkbox"> 12 <input type="checkbox" data-bind="checked: settings.plugins.GPX.clear_coords_on_print_start"> {{ _('Clear coordinate system before print start') }} 13 </label> 14 </div> 15 <div class="controls" data-toggle="tooltip" title="{{ _('Include prereleases when checking for updates') }}"> 16 <label class="checkbox"> 17 <input type="checkbox" data-bind="checked: settings.plugins.GPX.prerelease"> {{ _('Show pre-release updates') }} 18 </label> 19 </div> 20 <div class="controls" data-toggle="tooltip" title="{{ _('Tell the GPX gcode processor to be more verbose in the plugin log. Warning, *very* verbose and GPX log deletion is manual on the Logs pane.') }}"> 21 <label class="checkbox"> 22 <input type="checkbox" data-bind="checked: settings.plugins.GPX.verbose"> {{ _('Verbose GPX logging') }} <span class="label label-important">{{ _('Warning') }}</span> 23 </label> 24 </div> 25 </div> 26 <div class="control-group"> 27 <label class="control-label">{{ _('Machine type:') }}</label> 28 <div class="controls" data-toggle="tooltip" title="{{ _('Choose which machine type gpx should use for the conversion. Gcode uses mm and x3g uses steps, so gpx needs to know how many steps per mm among other things.') }}"> 29 <select data-bind="value: ini.printer.machine_type"> 30 <option value="cxy">{{ _('Core-XY with HBP - single extruder') }}</option> 31 <option value="cxysz">{{ _('Core-XY with HBP - single extruder, slow Z') }}</option> 32 <option value="cr1">{{ _('Clone R1 Single with HBP') }}</option> 33 <option value="cr1d">{{ _('Clone R1 Dual with HBP') }}</option> 34 <option value="c3">{{ _('Cupcake Gen3 XYZ, Mk5/6 + Gen4 Extruder') }}</option> 35 <option value="c4">{{ _('Cupcake Gen4 XYZ, Mk5/6 + Gen4 Extruder') }}</option> 36 <option value="cp4">{{ _('Cupcake Pololu XYZ, Mk5/6 + Gen4 Extruder') }}</option> 37 <option value="cpp">{{ _('Cupcake Pololu XYZ, Mk5/6 + Pololu Extruder') }}</option> 38 <option value="fcp">{{ _('FlashForge Creator Pro') }}</option> 39 <option value="t6">{{ _('TOM Mk6 - single extruder') }}</option> 40 <option value="t7">{{ _('TOM Mk7 - single extruder') }}</option> 41 <option value="r1">{{ _('Replicator 1 - single extruder') }}</option> 42 <option value="r1d">{{ _('Replicator 1 - dual extruder') }}</option> 43 <option value="r2">{{ _('Replicator 2 (default)') }}</option> 44 <option value="r2h">{{ _('Replicator 2 with HBP') }}</option> 45 <option value="r2x">{{ _('Replicator 2X') }}</option> 46 <option value="z">{{ _('ZYYX - single extruder') }}</option> 47 <option value="zd">{{ _('ZYYX - dual extruder') }}</option> 48 </select> 49 <button class="btn" data-bind="click: showMachineDialog">{{ _('Edit Machine Definition...') }}</button> 50 </div> 51 </div> 52 <div class="control-group"> 53 <label class="control-label">{{ _('Pause after connection:') }}</label> 54 <div class="controls" data-toggle="tooltip" title="{{ _('Some printers need a little more time to get sorted before GPX starts peppering it with questions. The default delay is 2 seconds.') }}"> 55 <div class="input-append"> 56 <input type="number" step="1" class="input-mini text-right" data-bind="value: settings.plugins.GPX.connection_pause"> 57 <span class="add-on">secs</span> 58 </div> 59 </div> 60 </div> 61 <div class="control-group" data-toggle="tooltip" title="{{ _('EEPROM settings are onboard preferences stored in non-volatile memory in the printer. Before changing these settings, you should back them up to an SD card using the LCD menu.') }}"> 62 <div class="controls"> 63 <button class="btn" data-bind="enable: isOperational(), click: showEepromDialog">{{ _('EEPROM Settings...') }}</button> 64 </div> 65 </div> 66 </fieldset> 67 <fieldset> 68 <legend>Print Settings</legend> 69 <div class="control-group"> 70 <label class="control-label">{{ _('Gcode flavor:') }}</label> 71 <div class="controls" data-toggle="tooltip" title="{{ _('Indicates what flavor of gcode the slicer generated for uploaded gcode files. Reprap flavor recommended.') }}"> 72 <select data-bind="value: ini.printer.gcode_flavor"> 73 <option value="reprap">{{ _('RepRap') }}</option> 74 <option value="makerbot">{{ _('MakerBot') }}</option> 75 </select> 76 </div> 77 </div> 78 <div class="control-group"> 79 <label class="control-label">{{ _('Recalc build progress:') }}</label> 80 <div class="controls" data-toggle="tooltip" title="{{ _('Instruct GPX to recompute and replace the slicer\'s build progress reporting in gcode files') }}"> 81 <select class="select-mini" data-bind="value: ini.printer.build_progress"> 82 <option value=undefined>{{ _('') }}</option> 83 <option value=0>{{ _('No') }}</option> 84 <option value=1>{{ _('Yes') }}</option> 85 </select> 86 </div> 87 </div> 88 <div class="control-group"> 89 <label class="control-label">{{ _('Ditto printing:') }}</label> 90 <div class="controls" data-toggle="tooltip" title="{{ _('Include both extruders in the commands so that two prints occur simultaneously, one extruder offset apart.') }}"> 91 <select class="select-mini" data-bind="value: ini.printer.ditto_printing"> 92 <option value=undefined>{{ _('') }}</option> 93 <option value=0>{{ _('No') }}</option> 94 <option value=1>{{ _('Yes') }}</option> 95 </select> 96 </div> 97 </div> 98 <div class="control-group"> 99 <label class="control-label">{{ _('Nominal filament width:') }}</label> 100 <div class="controls" data-toggle="tooltip" title="{{ _('Filament diameter used by the slicer when generating the gcode. GPX scales the extrusion to compensate for differences between nominal and actual diameter so you can avoid reslicing for different filaments. Leave at 0 to just use extrusion as specified in the gcode.') }}"> 101 <div class="input-append"> 102 <input type="number" step="0.01" class="input-mini text-right" data-bind="value: ini.printer.nominal_filament_diameter"> 103 <span class="add-on">mm</span> 104 </div> 105 </div> 106 </div> 107 <!-- TODO move to per extruder --> 108 <div class="control-group"> 109 <label class="control-label">{{ _('Actual filament width:') }}</label> 110 <div class="controls" data-toggle="tooltip" title="{{ _('Actual diameter of the incoming filament. Measure using calipers in three spots and average them together. Set to 0 to use the extrusion amounts from the gcode without adjustment.') }}"> 111 <div class="input-append"> 112 <input type="number" step="0.01" class="input-mini text-right" data-bind="value: ini.machine.actual_filament_diameter"> 113 <span class="add-on">mm</span> 114 </div> 115 </div> 116 </div> 117 <div class="control-group"> 118 <label class="control-label">{{ _('Recalculate extrusion:') }}</label> 119 <div class="controls" data-toggle="tooltip" title="{{ _('Recalculate and override the slicers extrusion amounts using actual and nominal filament diameters combined with packing density') }}"> 120 <select class="select-mini" data-bind="value: ini.printer.recalculate_5d"> 121 <option value=undefined>{{ _('') }}</option> 122 <option value=0>{{ _('No') }}</option> 123 <option value=1>{{ _('Yes') }}</option> 124 </select> 125 </div> 126 </div> 127 <div class="control-group"> 128 <label class="control-label">{{ _('Packing density:') }}</label> 129 <div class="controls" data-toggle="tooltip"> 130 <div class="input"> 131 <input type="number" step="0.01" class="input-mini text-right" data-bind="value: ini.printer.packing_density"> 132 </div> 133 </div> 134 </div> 135 </fieldset> 136 </form> 137 138 <div id="gpx_machine_settings" class="modal hide fade"> 139 <div class="modal-header"> 140 <a href="#" class="close" data-dismiss="modal" aria-hidden="true">×</a> 141 <h3>{{ _('Edit Machine Settings') }}</h3> 142 </div> 143 <div class="modal-body"> 144 <form class="form-horizontal"> 145 <div class="control-group"> 146 <label class="control-label">{{ _('Nozzle diameter:') }}</label> 147 <div class="controls"> 148 <div class="input-append"> 149 <input type="number" step="0.01" class="input-mini text-right" data-bind="value: machine.machine.nozzle_diameter"> 150 <span class="add-on">mm</span> 151 </div> 152 </div> 153 </div> 154 <table> 155 <thead> 156 <th class="label-column"></th> 157 <th>X</th> 158 <th>Y</th> 159 <th>Z</th> 160 <th>A</th> 161 <th>B</th> 162 </thead> 163 <tr data-toggle="tooltip" data-placement="bottom" title="{{ _('GPX will clip feedrates specified by the gcode above this value. Units are mm per min.') }}"> 164 <td class="label-column text-right">{{ _('Max Feedrate:') }}</td> 165 <td><input type="number" step="1" class="input-mini text-right" data-bind="value: machine.x.max_feedrate"></td> 166 <td><input type="number" step="1" class="input-mini text-right" data-bind="value: machine.y.max_feedrate"></td> 167 <td><input type="number" step="1" class="input-mini text-right" data-bind="value: machine.z.max_feedrate"></td> 168 <td><input type="number" step="1" class="input-mini text-right" data-bind="value: machine.a.max_feedrate"></td> 169 <td><input type="number" step="1" class="input-mini text-right" data-bind="value: machine.b.max_feedrate"></td> 170 </tr> 171 <tr data-toggle="tooltip" data-placement="bottom" title="{{ _('Travel rate when executing homing (G28 G161 G162) gcodes.') }}"> 172 <td class="label-column text-right">{{ _('Home Feedrate:') }}</td> 173 <td><input type="number" step="1" class="input-mini text-right" data-bind="value: machine.x.home_feedrate"></td> 174 <td><input type="number" step="1" class="input-mini text-right" data-bind="value: machine.y.home_feedrate"></td> 175 <td><input type="number" step="1" class="input-mini text-right" data-bind="value: machine.z.home_feedrate"></td> 176 <td style="text-align: center">N/A</td> 177 <td style="text-align: center">N/A</td> 178 </tr> 179 <tr data-toggle="tooltip" data-placement="bottom" title="{{ _('Steps on the stepper motor per mm of linear travel along the axis.') }}"> 180 <td class="label-column text-right">{{ _('Steps per mm:') }}</td> 181 <td><input type="number" step="0.000001" class="input-mini text-right no-spinner" data-bind="value: machine.x.steps_per_mm"></td> 182 <td><input type="number" step="0.000001" class="input-mini text-right no-spinner" data-bind="value: machine.y.steps_per_mm"></td> 183 <td><input type="number" step="0.000001" class="input-mini text-right no-spinner" data-bind="value: machine.z.steps_per_mm"></td> 184 <td><input type="number" step="0.000001" class="input-mini text-right no-spinner" data-bind="value: machine.a.steps_per_mm"></td> 185 <td><input type="number" step="0.000001" class="input-mini text-right no-spinner" data-bind="value: machine.b.steps_per_mm"></td> 186 </tr> 187 <tr data-toggle="tooltip" data-placement="top" title="{{ _('Direction of home on the axis. Maximum or minimum end of the axis.') }}"> 188 <td class="label-column text-right">{{ _('Home:') }}</td> 189 <td><select class="select-mini" data-bind="value: machine.x.endstop"> 190 <option value="undefined">{{ _('') }}</option> 191 <option value="0">{{ _('Min') }}</option> 192 <option value="1">{{ _('Max') }}</option> 193 </select></td> 194 <td><select class="select-mini" data-bind="value: machine.y.endstop"> 195 <option value="undefined">{{ _('') }}</option> 196 <option value="0">{{ _('Min') }}</option> 197 <option value="1">{{ _('Max') }}</option> 198 </select></td> 199 <td><select class="select-mini" data-bind="value: machine.z.endstop"> 200 <option value="undefined">{{ _('') }}</option> 201 <option value="0">{{ _('Min') }}</option> 202 <option value="1">{{ _('Max') }}</option> 203 </select></td> 204 <td style="text-align: center">N/A</td> 205 <td style="text-align: center">N/A</td> 206 </tr> 207 </table> 208 </form> 209 </div> 210 <div class="modal-footer"> 211 <button class="btn pull-left" data-bind="click: requestMachineDefaults">{{ _('Reset to default') }}</button> 212 <button class="btn" data-dismiss="modal" aria-hidden="true">{{ _('Cancel') }}</button> 213 <button class="btn btn-primary" data-bind="click: saveMachineSettings">{{ _('Save') }}</button> 214 </div> 215 </div> 216 217 {% macro gpx_checkbox(bind, label, tooltip='') -%} 218 <div class="controls" data-toggle="tooltip" title="{{ tooltip }}"> 219 <label class="checkbox"> 220 <input type="checkbox" data-bind="checked: {{ bind }}" />{{ label }} 221 </label> 222 </div> 223 {%- endmacro %} 224 225 {% macro gpx_input(bind, step, min, max) -%} 226 {% if min == max %} 227 <input type="number" step="{{step}}" class="input text-right" data-bind="value: {{ bind }}"> 228 {% else %} 229 <input type="number" step="{{step}}" min="{{min}}" max="{{max}}" class="input text-right" data-bind="value: {{ bind }}"> 230 {% endif %} 231 {%- endmacro %} 232 233 {% macro gpx_spinner(bind, step, min, max, label, tooltip='') -%} 234 <div class="control-group"> 235 <label class="control-label">{{ label }}</label> 236 <div class="controls" data-toggle="tooltip" title="{{ tooltip }}"> 237 {{ gpx_input(bind, step, min, max) }} 238 </div> 239 </div> 240 {%- endmacro %} 241 242 {% macro gpx_spinner_unit(bind, unit, step, min, max, label, tooltip='') -%} 243 <div class="control-group"> 244 <label class="control-label">{{ label }}</label> 245 <div class="controls" data-toggle="tooltip" title="{{ tooltip }}"> 246 <div class="input-append"> 247 {{ gpx_input(bind, step, min, max) }} 248 <span class="add-on">{{ unit }}</span> 249 </div> 250 </div> 251 </div> 252 {%- endmacro %} 253 254 {% macro gpx_axis_suffix(axis) -%} 255 {% if axis == 'A' %}{{ _(' (Right)') }}{% elif axis == 'B' %}{{ _(' (Left)') }}{% endif %} 256 {%- endmacro %} 257 258 <div id="gpx_eeprom_settings" class="modal hide fade"> 259 <div class="modal-header"> 260 <a href="#" class="close" data-dismiss="modal" aria-hidden="true">×</a> 261 <h3>{{ _('EEPROM Settings') }}</h3> 262 </div> 263 <div class="modal-body tabbable row-fluid"> 264 <div class="alert alert-error"> 265 {{ _('EEPROM settings are still an experimental feature of GPX. It is highly recommended that you backup your eeprom via the LCD panel before clicking save on this box.') }} 266 </div> 267 <div class="span3" id="gpx_eeprom_menu"> 268 <ul class="nav nav-list" id="gpx_eeprom_tabs"> 269 <li id="gpx_eeprom_misc_link" class="active"><a href="#gpx_eeprom_misc" data-toggle="tab">{{ _('Installed Equipment') }}</a> 270 <li id="gpx_eeprom_axes_link"><a href="#gpx_eeprom_axes" data-toggle="tab">{{ _('Axes') }}</a> 271 <li id="gpx_eeprom_endstops_link"><a href="#gpx_eeprom_endstops" data-toggle="tab">{{ _('Endstops') }}</a> 272 <li id="gpx_eeprom_homing_link"><a href="#gpx_eeprom_homing" data-toggle="tab">{{ _('Homing') }}</a> 273 <li id="gpx_eeprom_homing_link"><a href="#gpx_eeprom_digipot" data-toggle="tab">{{ _('Digipots') }}</a> 274 <li id="gpx_eeprom_accel_link"><a href="#gpx_eeprom_accel" data-toggle="tab">{{ _('Acceleration') }}</a> 275 <li id="gpx_eeprom_accel2_link"><a href="#gpx_eeprom_accel2" data-toggle="tab">{{ _('More Acceleration') }}</a> 276 <li id="gpx_eeprom_features_link"><a href="#gpx_eeprom_features" data-toggle="tab">{{ _('Firmware Features') }}</a> 277 <li id="gpx_eeprom_fans_link"><a href="#gpx_eeprom_fans" data-toggle="tab">{{ _('Fans') }}</a> 278 <li id="gpx_eeprom_heaters_link"><a href="#gpx_eeprom_heaters" data-toggle="tab">{{ _('Heaters') }}</a> 279 </ul> 280 </div> 281 <div class="tab-content span8 form-horizontal"> 282 <div id="gpx_eeprom_misc" class="tab-pane active"> 283 {{ gpx_spinner('eeprom.TOOL_COUNT', 1, 1, 2, _('Number of extruders')) }} 284 {{ gpx_checkbox('eeprom.HBP_PRESENT', _('Heated build platform'), _('Indicates to the firmware whether there is a platform heater to control')) }} 285 {{ gpx_checkbox('eeprom.PSTOP_ENABLE', _('Pause stop switch installed'), _("When checked, enable Sailfish's Pause Stop (P-Stop) switch detection mechanism. Pauses prints on an external electrical signal")) }} 286 {{ gpx_checkbox('eeprom.CLEAR_FOR_ESTOP', _('Clear build on emergency stop'), _('By default, when the printer receives an abort, cancel or stop command over USB it treats it as an emergency and stops immediately. With this setting on, it will move build away from the nozzle first.')) }} 287 </div> 288 <div id="gpx_eeprom_axes" class="tab-pane"> 289 <div class="control-group"> 290 {{ gpx_checkbox('z_hold', _('Hold Z axis'), _("If Z hold is on, the firmware will keep power to the Z stepper even when it isn't moving to hold it in place")) }} 291 {% set axes = "XYZAB" %} 292 {% for axis in axes %} 293 {% set axis_name = axis + ' axis' + gpx_axis_suffix(axis) %} 294 {{ gpx_checkbox('invert_axis.' + axis, _('Invert {}').format(axis_name), _('If an axis is moving in the wrong direction, toggle that axis')) }} 295 {% endfor %} 296 </div> 297 </div> 298 <div id="gpx_eeprom_endstops" class="tab-pane"> 299 <div class="control-group"> 300 {% for axis in axes %} 301 {% set axis_name = axis + ' axis' + gpx_axis_suffix(axis) %} 302 {{ gpx_checkbox('invert_endstop.' + axis, _('Invert {} endstop').format(axis_name), _("Default is for an endstop switch to close (pull low) when triggered (inverted). If you've replaced the endstops for normally closed ones (perhaps optical), clear the invert endstop box.")) }} 303 {% endfor %} 304 </div> 305 </div> 306 <div id="gpx_eeprom_homing" class="tab-pane"> 307 {% for axis in axes %} 308 {{ gpx_spinner_unit('home.' + axis, _('mm'), 0.1, 0, 0, _('{} home offset').format(axis), _('When all axes are in the home position [against their endstops], the home offset is the distance of the right nozzle from the center of the built platform.')) }} 309 {% endfor %} 310 {% for axis in "XY" %} 311 {{ gpx_spinner_unit('toolhead_offset.' + axis, _('mm'), 0.1, 0, 0, _('{} toolhead offset').format(axis), _('The toolhead offset is the distance between the nozzles on a dual nozzle printer.')) }} 312 {% endfor %} 313 </div> 314 <div id="gpx_eeprom_digipot" class="tab-pane"> 315 <div class="control-group"> 316 {% for pot in range(5) %} 317 {{ gpx_spinner('eeprom.DIGI_POT_SETTINGS_%s' % pot, 1, 0, 118, _('Digital potentiometer {}').format(pot), _('Digipots are used to set the voltage level and thus the current driving the steppers.')) }} 318 {% endfor %} 319 </div> 320 </div> 321 <div id="gpx_eeprom_accel" class="tab-pane"> 322 {{ gpx_checkbox('eeprom.ACCELERATION_ACTIVE', _('Acceleration enabled'), _('Check to use acceleration. Note you must turn acceleration on to print safely at speeds over 50mm/s.')) }} 323 {% for axis in axes %} 324 {{ gpx_spinner_unit('eeprom.MAX_ACCELERATION_AXIS_' + axis, _('mm/s²'), 1, 0, 10000, _('{} max acceleration').format(axis), _('The maximum acceleration and deceleration along the axis.')) }} 325 {% endfor %} 326 </div> 327 <div id="gpx_eeprom_accel2" class="tab-pane"> 328 {% for axis in axes %} 329 {{ gpx_spinner_unit('eeprom.MAX_SPEED_CHANGE_' + axis, _('mm/s'), 1, 0, 300, _('{} max speed change').format(axis), _('Maximum commanded instantaneous speed change.')) }} 330 {% endfor %} 331 {{ gpx_spinner('jkn_k', 0.001, 0, 1, _('JKN Advance K'), _('JKN is the Jetty-Kubicek-Newman Advance algorithm. The K parameter is an emperical fit value that helps control the amount of additional plastic that should be extruded during acceleration and retained during deceleration. It can remove blobbing and splaying on the corners or at junctions. Typical values for K range from 0.0001 to 0.01. Set to 0 to disable the use of this compensation.')) }} 332 {{ gpx_spinner('jkn_k2', 0.001, 0, 1, _('JKN Advance K2'), _('Jetty-Kubicek-Newman Advance parameter K2 helps during the deceleration phase of moves to reduce the built up pressure in the extruder nozzle. Typical values for this parameter range from around 0.001 to 0.1. Set to 0 to disable use of this compensation.')) }} 333 </div> 334 <div id="gpx_eeprom_features" class="tab-pane"> 335 {{ gpx_checkbox('eeprom.SLOWDOWN_FLAG', _('Slow printing when acceleration planning falls behind'), _('Check to enable automatic print slowdown when the queue of planned segments is running low.')) }} 336 {{ gpx_checkbox('eeprom.OVERRIDE_GCODE_TEMP', _('Override gcode target temperatures'), _('If override gcode temperature is on, it replaces any non-zero target temperature with the corresponding preheat temperature setting.')) }} 337 {{ gpx_checkbox('eeprom.HEAT_DURING_PAUSE', _('Heat during pause'), _('Check to leave the heaters on for up to 30 minutes while the bot is paused. Uncheck to turn off the heaters whenever the bot is paused.')) }} 338 {{ gpx_checkbox('eeprom.SD_USE_CRC', _('SD error checking'), _('If this is checked, the firmware will do a checksum on reads from the SD card to make sure it got correct information. It will retry five times. If all five attempts fail, it will cancel the print and display an error. With this clear, the error will go undetected and may ruin your print. NOTE that Replicator 1 is particularly susceptible to data transfer errors due to their electronics design.')) }} 339 {{ gpx_checkbox('eeprom.EXTRUDER_HOLD', _('Extruder hold'), _('With this checked, the firmware will keep power to the extruder motor to hold it in place while not extruding. With the checkbox clear, the filament can move on its own either due to gravity or tension from moving the extruder around.')) }} 340 {{ gpx_checkbox('eeprom.EXTRUDER_DEPRIME_ON_TRAVEL', _('Deprime on travel moves'), _('The bot deprimes (retracts filament) on commanded pauses and brief pauses caused by having the acceleration planner get behind. If deprime on travel is checked, it also deprimes when it detects a move without extrusion. If your slicer does that for you, turn this setting off. To entirely disable firmware deprime, set the deprime steps for the extruders to 0.')) }} 341 {{ gpx_spinner_unit('eeprom.EXTRUDER_DEPRIME_STEPS_A', _('steps'), 1, 0, 65535, _('Right (A) extruder deprime distance'), _('When the firmware does an automatic retraction/deprime on the right extruder, it will retract this many steps.')) }} 342 {{ gpx_spinner_unit('eeprom.EXTRUDER_DEPRIME_STEPS_B', _('steps'), 1, 0, 65535, _('Left (B) extruder deprime distance'), _('When the firmware does an automatic retraction/deprime on the left extruder, it will retract this many steps.')) }} 343 {{ gpx_spinner_unit('eeprom.ALEVEL_MAX_ZPROBE_HITS', _('hits'), 0.1, 0, 200, _('Auto-level max Z probe hits'), _('If the auto-leveling probe registers too many hits during a print, the bot will pause printing and request manual intervention. To ignore probe hits while printing, specify a value of zero. The default value is 20. Only applies on bots with firmware-based auto-levelling and an auto-level probe installed.')) }} 344 {{ gpx_spinner_unit('max_zdelta', _('mm'), 1, 0, 0, _('Auto-level max height difference'), _('Maximum vertical difference between any two probed leveling points. Default is 0.5mm.')) }} 345 </div> 346 <div id="gpx_eeprom_fans" class="tab-pane"> 347 {{ gpx_checkbox('eeprom.T0_COOLING_ENABLE', _('Enable right (A) extruder heatsink fan'), _('You basically want to leave this enabled since it helps avoid heat creep up the filament making jams and increasing the wear on your extruder.')) }} 348 {{ gpx_spinner_unit('eeprom.T0_COOLING_SETPOINT_C', _('C'), 1, 0, 300, _('Right (A) heatsink fan setpoint'), _('When the extruder temperature is greater than the setpoint, the heatsink fan is turned on. Default is 50C.')) }} 349 {{ gpx_checkbox('eeprom.T1_COOLING_ENABLE', _('Enable left (B) extruder heatsink fan'), _('You basically want to leave this enabled since it helps avoid heat creep up the filament making jams and increasing the wear on your extruder.')) }} 350 {{ gpx_spinner_unit('eeprom.T1_COOLING_SETPOINT_C', _('C'), 1, 0, 300, _('Left (B) heatsink fan setpoint'), _('When the extruder temperature is greater than the setpoint, the heatsink fan is turned on. Default is 50C.')) }} 351 <div data-bind="visible:show_fan_pwm"> 352 {{ gpx_spinner_unit('eeprom.COOLING_FAN_DUTY_CYCLE', _('%%'), 1, 0, 100, _('Filament cooling fan duty cycle'), _('Only in Sailfish 7.8 or later for CoreXY and CloneR1. Set the blower fan strength (duty cycle) when it is activated by the print commands. Set this value from off (0%%) to full on (100%%) or anywhere between.')) }} 353 </div> 354 </div> 355 <div id="gpx_eeprom_heaters" class="tab-pane" data-toggle="tooltip" title="{{ _('These are the parameters to the proportional-integral-derivative controller for the hotends') }}"> 356 <div class="well"> 357 <legend>{{ _('Right (A) extruder PID values') }}</legend> 358 {% for term in "PID" %} 359 {{ gpx_spinner('eeprom.T0_EXTRUDER_{}_TERM'.format(term), 0.01, 0, 0, _('{} parameter'.format(term))) }} 360 {% endfor %} 361 </div> 362 <div class="well"> 363 <legend>{{ _('Left (B) extruder PID values') }}</legend> 364 {% for term in "PID" %} 365 {{ gpx_spinner('eeprom.T1_EXTRUDER_{}_TERM'.format(term), 0.01, 0, 0, _('{} parameter'.format(term))) }} 366 {% endfor %} 367 </div> 368 <div class="well"> 369 <legend>{{ _('Heated build platform PID values') }}</legend> 370 {% for term in "PID" %} 371 {{ gpx_spinner('eeprom.HBP_{}_TERM'.format(term), 0.01, 0, 0, _('{} parameter'.format(term))) }} 372 {% endfor %} 373 </div> 374 </div> 375 </div> 376 </div> 377 <div class="modal-footer"> 378 <button class="btn" data-dismiss="modal">{{ _('Cancel') }}</button> 379 <button class="btn" data-bind="css: { 'btn-primary': !is_saving(), 'btn-warning': is_saving() }, enable: !is_saving(), click: saveEepromSettings">{{ _('Save') }}</button> 380 </div> 381 </div>