Duet3D Logo Duet3D
    • Tags
    • Documentation
    • Order
    • Register
    • Login

    Easier way to test if homed?

    Scheduled Pinned Locked Moved
    Gcode meta commands
    8
    29
    1.6k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • jay_s_ukundefined
      jay_s_uk @theolodian
      last edited by

      @theolodian you could always create a load of global variables and keep them updated using daemon.g to match the status of each axis. That could reduce the characters required per axis.
      I don't know of any other way.

      Owns various duet boards and is the main wiki maintainer for the Teamgloomy LPC/STM32 port of RRF. Assume I'm running whatever the latest beta/stable build is

      theolodianundefined 1 Reply Last reply Reply Quote 0
      • theolodianundefined
        theolodian @jay_s_uk
        last edited by

        @jay_s_uk Thanks. Or would it be possible to do it as an iterative loop?

        Separately, it really should cancel out if the G28 fails. How could I enforce that? Cheers

        1 Reply Last reply Reply Quote 0
        • infiniteloopundefined
          infiniteloop @theolodian
          last edited by

          @theolodian You can use a macro like this:

          var nDriver = 3 ; <<< tell number of axes
          
          ; iterate through the axes:
          while {var.nDriver > 0}
            set var.nDriver = var.nDriver - 1
            if {! move.axes[var.nDriver].homed} ; if an axis is not homed ...
              M99 ; ... we abort this macro
          
          ; if all axes are homed, we arrive here:
          M300 S1000 P2000 ; beep (do whatever you want)
          

          Insert the axes count in line 1 and replace the beep in line 10 with any command you want.

          1 Reply Last reply Reply Quote 2
          • OwenDundefined
            OwenD @theolodian
            last edited by OwenD

            @theolodian

            Lots of ways to skin a cat.

            while iterations < #move.axes
            	if !move.axes[iterations].homed
            			G28
            			if result != 0
            				abort "Homing failed"
            			break
            
            theolodianundefined Stephen6309undefined 3 Replies Last reply Reply Quote 2
            • theolodianundefined
              theolodian @OwenD
              last edited by

              @owend Great, thanks! Thatโ€™s exactly what I was looking for. ๐Ÿ‘

              OwenDundefined 1 Reply Last reply Reply Quote 0
              • OwenDundefined
                OwenD @theolodian
                last edited by

                @theolodian
                Just note, that using if result !=0 will also abort if there's just a warning, rather than an error.
                use if result >1 if you only want to abort on an error, but not a warning.
                I usually take the view that if it wasn't 100% successful then I need to stop the print.

                1 Reply Last reply Reply Quote 1
                • Stephen6309undefined
                  Stephen6309 @OwenD
                  last edited by

                  @owend You'll want to add move.axes[iterations].letter to G28, otherwise you'll be homing everything iterations times.

                  theolodianundefined 1 Reply Last reply Reply Quote 0
                  • theolodianundefined
                    theolodian @Stephen6309
                    last edited by theolodian

                    @stephen6309 I was hoping that after the first G28 everything else would pass the test?

                    dc42undefined Stephen6309undefined 2 Replies Last reply Reply Quote 0
                    • dc42undefined
                      dc42 administrators @theolodian
                      last edited by dc42

                      @theolodian said in Easier way to test if homed?:

                      @stephen6309 I was hoping that after the first G28 everything else would pass the test?

                      Yes, that should be the case.

                      Here's another way (not tested!):

                      var allHomed=true
                      while iterations < #move.axes & move.axes[iterations].visible
                        if !move.axes[iterations].homed
                          set var.allHomed=false
                          break
                      if !var.allHomed
                        G28
                      

                      Duet WiFi hardware designer and firmware engineer
                      Please do not ask me for Duet support via PM or email, use the forum
                      http://www.escher3d.com, https://miscsolutions.wordpress.com

                      Stephen6309undefined OwenDundefined 2 Replies Last reply Reply Quote 1
                      • Stephen6309undefined
                        Stephen6309 @theolodian
                        last edited by

                        @theolodian You're right, I didn't think it all the way through. My addition would make it home each one at a time.

                        1 Reply Last reply Reply Quote 1
                        • Stephen6309undefined
                          Stephen6309 @dc42
                          last edited by Stephen6309

                          @dc42 Doesn't work. Printer not homed, run macro, allHome is set to false, but it's true after exiting the loop. 3.4.0.rc1

                          The allHomed needs to be changed to var.allHomed in line 4 and 6, or you get an error.

                          Change line 4 to G28, remove 1, 6 and 7, and it works.

                          zaptaundefined dc42undefined 2 Replies Last reply Reply Quote 0
                          • zaptaundefined
                            zapta @Stephen6309
                            last edited by zapta

                            @stephen6309 said in Easier way to test if homed?:

                            The allHomed needs to be changed to var.allHomed in line 4 and 6, or you get an error.

                            Or just drop allHome all together?

                            while iterations < #move.axes & move.axes[iterations].visible
                              if !move.axes[iterations].homed
                                G28
                                break
                            
                            1 Reply Last reply Reply Quote 0
                            • dc42undefined
                              dc42 administrators @Stephen6309
                              last edited by

                              @stephen6309 said in Easier way to test if homed?:

                              @dc42 Doesn't work. Printer not homed, run macro, allHome is set to false, but it's true after exiting the loop. 3.4.0.rc1

                              The allHomed needs to be changed to var.allHomed in line 4 and 6, or you get an error.

                              Change line 4 to G28, remove 1, 6 and 7, and it works.

                              Thanks, I have made some corrections to that post.

                              Duet WiFi hardware designer and firmware engineer
                              Please do not ask me for Duet support via PM or email, use the forum
                              http://www.escher3d.com, https://miscsolutions.wordpress.com

                              1 Reply Last reply Reply Quote 0
                              • OwenDundefined
                                OwenD @dc42
                                last edited by OwenD

                                @dc42
                                Out of curiosity, what are the rules with regards to hiding axes?
                                Your macro would break out of the loop upon the first hidden axis (without necessarily having homed)
                                So presumably if you had axes 0..12, you can't hide say 6 & 7 and leave 8 through 12 visible?
                                Or should the macro loop contain something like

                                if !move.axes[iterations].visible
                                     continue
                                

                                prior to G28?

                                dc42undefined 1 Reply Last reply Reply Quote 1
                                • dc42undefined
                                  dc42 administrators @OwenD
                                  last edited by

                                  @owend the M584 command allows you to make the first P axes visible and hide all higher numbered axes.

                                  Duet WiFi hardware designer and firmware engineer
                                  Please do not ask me for Duet support via PM or email, use the forum
                                  http://www.escher3d.com, https://miscsolutions.wordpress.com

                                  theolodianundefined 1 Reply Last reply Reply Quote 0
                                  • theolodianundefined
                                    theolodian @dc42
                                    last edited by

                                    @dc42 said in Easier way to test if homed?:

                                    @owend the M584 command allows you to make the first P axes visible and hide all higher numbered axes.

                                    The inference being that if you have hidden axes then you probably don't care to home them, say extruders, etc.? Thanks.

                                    zaptaundefined OwenDundefined 2 Replies Last reply Reply Quote 0
                                    • zaptaundefined
                                      zapta @theolodian
                                      last edited by zapta

                                      @theolodian said in Easier way to test if homed?:

                                      The inference being that if you have hidden axes then you probably don't care to home them, say extruders, etc.? Thanks.

                                      When I open the object model in DWC, it shows in the move section only x,y,z. Is E is also there in the move section of the object model but is hidden by DWC?

                                      dc42undefined 1 Reply Last reply Reply Quote 0
                                      • dc42undefined
                                        dc42 administrators @zapta
                                        last edited by

                                        @zapta the axes are described in move.axes and the extruders in move.extruders.

                                        Duet WiFi hardware designer and firmware engineer
                                        Please do not ask me for Duet support via PM or email, use the forum
                                        http://www.escher3d.com, https://miscsolutions.wordpress.com

                                        1 Reply Last reply Reply Quote 0
                                        • OwenDundefined
                                          OwenD @theolodian
                                          last edited by OwenD

                                          @theolodian said in Easier way to test if homed?:

                                          @dc42 said in Easier way to test if homed?:

                                          @owend the M584 command allows you to make the first P axes visible and hide all higher numbered axes.

                                          The inference being that if you have hidden axes then you probably don't care to home them, say extruders, etc.? Thanks.

                                          Well not extruders, but you may have defined axes to allow you to perform certain tasks at startup which are then hidden during normal running.
                                          My question was just whether those hidden axes numbers could fall in the middle of a range.
                                          Since it doesn't appear that this is possible, it is safe to cease testing axes for their homed state once a hidden axes is found in the array.

                                          1 Reply Last reply Reply Quote 1
                                          • theolodianundefined
                                            theolodian @OwenD
                                            last edited by theolodian

                                            @owend Ugh, different problem. Homing always comes back as failed when using these lower case letters for axes. ๐Ÿ™„

                                            It does work fine if everything is already homed.

                                            ; If the bed hasn't been homed, home it
                                            ; Iterative loop across all defined move axes
                                            while iterations < #move.axes
                                            	if !move.axes[iterations].homed
                                            			G28
                                            			if result != 0
                                            				abort "Homing failed"
                                            			break
                                            
                                            OwenDundefined 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA