RepRapFirmware 3.01beta1 released


  • administrators

    I'm excited to announce the first release of RRF with support for conditions, loops and parameter substitution with GCode and macro files. Get it at https://github.com/dc42/RepRapFirmware/releases/tag/3.01-beta1. Read the upgrade notes before you upgrade!

    The new commands are described at https://duet3d.dozuki.com/Wiki/GCode_Meta_Commands and the associated object model at https://duet3d.dozuki.com/Wiki/Object_Model_of_RepRapFirmware.



  • That iterations is the built in variable in the loop is clear from the example, but not so clear from the Programming Constructs section imo.

    Awesome work, look forward to playing with this!



  • @dc42

    I just upgraded to this on my Duet Ethernet and I thought my board suddenly broke.
    The extruder fan stays permanently on, I cant move any axis because I get this:
    Screenshot (7).png



  • Thanks @dc42 this is fantastic. I think a new section in the forum like "Interesting Meta Command Macros" would be very useful.



  • Can't wait to start playing!



  • @dc42

    Found a problem with my config and everything is now working.
    Great work!



  • Just a note for anyone playing with macros in browser. DWC 2.0.4 has a bug with tab spaces. The 2.0.5 update fixes that.

    https://github.com/chrishamm/DuetWebControl/releases/tag/2.0.5



  • Great work @dc42 This is going to be so helpful! Can’t wait to start using it!



  • I have a Duet Wifi 2 and I've been trying to access Initial Deviation in the Object Model.

    If I execute the following line from the console:

    echo "Initial Deviation", move.initialDeviation.deviation ^ "mm"
    I get an error:
    echo "Initial Deviation",move.initialDeviation.deviation ^ "mm"
    Error: while executing command: unknown value initialDeviation.deviation

    echo "Calibration Deviation", move.calibration.deviation ^ "mm"
    responds:
    echo "Calibration Deviation", move.calibrationDeviation.deviation ^ "mm"
    Calibration Deviation 0.000mm

    M409 shows
    {"key":"","flags":"","result":{"boards":[{"firmwareFileName":"Duet2CombinedFirmware.bin","firmwareVersion":"3.01-beta1","iapFileNameSD":"Duet2CombinedIAP.bin","mcuTemp":{"current":40.4,"max":44.6,"min":39.9},"name":"Duet 2 WiFi","shortName":"2WiFi","vIn":{"current":24.0,"max":24.4,"min":0.5}}],"heat":{"coldExtrudeTemperature":160.0,"coldRetractTemperature":90.0,"heaters":[{"current":26.7,"sensor":0,"state":"Off"},{"current":27.1,"sensor":1,"state":"Active"}],"sensors":[{"lastReading":26.7,"name":"","type":"Thermistor"},{"lastReading":27.1,"name":"","type":"Thermistor"}]},"job":{"file":{"filament":[],"firstLayerHeight":0.0,"generatedBy":"","height":0.0,"lastModified":"28115-10-29T03:41:51","layerHeight":0.0,"numLayers":0,"printTime":0,"simulatedTime":0,"size":0},"lastFileName":"","layer":0,"timesLeft":{"filament":0.0,"file":0.0,"layer":0.0}},"move":{"axes":[{"homed":true,"letter":"X","max":300.0,"min":0.0,"userPosition":70.000,"visible":true},{"homed":true,"letter":"Y","max":300.0,"min":0.0,"userPosition":35.000,"visible":true},{"homed":true,"letter":"Z","max":350.0,"min":0.0,"userPosition":4.278,"visible":true}],"calibrationDeviation":{"mean":-0.000,"deviation":0.000},"currentMove":{"requestedSpeed":0.0,"topSpeed":0.0},"daa":{"enabled":false,"minimumAcceleration":10.0,"period":0.0},"idle":{"factor":0.7,"timeout":30000},"meshDeviation":{"mean":0.000,"deviation":0.000},"initialDeviation":{"mean":0.003,"deviation":0.001},"printingAcceleration":10000.0,"travelAcceleration":10000.0,"speedFactor":100.0},"network":{"interfaces":[{"actualIP":"192.168.1.142","firmwareVersion":null,"gateway":"0.0.0.0","subnet":"0.255.255.255","type":"wifi"}]},"state":{"currentTool":0,"machineMode":"FFF","status":"Idle"}}}


  • administrators

    @insertnamehere said in RepRapFirmware 3.01beta1 released:

    I have a Duet Wifi 2 and I've been trying to access Initial Deviation in the Object Model.
    If I execute the following line from the console:
    echo "Initial Deviation", move.initialDeviation.deviation ^ "mm"
    I get an error:
    echo "Initial Deviation",move.initialDeviation.deviation ^ "mm"
    Error: while executing command: unknown value initialDeviation.deviation

    You've found a bug (the property table wasn't ordered alphabetically after I renamed a property, so the binary search failed). I've fixed it in the latest build at https://www.dropbox.com/sh/3azy1njy3ayjsbp/AACquxr2m00eV568RZg5QG5wa?dl=0. I also added a compile-time check to prevent this happening in future, and an extra property state.upTime.



  • I have updated and I can only use one tool.
    On the tool configuration I have the following error:

    M563 S"Yellow" P1 D1 H1 F0
    Error: Tool creation: bad drive number
    

    however on previous release this command was working fine.



  • 3.01 now appears to require endstops be defined on a duet2, where the 3.0 upgrade guide specifically says they do not. (That guide also says fans do not, but that change was covered in the 3.01 release notes)


  • administrators

    @kraegar said in RepRapFirmware 3.01beta1 released:

    3.01 now appears to require endstops be defined on a duet2, where the 3.0 upgrade guide specifically says they do not. (That guide also says fans do not, but that change was covered in the 3.01 release notes)

    That's correct. I'll add it to the 3.01 release notes and check the 3.0 upgrade guide.



  • @chas2706 said in RepRapFirmware 3.01beta1 released:

    @dc42

    I just upgraded to this on my Duet Ethernet and I thought my board suddenly broke.
    The extruder fan stays permanently on, I cant move any axis because I get this:
    Screenshot (7).png

    Have you read the readme ?

    If upgrading a Duet WiFi/Ethernet/Maestro from the 3.0 release, note that default fans are no longer created.
    Unless your config.g file already used M950 to create the fans explicitly, add commands M950 F0 C"fan0", M950 F1 C"fan1" and M950 F2 C"fan2" to config.g before your M106 commands.
    Likewise, default endstop switches are not set up, so you will need to set up X and Y endstops (and Z odf needed) explicity, using one M574 line for each, and specifying the port name. Example: M574 X1 S1 P"xstop".


  • administrators

    @pipersw said in RepRapFirmware 3.01beta1 released:

    Likewise, default endstop switches are not set up, so you will need to set up X and Y endstops (and Z odf needed) explicity, using one M574 line for each, and specifying the port name. Example: M574 X1 S1 P"xstop".

    To be fair to @chas2706, I have only just added that bit!



  • Got a macro in testing for iterating on bed leveling, and it's pretty amazing!

    aa87229d-a254-4898-a54d-e6ac8fc5a6ba-image.png

    My initial round had two && in one line, which caused the duet to hard crash and reboot. I switched it to nested if statements, and that worked well. I want to tweak it a bit, but definitely working!

    ( was iterating until initialDeviation was < 0.01 AND deviation was within 0.002 of initialDeviation)



  • Cleaned up the output to make it easier to follow. (also changed my leadscrew locations to make it take longer to converge for these tests, so I could troubleshoot easier)

    2139e476-bf1c-49f6-acea-5f88055f8c39-image.png


  • administrators

    @kraegar said in RepRapFirmware 3.01beta1 released:

    My initial round had two && in one line, which caused the duet to hard crash and reboot.

    Can you provide that version, so that I can fix it?



  • This post is deleted!


  • Here is the version that works well:

    M561                         ; clear any existing bed transform
    ; If the printer hasn't been homed, home it
    if !move.axes[0].homed || !move.axes[1].homed || !move.axes[2].homed
      G28
      
    G1 Z7.5
    
    ;Run initial 4 point leveling routine
    G30 P0 X15 Y45 Z-99999
    G30 P1 X15 Y227.5 Z-99999
    ;G30 P2 X235 Y125 Z-99999 S3
    G30 P2 X235 Y227.5 Z-99999
    G30 P3 X235 Y45 Z-99999 S3
    
    
    
    while true
      if iterations = 5
        abort "Too many auto calibration attempts"
      if move.initialDeviation.deviation < 0.01 
        if move.calibrationDeviation.deviation < move.initialDeviation.deviation + 0.005
          if move.calibrationDeviation.deviation > move.initialDeviation.deviation - 0.005
            break
      echo "Repeating calibration because initial deviation (" ^ move.initialDeviation.deviation ^ "mm) must be < 0.01"
      echo "and (" ^ move.calibrationDeviation.deviation ^ "mm) must be within 0.005 of initialDeviation"
    
      G30 P0 X15 Y45 Z-99999
      G30 P1 X15 Y227.5 Z-99999
      ;G30 P2 X235 Y125 Z-99999 S3
      G30 P2 X235 Y227.5 Z-99999
      G30 P3 X235 Y45 Z-99999 S3
    
    echo "Auto calibration successful, deviation", move.calibrationDeviation.deviation ^ "mm"
    echo "Auto calibration successful, initialDeviation", move.initialDeviation.deviation ^ "mm"  
        
    G28 Z
    
    G1 X0 Y0 F24000               ; move the head to the corner (optional)
    

    And removing the nested if's to replace with && crash it

      if move.initialDeviation.deviation < 0.01 && move.calibrationDeviation.deviation < move.initialDeviation.deviation + 0.005 && move.calibrationDeviation.deviation > move.initialDeviation.deviation - 0.005
            break
    

    Edit: I realize I could just have some major syntax issues, still figuring this out. But that's a hard crash if you do that 🙂


Log in to reply