Feature Request - workpiece angle compensation CNC
-
@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 usingG68 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 counterclockwiseHello,
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? -
@CanDo415 Can you share your firmware version?
-
@Phaedrux 3.4.1
-
@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.
-
@Phaedrux
copied the macro.
I have to fix all problems from the update first. Messed up my whole config -
"Error: in file macro line 37 column 12: meta command: unknown variable 'var'"
is the new result after updating to 3.5.1var 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}
-
@CanDo415 i have a mistake in my macro. i have corrected my original
-
-
@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 -
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 -
@dc42
maybe he can help? -
-
@droftarts
jay corrected it already.
the problem shifted to the degrees command -
@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 commanddegrees() 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)
-
@OwenD i knew it would be something about the way its been formatted
updated the original again -
@OwenD
thank you for showing up the problem -
G68 A0 B0 R{-var.y_x_tan_rads}
the "-" seems important. otherwise the system gets turned the wrong way round -
@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 workvar 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
-
@CanDo415
You have to indent the lines you want to be part of the conditional statement, thats a place to start at least. -
@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
?