Help with SD-Pause position and behavior

When I choose pause during an SD print, the head moves to a position that is outside its range (opposite from home position) & hits the end of travel (violently).  I always print from SD, just seems to work best for us.

Can I adjust this behavior?  I'd like it to do something like the filament change, where it returns X&Y to home position, and drops the bed 10mm.  Obviously it should return to the correct position when resuming the print as well.

Thanks in advance, these forums have helped me a great deal on this journey.

I fixed this once before on 0.92, but since updating to Dev version 1.0.1 it behaves strangely again.  I cannot find my previous configuration.h to compare to.

Running on Arduino Mega/RAMPS 1.4, Core X-Y mechanics, firmware Dev 1.0.1.

Machine has been in heavy use for about a year before changing the firmware level yesterday.  FWIW, importing the previous configuration.h into the web config tool did not work very well, lots of previously defined settings were dropped.






Comments

  • You need to make changes ALWAYS in config tool or reoeneing config will not see your changes. They are read from the comment section at the end!

    Pause from sd is in SDcard.cpp

    void SDCard::pausePrint(bool intern)
    {
    if(!sdactive) return;
    sdmode = 2; // finish running line
    Printer::setMenuMode(MENU_MODE_PAUSED, true);
    #if !defined(DISABLE_PRINTMODE_ON_PAUSE) || DISABLE_PRINTMODE_ON_PAUSE==1
    Printer::setPrinting(false);
    #endif
    #if NEW_COMMUNICATION
    GCodeSource::removeSource(&sdSource);
    #endif
    if(EVENT_SD_PAUSE_START(intern)) {
    if(intern) {
    Commands::waitUntilEndOfAllBuffers();
    //sdmode = 0; // why ?
    Printer::MemoryPosition();
    Printer::moveToReal(IGNORE_COORDINATE, IGNORE_COORDINATE, IGNORE_COORDINATE,
    Printer::memoryE - RETRACT_ON_PAUSE,
    Printer::maxFeedrate[E_AXIS] / 2);
    #ifdef CNC_SAFE_Z
    if(Printer::mode == PRINTER_MODE_CNC) {
    Printer::moveToReal(IGNORE_COORDINATE, IGNORE_COORDINATE, CNC_SAFE_Z - Printer::coordinateOffset[Z_AXIS], IGNORE_COORDINATE, Printer::maxFeedrate[Z_AXIS]);
    }
    #endif
    #if DRIVE_SYSTEM == DELTA
    Printer::moveToReal(0, 0.9 * EEPROM::deltaMaxRadius(), IGNORE_COORDINATE, IGNORE_COORDINATE, Printer::maxFeedrate[X_AXIS]);
    #else
    Printer::moveToReal(Printer::xMin, Printer::yMin + Printer::yLength, IGNORE_COORDINATE, IGNORE_COORDINATE, Printer::maxFeedrate[X_AXIS]);
    #endif
    Printer::lastCmdPos[X_AXIS] = Printer::currentPosition[X_AXIS];
    Printer::lastCmdPos[Y_AXIS] = Printer::currentPosition[Y_AXIS];
    Printer::lastCmdPos[Z_AXIS] = Printer::currentPosition[Z_AXIS];
    GCode::executeFString(PSTR(PAUSE_START_COMMANDS));
    }
    }
    EVENT_SD_PAUSE_END(intern);
    }

    You see pause position is xmin, ymin+ ylength

    If that goes outside allowed area you seem to have ylength set too high.

  • Hello
    I have the same problem. when I pause (print from sdcard), the head moves back on the y-axis and strikes badly in the belt.
    below the configuration in sdcard.cpp

    void SDCard::pausePrint(bool intern)
    {
        if(!sd.sdactive) return;
        sdmode = 2; // finish running line
        Printer::setMenuMode(MENU_MODE_SD_PAUSED, true);
        if(intern) {
            Commands::waitUntilEndOfAllBuffers();
            sdmode = 0;
            Printer::MemoryPosition();
            Printer::moveToReal(IGNORE_COORDINATE, IGNORE_COORDINATE, IGNORE_COORDINATE,
                                Printer::memoryE - RETRACT_ON_PAUSE,
                                Printer::maxFeedrate[E_AXIS] / 2);
    #if DRIVE_SYSTEM == DELTA
            Printer::moveToReal(0, 0.9 * EEPROM::deltaMaxRadius(), IGNORE_COORDINATE, IGNORE_COORDINATE, Printer::maxFeedrate[X_AXIS]);
    #else
            Printer::moveToReal(Printer::xMin, Printer::yMin + Printer::yLength, IGNORE_COORDINATE, IGNORE_COORDINATE, Printer::maxFeedrate[X_AXIS]);
    #endif
            Printer::lastCmdPos[X_AXIS] = Printer::currentPosition[X_AXIS];
            Printer::lastCmdPos[Y_AXIS] = Printer::currentPosition[Y_AXIS];
            Printer::lastCmdPos[Z_AXIS] = Printer::currentPosition[Z_AXIS];
            GCode::executeFString(PSTR(PAUSE_START_COMMANDS));
        }
    }

    any help?
    tks in advance
  • Enter better pause position in moveToReal that makes no problem.
Sign In or Register to comment.