slic3r / Slic3r

Open Source toolpath generator for 3D printers
https://slic3r.org/
GNU Affero General Public License v3.0
3.35k stars 1.29k forks source link

Firmware Retract G10 S1 BEFORE TOOL CHANGE PLEASE #4106

Closed ghost closed 6 years ago

ghost commented 7 years ago

πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅ Works now ! Read the end of topic Dual Y Single nozzle direct drive works on MARLIN with FW enabled '0.6mm height πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅

No G10 S1 before ToolChange

Firmware Retractation not ready for Multi Extrusion printing

Firmware retraction when ' selected ' , forget to make ' tool change retractation in multi extruder printing , but works fine when only one extruder because no need of tool change long retract. Please implement G10 S1 just before a toolchange , to make the long retractation , if a dual nozzle the print is still possible but dirty with missing perimeters because of not primed extruder , but if SINGLENOZZLE ' Y ' , with 50mm load/unload the print crashes !

Firmware retraction activated Multi extruder print is impossible

G1 X176.483 Y221.677 F7800.000
G1 X178.271 Y223.465 E924.73334 F1800.000
G10 ; retract    ************* NO SWAPPING RETRACTION AND NEED A G10 S1πŸ‘Ž 
G92 E0
T1 ******* NOT RECOVERED OR LOADED OR PRIMED πŸ‘Ž 
G92 E0
G1 X200.222 Y222.931 F7800.000
G1 X200.154 Y223.286 E0.09169 F1800.000
G1 X199.990 Y223.777 E0.22301
G1 X199.819 Y224.121 E0.32070

Using TOOLCHANGE TAB ToolChange Tab unusable because of REPEATING of the G10 than can confuse the machine

G1 X214.271 Y160.965 E973.40355 F1800.000
G10 ; retract    ******************************* FIRST NORMAL RETRACT πŸ‘Ž 
G92 E0
G10 S1 ; Added by the SLIC3R tab *************** SECOND  RETRACT   BIG PROBLEM πŸ‘Ž 
T1
G92 E0
G10 ; retract ****************************** THIRD RETRACT  !!!!!!    it's too much  πŸ‘Ž 
G92 E0
G1 X238.974 Y138.811 F7800.000
G11 ; unretract
G92 E0
G1 X238.783 Y139.181 E0.11126 F1800.000

Slic3r Request PR πŸ₯‡

Easy to code , just REPLACE the G10 by a G10 S1 only before a TOOLCHANGE appears and a G11 just after the tool change to recover and print continue

G10 S1               ;Swap retractationπŸ‘ 
T1                      ;Tool changeπŸ‘ 
G11                   ;Swap recoverπŸ‘
G10              ; Print can continueπŸ‘ 

I have made a topic about ' Firmware retractation ' here Understanding FIRMWARE RETRACTATION G10 / G11 / G10 S1 #7597

No Firmware retract All is perfect

G1 X170.444 Y159.479 E70.04478
G1 E20.04478 F2400.00000 ************ LONG RETRACT 50MM TO UNLOAD "G10 S1" πŸ‘ 
G92 E0
T1
G92 E0
G1 E-2.00000 F2400.00000 **************** PREHEATING FILAMENT PARTIAL RECOVER πŸ‘
G92 E0
G1 X207.662 Y194.961 F7800.000
G1 E2.00000 F2400.00000  *********************** RECOVER πŸ‘ 
G1 X206.827 Y195.686 E2.28076 F1800.000

:fr:

lordofhyphens commented 7 years ago

Wait, what? You can't use regular retract and toolchange retract in the same print with your scheme?

ghost commented 7 years ago

I explain Retract after LAYER CHANGE , must works , because it will be used The only issue is to have the layer change retract 'g10 ' and after a G10 S1 , it will makes problems in marlin and if a Layer change appears at the same time of Tool change ,it's perfect , because the recovery will appear too , The only issue is to avoid the double retract gcode

ghost commented 7 years ago

and of course , in the case of a layer change without a tool change , the functionnality must be activated Or in a single nozzle print too , this functionnality must works

lordofhyphens commented 7 years ago

The reason there's an extra G10 in there is because the retract is considered per-extruder.

