PROGRAMMIERER gesucht - aus gcode autom. Zeilen löschen

OP #4868062
Lesenswert?

Die Files sind für 3D-Drucker - gcode
Meine Slicersoftware schafft es leider nicht so wie ich will.

Kurze Erklärung:
zB: Ein Bauteil wird mit 2 Materialien gedruckt!
Im heißen Hotend (Druckkopf) schmilzt der Kunststoff (Filament)- und
rotzt etwas herunter.
Heißt im Hotend verschwindet etwas Material.
Fährt das Hotend wieder zum Bauteil um zu drucken - fährt es vorher zum
Prime Pillar oder Wipe Tower genannt - druckt diesen - um wieder
Material zu haben.

Diese Funktion brauche ich aber nur so lange, wie dieses Material
gebraucht wird.
Deshalb hätte ich gerne, daß der Tower nur so lange gedruckt wird, bis
ich ihn nicht mehr brauche... Dann Temperatur im nicht mehr benötigtem
Hotend senken und das Tower nicht mehr drucken.

Das Programm kann dies leider nicht!
Mein Ansatz - aus dem gcode File dieses nicht gewünschte Tower Ding
löschen!

Im Anhang ein paar Fotos zum Verständnis.

Der Code beginnt mit
G1 X160.522 Y144.132 F3600
G92 E0
G1 E-5.0000 F3600
G1 Z10.210 F1200
; prime pillar <------------ START
G1 x109....

und endet mit
; layer 16, ...
oder
; tool H0.200 ...
oder ähnlichem

Aber auf alle Fälle mit ";"

Kann mir jemand ein Programm schreiben das diese Bereiche löscht?
Heißt zB ab Zeile 34515
Ein paar Zeilen vor ";prime pillar" - also von inkl. "G92 E0" bis zum
nächsten ";" löschen!
oder alle Zeilen mit ";" beginnend markieren...

ev. noch einen Retract wie "G1 E-5.0000 F3600" einfügen...

die Files können schon um die 40MB haben...
Angehängte Dateien:
Gast #4868089
Lesenswert?

Franz S. schrieb:

Das ist doch inkonsistent oder zumindest schlecht erklärt. Der Code:

> ; prime pillar <------------ START

Die Erklärung:

> Ein paar Zeilen vor ";prime pillar" - also von inkl. "G92 E0" bis zum
> nächsten ";" löschen!

Also ist "; prime pillar" eben NICHT der Start, sondern das Ende der 
Löschaktion? Und woher bestimmt sich nun der Start? Was an "G92 E0" ist 
so speziell? Oder soll immer von "G2 E0" bis zur nächsten Zeile gelöscht 
werden, die mit ";" startet? Oder sollen jeweils vor einem Semikolon die 
vorherigen N Zeilen gelöscht werden?
Gast #4868109
Lesenswert?

Franz S. schrieb:

> Also ab einer gewünschten Zeile - oder ab dem Keyword "Layer 59" immer
> dieses Muster löschen...
>
> Jetzt besser erklärt? ;-)

Nee.. weder geht daraus hervor, was das spezielle Kennzeichen des Starts 
ist, noch, wieso es beim einen Semikolon 17517 nicht endet, dafür aber 
beim nächsten, obwohl das auch nur Zufall sein kann.

Wirst Du wohl manuell machen müssen, denn programmiert bräuchte man 
schon eine klare Vorstellung. Mit "dieses Muster" wird das nichts.
Gast #4868130
Lesenswert?

Na dann ist es doch einfach:

1. suche in original Datei: ; prime pillar
2. speichere Zeilennummer-3 als Anfang1
3. suche nächstes ; nach Zeilennummer
4. speichere als Ende1
5. wiederholen

entweder als Hilfsdatei oder als Liste.

Dann Datei noch mal durchlaufen.
1. beginne mit Zeile 1 speichere diese in neue Datei bis Anfang1
2. speichere nicht in neue Datei bis Ende1
3. wiederholen bis zum Ende der Originaldatei
OP #4868137
Lesenswert?

könnten aber auch 4 Zeilen sein... es sollte also bei "G92 E0" beginnen 
bzw. gesucht werden.

siehe Zeile  247348 bis 247352
(File im Anhang).
bei diesem File müßte ab Zeile 247348 die Automation angewendet 
werden...

