Jump to content
Ultimaker Community of 3D Printing Experts

Marlin M218 Extruder Offset.Documented as only X / Y but the code says also Z?


Recommended Posts

Posted (edited) · Marlin M218 Extruder Offset.Documented as only X / Y but the code says also Z?

Hi,

Another question for Marlin experts.

I was wondering how to change the Z offset by firmware for my dual extruder bla bla bla.

After googling and reading everywhere, Marlin on Ultimaker offset adjustment only says X & Y as posible adjustments. But after opening the Marlin_main.cpp to check what the M218 code actually does and as far as I can read-code it seems to be ready to use Z offset changes.

 

#if EXTRUDERS > 1   case 218: // M218 - set hotend offset (in mm), T X Y   {     if(setTargetedHotend(21){       break;     }     if(code_seen('X'))     {       extruder_offset[X_AXIS][tmp_extruder] = code_value();     }     if(code_seen('Y'))     {       extruder_offset[Y_AXIS][tmp_extruder] = code_value();     }     #ifdef DUAL_X_CARRIAGE     if(code_seen('Z'))     {       extruder_offset[Z_AXIS][tmp_extruder] = code_value();     }     #endif

 

Does that really means that I could do a M218 T1 Z0.3 (for example) and it should work? I mean, if only 'kick in' if there's DUAL_X_CARRIAGE, but I assume that if I kill that 'if' check, it should just allow it, or there will be more dual_x_carriage checks for this to kickin?