So why aren't extra retracts handled in a sane manner in Marlin?

ghost commented 7 years ago

we have worked on the firmware retract code and because of the low ressources and time wasted by uneeded code , we are forced to write our cote at is simple essence without a big code of exception and protection against a bad produced code We don't have 32 bits plutonium suractivated processor , and all macro is reduced at his minimum

It's why , we can not make a shield anti bad gcode to protect marlin every time Our FW retract put a status when G10 named ' retracted' , and G10 S1 named ' swapped ' , we assume that we trust gcode and we make marlin with no gcode corruption In this case , if G10 appear , with zlift activated , Extrusion will retract , zlift up the carriage , and if a G10 S1 appears after , zlift is blocked ' in my version ' , but we will have retract distance + long retract distance , and when recover , our FWretract don't make addition of the 2 retractation , to recover exactly , and , when recover , it will recover without the length of the first G10 and the print will have a moment of no printing. Each G10 must have a G11 and nothing else between

I need a good gcode , because marlin can not make the ' police ' of corrupted gcode You don't know that , because in 32bits smoothieware , you have tons of progrmemory , and high speed float arithmetic unit inside lol

lordofhyphens commented 7 years ago

You don't have a single bit to store swap/retract state (per extruder)?

The logic to retract on layer change doesn't know about whether or not it's a retract. The unretract there is actually from the call to extrude.

Best solution I can think of is to unretract immediately after the toolchange. Who knows what that will break.

ghost commented 7 years ago

But for information ,i never use retraction when no needed , retraction make seam , oozes and blob , so it's why i use it with precaution , and it's not in my style , to apply retraction on layer change , and i don't know why the option force a retractration after layer change exist . but if you can make a processing that can avoid this G10 just when a tool change follows You make a very good SLICER FOR ALL MARLIN MACHINES

ghost commented 7 years ago

Ok , if you think it's too complicated to make a tortured code to have it , ok we surrender If you think , you can avoid a double G10 in the case of layer change and tool change together It's perfect

In all case , you have made a fully functionnal lib for marlin I will use it for some days , i will inform you

And inform me if you have made a new release that permit to keep ' layer change retraction forced'

THK YOU VERY MUCH FOR ALL

lordofhyphens commented 7 years ago

You mean that commit?

ghost commented 7 years ago

It's not a bit problem loll , it's a rewritten FwRetract each time a bad gcode appear We have our exigence about Gcode and we want a clean gcode lolll

lordofhyphens commented 7 years ago

So do you keep the retraction state per-extruder?

ghost commented 7 years ago

yes the two last release works ' if no change layer retract enable '

lordofhyphens commented 7 years ago

https://github.com/alexrj/Slic3r/pull/4108/commits/be28a60b1e6f10167afaaa04c9107588d7f434a2

ghost commented 7 years ago

if layer change enable , G10 before G10S1 appears

ghost commented 7 years ago

Slic3r-long-retract.2017.09.02.1345.8c9140f.64bit Slic3r-long-retract.2017.09.02.1343.8f211aa.64bit works

ghost commented 7 years ago

i don't understand the commit , what it makes

lordofhyphens commented 7 years ago

Read the commit message.

ghost commented 7 years ago

if g10 , then ' retracted' status if g10 s1 after g10 status ' swapped ' and retracted lengh is lost , will only recover with long retract length

ghost commented 7 years ago

Unretract immediately after toolchange ok , but we never have problem of all AFTER G10S1 all issues are BEFORE But , it's true , if we have G10S1 , and a G10 appears after it , the swap status is dead and recover will just be a short recover

ghost commented 7 years ago

g10 must be followed by a g11 G10 S1 too If g10 after g10s1 = problem if g10s1 after g10= problem Clean Gcode needed

lordofhyphens commented 7 years ago

It'd be perfectly legal though to issue multiple G10s (or even G10 S1) in a row and then unretract all at once with a single G11. That's actually how Slic3r models it.

lordofhyphens commented 7 years ago

You're going to have post a 3d model (you can export to AMF to save multi extruder setups, etc) and a slic3r config so I can see what is going on on your end.

