Jump to content
Ultimaker Community of 3D Printing Experts

Cura 4.7.1 outputting code that sets global extruder temp on dual extruder printer even if one is disabled


Recommended Posts

Posted · Cura 4.7.1 outputting code that sets global extruder temp on dual extruder printer even if one is disabled

Hi,

 

I posted a reply in another thread about the Qidi X-Pro regarding this, but since this might be a discovered bug, I'm making a thread to bring attention to it.

 

So the problem is that if you have a dual extruder printer like the Qidi X-Pro and you only want to print using one extruder, Cura (v4.7.1 in my case) will output code that heats up both extruders, which can result in warping if the 2nd extruder passes over material for a prolonged period. This occurs even if you disable the other extruder, attempt to set its material temp to 0C, or even force its temp to 0C in the printer start code settings. This is because at the end of the instruction set for LAYER 0 (the initial layer), Cura outputs the line:

 

M104 S200 ;(or whatever your temp is set to)

 

This is a global temperature set command, and should instead have

 

T<extruder index>

 

at the end, to specify the extruder. The heating problem can be fixed by modifying or removing this line (if you already are setting temp in your start code). I've tried fiddling around with various settings to make this not be generated in the code, but nothing is sticking. I think Cura just needs to be patched to output an extruder specific command there.

  • Link to post
    Share on other sites
    Posted · Cura 4.7.1 outputting code that sets global extruder temp on dual extruder printer even if one is disabled
    From the MarlinFW.org site for M104...
     
    [T<Hot End Index]  Hotend index. If omitted, the currently active hotend will be used.

    Examples

    Set target temperature for the active hotend

    M104 S185

    As Tinkergnome mentioned in the other post, you may have a firmware problem.  M104 isn't "global" and without any "T" parameters is supposed to set the temperature on the "Currently Active" hot end only.  For any other hot end to be effected there must be an explicit parameter.

     

    T0                       ;change to extruder 0

    M104 T1 S175 ;Set extruder 1 to a standby temperature of 175

    M104 S200    ;Set the current extruder (in this example it's 0) to 200.  T1 isn't mentioned so it stays at 175.

     

    T1                       ;change back to extruder 1

    M104 T0 S175 ;Set extruder 0 to a standby temperature of 175

    M104 S200    ;Set the current extruder (now it's 1) to 200.  T0 isn't mentioned so it stays at 175.

     

    Any other action taken by the printer firmware isn't right.

  • Link to post
    Share on other sites
    Posted · Cura 4.7.1 outputting code that sets global extruder temp on dual extruder printer even if one is disabled

    What defines the hot end as active? As far as I can tell, disabling an extruder in Cura doesn't change the code output.

  • Link to post
    Share on other sites
    Posted · Cura 4.7.1 outputting code that sets global extruder temp on dual extruder printer even if one is disabled

    The active tool is the last one that was called out in a "T" command.  A "T" command is a modal command.  It stays in effect unless another "T" command changes it.

  • Link to post
    Share on other sites
    Posted · Cura 4.7.1 outputting code that sets global extruder temp on dual extruder printer even if one is disabled

    Is that an explicit

     

    T0

     

    or does having it as an argument count too?

     

    ie;

     

    M104 S0.0 T1

     

  • Link to post
    Share on other sites
    Posted · Cura 4.7.1 outputting code that sets global extruder temp on dual extruder printer even if one is disabled

    Only an explicit tool change command sets the active hotend (T0, T1...).

     

    Again: all assuming that the printer is driven by Marlin. No clue if other firmware behaves different.

     

  • Link to post
    Share on other sites
    Posted · Cura 4.7.1 outputting code that sets global extruder temp on dual extruder printer even if one is disabled

    I used "QIDI Print" (Cura 4.3.0) to generate three gcode files.  (I used two 25mm calibration cubes as models)

     

    This is from a file with the "R" extruder disabled:

    T1

    G92 E0
    G92 E0
    G1 F1800 E-3

     

    This is from a file with the "L" extruder disabled:

    T0

    G92 E0
    G92 E0
    G1 F1800 E-3

     

    And this is from a file that uses both extruders:

    G92 E0
    G92 E0
    G1 F1800 E-3

     

    In all three cases, no mention is made in the G92 or G1 lines of which extruder should be reset to 0 and then retract 3mm.  The firmware knows which extruder to send the steps to.  I understand that this is indirect evidence and does not mean that M104 and M109 work the same way in your printer.

     

    Your printer also excepts (at least two) custom GCODE commands like M4010 and M2100 that are generated by QIDI Print.  These might have something to do with the display (M4010 in particular since it sends Hex code).  It appears that developers at QD did some alteration to Cura 4.3.0 for their printers.  The firmware (which according to the generated Gcode files is Marlin) must have been altered to accept those commands since neither is listed on the MarlinFW site as being supported.  If QIDI Print is using post-processing plugin(s) to generate those special Gcodes, maybe you can copy the plugin(s) over to your newer Cura installation.

  • Link to post
    Share on other sites

    Create an account or sign in to comment

    You need to be a member in order to leave a comment

    Create an account

    Sign up for a new account in our community. It's easy!

    Register a new account

    Sign in

    Already have an account? Sign in here.

    Sign In Now
    ×
    ×
    • Create New...