Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
ExtruderSpeed() function for 3D printing with ABB IRB120
#1
Hello! I am currently doing a 3D printing project with an ABB IRB120. For the extruder, I am using an arduino Mega/RAMPS for extruder control and hotend control. I noticed that when generating the RAPID code, roboDK translates the E values from the G-code to a function called 'ExtruderSpeed()' which seems to set the extrusion speed rather than how many mm of filament to extrude as shown in the segment below 

Code:
MoveL [[-0.000,0.000,0.350],[0.00000000,0.00000000,-1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],[130.00,500,5000,1000],z1,IRBpelletextruder,\WObj:=Frame2;
ExtruderSpeed 0.000;
MoveL [[-0.000,0.000,0.350],[0.00000000,0.00000000,-1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v40,z1,IRBpelletextruder,\WObj:=Frame2;
ExtruderSpeed 13.000;
MoveL [[147.614,123.450,0.350],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],[130.00,500,5000,1000],z1,IRBpelletextruder,\WObj:=Frame2;
ExtruderSpeed 0.000;
MoveL [[147.614,123.450,0.350],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v40,z1,IRBpelletextruder,\WObj:=Frame2;
MoveL [[147.614,123.450,0.350],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z1,IRBpelletextruder,\WObj:=Frame2;
ExtruderSpeed 3.000;
MoveL [[149.933,120.891,0.350],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z1,IRBpelletextruder,\WObj:=Frame2;
MoveL [[150.392,120.432,0.350],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z1,IRBpelletextruder,\WObj:=Frame2;
MoveL [[152.948,118.115,0.350],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z1,IRBpelletextruder,\WObj:=Frame2;
MoveL [[153.450,117.704,0.350],[0.00000000,0.00000000,-1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z1,IRBpelletextruder,\WObj:=Frame2;
MoveL [[156.222,115.647,0.350],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z1,IRBpelletextruder,\WObj:=Frame2;
MoveL [[156.762,115.287,0.350],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z1,IRBpelletextruder,\WObj:=Frame2;
MoveL [[159.722,113.513,0.350],[0.00000000,0.00000000,-1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z1,IRBpelletextruder,\WObj:=Frame2;
MoveL [[160.295,113.206,0.350],[0.00000000,0.00000000,1.00000000,0.00000000],[-1,1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],v30,z1,IRBpelletextruder,\WObj:=Frame2;

Is there any way to avoid this? Or some option that I need to change? Because when I generate the code with the 3D printing example included in the software, it seems to translate the E values from the G code as it is, it to a number that relates to the mm of filament to be extruded rather than a set speed as shown in the segment below. 

Code:
rdkSpeed:=[1000.0,500,1000.0,500];
MoveAbsJ [[29.080182,61.286059,29.900204,-150.914601,91.036706,-179.423374],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj;
rdkSpeed:=[83.3,500,83.3,500];
MoveL [[-59.027,-59.027,5.000],[0.00000001,0.00000000,1.00000000,-0.00000001],[0,-2,-2,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj;
Extruder(-1);
MoveL [[-59.027,-59.027,5.000],[0.00000001,0.00000000,1.00000000,-0.00000001],[0,-2,-2,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj;
Extruder(0.000);
rdkSpeed:=[130.0,500,130.0,500];
MoveL [[-59.027,-59.027,10.000],[0.00000000,0.00000000,1.00000000,0.00000000],[0,-2,-2,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj;
Extruder(-2.000);
rdkSpeed:=[40.0,500,40.0,500];
MoveL [[-59.027,-59.027,10.000],[0.00000000,0.00000000,1.00000000,0.00000000],[0,-2,-2,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj;
Extruder(0.000);
rdkSpeed:=[130.0,500,130.0,500];
MoveL [[-59.027,-59.027,10.000],[0.00000000,0.00000000,1.00000000,0.00000000],[0,-2,-2,0],rdkExtax], rdkSpeed, rdkZone, rdkTool, \WObj:=rdkWObj;
Extruder(2.000);
rdkSpeed:=[40.0,500,40.0,500];

Could this be due to Slic3r? Or is it some setting in RoboDK? Kindly let me know! Thank you!
#2
The default post processor for ABB IRC5 robot controllers implements and example that converts the extruder position to a speed (what you currently see). This is calculated given the robot speed and distance to travel between points.

You can easily change this behavior in the post processor by doing this 2 modifications:
1- Comment the call to new_move (line 625). This is the section that implements the speed example.
2- Comment the return command when the Extruder call is detected (in RunCode, line 820)

See the post processor attached for ABB IRC5.


Attached Files
.py   ABB_RAPID_IRC5_Extruder.py (Size: 44.42 KB / Downloads: 169)
#3
(05-30-2019, 11:47 PM)Albert Wrote: The default post processor for ABB IRC5 robot controllers implements and example that converts the extruder position to a speed (what you currently see). This is calculated given the robot speed and distance to travel between points.

You can easily change this behavior in the post processor by doing this 2 modifications:
1- Comment the call to new_move (line 625). This is the section that implements the speed example.
2- Comment the return command when the Extruder call is detected (in RunCode, line 820)

See the post processor attached for ABB IRC5.

Thank you so much!
#4
Dear Albert:
I am doing a 3D printing project with an FANUC R30iA.
I use Slic3r to generate the G code. E instruction in the G code presented  how many mm of filament to be extruded.
However, the RoboDK did nont translate the E values to the  extrusion speed in mm/s, as shown in the attachment.
How can I convert extrusion length to extrusion speed???

thank you very very much!

Loaferhit


Attached Files Thumbnail(s)
   
#5
Hi Loaferhit,

I think you don't understand the proper meaning of the E value.
It represents how much filament your extruder needs to feed, not the speed of the robot end of arm tooling (EOAT).
The speed of the actual extruder with respect to the part is 60 mm/s, this is most likely set previously by the G-Code.

Right now, RoboDK is transferring the extruder value to the robot controller so that you can create a subprogram to catch this value and drive your filament extruder internal motor so that it feeds the right amount of filament between the two points.

Hope it helps you better understand the process.

Jeremy
Find useful information about RoboDK and its features by visiting our Online Documentation and by watching tutorials on our Youtube Channel


#6
Jeremy is right. The E value is the distance that the filament travels through the gear of your printhead. Then, the F value gives the printing speed associated with the flow rate at nozzle exit for the calculated E value according to all your slicing parameters (layer width, height, extrusion multiplier, etc.). F is also the value that will be used by RoboDK to set the TCP speed (with instruction "SetSpeed()").

Since the E value is caught and thrown back in the RoboDK program instructions as a function call named "Extruder()", you need to create an if inside the Fanuc post-processor's function "RunCode()" and manage whatever I/O or signal interface programming that you are using for your printhead controller and convert this E value to your needs. There is actually a pretty easy tutorial inside RoboDK's documentation, which I followed and built on it, based on my needs : https://robodk.com/doc/en/Robot-Machinin...rint3Dpost

Unfortunately (or fortunately), there isn't ONE way to do it. At our lab, we used the I/O ports on the Fanuc controller to send the E value at the beginning of every extrusion which as the same ratio of "robot speed to nozzle exit speed" and every time this ratio changes (so we don't send the signal everytime there is an E value). Also, like I mentioned in another thread, we use the Fanuc option TCPP (speed prediction) to modify the extrusion multiplier in-situ in order to avoid over-extrusion when the robot is slowing down or accelerating.

I hope this quick explanation enlightened you and if you have any questions, feel free to ask.

JFCh
  




Users browsing this thread:
1 Guest(s)