Ein G-code Befehl der das Filament in 1mm Schritten in den Extruder schiebt bis der F Wert ein delta Wert überschreitet. Ideal im Startcode um das Filament zu "laden". Luftdrucke weil vergessen wurde das Filament zu laden gehören nun der Vergangenheit an.
Beispiel:
M4001 S1000
Beträgt der F-Wert beim Ausführen das Befehls 1000, wird das Filament in den Extruder geschoben bis der Wert 2000 (1000 + 1000) überschritten wurde.
Getestet als Einzelbefehl in Repetier-Host und als Sd-Card abfolge im Startcode.
Der Extruder muss dabei aufgeheizt sein.
Startcode:
Code: Alles auswählen
;--------------------------------------
; Start Code RF1000 exp
;--------------------------------------
G28 ; home all axes
G90 ; use absolute coordinates
M82 ; use absolute distances for extrusion
G1 Z5 F300 ; lift nozzle, v=500mm/min = 8,3mm/s
M109 S[first_layer_temperature] ; wait for extruder temp to be reached
M400 ; Wait until move buffers empty
M4001 S1000; Load Filament until F > delta 1000
M400 ; Wait until move buffers empty
M3001 ; Aktivate Z-Compensation
;M3006 S+200 ; configure the static z-offset (units are [um]) - Firmware Version > 0.91.48
G92 E0 ; start line - reset extruder
;G1 E-2 F300; extruder retract 2mm
G1 X230 Y22 F5000 ; v=5000mm/min = 83,3mm/
G1 Z0.25 F300
G1 E5 F960
G92 E0
G1 X20 E15 F1000
; Acceleration up to...
; Acc printing
M201 X1000 Y1000 Z100
; Acc travel
M202 X1000 Y1000 Z100
;--------------------------------------
Hier die Ansicht der Änderung der neuen Filemantload Funktion: https://github.com/X4r3/Repetier-Firmwa ... 875b1980d8
Leider wird der komplette Code als Änderung angezeigt keine Ahnung woran das liegt, dabei verwende ich das offizielle Github Programm. Entweder mache ich was falsch oder das Programm ist einfach nur dumm.
Hier nochmal der wesentliche Code in der RF.ccp:
Code: Alles auswählen
case 4001: // M4001 S1000 - Load filament until F value > delta 1000
{
if( Extruder::current->tempControl.currentTemperatureC >= MIN_EXTRUDER_TEMP )
{
if( pCommand->hasS() )
{
// test and take over the specified value
nTemp = pCommand->S;
float deltaF = nTemp;
float fwert = readStrainGauge( ACTIVE_STRAIN_GAUGE );
//Com::printFLN( PSTR( "M4001: deltaF: " ), deltaF );
//Com::printFLN( PSTR( "M4001: fwert: " ), fwert );
while( 1 )
{
#if FEATURE_WATCHDOG
HAL::pingWatchdog();
#endif // FEATURE_WATCHDOG
Commands::checkForPeriodicalActions();
GCode::executeFString(Com::tMountFilamentUntilF);
Commands::waitUntilEndOfAllMoves();
float nCurrentPressure = readStrainGauge( ACTIVE_STRAIN_GAUGE );
//Com::printFLN( PSTR( "M4001: nCurrentPressure: " ), nCurrentPressure );
if( nCurrentPressure > fwert + deltaF )
{
//Com::printFLN( PSTR( "M4001: break - nCurrentPressure > fwert + deltaF" ) );
break;
}
}
}
}
}