cbarry
Posts: 6
Joined: Thu Apr 18, 2019 12:52 pm

multiple materials / multiple extruders / multiple objects

Thu Jul 11, 2019 12:41 pm

Greetings S3D users,
First post here. I searched and found nothing about this topic that was helpful. Hopefully someone can help me out.

I have a Stacker S4, which is a 4 extruder industrial printer. It can operate by printing up to four copies of the same thing simultaneously (if they can fit on the bed), OR it can operate in multi material mode, where it prints the object(s) in multiple colors or materials. I'm using it in multi-material mode, where I have the external shell material (PLA) in extruder1, infill material (Conductive PLA) in extruder2, support material (eSun PVA) in extruder3, and T-Glase clear in extruder4.

Some issues I am having:
  • inactive extruders oozing (fixed mostly, but could use a code review/improvements - code below)
  • un-optimized tool changes across multiple objects.
Here's my script code (currently, I'm not using the T-Glase, so the 4th extruder has been removed from the code):

Code: Select all

;;
; begin start script
;;

G28 ; home all axes


T0 ; set tool
G1 Z5 F3000 ; lift
G1 X5 Y10 F5000 ; move to prime
G1 Z0.2 F1500 ; get ready to prime
G92 E0 ; reset extrusion distance
G1 Y80 E20 F600 ; prime nozzle
G1 Y160 F5000 ; quick wipe
G1 E-5 F2000; retraction
;;

T1 ; set tool
G1 Z5 F3000 ; lift
G1 X15 Y10 F5000 ; move to prime
G1 Z0.2 F1500 ; get ready to prime
G92 E0 ; reset extrusion distance
G1 Y80 E20 F600 ; prime nozzle
G1 Y160 F5000 ; quick wipe
G1 E-5 F200 ; retraction
;;

T2 ; set tool
G1 Z5 F3000 ; lift
G1 X25 Y10 F5000 ; move to prime
G1 Z0.2 F1500 ; get ready to prime
G92 E0 ; reset extrusion distance
G1 Y80 E20 F600 ; prime nozzle
G1 Y160 F5000 ; quick wipe
G1 E-5 F2000; retraction
;;

G1 Z5 F3000 ; lift

;;
; end start script
;;
And here's the tool change code:

Code: Select all

;;
;; begin tool change
;;

; anti-drool
{IF NEWTOOL!=[old_tool]} G1 E-15 T[old_tool] F2400

;;
; Z up 5mm
G91 ; relative
G1 Z5 F3000 ;
G90 ; absolute

;;
;T0
; lower other tools, set T0 to temp
{IF NEWTOOL=0} M104 S190 T1 ;
{IF NEWTOOL=0} M104 S190 T2 ;
{IF NEWTOOL=0} M109 S[extruder0_temperature] T0 ; wait for new temp
{IF NEWTOOL=0} T0 ;

;;
;T1
; lower other tools,  set T1 to temp
{IF NEWTOOL=1} M104 S190 T0 ;
{IF NEWTOOL=1} M104 S190 T2 ;
{IF NEWTOOL=1} M109 S[extruder1_temperature] T1 ; wait for new temp
{IF NEWTOOL=1} T1 ;

;;
;T2
; lower other tools,  set T2 to temp
{IF NEWTOOL=2} M104 S190 T0 ;
{IF NEWTOOL=2} M104 S190 T1 ;
{IF NEWTOOL=2} M109 S[extruder2_temperature] T2 ; wait for new temp
{IF NEWTOOL=2} T2 ;

;;
;ALL
; wait for old tool to cool down before continuing
{IF NEWTOOL!=[old_tool]} M109 R190 T[old_tool]; wait for old temp to cool before moving

;;
; return to original Z
G91 ; relative
G1 Z-5 F1000 ;
G90 ; absolute

;;
;; end tool change
;;
As you can see, I've learned much already from the folks on this forum. I had not seen

Code: Select all

{IF NEWTOOL!=[old_tool]} do something
used before, and it is handy, so steal that. :)

Anyway, the point of the post is that I'm printing a bunch of things in multiple materials, and the way S3d slices it, it will change to tool0, do objectA in the shell material, then change tools, do objectA's infill, then another tool change for the objectA's supports. That's 3 tool changes per object, but it could just do 3 tool changes per layer, which would be immensely more efficient, given I'm waiting for nozzles to heat up and cool down between changes.

I am using two processes now, the first uses an increased extrusion multiplier for the first two layers, but otherwise is the same as the second process, which just resets the multiplier to 1.00. I've tried to imagine a way that processes will solve this problem, but I cannot think of any way.

Now that you see what I am trying to accomplish, and what I have done thus far...
Q: How do I get there?

Thanks!
Christopher Barry

Return to “General Discussion and Tips”