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

    Feature Request - workpiece angle compensation CNC

    Scheduled Pinned Locked Moved
    Firmware wishlist
    11
    54
    2.8k
    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.
    • T3P3Tonyundefined
      T3P3Tony administrators @jrentschler01
      last edited by

      @jrentschler01 There is a test build here: https://www.dropbox.com/sh/xeu30go894p9xbs/AAB5U66SH4wbjKIcX0snUbKxa?dl=0
      If you are not already running 3.4b5 please upgrade to that before upgrading to this (and check the upgrade notes).

      Note this is untested so proceed with caution.

      www.duet3d.com

      jrentschler01undefined 2 Replies Last reply Reply Quote 0
      • jrentschler01undefined
        jrentschler01 @T3P3Tony
        last edited by

        @t3p3tony said in Feature Request - workpiece angle compensation CNC:

        the

        @T3P3Tony Thank you I'm close to start to test, wiring tooks a little longer but I hope I should have everthing running by tomorrow.
        But how should be the procedure for the compensation?

        Jürgen

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

          @jrentschler01 i've written a macro.
          this in theory should work but I haven't tested it yet.

          var y_first_measurement = 0
          var y_second_measurement = 0
          var y_length = 0
          var x_first_measurement = 0
          var x_second_measurement = 0
          var x_length = 0
          var y_over_x = 0
          var y_x_tan_rads = 0
          var y_x_tan_deg = 0
          
          M291 P"Put the probe on the left hand side of the bottom edge" S2 X1 Y1 Z1		; Pop up box asking for operator input
          M558 F1500																		; Set the initial probing speed
          G38.2 Y600 P0 K0																	; Probe the material as a first pass
          G1 Y{move.axes[1].machinePosition-5}											; Move 5mm away from the material
          M558 F150																		; Set the final probing speed
          G38.2 Y600 P0 K0																	; Probe the material again
          M400																			; Make sure all movement is complete
          set var.y_first_measurement=move.axes[1].machinePosition						; Record the stop position y_first_measurement
          set var.x_first_measurement=move.axes[0].machinePosition						; Record the stop position x_first_measurement
          M400																			; Make sure all data recording is complete
          G1 Y{move.axes[1].machinePosition-5}											; Move 5mm away from the material
          G1 X{move.axes[0].machinePosition+50}											; Move along the workpiece in X
          M558 F1500																		; Set the initial probing speed
          G38.2 Y600 P0 K0																	; Probe the material as a first pass
          G1 Y{move.axes[1].machinePosition-5}											; Move 5mm away from the material
          M558 F150																		; Set the final probing speed
          G38.2 Y600 P0 K0																	; Probe the material again
          M400																			; Make sure all movement is complete
          set var.y_second_measurement=move.axes[1].machinePosition						; Record the stop position y_second_measurement
          set var.x_second_measurement=move.axes[0].machinePosition						; Record the stop position x_second_measurement
          M400																			; Make sure all data recording is complete
          set var.y_length={var.y_second_measurement-var.y_first_measurement}
          set var.x_length={var.x_second_measurement-var.x_first_measurement}
          set var.y_over_x={var.y_length/var.x_length}
          set var.y_x_tan_rads=atan(var.y_over_x)
          set var.y_x_tan_deg=degrees(var.y_x_tan_rads)
          G68 A0 B0 R{var.y_x_tan_deg}
          

          Now this will ask you to jog to the bottom edge of your material, ideally you should go to somewhere near the bottom left.
          This is of course assuming you're using a probe that can probe in X, Y and Z and its set as K0. I use a vers.by probe.
          It uses G38.2 and stores the X and Y coordinates of each point. Once it probes the first point, it moves 50mm in X and probes again.
          The angle is then calculated and fed into G68.
          If you don't want to set it that way, its set using G68 Ax Bx Rx where Ax is the centre point to rotate around in X, Bx is the centre point to rotate around in Y and Rx is the angle to offset and is counterclockwise

          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

          CanDo415undefined 1 Reply Last reply Reply Quote 3
          • jrentschler01undefined
            jrentschler01 @T3P3Tony
            last edited by

            After days of reading through this forum I managed now to get my machine wokring somehow but there are still a lot off issues that i found with using the duet as CNC Controller. But I guess I should put this in a seperate thread, right?

            @t3p3tony But now I was able to test the angle compensation, I was a little confused with the other threads that I thought you will do it differently then the G68 command that's why I asked for the procedure.
            I tryed it with the RRF 3.4b5 in the link and the G68 command but it was a fail. Here is what I did:

            I drawed a simple rectangle with this G-Code

            ;simple rectangle for test
            G90
            G21
            
            G1 F500
            G1 X50
            G1 Y50
            G1 X0
            G1 Y0
            
            

            Then I just moved the X Work offset +70 and entered
            G68 A0 B0 R45
            and run the same G-Code again but the result was far away from what I expected:

            2884fa3a-7c49-4688-8cbd-76924691078b-image.png
            the left rectange is normal without G68 and the right one is with the 68.

            I think just the first move looks right with the 45° angle. What could be the Problem?

            Jürgen

            T3P3Tonyundefined dc42undefined 2 Replies Last reply Reply Quote 0
            • T3P3Tonyundefined
              T3P3Tony administrators @jrentschler01
              last edited by

              @jrentschler01 i am not sure, it will take me quite some time to get setup to test this right now so i wonder if @jay_s_uk has had a chance to test it and if its working for him?

              www.duet3d.com

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

                @t3p3tony not had a chance to test it yet. I'll see if I can set something up later on

                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
                • jrentschler01undefined
                  jrentschler01
                  last edited by

                  @jay_s_uk do you think you can help in this?
                  Let me know if you you guys need more information or anthing I should test.

                  I knkow i needed quite some time to get ready but I'm not sure how long I keep this setup with the duet because this will be one of the essential functions I need and some other issues that I faced with using RepRap for CNC. I might moving on to linuxcnc soon.

                  Jürgen

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

                    @jrentschler01 maybe post about your other issues?

                    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

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

                      @jrentschler01 I confirm, G68 is not working properly. I'm looking at it now.

                      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

                      jrentschler01undefined 1 Reply Last reply Reply Quote 0
                      • jrentschler01undefined jrentschler01 referenced this topic
                      • jrentschler01undefined jrentschler01 referenced this topic
                      • jrentschler01undefined jrentschler01 referenced this topic
                      • jrentschler01undefined
                        jrentschler01 @jay_s_uk
                        last edited by

                        @jay_s_uk I did in a seperate thread:
                        https://forum.duet3d.com/topic/25848/found-issues-using-duet-as-cnc-controller

                        Jürgen

                        1 Reply Last reply Reply Quote 1
                        • jrentschler01undefined
                          jrentschler01 @dc42
                          last edited by

                          @dc42 okay great let me know if I can do something to help

                          Jürgen

                          dc42undefined 1 Reply Last reply Reply Quote 0
                          • jrentschler01undefined jrentschler01 referenced this topic
                          • dc42undefined
                            dc42 administrators @jrentschler01
                            last edited by dc42

                            @jrentschler01 please test G68 using one of the firmware binaries at https://www.dropbox.com/sh/4h5zqc0ki73wa9r/AABrMZxfMzMH4M0uJQPLsBmQa?dl=0.

                            Please note, these report the version as 3.4.0-beta6, however they are only candidates for the 3.4.0beta6 release. So please install the official beta6 when we release it.

                            I have tested basic G1, G2 and G3 moves with G68 and I believe they are working correctly. I have forbidden using G92 to set X or Y when G68 is in effect. I haven't taken account of G68 in any other situations - there may be some where RRF ought to.

                            The coordinate rotation defined by G68 is ignored when running system macros such as pause.g, resume.g, tool change and homing files.

                            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

                            jrentschler01undefined 1 Reply Last reply Reply Quote 0
                            • jrentschler01undefined
                              jrentschler01 @dc42
                              last edited by

                              @dc42 I tested now with G1 the same wy with drawing a simple rectangle and it worked so far, I assume G2&G3 as well. Thank you a lot.
                              I'm continue getting a macro ready to probe the workpice and calulate the angle like @jay_s_uk mentioned.

                              It would be great if we could visualize it after that somehow.

                              Jürgen

                              1 Reply Last reply Reply Quote 0
                              • CanDo415undefined
                                CanDo415 @jay_s_uk
                                last edited by

                                @jay_s_uk said in Feature Request - workpiece angle compensation CNC:

                                @jrentschler01 i've written a macro.
                                this in theory should work but I haven't tested it yet.

                                var y_first_measurement = 0
                                var y_second_measurement = 0
                                var y_length = 0
                                var x_first_measurement = 0
                                var x_second_measurement = 0
                                var x_length = 0
                                var y_over_x = 0
                                var y_x_tan_rads = 0
                                var y_x_tan_deg = 0
                                
                                M291 P"Put the probe on the left hand side of the bottom edge" S2 X1 Y1 Z1		; Pop up box asking for operator input
                                M558 F1500																		; Set the initial probing speed
                                G38.2 Y600 P0 K0																	; Probe the material as a first pass
                                G1 Y{move.axes[1].machinePosition-5}											; Move 5mm away from the material
                                M558 F150																		; Set the final probing speed
                                G38.2 Y600 P0 K0																	; Probe the material again
                                M400																			; Make sure all movement is complete
                                set var.y_first_measurement=move.axes[1].machinePosition						; Record the stop position y_first_measurement
                                set var.x_first_measurement=move.axes[0].machinePosition						; Record the stop position x_first_measurement
                                M400																			; Make sure all data recording is complete
                                G1 Y{move.axes[1].machinePosition-5}											; Move 5mm away from the material
                                G1 X{move.axes[0].machinePosition+50}											; Move along the workpiece in X
                                M558 F1500																		; Set the initial probing speed
                                G38.2 Y600 P0 K0																	; Probe the material as a first pass
                                G1 Y{move.axes[1].machinePosition-5}											; Move 5mm away from the material
                                M558 F150																		; Set the final probing speed
                                G38.2 Y600 P0 K0																	; Probe the material again
                                M400																			; Make sure all movement is complete
                                set var.y_second_measurement=move.axes[1].machinePosition						; Record the stop position y_second_measurement
                                set var.x_second_measurement=move.axes[0].machinePosition						; Record the stop position x_second_measurement
                                M400																			; Make sure all data recording is complete
                                set var.y_length={var.y_second_measurement-var.y_first_measurement}
                                set var.x_length={var.x_second_measurement-var.x_first_measurement}
                                set var.y_over_x={var.y_length/var.x_length}
                                set var.y_x_tan_rads=atan(var.y_over_x)
                                set var.var y_x_tan_rads = degrees{var.y_x_tan_rads}
                                G68 A0 B0 R{var.y_x_tan_rads}
                                

                                Now this will ask you to jog to the bottom edge of your material, ideally you should go to somewhere near the bottom left.
                                This is of course assuming you're using a probe that can probe in X, Y and Z and its set as K0. I use a vers.by probe.
                                It uses G38.2 and stores the X and Y coordinates of each point. Once it probes the first point, it moves 50mm in X and probes again.
                                The angle is then calculated and fed into G68.
                                If you don't want to set it that way, its set using G68 Ax Bx Rx where Ax is the centre point to rotate around in X, Bx is the centre point to rotate around in Y and Rx is the angle to offset and is counterclockwise

                                Hello,
                                Very good job so far.
                                I still get an error while running the macro.
                                "M292
                                Error: in file macro line 37 column 13: meta command: expected '='
                                "
                                Can somebody help me?

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

                                  @CanDo415 Can you share your firmware version?

                                  Z-Bot CoreXY Build | Thingiverse Profile

                                  CanDo415undefined 1 Reply Last reply Reply Quote 0
                                  • CanDo415undefined
                                    CanDo415 @Phaedrux
                                    last edited by

                                    @Phaedrux 3.4.1

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

                                      @CanDo415 Please update to 3.5.1 and double check your macro that it matches the one shared. Particularly the line number the error reports.

                                      Z-Bot CoreXY Build | Thingiverse Profile

                                      CanDo415undefined 1 Reply Last reply Reply Quote 0
                                      • CanDo415undefined
                                        CanDo415 @Phaedrux
                                        last edited by

                                        @Phaedrux
                                        copied the macro.
                                        I have to fix all problems from the update first. Messed up my whole config😧

                                        1 Reply Last reply Reply Quote 0
                                        • CanDo415undefined
                                          CanDo415
                                          last edited by CanDo415

                                          "Error: in file macro line 37 column 12: meta command: unknown variable 'var'"
                                          is the new result after updating to 3.5.1

                                          var y_first_measurement = 0
                                          var y_second_measurement = 0
                                          var y_length = 0
                                          var x_first_measurement = 0
                                          var x_second_measurement = 0
                                          var x_length = 0
                                          var y_over_x = 0
                                          var y_x_tan_rads = 0
                                          var y_x_tan_deg = 0
                                           
                                          M291 P"Probe links vor das Werstück positionieren" S2 X1 Y1 Z1					; Pop up box asking for operator input
                                          M558 F1500																		; Set the initial probing speed
                                          G38.2 Y600 P0 K0																	; Probe the material as a first pass
                                          G1 Y{move.axes[1].machinePosition-5}											; Move 5mm away from the material
                                          M558 F150																		; Set the final probing speed
                                          G38.2 Y600 P0 K0																	; Probe the material again
                                          M400																			; Make sure all movement is complete
                                          set var.y_first_measurement=move.axes[1].machinePosition						; Record the stop position y_first_measurement
                                          set var.x_first_measurement=move.axes[0].machinePosition						; Record the stop position x_first_measurement
                                          M400																			; Make sure all data recording is complete
                                          G1 Y{move.axes[1].machinePosition-10}											; Move 5mm away from the material
                                          G1 X{move.axes[0].machinePosition+50}											; Move along the workpiece in X
                                          M558 F1500																		; Set the initial probing speed
                                          G38.2 Y600 P0 K0																	; Probe the material as a first pass
                                          G1 Y{move.axes[1].machinePosition-5}											; Move 5mm away from the material
                                          M558 F150																		; Set the final probing speed
                                          G38.2 Y600 P0 K0																	; Probe the material again
                                          M400																			; Make sure all movement is complete
                                          set var.y_second_measurement=move.axes[1].machinePosition						; Record the stop position y_second_measurement
                                          set var.x_second_measurement=move.axes[0].machinePosition						; Record the stop position x_second_measurement
                                          M400																			; Make sure all data recording is complete
                                          set var.y_length={var.y_second_measurement-var.y_first_measurement}
                                          set var.x_length={var.x_second_measurement-var.x_first_measurement}
                                          set var.y_over_x={var.y_length/var.x_length}
                                          set var.y_x_tan_rads=atan(var.y_over_x)
                                          set var.var y_x_tan_rads=degrees{var.y_x_tan_rads}
                                          G68 A0 B0 R{var.y_x_tan_rads}
                                          
                                          jay_s_ukundefined droftartsundefined 2 Replies Last reply Reply Quote 0
                                          • jay_s_ukundefined
                                            jay_s_uk @CanDo415
                                            last edited by

                                            @CanDo415 i have a mistake in my macro. i have corrected my original

                                            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

                                            CanDo415undefined 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            Unless otherwise noted, all forum content is licensed under CC-BY-SA