ghost commented 7 years ago

Slicer is intelligent , have the models , and make tool path The machine is a robot and can not made the cure of bad gcode

lordofhyphens commented 7 years ago

image See highlighted menu item for export to AMF (preserving all modifier meshes, multiple extrusion, etc).

ghost commented 7 years ago

Slic3r works fine now
Just forced to disable ' FORCE RETRACT AFTER LAYER CHANGE' If one day , you want to solve this , it's perfect Now slicer produce a clean and very comprehensive GCODE all is perfect 'without layer change retract forced'

lordofhyphens commented 7 years ago

@bubnikv How does your marlin fork solve this, or did you change the gcode generation.. or just ignore fw retract?

lordofhyphens commented 7 years ago

@studiodyne well we accept pull requests. If you can work out the logic then great.

Not using fw retract with Slic3r gets you the Wipe feature (which afaik is impossible with fw retract).

ghost commented 7 years ago

Fw Marlin If G10 S1 and G10 after , G10 is ignored If G10 and G10 s1 recover is only the long retract lengh and ' short retract length' is missing

ghost commented 7 years ago

yes , i you read my topic about firmware retract , i explain , Fw is just a tool , an utility , to test our parameters but will never be the future of printing The clean print need , the nozzle wipe to avoid seam and others dirty things , Fw retract is robotic and primitive and will never make a 3 axis movement to make a wipe But it's a good tool , to see with ou eyes what values is need for each nozzle , feedrate of recover and lengh When we have our parameters , we disable FW and we forget it I have made a topic about ' Firmware retractation ' here Understanding FIRMWARE RETRACTATION G10 / G11 / G10 S1 #7597

ghost commented 7 years ago

I assume you have made a good job , and i'm very happy If one day , you have the force to make a code , to avoid a double G10 + G10S1 when layer change retract + tool change long retract appears together , it will be perfect For the moment it's enough , i'm happy

ghost commented 7 years ago

Another Request Two choices

and no user that come here to ' cry ' !!!!

lordofhyphens commented 7 years ago

Give me a complete test case that shows the "bad gcode" (that is, the inputs to Slic3r that gives the output).

ghost commented 7 years ago

i go to sleep , may be tomorow i will have a surprise What choice you have choseen for the last release

Thk you so much , for this ONE DAY and ONE NIGHT COLLABORATION

lordofhyphens commented 7 years ago

In unrelated news, under fw retract only it should be sorted out. It should always unretract when entering into a toolchange beforehand and complete unretract (to cover the retraction from the toolchange) at the end of the toolchange.

You may have to handle a spurious unretract on Marlin's end.

https://github.com/alexrj/Slic3r/pull/4108/commits/b35f913a057468ae90f071473a0bc0294f37d4d3

ghost commented 7 years ago

Give me a complete test case that shows the "bad gcode" (that is, the inputs to Slic3r that gives the output).

I promise to print only with slic3r the next weeks , i will see all issues if exist I have examined the gcode produced tonight and it's very good , i just need to work every day with it and to use the machine , that is the best verification Now i go to sleep , Thks for all , very good job

ghost commented 7 years ago

Without ' force retraction after layer change ' all is absolutely perfect

G1 X95.527 Y94.044 E1.66541 ; infill
G1 X95.173 Y93.639 E1.67764 ; infill
G10 S1 ; retract for toolchange
G92 E0 ; reset extrusion distance
T1 ; change extruder
G92 E0 ; reset extrusion distance
G1 X103.125 Y111.253 F7800.000 ; move to first perimeter point
G11 ; unretract
G92 E0 ; reset extrusion distance
G1 F1800
G1 X103.083 Y111.878 E0.01424 ; perimeter

With 'force retraction after layer change' A G10 appears after a G10S1 and it's not possible for marlin

G1 X95.527 Y94.044 E1.66541 ; infill
G1 X95.173 Y93.639 E1.67764 ; infill
G10 S1 ; retract for toolchange
G92 E0 ; reset extrusion distance
T1 ; change extruder
G92 E0 ; reset extrusion distance
G10 ; retract⛔️ but IGNORED BY MARLIN , not a problem but not serious πŸ˜ƒ
G92 E0 ; reset extrusion distance
G1 X103.125 Y111.253 F7800.000 ; move to first perimeter point
G11 ; unretract
G92 E0 ; reset extrusion distance
G1 F1800
G1 X103.083 Y111.878 E0.01424 ; perimeter

