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

Feature Request - workpiece angle compensation CNC

Scheduled Pinned Locked Moved
Firmware wishlist
11
54
2.7k
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.
  • undefined
    jay_s_uk @CanDo415
    last edited by 26 Apr 2024, 06:57

    @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

    undefined 1 Reply Last reply 26 Apr 2024, 07:20 Reply Quote 0
    • undefined
      CanDo415 @jay_s_uk
      last edited by 26 Apr 2024, 07:20

      @jay_s_uk
      @Phaedrux
      Error: line 37 column 22: meta command: unknown value 'degrees'
      there seems to be a bit more

      undefined 1 Reply Last reply 26 Apr 2024, 07:36 Reply Quote 0
      • undefined
        jay_s_uk @CanDo415
        last edited by 26 Apr 2024, 07:36

        @CanDo415 i've made another change but I don't think its going to fix the issue.
        I don't know why "degrees" throws an error though as its a built in command

        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

        undefined undefined 2 Replies Last reply 26 Apr 2024, 07:42 Reply Quote 0
        • undefined
          CanDo415 @jay_s_uk
          last edited by 26 Apr 2024, 07:42

          that's why i added Phaedrux.

          I want to change it a bit to get the corner as well. so the degrees issue has to be solved anyway.
          Thanks for the great start jay

          undefined 1 Reply Last reply 26 Apr 2024, 09:19 Reply Quote 0
          • undefined
            CanDo415 @CanDo415
            last edited by 26 Apr 2024, 09:19

            @dc42
            maybe he can help?

            1 Reply Last reply Reply Quote 0
            • undefined
              droftarts administrators @CanDo415
              last edited by 26 Apr 2024, 09:24

              @CanDo415 @jay_s_uk

              set var.var y_x_tan_rads=degrees{var.y_x_tan_rads}

              There's a space in the variable name, ie var.var y_x_tan_rads isn't a valid variable name.

              Ian

              Bed-slinger - Mini5+ WiFi/1LC | RRP Fisher v1 - D2 WiFi | Polargraph - D2 WiFi | TronXY X5S - 6HC/Roto | CNC router - 6HC | Tractus3D T1250 - D2 Eth

              undefined 1 Reply Last reply 26 Apr 2024, 09:26 Reply Quote 0
              • undefined
                CanDo415 @droftarts
                last edited by CanDo415 26 Apr 2024, 09:26

                @droftarts
                jay corrected it already.
                the problem shifted to the degrees command

                1 Reply Last reply Reply Quote 0
                • undefined
                  OwenD @jay_s_uk
                  last edited by 26 Apr 2024, 09:35

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

                  @CanDo415 i've made another change but I don't think its going to fix the issue.
                  I don't know why "degrees" throws an error though as its a built in command

                  degrees() is a function

                  You've used curly braces instead of parentheses

                  set var.y_x_tan_deg=degrees{var.y_x_tan_rads}

                  try

                  set var.y_x_tan_deg=degrees(var.y_x_tan_rads)
                  undefined undefined 2 Replies Last reply 26 Apr 2024, 09:36 Reply Quote 2
                  • undefined
                    jay_s_uk @OwenD
                    last edited by jay_s_uk 26 Apr 2024, 09:36

                    @OwenD i knew it would be something about the way its been formatted
                    updated the original again

                    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
                    • undefined
                      CanDo415 @OwenD
                      last edited by 26 Apr 2024, 09:38

                      @OwenD
                      thank you for showing up the problem

                      undefined 1 Reply Last reply 26 Apr 2024, 10:30 Reply Quote 0
                      • undefined
                        CanDo415 @CanDo415
                        last edited by 26 Apr 2024, 10:30

                        G68 A0 B0 R{-var.y_x_tan_rads}
                        the "-" seems important. otherwise the system gets turned the wrong way round

                        undefined 1 Reply Last reply 27 Apr 2024, 20:21 Reply Quote 0
                        • undefined
                          CanDo415 @CanDo415
                          last edited by CanDo415 27 Apr 2024, 20:21

                          @jay_s_uk
                          i modified it quite a bit. some points are still not ready.
                          I'm not shure how to ent the if passage.
                          end if seems not to work

                          var y_1 = 0
                          var x_1 = 0
                          var x_2 = 0
                          var x_3 = 0
                          var x_4 = 0
                          var x_5 = 0
                          var delta_x = 0
                          var y_2 = 0
                          var y_3 = 0
                          var y_4 = 0
                          var y_5 = 0
                          var delta_y = 0
                          var z0 = 0
                          var d_probe = 0
                          var m_1 = 0
                          var m_2 = 0
                          var m_1_tan_rads = 0
                          var m_1_tan_deg = 0
                          M291 P"position probe over front left corner of workpiece" S2 X1 Y1 Z1 ; Pop up box asking for operator input
                          M558 F300 ; Set the initial probing speed
                          G38.2 Z-60 P0 K0 ; Probe the material as a first pass
                          M558 F50 ; Set the final probing speed
                          G38.4 Z50 P0 K0 ; Move away from workpiece in Z
                          M400 ; Make sure all movement is complete
                          set var.z0=move.axes[2].machinePosition ; Record the stop position y_first_measurement
                          M400 ; Make sure all data recording is complete
                          G1 Z{move.axes[2].machinePosition+5} ; Move along the workpiece in X
                          G1 X{move.axes[0].machinePosition-20} ; Move 5mm away from the material
                          G1 Y{move.axes[1].machinePosition+5} ; Move 5mm away from the material
                          G1 Z{move.axes[2].machinePosition-3} ; Move along the workpiece in X
                          M558 F1000 ; Set the initial probing speed
                          G38.2 X100 P0 K0 ; Probe the material as a first pass
                          M558 F50 ; Set the final probing speed
                          G38.4 X-10 P0 K0 ; Move away from workpiece in X
                          M400 ; Make sure all movement is complete
                          set var.y_1=move.axes[1].machinePosition ; Record the stop position y_first_measurement
                          set var.x_1=move.axes[0].machinePosition ; Record the stop position x_first_measurement
                          M400 ; Make sure all data recording is complete
                          G1 X{move.axes[0].machinePosition-5} ; Move 5mm away from the material
                          G1 Z{move.axes[2].machinePosition+10} ; Move along the workpiece in X
                          G1 X{move.axes[0].machinePosition+15} ; Move 5mm away from the material
                          G1 Y{move.axes[1].machinePosition-20} ; Move 5mm away from the material
                          G1 Z{move.axes[2].machinePosition} ; Move along the workpiece in X
                          M558 F1000 ; Set the initial probing speed
                          G38.2 Y100 P0 K0 ; Probe the material as a first pass
                          M558 F50 ; Set the final probing speed
                          G38.4 Y-10 P0 K0 ; Probe the material again
                          M400 ; Make sure all movement is complete
                          set var.y_2=move.axes[1].machinePosition ; Record the stop position y_first_measurement
                          set var.x_2=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-50} ; Move 5mm away from the material
                          G1 X{move.axes[0].machinePosition+50} ; Move along the workpiece in X
                          M558 F1000 ; Set the initial probing speed
                          G38.2 Y100 P0 K0 ; Probe the material as a first pass
                          M558 F50 ; Set the final probing speed
                          G38.4 Y-10 P0 K0 ; Probe the material again
                          M400 ; Make sure all movement is complete
                          set var.y_3=move.axes[1].machinePosition ; Record the stop position y_second_measurement
                          set var.x_3=move.axes[0].machinePosition ; Record the stop position x_second_measurement
                          M400 ; Make sure all data recording is complete
                          M291 P"Probe Diameter" R"enter diameter of probe" S5 L0 H10 ; Pop up box asking for operator input diameter of
                          set var.d_probe=input ; set the diameter of the probe
                          ;calculation
                          set var.delta_y={var.y_3-var.y_2}
                          set var.delta_x={var.x_3-var.x_2}
                          set var.m_1={var.delta_y/var.delta_x} ; m of the staight P2-P3
                          set var.m_2={(-var.delta_x)/var.delta_y} ; m of perpendicilar to straight P2-P3
                          set var.m_1_tan_rads=atan(var.m_1)
                          set var.m_1_tan_deg=degrees(var.m_1_tan_rads)
                          ;calc the corner of workpeace
                          set var.x_4=((var.y_1-(-(var.x_3-var.x_2)/(var.y_3-var.y_2))*var.x_1)-(var.y_2-((var.y_3-var.y_2)/(var.x_3-var.x_2)*var.x_2)))/(((var.y_3-var.y_2)/(var.x_3-var.x_2))-(-(var.x_3-var.x_2)/(var.y_3-var.y_2)))
                          set var.y_4=(-(var.x_3-var.x_2)/(var.y_3-var.y_2))*((var.y_1-(-(var.x_3-var.x_2)/(var.y_3-var.y_2))*var.x_1)-(var.y_2-((var.y_3-var.y_2)/(var.x_3-var.x_2)*var.x_2)))/(((var.y_3-var.y_2)/(var.x_3-var.x_2))-(-(var.x_3-var.x_2)/(var.y_3-var.y_2)))+(var.y_1-(-(var.x_3-var.x_2)/(var.y_3-var.y_2))*var.x_1)
                          If var.y_2>var.y_3 ; workpiece Zero coordinates
                          set var.x_5=var.x_4+(COS(ARCTAN(var.m_1))+COS(ARCTAN(var.m_2)))*var.d_probe/2
                          set var.y_5=var.y_4+(SIN(ARCTAN(var.m_1))+SIN(ARCTAN(var.m_2)))*var.d_probe/2
                          If var.y_2<var.y_3
                          set var.x_5=var.x_4+(COS(ARCTAN(var.m_1))-COS(ARCTAN(var.m_2)))*var.d_probe/2
                          set var.y_5=var.y_4+(SIN(ARCTAN(var.m_1))-SIN(ARCTAN(var.m_2)))*var.d_probe/2
                          ;move over workpiece zero and set tool x&y to 0
                          G1 Y{move.axes[1].machinePosition-1} ; Move 1mm away from the material
                          G1 Z{move.axes[2].machinePosition+10} ; Move above workpiece
                          ;G68 A0 B0 R{-var.m_1_tan_deg} ; set Rotation
                          undefined 1 Reply Last reply 27 Apr 2024, 20:42 Reply Quote 0
                          • undefined
                            Exerqtor @CanDo415
                            last edited by Exerqtor 27 Apr 2024, 20:42

                            @CanDo415
                            You have to indent the lines you want to be part of the conditional statement, thats a place to start at least.

                            undefined 1 Reply Last reply 27 Apr 2024, 20:51 Reply Quote 0
                            • undefined
                              CanDo415 @Exerqtor
                              last edited by 27 Apr 2024, 20:51

                              @Exerqtor
                              like:

                              If var.y_2>var.y_3 ; workpiece Zero coordinates
                              set var.x_5=var.x_4+(COS(ARCTAN(var.m_1))+COS(ARCTAN(var.m_2)))*var.d_probe/2
                              set var.y_5=var.y_4+(SIN(ARCTAN(var.m_1))+SIN(ARCTAN(var.m_2)))*var.d_probe/2
                              end if
                              If var.y_2<var.y_3
                              set var.x_5=var.x_4+(COS(ARCTAN(var.m_1))-COS(ARCTAN(var.m_2)))*var.d_probe/2
                              set var.y_5=var.y_4+(SIN(ARCTAN(var.m_1))-SIN(ARCTAN(var.m_2)))*var.d_probe/2
                              end if

                              ?

                              undefined undefined 2 Replies Last reply 27 Apr 2024, 20:52 Reply Quote 0
                              • undefined
                                Exerqtor @CanDo415
                                last edited by Exerqtor 27 Apr 2024, 20:52

                                @CanDo415
                                No like:

                                if var.y_2 > var.y_3 ; workpiece Zero coordinates
                                set var.x_5 = var.x_4 + (COS(ARCTAN(var.m_1)) + COS(ARCTAN(var.m_2))) * var.d_probe / 2
                                set var.y_5 = var.y_4 + (SIN(ARCTAN(var.m_1)) + SIN(ARCTAN(var.m_2))) * var.d_probe / 2
                                if var.y_2 < var.y_3
                                set var.x_5 = var.x_4 + (COS(ARCTAN(var.m_1)) - COS(ARCTAN(var.m_2))) * var.d_probe / 2
                                set var.y_5 = var.y_4 + (SIN(ARCTAN(var.m_1)) - SIN(ARCTAN(var.m_2))) * var.d_probe / 2
                                undefined 1 Reply Last reply 27 Apr 2024, 20:56 Reply Quote 0
                                • undefined
                                  CanDo415 @Exerqtor
                                  last edited by 27 Apr 2024, 20:56

                                  @Exerqtor
                                  i tried this before in another case... everything unter the 2nd if wasnt done if the if doesn't match.
                                  the problem of the missing end if

                                  undefined undefined 2 Replies Last reply 27 Apr 2024, 21:00 Reply Quote 0
                                  • undefined
                                    Exerqtor @CanDo415
                                    last edited by Exerqtor 27 Apr 2024, 21:00

                                    @CanDo415
                                    Then you simply must have done something wrong in the other case you're mentioning.

                                    As reference to conditional construct have look at this.

                                    1 Reply Last reply Reply Quote 0
                                    • undefined
                                      jay_s_uk @CanDo415
                                      last edited by 27 Apr 2024, 21:42

                                      @CanDo415 as @Exerqtor said, there's no end if.
                                      Things have to be indented to be part of the if

                                      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
                                      • undefined
                                        dc42 administrators @CanDo415
                                        last edited by 27 Apr 2024, 22:03

                                        @CanDo415 you also need to replace SIN by sin, COS by cos, ARCTAN by atan etc. See https://docs.duet3d.com/User_manual/Reference/Gcode_meta_commands#functions.

                                        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

                                        undefined 1 Reply Last reply 28 Apr 2024, 14:17 Reply Quote 1
                                        • undefined
                                          CanDo415 @dc42
                                          last edited by 28 Apr 2024, 14:17

                                          @dc42
                                          thanks so far.
                                          Error promt is:
                                          M292 S3
                                          Error: Bad command: If (var.y_2) >= (var.y_3)
                                          Error: in file macro line 179 column 8: meta command: expected "'"

                                          Makro:

                                          G68 A0 B0 R0
                                          var y_1 = 0
                                          var x_1 = 0
                                          var x_2 = 0
                                          var x_3 = 0
                                          var x_4 = 0
                                          var x_5 = 0
                                          var delta_x = 0
                                          var y_2 = 0
                                          var y_3 = 0
                                          var y_4 = 0
                                          var y_5 = 0
                                          var delta_y = 0
                                          var z0 = 0
                                          var d_probe = 0
                                          var z_probe = 0
                                          var m_1 = 0
                                          var m_2 = 0
                                          var m_1_rads = 0
                                          var m_1_deg = 0
                                          var buff1 = 0
                                          var buff2 = 0
                                          var buff3 = 0
                                          var speed = 1500
                                          M291 P"probe Diameter" R"enter diameter of probe" S5 ; Pop up box asking for operator input diameter of
                                          set var.d_probe = input ; set the diameter of the probe
                                          M291 P"probe size in z" R"enter z-size of probe" S5 ; Pop up box asking for operator input diameter of
                                          set var.z_probe = input ; set the size of the probe in z-direction (mostly same as diameter, for plate probes 0)
                                          M291 P"position probe over front left corner of workpiece" S2 X1 Y1 Z1 ; Pop up box asking for operator input
                                          M558 F{var.speed/5} ; Set the initial movement speed
                                          G38.2 Z-10 P0 K0 ; Probe the material on top
                                          M558 F50 ; Set the final probing speed
                                          G38.4 Z50 P0 K0 ; Move away from workpiece in Z
                                          M400 ; Make sure all movement is complete
                                          set var.z0 = move.axes[2].machinePosition ; Record the stop position z_first_measurement
                                          M400 ; Make sure all data recording is complete
                                          G1 Z{move.axes[2].machinePosition+5} ; Lift probe 5mm
                                          G1 X{move.axes[0].machinePosition-20} Y{move.axes[1].machinePosition+5} ; Move 20mm to the left of the initial point and 5mm deeper into the material direction
                                          G1 Z{var.z0 - 1 - var.z_probe / 2} ; Move to probe depth
                                          M558 F{var.speed} ; Set the initial movement speed
                                          G38.2 X1000 P0 K0 ; Probe the material as a first pass
                                          M558 F50 ; Set the final probing speed
                                          G38.4 X-10 P0 K0 ; Move away from workpiece in X
                                          M400 ; Make sure all movement is complete
                                          set var.y_1 = move.axes[1].machinePosition ; Record the stop position y_first_measurement
                                          set var.x_1 = move.axes[0].machinePosition ; Record the stop position x_first_measurement
                                          M400 ; Make sure all data recording is complete
                                          G1 X{move.axes[0].machinePosition-5} ; Move 5mm away from the material
                                          G1 Z{var.z0+5} ; Move 5mm above material
                                          G1 X{move.axes[0].machinePosition+15} Y{move.axes[1].machinePosition-20} ; Move to point 2
                                          G1 Z{var.z0 - 1 - var.z_probe / 2} ; Move to probe depth
                                          M558 F{var.speed} ; Set the initial movement speed
                                          G38.2 Y1000 P0 K0 ; Probe the material as a first pass
                                          M558 F50 ; Set the final probing speed
                                          G38.4 Y-10 P0 K0 ; Probe the material again
                                          M400 ; Make sure all movement is complete
                                          set var.y_2 = move.axes[1].machinePosition ; Record the stop position y_second_measurement
                                          set var.x_2 = move.axes[0].machinePosition ; Record the stop position x_second_measurement
                                          M400 ; Make sure all data recording is complete
                                          G1 Y{move.axes[1].machinePosition-20} ; Move 10mm away from the material
                                          G1 X{move.axes[0].machinePosition+50} ; Move 50mm along the workpiece in X
                                          M558 F{var.speed} ; Set the initial movement speed
                                          G38.2 Y1000 P0 K0 ; Probe the material as a first pass
                                          M558 F50 ; Set the final probing speed
                                          G38.4 Y-10 P0 K0 ; Probe the material again
                                          M400 ; Make sure all movement is complete
                                          set var.y_3 = move.axes[1].machinePosition ; Record the stop position y_third_measurement
                                          set var.x_3 = move.axes[0].machinePosition ; Record the stop position x_third_measurement
                                          M400 ; Make sure all data recording is complete
                                          ;calculation
                                          set var.delta_y = {var.y_3-var.y_2}
                                          set var.delta_x = {var.x_3-var.x_2}
                                          set var.m_1 = {var.delta_y/var.delta_x} ; m of the staight P2-P3
                                          set var.m_2 = {(-var.delta_x)/var.delta_y} ; m of perpendicilar to straight P2-P3
                                          set var.m_1_rads = atan(var.m_1) ; workpiece rotation in rad
                                          set var.m_1_deg = degrees(var.m_1_rads) ; workpiece rotation in degrees
                                          ;calc the corner of workpiece
                                          ;set var.x_4 = {((var.y_1-(-(var.x_3-var.x_2)/(var.y_3-var.y_2))*var.x_1)-(var.y_2-((var.y_3-var.y_2)/(var.x_3-var.x_2)*var.x_2)))/(((var.y_3-var.y_2)/(var.x_3-var.x_2))-(-(var.x_3-var.x_2)/(var.y_3-var.y_2)))}
                                          ;set var.y_4 = {(-(var.x_3-var.x_2)/(var.y_3-var.y_2))<>*((var.y_1-(-(var.x_3-var.x_2)/(var.y_3-var.y_2))*var.x_1)-(var.y_2-((var.y_3-var.y_2)/(var.x_3-var.x_2)*var.x_2)))<>/(((var.y_3-var.y_2)/(var.x_3-var.x_2))-(-(var.x_3-var.x_2)/(var.y_3-var.y_2)))+(var.y_1-(-(var.x_3-var.x_2)/(var.y_3-var.y_2))*var.x_1)}
                                          set var.buff1 = {var.y_1-(-(var.x_3-var.x_2)/(var.y_3-var.y_2))*var.x_1}
                                          set var.buff2 = {var.y_2-((var.y_3-var.y_2)/(var.x_3-var.x_2)*var.x_2)}
                                          set var.buff3 = {((var.y_3-var.y_2)/(var.x_3-var.x_2))-(-(var.x_3-var.x_2)/(var.y_3-var.y_2))}
                                          set var.x_4 = {(var.buff1-var.buff2)/var.buff3}
                                          set var.buff1 = {(-(var.x_3-var.x_2)/(var.y_3-var.y_2))}
                                          set var.buff2 = {((var.y_1-(-(var.x_3-var.x_2)/(var.y_3-var.y_2))*var.x_1)-(var.y_2-((var.y_3-var.y_2)/(var.x_3-var.x_2)*var.x_2)))}
                                          set var.buff3 = {(((var.y_3-var.y_2)/(var.x_3-var.x_2))-(-(var.x_3-var.x_2)/(var.y_3-var.y_2)))+(var.y_1-(-(var.x_3-var.x_2)/(var.y_3-var.y_2))*var.x_1)}
                                          set var.y_4 = {var.buff1*var.buff2/var.buff3}
                                          If (var.y_2) >= (var.y_3) ; workpiece Zero coordinates
                                          set var.x_5 = {var.x_4+(cos(atan(var.m_1))+cos(atan(var.m_2)))*var.d_probe/2}
                                          set var.y_5 = {var.y_4+(sin(atan(var.m_1))+sin(atan(var.m_2)))*var.d_probe/2}
                                          echo 'X= '{var.x_5}', Y= '{var.y_5}
                                          If (var.y_2) < (var.y_3)
                                          set var.x_5 = {var.x_4+(cos(atan(var.m_1))-cos(atan(var.m_2)))*var.d_probe/2}
                                          set var.y_5 = {var.y_4+(sin(atan(var.m_1))-sin(atan(var.m_2)))*var.d_probe/2}
                                          ;echo X= {var.x_5}, Y= {var.y_5}
                                          ;move above workpiece zero and set tool x&y to 0
                                          M558 F{var.speed} ; Set the initial movement speed
                                          G1 Y{move.axes[1].machinePosition-1} ; Move 1mm away from the material
                                          G1 Z{var.z0 + 5} ; Move above workpiece
                                          G1 X{var.x_5} Y{var.y_5} ; go to Zero
                                          G10 X0 Y0 ; set x&y to Zero
                                          G68 A0 B0 R{-var.m_1_deg} ; set Rotation

                                          X seems to be working, on a psitive angle.
                                          Y is getting some wrong outputs

                                          undefined 1 Reply Last reply 28 Apr 2024, 17:12 Reply Quote 0
                                          39 out of 54
                                          • First post
                                            39/54
                                            Last post
                                          Unless otherwise noted, all forum content is licensed under CC-BY-SA