Asi jsem v noci udělal jen náhled a zapomněl to postnout..
Jak píše FBITuco, je to v souboru SDCard.cpp, deklarace funkce pausePrint (je to kousek od začátku):
- Kód: Vybrat vše
void SDCard::pausePrint(bool intern)
{
if(!sd.sdactive) return;
sdmode = false;
Printer::setMenuMode(MENU_MODE_SD_PAUSED,true);
#if FEATURE_MEMORY_POSITION
if(intern) {
Commands::waitUntilEndOfAllBuffers();
Printer::MemoryPosition();
#if DRIVE_SYSTEM==3
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
}
#endif
}
Problém je pravděpodobně v tom, že se repetier snaží zajet Y do MAXu (parametr Printer::yMin+Printer::yLength u posledního příkazu Printer::moveToReal), ale při tisku už je tato hodnota vyšší o aktuální pozici Y, což nemá ošetřeno a vyjede za hranici (možná by to bylo ok s osazeným MAX koncákem v Y)
Funkce moveToReal dělá jednoduchou věc - posun v osách: moveToReal(x, y, z, e, feedrate). Když se v parametru některé z os použije konstanta IGNORE_COORDINATE, v této ose se nikam nepohne.
Takže jsem si to upravil:
- Kód: Vybrat vše
Printer::moveToReal(Printer::xMin,Printer::yMin,20,IGNORE_COORDINATE,Printer::maxFeedrate[X_AXIS]);
Vrátí XY do home, Z vyjede o 20mm nahoru. Po pokračování tisku vrátí osy do poslední pozice před přerušením a pokračuje v tisku. Je možné, že podle kvality koncáků se zahomovaním může do tisku zanést chyba, ale vyzkoušel jsem to už v noci, opakovaně v reálném tisku pauznout, vyměnit barvu filamentu a pak pokračovat a alespoň u mě to funguje naprosto spolehlivě.
Předpokládám, že Z+20mm bude mít taky snahu vyjet za hranici, pokud bude extruder u hranice tiskové výšky, ale pravděpodobnost, že se dostanu s tiskem tak vysoko a ještě budu potřebovat pauzovat tisk je tak malá, že to zatím neřeším