Skip to content

Version 3.7.0

Latest

Choose a tag to compare

@chrishamm chrishamm released this 08 Oct 16:02

Compatible versions:

  • DuetSoftwareFramework 3.7.0
  • RepRapFirmware 3.7.0

New features:

  • Completely rewritten on Vue 3, Vuetify 4, Pinia, Vue Router 5 and Vite (replacing the Vue 2 / Vuetify 2 / Vuex / Vue CLI stack)
  • DWC now ships with a service worker that caches the app and auto-updates after a redeploy
  • All panels are now customisable, with per-component settings persisted across sessions
  • File Explorer and Monaco editor are now tabbed and routable, with a multi-volume URL scheme (/Explorer/[tab]/[volume]/[path]), deep-linking via ?path=, back/forward directory history and auto/list/tiles view modes
  • Added recursion support to various file explorer commands
  • Added right-click context menus, ZIP download of folders and automatic ZIP extraction on upload
  • Added thumbnail, G-code stream and embedded G-code viewer to the Job Status page
  • Codes and object model fields can be looked up by pressing F4 or the corresponding lookup button
  • Added hover info to G-codes, G-code parameters and object model values
  • Added firmware install and DWC self-update from the Infrastructure settings tab, including SSL certificate (.crt/.key) upload; .deb upload is gated to SBC mode
  • Added a plugin install wizard with manifest and permission preview, triggered by uploading a plugin ZIP
  • Made the main navigation menu resizable
  • Added MCU temperature and free RAM columns to the Boards table
  • Chart data can be downloaded and custom values can be displayed, with hover info and units in the temperature chart
  • Added a Run button to the file editor that saves the file and executes it via M98 (#493)
  • Added editor options to display spaces and tabs (#479) and to replace tabs with spaces on save with a configurable number of spaces (thanks jaysuk)
  • Added back the indent comments feature
  • Added "Copy Path" to the file list context menu (thanks jaysuk)
  • Added a delete option to the macro list context menu
  • Added Duplicate to the context menu of the filaments directory, which copies the files of a filament to a new one
  • New Directory creates a filament with empty load.g, config.g and unload.g when it is used in the filaments directory
  • Added global "Numeric inputs" and "Lockable sliders" settings to Settings -> Behaviour, the latter offering Always, Only on mobile and Disabled
  • Added a setting to define when the config.g reset prompt is shown
  • Added a setting to scroll panels into view on scroll and another to further control the auto-scroll behaviour
  • Added an optional power button to the Tools panel that turns off every heater which is not off yet
  • Added shutdown and reboot buttons to Settings -> About in SBC mode (#480)
  • Added a copy button to event log entries
  • Added middle-click support to tabs and tab rearranging via drag and drop
  • Added more move steps for xl/xxl breakpoints (#481)
  • Extrusion factors can now be set with one decimal (#486)
  • Truncated message content is now displayed in notifications (#503)
  • Firmware and DSF updates keep the updating status across the connection loss they cause and report start and completion in the event log
  • The connection dialog shows the SBC upgrade progress and message (M997 S2)
  • The Settings page restores the tab that was used last
  • Added a button to return to the device list when running inside the FindMyDuet app
  • Added the measured force in grams of load cell probes to the status panel, with the raw readings moved into the tooltip
  • Probe trigger highlighting uses the reported force where there is one, and negative probe thresholds are supported
  • The object model browser can request verbose fields, and obsolete fields whenever a deprecated node is selected
  • Added links to URLs in the object model browser documentation
  • Added a Motor Analysis tab to the input shaping plugin that records constant-speed moves per motor and analyzes vibrations at multiples of the full-step frequency, with per-run summaries, findings, a speed sweep view and a configurable chart and table summary
  • Added a Record Motor Profile wizard that derives motor-isolating moves from the core kinematics matrices and records them once per configured speed
  • Added a Tune Motor dialog that minimizes the vibration harmonics of a motor, via M970.3 in phase stepping mode or the driver's sine table (M569.2) in step/dir mode, for local and CAN-connected drivers alike and for drivers in closed loop and assisted open loop mode
  • Merged the Current Settings tab and the input shapers panel into the Input Shaping tab, which shows the current shaper response while no profile is selected
  • Multi-file analysis in the input shaping plugin handles recordings with different sample rates and lengths, and axis names come from the recorded file
  • Updated the G-code documentation and the editor's knowledge of it (M575 F, M915 alternatives, M601, the M950 T and K values, and no longer M301, M304 and M573)

G-code viewer:

  • Ported to the @duet3d/gcodeviewer library, which renders the Babylon scene in a web worker via OffscreenCanvas
  • Split the configuration into one sidebar per category (View, Colors, Quality, Inspection and Settings), each with its own button
  • Added support for belt printers with a selectable gantry angle
  • Added an option to treat G1 without an extrusion parameter as cutting for CNC and laser files
  • Added workplace origin markers for files that set offsets with G10 L2 or G10 L20
  • Added a configurable feed rate range with its own gradient colours
  • Added specular highlighting and high quality rendering with an optional nozzle diameter override
  • Added a tool marker that follows the reported axis positions while a job is being followed
  • Added trail colour and duration settings for freshly printed segments
  • Added a ruler with millimetre tick labels along the bed edges and a configurable interval
  • Added a highlight for the line currently being executed in the G-code stream
  • Added buttons to add and remove extruder colours and to reset every viewer setting
  • The camera follows the print upwards while it is in its default position, so tall objects do not grow out of frame
  • The viewer and the G-code stream follow the executed file position, so neither runs ahead of the print any more
  • Unprinted geometry is hidden by default and uses progress mode at 5% opacity when shown
  • Tool colours follow the heater colours and start with four extruders
  • Changed the simulation speed steps to 1x, 10x, 50x, 100x, 500x and 1000x
  • Playback controls are disabled in the embedded viewer, the dedicated page owns playback
  • The render loop is suspended while the viewer is hidden, and the job view keeps its tabs alive instead of reloading the job on every switch
  • Every viewer setting is stored in the plugin cache

Plugins and architecture:

  • Extracted the backend communication layer into the standalone @duet3d/connectors package
  • Reimplemented the G-Code Viewer, Height Map, Input Shaping and Object Model browser as built-in plugins
  • Rewritten plugin API exposed via window.DWC (now including window.DWC.version and a shared event bus) to make version dependencies less critical
  • Plugins can now register settings tabs (registerSettingTab), Job View tabs (registerJobViewTab), context-menu items, embeddable components, custom layouts (registerLayout) and themes (registerTheme)
  • Added registerModelPatch and patchModel so plugins can augment incoming object model updates
  • Added registerCodeInterceptor so plugins can rewrite or answer codes sent by DWC
  • Externalized the Vuetify composables so external plugins can use them
  • Standalone plugin builds install missing dependencies declared in the plugin package.json and remove them again afterwards; in-tree plugins report the missing packages instead
  • Stable builds ship their sourcemaps as DuetWebControl-srcmaps.zip and plugin builds as <id>-<version>-srcmap.zip, with scripts/resolve-stack.js to decode minified stack traces offline
  • Documented the new plugin hooks, npm dependencies and sourcemap handling in PLUGINS.md
  • Updated the Duet3D packages to 3.7.0 and monaco-editor-core to 0.57
  • Releases ship a CycloneDX software BOM as DuetWebControl-sbom.json, written by npm run sbom

Changed behaviour:

  • The G-code viewer loads the file for rendering while the job status follows the progress
  • Moved the machine and software overview from Settings -> Machine-Specific to the renamed Infrastructure tab
  • Migrated various global settings to panel and component-specific settings and cleaned up obsolete ones (#481), and removed the per-panel numeric input and lockable slider settings in favour of the global ones
  • Settings and cache now use schema-versioned upgrade chains and a cross-session three-way merge, so concurrent sessions or devices no longer overwrite each other's changes
  • Object model key queries are applied as authoritative updates, so values missing from a response are reset to null
  • The firmware installer looks up IAP and WiFi binaries on the mainboard instead of scanning every board
  • WiFi server and PanelDue binaries as well as the DSF and DWC update bundles are recognised when the browser renamed the download, and dsf-update-*.zip bundles are handed to the plugin service like dsf-update.zip
  • .crt and .key are supported system files in standalone mode, and config.g and system paths are recognised in the default system directory as well as in the one reported by the machine
  • The turn-everything-off button stops running spindles as well and is hidden instead of disabled when it cannot be used
  • Axis jog buttons are disabled when the axis is at its limits
  • SBC reboot and shutdown buttons are disabled while a print is active
  • Renaming or deleting a loaded filament asks for confirmation because its unload macro is no longer found afterwards
  • Job status columns are capped to the page height, so a tall column scrolls instead of stretching the G-code viewer past the viewport
  • Open files with equal filenames show their parent directory in a pill
  • Layer chart tooltips trigger anywhere above a layer instead of only on the data point
  • Sending M999 or M999 B-1 no longer raises an error notification because the resulting disconnect is expected
  • M292 no longer waits for G-code replies
  • The first HTTP retry after a 503 response waits like the following ones, and the default retry delay is 100 ms instead of 200 ms
  • Failed loads of lazily loaded UI parts are reported as an error notification, and a failed editor setup is retried the next time an editor opens
  • The recording dialogs of the input shaping plugin list the accelerometers from sensors.accelerometers by their M955 number and board, and the sampling rate is taken from the object model instead of querying M955

Bug fixes:

  • Filament changes only unloaded the old filament, because RRF discards codes that arrive while a message box is waiting to be acknowledged
  • Thumbnails and file info were not updated after a file had been overwritten via the RRF API (#488)
  • The temperature chart threw when a heater or sensor disappeared from the object model, stranding the reconnect after an emergency stop or firmware update
  • Custom values were not applied when confirming temperature and spindle inputs, and preset values were applied while typing
  • Version checks did not handle prerelease suffixes
  • Failed firmware uploads reported the wrong error message
  • The printing file position jumped ahead of the code being executed
  • DuetScreen.bin was offered as a PanelDue firmware update although a DuetScreen is updated from its own SD card
  • The firmware install file picker returned an empty file list in Chromium-based browsers, so the upload never started (PR #518)
  • Freshly written accelerometer files could be downloaded without their trailer in SBC mode
  • Accelerometer recordings in the input shaping plugin passed a board address to M956 P instead of the accelerometer number RRF 3.7 expects
  • The centre frequency field of the input shaping plugin accepted 10-1000 Hz instead of the 4-400 Hz M593 F allows, and rejected fractional values
  • Motor profile directions and step factors were wrong on core kinematics whose matrix is not symmetric, such as markForged and CoreXZ
  • Buttons that send a code showed neither its reply nor its error, so a failed homing attempt from the Movement panel reported nothing
  • The WiFi server version was listed on boards that report a disabled WiFi interface without a module fitted, like an MB6HC v1.02 or later
  • Dialogs opened and closed in a background tab flashed up when it was reactivated
  • The skip keyword was upper-cased in the code input
  • Plugin route overrides could not be keyed on the Explorer and Jobs catch-all paths because the generated router typings spelled them differently than the router records (#520)
  • Fixed chamber heater control
  • Fixed some features outside secure contexts

DuetWebControl-srcmaps.zip is only meant for debugging. Use DuetWebControl-SD.zip when updating boards in standalone mode.