With 'force retraction after layer change' A G10 appears before a G10S1 and it's not possible for marlin

G1 X173.559 Y105.107 E2.25929 ; infill
G10 ; retract⛔️
G92 E0 ; reset extrusion distance
G1 Z0.300 F7800.000 ; move to next layer (1) *********************************
; Tool change--------------------------------
T1 ; change extruder
G92 E0 ; reset extrusion distance
G10 ; retract⛔️ but IGNORED BY MARLIN , not a problem but not serious πŸ˜ƒ
G92 E0 ; reset extrusion distance
G1 X64.125 Y100.003 F7800.000 ; move to first perimeter point
G11 ; unretract
G92 E0 ; reset extrusion distance
G1 F1800
ghost commented 7 years ago

NOT GOOD MUST BE DELETED : Slic3r-long-retract.2017.09.03.1349.6a1ecd9.64bit

Without LAYER CHANGE FORCED RETRACTATION G10 Appears after tool change ' only the first tool change '

G1 Z0.350 F7800.000
G10 S1
G92 E0
T1
G92 E0
G10 ⛔️
G92 E0
G1 X63.571 Y98.340 F7800.000
G11
G92 E0
G1 F1800

You have placed a G11 just after T1 , and it's not possible , because the nozzle is on the old color and on the print , if you recover here , print will be dirty and with a blob


G10 S1
G92 E0
T1
G92 E0
G11 ⛔️ No ! because the nozzle is always on the other color  and will blob on the print
_This solution is not good , this G11 MUST BE AFTER A MOVE LIKE THE FOLLOWING_ 
G92 E0
G10 πŸ˜ƒπŸ˜ƒπŸ˜ƒ MARLIN ignore G10 after G10S1
G92 E0
G1 X63.714 Y98.292 F7800.000
G11 ; πŸ˜ƒπŸ˜ƒπŸ˜ƒπŸ˜ƒ THE ONLY G11  ALLOWED πŸ˜ƒπŸ˜ƒπŸ˜ƒπŸ˜ƒ
G92 E0
G1 F900
ghost commented 7 years ago

Please delete the last release and keep the release just before This precedent release works

FORCE RETRACTACTION ON LAYER CHANGE ENABLED = BUG try to make the fix to delete a double G10/G10 S1 when (layer change + tool change appears together)

Impossible to tweak marlin , because need of making memorisation of all amounts of retract for each extruder , to be recovered with the right value and more

keep only this version Slic3r-long-retract.2017.09.02.1345.8c9140f.64bit

ghost commented 7 years ago

Slic3r-long-retract.2017.09.03.1349.6a1ecd9.64bit and Slic3r-long-retract.2017.09.03.1355.5ef96ef.64bit are wrong

THese two last release place a G11 where not allowed , impossible to keep this versions Or delete the functionnalitΓ© that make a G11 just after the tool change. Because before to be recover the nozzle must move on the right area and only after must be recovered but not directly on the object and the other color . This will make a blob on the printed object and with other color

too much G10 too much G11 it's a war :smile: look

G1 X174.744 Y92.592 E2.91138
G10
G92 E0
G1 Z1.850 F7800.000
G11
G92 E0
G10 S1
G92 E0
T1
G92 E0
G11
G92 E0
G10
G92 E0
G1 X63.672 Y98.204 F7800.000
G11
G92 E0
G1 F900
G1 X63.790 Y98.494 E0.0
Please return to this 
Slic3r-long-retract.2017.09.02.1345.8c9140f.64bit
ghost commented 7 years ago
Please return to this 
Slic3r-long-retract.2017.09.02.1345.8c9140f.64bit

Let's stay at this version that have 2 bugs but that WORKS FINE

This version can works if we DISABLE ' Force retractation after layer '

please return on this versions , it's a good base for continue to solve problems

lordofhyphens commented 7 years ago

