L'idea è quella di poter fare autobed level solo nei punti che servono, mi spiego; Immaginiamo di fare il solito cubetto 10 x 10 al centro, è inutile fare l'autobed level negli angoli estremi del piatto, ma sarebbe più preciso farlo negli angoli estremi dove verrà stampato il cubetto stesso.
Quindi il primo passo è stato quello di cambiare il comando G29 in modo che potesse prendere ulteriori parametri, il comando cosi diviene G29 Lxmin Bymin Rxmax Fymax. Assumendo che il centro del piatto sia 100,100 il cubo andrà da (95,95) a (105,105) quindi il comando dovrà essere G29 L95 F95 R105 B105, e la nostra sonda farà il bed level in quei punti, naturalmente dando il comando solo G29 farà il controllo nei valori settati da Fw normalmente....
Ora però il problema è che ogni volta che si fa lo slic3r di uno o più oggetti bisognerebbe calcolare questi valore e cambiare il gcode iniziale, quindi per evitare di doverlo fare a mano ho scritto uno script in perl che farà il post-proccesing del gcode e cambierà i valori automaticamente..
Ecco il motivo per cui mi stavo sbattendo sugli script di slic3r..
Lo script è questo:
#!/usr/bin/perl -i
use strict;
use warnings;
use English '-no_match_vars';
use File::Temp qw/ tempfile /;
use File::Copy qw/ move /;
my $file_in = 'D:\Stampanti 3D\Setup\RepetierHost\composition.gcode';
my ($file_out_h, $file_out_name) = tempfile() or die( "Non è possibile aprire il file temporaneo!" );
my $x = 0;
my $y = 0;
my $xmin = 999999;
my $xmax = 0;
my $ymin = 999999;
my $ymax = 0;
open FILE1, $file_in;
while ( < FILE1 > ) {
# Cerca il comando G1 Xxx Yyy nel gcode e memorizza i valori xx e yy
if (/^G1 X ( [ 0-9.]+) Y([0-9.]+)/) {
$x = $1;
$y = $2;
if ($x < $xmin) {$xmin = $x;}
if ($x > $xmax) {$xmax = $x;}
if ($y < $ymin) {$ymin = $y;}
if ($y > $ymax) {$ymax = $y;}
}
}
close FILE1;
open FILE1, $file_in;
while ( < FILE1 > ) {
if (/^G29/) {
print $file_out_h "G29 L$xmin F$ymin R$xmax B$ymax ;autobed level at L(XMIN) F(YMIN) R(XMAX) B(YMAX)\n";
}else{
print $file_out_h $_;
}
}
close FILE1;
close $file_out_h;
move( $file_out_name, $file_in );
Lo script cerca i comandi G1 X??? Y??? e tiene conto dei punti minimi e massimi sia per X che per Y che vengono toccati dal gcode, li memorizza e poi riscrive il comando G29 mettendo i valori memorizzati con la giusta sequenza del comando.
Quindi basta posizionare i miei pezzi ovunque nel piano, far partire lo slicer e quel punto solo dove andrà a stampare il nostro nozzle verrà fatto l'auto bed level...
Se si vuole usare bisognerà inserire il percorso giusto del file composition.gcode in my $file_in =
Edited 1 time(s). Last edit at 08/13/2014 08:10AM by MagoKimbra.
COMPRA ITALIANO - sostieni le nostre aziende - sostieni la nostra gente - sostieni il tuo popolo - sosterrai te stesso.
Alberto C. felice possessore di una
Kossel K2
My Blog -
My Thingiverse