Easier way to test if homed?
-
@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. -
@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
-
@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.
-
Lots of ways to skin a cat.
while iterations < #move.axes if !move.axes[iterations].homed G28 if result != 0 abort "Homing failed" break
-
@owend Great, thanks! Thatโs exactly what I was looking for.
-
@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. -
@owend You'll want to add move.axes[iterations].letter to G28, otherwise you'll be homing everything iterations times.
-
@stephen6309 I was hoping that after the first G28 everything else would pass the test?
-
@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
-
@theolodian You're right, I didn't think it all the way through. My addition would make it home each one at a time.
-
@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.
-
@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
-
@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.
-
@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 likeif !move.axes[iterations].visible continue
prior to G28?
-
@owend the M584 command allows you to make the first P axes visible and hide all higher numbered axes.
-
@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.
-
@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?
-
@zapta the axes are described in move.axes and the extruders in move.extruders.
-
@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. -
@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