Edited by Guest
  • Link to post
    Share on other sites
    • 3 months later...
    Posted · Marlin M218 Extruder Offset.Documented as only X / Y but the code says also Z?

    No I didn't. For now until a more advancedfirmware/software it's out I just use simplify3d to set the z offset of the second extruder (or the first depends on who it's lower than the other to avoid the problem of the z stop).

  • Link to post
    Share on other sites
    Posted · Marlin M218 Extruder Offset.Documented as only X / Y but the code says also Z?

    I change g code offset for each extruder processes, and level the bed to the higher extruder. Ofc on my system I have 2mm margin of error on the parking system and that helps, but it's good enough to avoid crash on the bed. For extruder 0 offset 0 and for extruder 1 I set a 0.8 offset, the bed lowers when it changes. Bless the software =)

  • Link to post
    Share on other sites
    Posted (edited) · Marlin M218 Extruder Offset.Documented as only X / Y but the code says also Z?

    Anyone get anywhere on this? I wish slic3r had this option, but for now I'm trying firmware implementation. When I comment out the ifs it seems to work (compiles/uploads fine) and when I send M218 T0 Xxxx Yyyy Zzzz (works fine), but when I send M218 T1 Xxxx Yyyy Zzzz (or even just M218 T0 Xxxx Yyyy) it freezes. I'm thinking there are other areas that have if statements that expect dual_x_carriage to be defined, and are therefor not working...

    NEVERMIND I GOT IT! You just have to comment out another if here:

    // Extruder offsets

    #if EXTRUDERS > 1

    #ifndef EXTRUDER_OFFSET_X

    #define EXTRUDER_OFFSET_X { 0 }

    #endif

    #ifndef EXTRUDER_OFFSET_Y

    #define EXTRUDER_OFFSET_Y { 0 }

    #endif

    float extruder_offset[][EXTRUDERS] = {

    EXTRUDER_OFFSET_X,

    EXTRUDER_OFFSET_Y

    //#if ENABLED(DUAL_X_CARRIAGE)

    , { 0 } // supports offsets in XYZ plane

    //#endif

    };

    #endif

    and the original, both in marlin_main:

    #if EXTRUDERS > 1

    /**

    * M218 - set hotend offset (in mm), T X Y

    */

    inline void gcode_M218() {

    if (setTargetedHotend(218)) return;

    if (code_seen('X')) extruder_offset[X_AXIS][target_extruder] = code_value();

    if (code_seen('Y')) extruder_offset[Y_AXIS][target_extruder] = code_value();

    //#if ENABLED(DUAL_X_CARRIAGE)

    if (code_seen('Z')) extruder_offset[Z_AXIS][target_extruder] = code_value();

    //#endif

    SERIAL_ECHO_START;

    SERIAL_ECHOPGM(MSG_HOTEND_OFFSET);

    for (int e = 0; e < EXTRUDERS; e++) {

    SERIAL_CHAR(' ');

    SERIAL_ECHO(extruder_offset[X_AXIS][e]);

    SERIAL_CHAR(',');

    SERIAL_ECHO(extruder_offset[Y_AXIS][e]);

    //#if ENABLED(DUAL_X_CARRIAGE)

    SERIAL_CHAR(',');

    SERIAL_ECHO(extruder_offset[Z_AXIS][e]);

    //#endif

    }

    SERIAL_EOL;

    }

    #endif // EXTRUDERS > 1

    Edited by Guest
    solved!
    • Like 1
    Link to post
    Share on other sites
    Posted · Marlin M218 Extruder Offset.Documented as only X / Y but the code says also Z?

    Nice one!

  • Link to post
    Share on other sites
    Posted (edited) · Marlin M218 Extruder Offset.Documented as only X / Y but the code says also Z?

    ok, another year went by and there is another guy like to use the z offset... :-)

    So IF I set all a.m. modifications

    AND define a new variable EXTRUDER_OFFSET_Z in configuration.h in the area of offset definition

     

    // Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).// The offset has to be X=0, Y=0, Z=0 for the extruder 0 hotend (default extruder, T0).// For the other hotends it is their distance from the extruder 0 hotend.// #define EXTRUDER_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis// #define EXTRUDER_OFFSET_Y {0.0, 5.00}  // (in mm) for each extruder, offset of the hotend on the Y axis#define EXTRUDER_OFFSET_Z {0.0, 1.00}  // (in mm) for each extruder, offset of the hotend on the Z axis

     

    AND put it in the correct area of marlin_main.ccp (incl. commenting out the dual stuff),

     

    // Extruder offset#if EXTRUDERS > 1//#ifndef DUAL_X_CARRIAGE//  #define NUM_EXTRUDER_OFFSETS 2 // only in XY plane//#else #define NUM_EXTRUDER_OFFSETS 3 // supports offsets in XYZ plane//#endiffloat extruder_offset[NUM_EXTRUDER_OFFSETS][EXTRUDERS] = {#if defined(EXTRUDER_OFFSET_X) && defined(EXTRUDER_OFFSET_Y) && defined(EXTRUDER_OFFSET_Z) EXTRUDER_OFFSET_X, EXTRUDER_OFFSET_Y, EXTRUDER_OFFSET_Z#endif};#endif

     

    it should be possible to define the z offset during compilation and no need for M218 - isn't??

    Well, I'm using a Marlin version of 2014, so it might look a bit different now.

    (but my UMO runs fine on it... so why change a running system) :-)

    Edited by Guest
  • 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
    • 18 Visiting our virtual showroom

      1. 1. Have you visited our virtual showroom before?


        • Yes
        • No
      2. 2. If yes - what content did you find most interesting?


        • Information about Ultimaker ecosystem
        • Applications & application stories
        • Customer success stories
        • Webinar sessions
        • Material wall & ecosystem partners
        • New product introduction; software subscription plans
      3. 3. What of the below would make you consider visiting (again)?


        • New Live Ultimaker Webinar streams
        • ‘Ask Me Anything’ with industry experts or Ultimaker staff via main stage and public chat
        • New customer success stories
        • New applications
        • Presentations/news from ecosystem partners
        • Opportunity to meet representatives for an interactive tour
        • Helpful videos like Software tutorials
        • Other; leave input in a comment below!

    • Our picks

      • Ultimaker turns 10: A look back
        Ultimaker is turning 10 years old and that means it is story telling time! We'll explore 2010-2014, traveling through the evolution of the business from the Protobox and Ultimaker Original, to the major leaps forward with the Ultimaker 2 and Ultimaker 3.
          • Like
        • 0 replies
      • Ultimaker Transformation Summit
        Visit our virtual showroom and learn more about the Ultimaker ecosystem!
        • 14 replies
      • New here? Register your Ultimaker for free 3D printer onboarding course
        Hi,
         
        Often getting started is the most difficult part of any process. A good start sets you up for success and saves you time and energy that could be spent elsewhere. That is why we have a onboarding course ready for
        Ultimaker S5 Pro Bundle, Ultimaker S5, Ultimaker S3 Ultimaker 2+ Connect.   
        They're ready for you on the Ultimaker Academy platform. All you need to do to gain access is to register your product to gain free access. 
        Ready? Register your product here in just 60 seconds.
          • Like
        • 0 replies
    ×
    ×
    • Create New...