G38 + idex + multiple probes = insanity ?
-
Doesn't make any sense to me looking at your configuration why moving X on T1 should move X1 and X2. and also why moving U on T1 is moving the wrong head X1 vs X2.
I can't see an M669 - so not sure what your kinematics are. Is there anything relevant in the two extra global files referenced at the start and end.
When you move the X and U with a G1, or when you move individual motors with a G1 H2 on either tool do they move as expected - is it only probing where they move incorrectly?
I presume that lower case 'u' in the M584 isn't causing any issues.
-
@dwuk3d To be clear, the printer itself is working well. I can print dual material/colour prints with it. I'm just running into difficulties when I am trying to add the pin probing functionality to it. All the axes move correctly, I can move X/U individually using G1 H2 (which I do as part of the tool cleaning process before probing Z or the pin).
The kinematics are plain old boring cartesian:
m669 Kinematics is Cartesian, no segmentation, matrix: 1.00 0 0 0 0 1.00 0 0 0 0 1.00 0 0 0 0 1.00
The reason for the global-* is that I have 5 printers which share 95% of their configuration in a common git repository to make maintaining them much simpler. The global configuration parameterizes the common functionality (e.g. the location of the wiping pad to use to clean the nozzle, where to move the tool when a print completes, etc). The links in the last line of the first post are to the machine repo (config.g and global-defaults.g) and the common config repo (all the rest of /sys/).
-
Ok - beats me them why G38.2 isn't working - for my IDEX like printer I am using G1 H4's instead of G38's, and swapping probes and end stops around rather than using T commands.
Example attached is for a ball probe alignment on a Gantry with U (X) and V(Y) and it also uses Z to initially check it is on the probe - so not quite the same as your requirement - but might be of some use.
;AlignUVZ.g ; ;if exists(global.ballProbeX) == false ; abort "XY alignment not found" M98.1 A"Probe Out" G90 T0 G1 Z50 F10000 G1 X30 Y30 F20000 M400 M98 P"0:/macros/FindProbeUV.g" M574 Z1 S2 K3; Set Z to Ball Probe G1 H4 Z{global.zHit-1} F300 if sensors.probes[3].value[0] = 0 echo "Probe not found" break ;G1 U204 V149 F10000 ; Find basic Z position var Zpos = {50,49,48,48,48} var Zrate = {300,200,100,100,100} var Upos = {10,8,8,8,8} var Vpos = {10,8,8,8,8} var UVrate = {1000,800,300,300,300} var prev = false var pVM = 0 var pUM = 0 var VM=0 var UM=0 while iterations < 2 M574 Z1 S2 K3; Set Z to Ball Probe G90 G1 Z{var.Zpos[iterations]} F300 G91 G1 H4 Z-12 F{var.Zrate[iterations]} ;echo "Z", {move.axes[2].userPosition} var ZP = move.axes[2].userPosition G1 Z5 F5000 M574 Z1 S2 K0; configure Z axis endstop ; Now find U middle G91 G1 U{0-var.Upos[iterations]} F2500 G90 G1 Z{var.ZP-0.2} F300 G91 M574 U1 S2 K3 ; Configure U axis with Z ball probe G1 H4 U+10 F{var.UVrate[iterations]} ;echo "X1", {move.axes[0].userPosition} M400 var U1 = move.axes[3].userPosition G1 Z5 F300 G1 U{var.Upos[iterations]} F2500 G1 Z-5 M400 G1 H4 U-10 F{var.UVrate[iterations]} ;echo "X2", {move.axes[0].userPosition} M400 var U2 = move.axes[3].userPosition G1 Z5 G90 set var.UM = (var.U1+var.U2)/2 ;echo "XM", {var.XM} G1 U{var.UM} M574 U2 P"!122.io0.in" S1 ; configure U axis endstop ; Now V G91 G1 V{0-var.Vpos[iterations]} F5000 G1 Z-5 F300 M574 V1 S2 K3 G1 H4 V+10 F{var.UVrate[iterations]} ;echo "Y1", {move.axes[1].userPosition} M400 var V1 = move.axes[4].userPosition G1 Z5 F300 G1 V{var.Vpos[iterations]} F5000 G1 Z-5 F300 G1 H4 V-10 F{var.UVrate[iterations]} ;echo "Y2", {move.axes[1].userPosition} M400 var V2 = move.axes[4].userPosition set var.VM = (var.V1 + var.V2) / 2 echo "UM", {var.UM},"VM", {var.VM},"ZP", {var.ZP},"---U1,2",{var.U1},{var.U2},"--V1,2",{var.V1},{var.V2} if (var.prev == true) echo "variation U:",{var.pUM-var.UM}, "V:", {var.pVM-var.VM} set var.pVM = var.VM set var.pUM = var.UM set var.prev = true G1 Z5 F300 G90 G1 U{var.UM} V{var.VM} F2000 M574 V2 P"io4.in" S1 ; U Axis optical M574 Z1 S2 K3; Set Z to Ball Probe G91 G1 H4 Z-5 F300 var Z1 = move.axes[2].machinePosition echo "z1",{var.Z1} G1 Z5 F1000 G1 U4 F2500 G1 H4 Z-10 F300 var Z2 = move.axes[2].machinePosition echo "z2",{var.Z2} G1 U-4 F2500 G1 Z5 F1000 M574 Z1 S2 K0; configure Z axis endstop if var.Z1-var.Z2 < 1 echo "z1,z2",{var.Z1},{var.Z2} abort "possible issue with UV alignment" if exists(global.ballProbeU) == false global ballProbeU = -1 global ballProbeV = -1 set global.ballProbeU = var.UM set global.ballProbeV = var.VM G90 ;var adjust = var.UM - global.ballProbeX ;echo "adjusting U",{global.ballProbeX - var.UM},"V",{global.ballProbeY - var.VM} ;G92 U{global.ballProbeX} V{global.ballProbeY} ;if exists(global.UVAdjusted) == false ; global UVAdjusted = true
-
@dwuk3d Thanks for looking. I'm afraid it's a bug but I wanted to reach out here to see if anyone had experience doing something similar.
Unfortunately, I don't think I can use G1 H4 as I need to move X/Y until a probe is triggered, not the moving axis' endstop.
-
@crpalmer OK - I am pretty new to RRF - and I am not really sure what the difference is between a probe and an endstop unless your probe is something analog.
I'm switching around the configuration between Inductive Probes, Ball probes and endstops in quite a few places in my homing and alignment macros - in fact I had to set one of my 5 probes as an end stop because I reached the limit on the maximum number of probes allowed.
-
@crpalmer said in G38 + idex + multiple probes = insanity ?:
T0 G38.2 X150 K0 ; Moves X until probe 0 is triggered
T1 G38.2 X150 K1 ; Moves X & U until probe 1 is triggered
T0 G38.2 U150 K0 ; Moves U until probe 0 is triggered
T1 G38.2 U150 K1 ; Moves X until probe 1 is triggeredT1 G53 G38.2 U150 K1
The first line is what I'd expect (probe X by moving X when tool 0 is selected).
The second command, however, is a mystery.
To make sure G38.2 wasn't expectding unmapped axes to be specified, I also tried the G38.2 commands using the U axis which certainly didn't help me understand what was happening.
Finally, I also tried machine coordinates for the U moves in case it was some discrepancy between machine positions vs. mapped axes (I can't say for sure what happened as I didn't record it in my notes but I expecdt it was the same as not using machine coordinates).Are you saying that, for the second command
T1 G38.2 X150 K1
, both tools are being moved? Because when any tool is mapped from it's usual axis (ie U) to X, it will update the position of both axes (even though only the U axis should physically move, the position on X is updated). If both X/T0 and U/T1 are physically moving, then yes, I'd think this was a bug.Your third command doesn't make any sense to me, ie you're trying to use a tool and move the axis that is not associated with it. RRF will probably let you do this, just because someone will probably want that functionality at some point. Caveat operator!
I would imagine that your fourth command should work, but I'm not sure how the recorded position will relate to the X axis. I don't have an IDEX to test, to see what happens to the T1 X position when you command a U axis movement directly. I think what is supposed to happen with G1 moves is the the U axis will move independently, and the X axis position is not updated. However, when an X axis move is requested, the U axis will return to the previous position (where it left position with the X axis), then perform the expected X axis move, updating the U axis position as well. So it won't be useful for determining the X offset for T1.
If you can confirm this is what you see, I can raise it with @dc42.
Ian
-
@droftarts I tried all 4 combinations of U vs. X and specifying T0 vs. T1's probe to see if I could make any sense of it. I couldn't. I really don't want to run any strange combination of moving a tool and triggering a different endstop!
What I really want to run is "G38.2 X150 Kx " and have it move whichever tool is active toward 150 until probe #x is triggered. To confirm the behaviour I reported, I just ran the following sequence of commands:
G28 T0 G1 X150 F24000 T1 G1 X150 F24000 G1 X0 G38.2 X150 K1 G38.2 U150 K1
The G1 commands are to be 100% sure that the axes move as expected (T0 moves to 150 for the first G1 and then T1 moves to 150 for the second G1). The first G38.2 command moves both T0 and T1 until probe 1 is triggered. The second G38.2 command moves only T0 (T1 doesn't move even though it is both active and the tool driven by the U axis).
-
@crpalmer I confirm this is a bug. I have implemented a fix in the 3.6 source code, which will be in the next 3.6.0 RC or internal build I make available.
-
@dc42 Wow, that was a fast fix! Thanks!
-
@crpalmer I have provided main board firmware 3.6.0-rc.2+2 binaries at https://www.dropbox.com/scl/fo/nlkfneaas1osgtdw37s17/AIS_H0KSAKCmfYSjSRTSOAE?rlkey=ad4omnq36zkdz3wl8i7kthqqt&dl=0 which incude this fix.
-
@dc42 Again, thanks! I can confirm that this fixes my probing issue.