Upload the model you are testing with.

I am done with this back and forth.

On Sep 3, 2017 3:05 AM, "studiodyne" notifications@github.com wrote:

Please return to this Slic3r-long-retract.2017.09.02.1345.8c9140f.64bit

β€” You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/alexrj/Slic3r/issues/4106#issuecomment-326790518, or mute the thread https://github.com/notifications/unsubscribe-auth/AAB8CpG3EDxNi_-C8LaDcIfN9lVkfb_pks5sel23gaJpZM4PK3V1 .

ghost commented 7 years ago

ONLY With Slic3r-long-retract.2017.09.02.1345.8c9140f.64bit

With Force Retract after Layer Change DISABLED ' WORKS PERFECT'

1 Minor bug , not important

  • One G10 at the first tool change just after the first T1 , Marlin will ignore it

If ENABLED 1 minor bugs and a big bug :

because G10 will retract the short length , and G10 S1 will retract long length , but when recover , only the long length will be applied and extruder will have a missing length to extrude and this will corrupt printing ... In reality it's not dramatic because after a tool change , the nozzle go to a purge process and if some length are missing on recover , it will not affect printing. But without prime and purge process , print is corrupted

Desktop.zip

_

ghost commented 7 years ago

If you can solve this it's perfect

lordofhyphens commented 7 years ago

@studiodyne Run the next build 7f0e6063ea47bdca1cd27cd8dcb1d5934fa7c8e0. Test with 4106.zip

I've reverted back to the older version and turned on gcode comments to be verbose enough to tell you which extruder Slic3r thinks it is retracting and unretracting.

This configuration also has "retract on layer change" enabled for both extruders.

ghost commented 7 years ago

:large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle:

YOU RULE ! IT WORKS FINE

:large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle::large_blue_circle:

PERFECT !!!! Very good job !! Thk you very much I will print with this one or two weeks and i inform you about if you can add it IN stable version

ghost commented 7 years ago

But if you have time to delete this ' G10 ' that appears after each PRIME tool change it's perfect πŸ˜„ i have modified MarlinFW , to have G10S1 after G10 It means , for the moment slicer works only for me and my own custom FW If you correct this bug , all users of marlin will use it now , without a marlin PR not sure to be accepted Thks for all

look

G1 Z0.350 F7800.000
G10 S1
G92 E0
T1
G92 E0
G10 ⛔️⛔️⛔️⛔️ ONLY ONE  before the first TOOLCHANGE of each extruder , take care to not delete the first G10 of the beginning of the print . I'm sure all first G10 are the same process , then , take care to keep alive the G10 of the starting print πŸ‘ 
G92 E0
G1 X63.571 Y98.340 F7800.000
G11
G92 E0
G1 F1800
lordofhyphens commented 7 years ago

I told you, turn on gcode comments (verbose gcode). You will see what is going on much more clearly.

ghost commented 7 years ago

with FW enabled and layer forced retract

G10 S1 ; retract for toolchange extruder 0
G92 E0 ; reset extrusion distance
T1 ; change extruder
G92 E0 ; reset extrusion distance
G10 ; retract extruder 1  πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅
G92 E0 ; reset extrusion distance
G1 X100.392 Y100.070 F7800.000 ; move to first perimeter point
G11 ; unretract extruder 1
G92 E0 ; reset extrusion distance

FW disabled and layer forced retract

G1 X96.401 Y109.365 E5.31816 ; infill
G1 E-4.68184 F2400.00000 ; retract for toolchange extruder 0
G92 E0 ; reset extrusion distance
T1 ; change extruder
G92 E0 ; reset extrusion distance
G1 E-2.00000 F2400.00000 ; retract extruder 1   πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅πŸ”΅
G92 E0 ; reset extrusion distance
G1 X100.392 Y100.070 F7800.000 ; move to first perimeter point
G1 E2.00000 F2400.00000 ; unretract extruder 1
G1 F1800
G1 X100.346 Y100.195 E2.00413 ; perimeter
ghost commented 7 years ago

May be an init , or Something like that

lordofhyphens commented 7 years ago

See the two retracts are for different extruders after the layer change?