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

    RRF3.2 request to enable G43 & G44 Tool height offset

    Scheduled Pinned Locked Moved
    Firmware wishlist
    6
    17
    1.4k
    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.
    • EducatingSavvasundefined
      EducatingSavvas
      last edited by

      Hi - wanted to ask whether any other CNC related gcode might enabled in future firmware versions? Such as the G43 & G44 Tool height offset compensation commands - and possible G49 to cancel those offsets.

      I have been looking at a way of offsetting the tool to compensate for wasteboard thickness or z distance between a stationary tool touch probe and the top of the wasteboard. This is to make manual tool changing easier during CNC router jobs. Something similar to this: https://axyzcrm.net/docs/HelpDeskDocs/TD-000202.pdf

      Here is some additional text about the procedures: https://cnc-programming-tips.blogspot.com/2014/12/g43-g44-and-g49-tool-length-compensation.html

      Would be interested to get thoughts on this.

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

        Interesting; but why would you not use G10 to set up the tool Z offsets instead?

        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

        EducatingSavvasundefined 1 Reply Last reply Reply Quote 0
        • EducatingSavvasundefined
          EducatingSavvas @dc42
          last edited by

          @dc42 said in RRF3.2 request to enable G43 & G44 Tool height offset:

          resting; but why would you not use G10 to set up the tool Z offsets instead?

          From what I've read you can refer to an address/slot for the offset in either G43 or G44 - which I'm hoping can be generated by using a M291 X1 Y1 Z1 to jog to a location on the wasteboard and save the z height.

          I think it could be as simple as the g53 Z probe trigger minus the g53 z surface high to create the offset.

          At the moment I have to workout the different between the stationary probe trigger location and surface of wasteboard, and manually input that into the G10 L20 command. I can't also use G60 to save that location to recall during a g10 tool offset.

          I'm hoping to make this an automated and more user friendly procedure.

          1 Reply Last reply Reply Quote 0
          • jay_s_ukundefined
            jay_s_uk
            last edited by jay_s_uk

            here's how I get around the issue for tool changes.
            I have 2 probes that I use with my CNC machine.
            I have one of these https://vers.by/en/touch-probes/9-vers-pr.html and one of these https://www.amazon.co.uk/dp/B08CC752D6/ref=cm_sw_em_r_mt_dp_d66QFbZZXNK0C

            I use the vers.by probe to set the workplace co-ordinates of the material in X and Y.
            This is for X

            M558 P5 C"servo0" K0 F150						; Change the probe input pin for the vers.by probe
            M558 F1500										; Set the initial probing speed
            G38.2 X1000 P0									; Probe the material as a first pass
            G91												; Set the movements to relative
            G1 X-5											; Move 5mm away from the material
            G90												; Set the movements to absolute				
            M558 F150										; Set the final probing speed
            G38.2 X1000 P0									; Probe the material again
            M400											; Make sure all movement is complete
            G10 L2 X{move.axes[0].machinePosition+1}		; Record the stop position as the workpiece co-ordinate in X
            M400											; Make sure all data recording is complete
            G91												; Set the movements to relative
            G1 X-5											; Move 5mm away from the material
            G90												; Set the movements to absolute												; Set the movements to absolute	
            

            This is for Y

            M558 P5 C"servo0" K0 F150						; Change the probe input pin for the vers.by probe
            M558 F1500										; Set the initial probing speed
            G38.2 Y600 P0									; Probe the material as a first pass
            G91												; Set the movements to relative
            G1 Y-5											; Move 5mm away from the material
            G90												; Set the movements to absolute
            M558 F150										; Set the final probing speed
            G38.2 Y600 P0									; Probe the material again
            M400											; Make sure all movement is complete
            G10 L2 Y{move.axes[1].machinePosition+1}		; Record the stop position as the workpiece co-ordinate in Y
            M400											; Make sure all data recording is complete
            G91												; Set the movements to relative
            G1 Y-5											; Move 5mm away from the material
            G90												; Set the movements to absolute
            

            I also use the probe to probe the top of the material, the top of the spoil board and the the top of the top of the touch plate. I use the extra workplace co-ordinates to store the positions as a work around until variables are implemented.

            M558 P5 C"servo0" K0 F150								; Change the probe input pin for the vers.by probe
            M291 P"Put the probe over the workpiece" S2 X1 Y1 Z1	; Pop up box asking for operator input
            M558 F1500												; Set the initial probing speed
            G38.2 Z-200 P0											; Probe the top of the material
            G91 													; Set the movement to relative
            G1 Z5													; Move back up 5mm
            G90														; Set the movement to absolute
            M558 F150												; Set the second probing speed
            G38.2 Z-200 P0											; Probe the top of the material again
            M400													; Make sure the movement is complete
            G10 L2 P9 Z{move.axes[2].machinePosition}				; Record the material height in the 9 Z workplace coordinate
            M400													; Make sure the recording is complete
            G91 													; Set the movement to relative
            G1 Z10													; Move back up 10mm
            G90														; Set the movement to absolute
            M291 P"Put the probe over the spoilboard" S2 X1 Y1 Z1	; Pop up box asking for operator input
            M558 F1500												; Set the initial probing speed
            G38.2 Z-200 P0											; Probe the top of the spoilboard
            G91 													; Set the movement to relative
            G1 Z5													; Move back up 5mm
            G90														; Set the movement to absolute
            M558 F150												; Set the second probing speed
            G38.2 Z-200 P0											; Probe the top of the material again
            M400													; Make sure the movement is complete
            G10 L2 P8 Z{move.axes[2].machinePosition}				; Record the spoilboard height in the 8 Z workplace coordinate
            M400													; Make sure the recording is complete
            G91 													; Set the movement to relative
            G1 Z10													; Move back up 10mm
            G90														; Set the movement to absolute
            M291 P"Put the probe over the tool block" S2 X1 Y1 Z1	; Pop up box asking for operator input
            M558 F1500												; Set the initial probing speed
            G38.2 Z-200 P0											; Probe the top of the spoilboard
            G91 													; Set the movement to relative
            G1 Z5													; Move back up 5mm
            G90														; Set the movement to absolute
            M558 F150												; Set the second probing speed
            G38.2 Z-200 P0											; Probe the top of the material again
            M400													; Make sure the movement is complete
            G10 L2 P7 Z{move.axes[2].machinePosition}				; Record the touch plate height in the 7 Z workplace coordinate
            M400													; Make sure the recording is complete
            G91 													; Set the movement to relative
            G1 Z25													; Move back up 25mm
            G90														; Set the movement to absolute
            

            This sets up all the information I need about the job and I can then fit the cutting tool.
            Once the tool is installed, I then probe the touch plate to get the tool position using this macro.

            M558 P5 C"!e1stop" K0 F150						; Change the probe input pin for the touch plate
            M291 P"Have you attached the connector?" S2		; Pop up to remind the operator about the connector to be fitted to the tool
            M558 F300										; Set the initial probing speed
            G38.2 Z-200 P0									; Probe the touch plate
            G91 											; Set the movement to relative
            G1 Z5											; Move up 5mm
            G90												; Set the movement to absolute
            M558 F150										; Set the second pass probing speed
            G38.2 Z-200 P0									; Probe the touch plate
            M400											; Make sure the movement is complete
            G10 L2 P6 Z{move.axes[2].machinePosition}		; Record the tool height in the 6 Z workplace coordinate
            M400											; Make sure the data recording is complete
            G91 											; Set the movement to relative
            G1 Z5											; Move up 5mm
            G90												; Set the movement to absolute
            

            Now I have the height of the tool recorded.
            If I want to work with the top of the material set as my Z datum (set as 0), then I use this macro to calculate the tool offset

            G10 L2 P5 Z{move.axes[2].workplaceOffsets[6]-move.axes[2].workplaceOffsets[5]}	; Take away the tool height from the touch plate height and put it into 5 Z workplace co-ordinates
            G10 L2 Z{move.axes[2].workplaceOffsets[8]-move.axes[2].workplaceOffsets[4]}		; Take away the above offset from the material height and place in the live (1) Z workplace co-ordinates
            

            And if I want to work with the spoilboard set as my Z datum (set as 0), then I use this macro to calculate the tool offset

            G10 L2 P5 Z{move.axes[2].workplaceOffsets[6]-move.axes[2].workplaceOffsets[5]}	; Take away the tool height from the touch plate height and put it into 5 Z workplace co-ordinates
            G10 L2 Z{move.axes[2].workplaceOffsets[7]-move.axes[2].workplaceOffsets[4]}		; Take away the above offset from the spoilboard height and place in the live (1) Z workplace co-ordinates
            

            Then when I want to carry out a tool change, I fit the new tool, probe the touch plate, and then calculate the new offset depending on what I want as my datum.
            Seems to work well so far.

            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

            EducatingSavvasundefined tom33undefined 3 Replies Last reply Reply Quote 2
            • EducatingSavvasundefined
              EducatingSavvas @jay_s_uk
              last edited by

              @jay_s_uk Thanks for sharing that! There's a lot of food for my thoughts, and the touch probes look really good btw. My set up is a little different as I have a stationary button which acts as my tool touch probe. It is also set below the surface of my wasteboard at the front of my machine.

              So this is not tested, but I imagine I could use:

              M291 X1 Y1 Z1	; jog to wasteboard
              G10 L2 P9 Z{move.axes[2].machinePosition}	; Save coordinate to G59.3 WC
              M500			; Store to memory
              

              I can then move to my probe location at the front of my machine:

              M291 P"STAND CLEAR! Move to Probe Location." R"Warning" S3
              G90			; absolute movement
              G53 G0 Z-10; 		; move to safe Z in machine coordinate system
              G53 G0 X83 Y41.7	; move X and Y second in machine coordinate system above stationary probe button
              

              and then perform my probe cycle.

              M291 P"Ensure tool is above stationary probe location." R"Warning" S3
              G10 P8 X0 Y0 Z0	; reset axis tool offset
              G30 S-1		; Probe at the current XY position and report 
              G91		; incremental movement
              G10 L8 P8 Z{move.axes[2].machinePosition}	; adjust G59.2 WCS
              G10 L20 P1 Z{move.axes[2].workplaceOffsets[9]-move.axes[2].workplaceOffsets[8]} ; Set origin of G54 Z relative to the current position of the tool, minus wasteboard offset from tool probe offset???
              M500			; store to memory
              G53 G0 Z-10		; move to safe z position
              

              Going to have to trail this out when I next have time. It didn't occur to me that I could save axis location to workspace coordinates but this is a great lead. And in theory I won't have to perform the first part until I resurface flat the wasteboard. I'll report back on the weekend once I have tested it. Cheers!

              1 Reply Last reply Reply Quote 1
              • EducatingSavvasundefined
                EducatingSavvas @jay_s_uk
                last edited by

                @jay_s_uk I'm going to have to wait till I wire up the test rig onto my CNC machine to test this. It's too confusing to imagine the stages without seeing the machine moving. May take a while to report back.

                Educating Savvas Duet CNC Test Rig .jpg

                jay_s_ukundefined 1 Reply Last reply Reply Quote 1
                • jay_s_ukundefined
                  jay_s_uk @EducatingSavvas
                  last edited by

                  @EducatingSavvas don't worry, I won't be going anywhere

                  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

                  EducatingSavvasundefined 1 Reply Last reply Reply Quote 0
                  • EducatingSavvasundefined
                    EducatingSavvas @jay_s_uk
                    last edited by

                    @jay_s_uk Can I ask what firmware version you are using. I'm following your workflow but having to make random changes. I'm using RRF 3.2 beta 2.

                    1 Reply Last reply Reply Quote 0
                    • jay_s_ukundefined
                      jay_s_uk
                      last edited by

                      I'm also running 3.2beta3.2

                      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

                      1 Reply Last reply Reply Quote 1
                      • EducatingSavvasundefined
                        EducatingSavvas
                        last edited by

                        I can confirm I've been able to create macros to set the wasteboard and tool length. My wasteboard setting macro is:

                        M291 P"Jog spindle until tool tip touches surface of waste board." R"Set Waste Board" S3 X1 Y1 Z1 ; jog to wasteboard
                        G10 L2 P9 Z{move.axes[2].machinePosition}		; save coordinate to G59.3 WC
                        G10 L2 P2 Z{move.axes[2].workplaceOffsets[8]} – {move.axes[2].workplaceOffsets[7]}	; Subtract G59.3 from G59.2 and set offset in G55
                        M400							; wait for last command to end
                        M500							; store to memory
                        G55							; swap to G55 WC
                        

                        and stationary tool length setting macro:

                        G55				; return to G55 WC
                        G10 P1 X0 Y0 Z0			; reset axis tool offset
                        M291 P"Press Ok to peform probe cycle" R"Warning" S3
                        G30 S-1	K0			; begin probing movement
                        G91				; incremental movement
                        G1 F500 Z3			; move up 3mm
                        G90				; absolute movement
                        G30 S-1	K0 			; begin probing movement
                        M400						; wait for current move to finish
                        G10 L2 P8 Z{move.axes[2].machinePosition}		; store probe ocaiton to G59.2 P8 
                        G10 L2 P2 Z{move.axes[2].workplaceOffsets[8]} – {move.axes[2].workplaceOffsets[7]}	; Subtract G59.3 from G59.2
                        M500			; store to memory
                        G53 G0 Z-10		; move to safe z position
                        

                        I use G54 to mirror the G53 machine position - so work in G55. I use G59.3 to set the wasteboard, and G59.2 for stationary touch probe. for set Thank @jay_s_uk for pointing me in the right direction.

                        1 Reply Last reply Reply Quote 2
                        • tom33undefined
                          tom33 @jay_s_uk
                          last edited by

                          @jay_s_uk Hi, thanks for sharing this macro. When you write "G10 L2 Z" which system coordinate will change the G53 ? Because there is no P parameters
                          Thanks,

                          jay_s_ukundefined 1 Reply Last reply Reply Quote 0
                          • jay_s_ukundefined
                            jay_s_uk @tom33
                            last edited by

                            @tom33 I don't use G53 in my probing macros. I've only used it in the context of tool changing. But, it uses the machine coordinates as a base (so from the machine 0,0 position) and not workplace coordinates

                            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

                            tom33undefined 1 Reply Last reply Reply Quote 1
                            • tom33undefined
                              tom33 @jay_s_uk
                              last edited by

                              @jay_s_uk ok so like that there is no a G54/G55 for change the work coordinate system at the begining of a gcode ?

                              jay_s_ukundefined 1 Reply Last reply Reply Quote 0
                              • jay_s_ukundefined
                                jay_s_uk @tom33
                                last edited by

                                @tom33 I believe setting the system in CNC mode (M453) automatically puts the machine in G54

                                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

                                1 Reply Last reply Reply Quote 0
                                • chiefmonkeyundefined
                                  chiefmonkey
                                  last edited by

                                  Guys this seems to be a great work around for the limitation on variables, as from what I can tell you are using the work offsets of non used coordinate systems to store the values from your probing, and then performing the math on them to get the result you desire.

                                  The only syntax that I am having a hard time following is where do the "move.axes[].machinePosition" and "move.axes[].workplaceOffsets[]" come from. I assume they are calling something at the firmware level, but it seems documentation on this is limited.

                                  I have seen other threads where people are using these meta commands, but finding documentation on them is rather limited. I've gone so far as to dig into linuxCNC as it appears some of this work is derived from there. Any suggestions on where to learn more on the meta command structure would be greatly appreciated.

                                  Phaedruxundefined 1 Reply Last reply Reply Quote 0
                                  • Phaedruxundefined
                                    Phaedrux Moderator @chiefmonkey
                                    last edited by

                                    @chiefmonkey https://duet3d.dozuki.com/Wiki/GCode_Meta_Commands

                                    Have you seen this? Actual variables are now available as well.

                                    Z-Bot CoreXY Build | Thingiverse Profile

                                    chiefmonkeyundefined 1 Reply Last reply Reply Quote 1
                                    • chiefmonkeyundefined
                                      chiefmonkey @Phaedrux
                                      last edited by

                                      @phaedrux said in RRF3.2 request to enable G43 & G44 Tool height offset:

                                      https://duet3d.dozuki.com/Wiki/GCode_Meta_Commands

                                      I have seen that, we are a bunch of mechanical oriented guys in our group, so programming is taking us quite a while, so much different then C that I used to use.

                                      1 Reply Last reply Reply Quote 0
                                      • T3P3Tonyundefined T3P3Tony referenced this topic
                                      • First post
                                        Last post
                                      Unless otherwise noted, all forum content is licensed under CC-BY-SA