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: 862)
#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
#7
Hello Dear RoboDK Community,

I am doing also a 3d-Printing Project but using a Yaskawa-H50 Robot. My problem is actually that my G-Code contains E Values but when generating the corresponding JOB code, RoboDK didn't translate the E values from the G-code to a function of Extrude/Filament feed speed.

so my question is, how can I control the speed of the feeding corresponding to the speed of the robot arm? 

Many Thanks in Advance!
Otto


Attached Files Thumbnail(s)
       
#8
Hi Otto,

This is because the Motoman post-processor is limited to 7 characters, anything longer than that will be truncated.
What you can do is go to your "Program Events" in your "3D printing project".
On the right, you will see "Extrude(%1)", simply enter "E(%1)" and you just saved 6 characters for the numbers.

Let me know if it helps.
I never job calls with parameters on a Motoman, so I don't know what is the exact syntax.
If anything, I can help you with that.

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


#9
Hello Jeremy, 

thanks for your answer. Yes, it theoretically works. I have to test it next week on the robot. 

the number that I got representing the mm of Filaments per second. Isn't it? 
When the answer yes, that means, I have to find an equation between that number and the rotation speed of my extrude motor. 
Anyway, I think it is too much for example 900 mm filaments per second.


Attached Files Thumbnail(s)
   
#10
Hi Otto,

You should check elsewhere on the forum, others have posted on that subject.
It's generally a speed, but in your case, it seems to be the cumulative length.
Parameters in your slicer can certainly change that.

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


  




Users browsing this thread:
1 Guest(s)