G1 X144.478 Y158.802 E5.2207
G1 X150.121 Y153.159 E5.3288
G1 X150.121 Y157.685 E5.3900
G1 X140.184 Y167.621 E5.5804
G1 X144.710 Y167.621 E5.6417
G1 X150.120 Y162.211 E5.7453
G92 E0
G1 E-4.0000 F2400
G1 Z44.900 F1200
; layer 448, Z = 44.85
; prime pillar
G1 X43.260 Y184.240 F12000
G1 Z44.850 F1200
G1 E0.0000 F2400
G92 E0
G1 X43.260 Y198.761 E0.1967 F600
G1 X28.740 Y198.761 E0.3933
G1 X28.740 Y184.240 E0.5900
G1 X43.260 Y184.240 E0.7866
G92 E0
G1 E-4.0000 F2400
Angehängte Dateien:
Gast #4868148
Lesenswert?

ne grundsätzliche Frage.. wie soll denn das mit dem Programm überhaupt 
gehen? Irgendwelche Linux-Tools für Skripte wirste ja wohl kaum 
installiert haben, und von irgendwelchen Fremden ein ausführbares 
Programm zu nehmen wäre schon arg leichtsinnig, kann ja sonstwas 
drinsein.
OP #4868150
Lesenswert?

hp-freund schrieb:
> Also wenn Zeile mit "; prime pillar" gefunden, suche Rückwärts bis
> "G92".
> Speichere als AnfangX.

würde ich auch so sehen.


Aber wartet mal kurz Leute.
Werde morgen mal ein paar Tests machen.
Bin gerade beim überlegen warum das löschen von
"; prime pillar" bis wirklich zum nächsten ";" nicht vernünftiger 
wäre...

Sollte - glaube ich zumindest - auch gehen.
Werde mal manuell löschen und einen Testlauf machen.

Wird dann so aussehen:
G1 X109.820 Y140.794 E0.5760 // Druckbefehle
G1 X109.872 Y140.847 E0.5770 // Druckbefehle
G1 X109.872 Y136.321 E0.6383 // Druckbefehle
G1 X107.179 Y133.628 E0.6899 // Druckbefehle
G92 E0 // Filamentzähler auf 0
G1 E-4.0000 F2400 // Retract -4mm
G1 Z5.900 F1200 // Bett senken
; prime pillar
; layer 30, Z = 6.05
; inner perimeter
G1 X99.720 Y147.202 F12000 // neue Position anfahren
G1 Z6.050 F1200 // Bett heben
G1 E0.0000 F2400 // Retract auf 0 - also +4mm
G92 E0 // Filamentzähler auf 0
G1 X99.720 Y133.798 E0.1815 F2415 // Druckbefehle
G1 X100.298 Y133.220 E0.1926 // Druckbefehle
G1 X109.702 Y133.220 E0.3200 // Druckbefehle

außer ich habe einen Denkfehler - sollte aber so funktionieren...

Werd es morgen testen - Meld mich wieder!
Danke vorerst mal für eure Hilfsbereitschaft!!!
Gast #4868402
Lesenswert?

für solche kleinen Aufgaben ist JavaScript und node.js ganz gut 
geeignet.
Hier ein Beispiel für deine Anforderung:

1
var fs = require("fs");
2
var contents = fs.readFileSync("craddle.gcode").toString();
3
var a=contents.split("\r\n");
4

5
var ioffs=0;   // Anzahl gelöschter Zeilen als Offset für die Ausgabe
6

7
var istart=0;  // Index von 'G92 E0'
8
var istart2=0; // Index von '; prime pillar'
9
for (var i=0; i<a.length; i++)
10
{
11
  if (a[i]=="G92 E0" && istart2==0) 
12
    {
13
    // Anfang gefunden und merken
14
    istart=i;  
15
    continue;
16
    }  
17

18
  if (   istart>0 
19
      && istart2==0 
20
      && a[i]=="; prime pillar")
21
    {
22
    if (i<(istart+5))
23
      {   
24
      istart2=i;
25
      continue;
26
      }
27
    }
28

29
  if (istart>0 && istart2>0 && a[i][0]==';')
30
    {
31
    console.log("-----------------------------------"); 
32
    console.log("cut from line " + (istart+ioffs) + " to " + (i+ioffs));
33
    for (var n=istart; n<i; n++)
34
      console.log("  " + a[n]); 
35
    console.log();
36
    
37
    // Bereich löschen und i anpassen
38
    a.splice(istart, i-istart);
39
    ioffs+=i-istart;
40
    i=istart;
41
    istart=0;    
42
    istart2=0;    
43
    }    
44
}  
45

46
// das Array als neue Datei schreiben
47
var out="";
48
for (var i=0; i<a.length; i++)
49
  out+=a[i]+"\r\n";
50
fs.writeFileSync("craddle2.gcode", out);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren