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...
:
Bearbeitet durch User
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?
hast recht - war unverständlich... der markierte Teil würde gelöscht gehören... Also ab einer gewünschten Zeile - oder ab dem Keyword "Layer 59" immer dieses Muster löschen... Jetzt besser erklärt? ;-)
Franz S. schrieb: > Also ab einer gewünschten Zeile - oder ab dem Keyword "Layer 59" immer > dieses Muster löschen... > > Jetzt besser erklärt? ;-) Naja, was ist "dieses Muster" genau? Woran genau erkennt man das Ende des zu löschenden Bereichs genau?
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.
es beginnt mit "G92 E0" 3 Zeilen vor "; prime pillar" und endet mit dem nächsten ";" zB "; layer 26"
das Muster startet mit "G92 E0" drei Zeilen vor "; prime pillar" dann kommt das ";" von "; prime pillar" und endet mit dem nächsten ";" als Beispiel die Datei im Anhang. hier wäre es ab Zeile 6449 zum löschen.
Franz S. schrieb: > hier wäre es ab Zeile 6449 zum löschen. Meinst Du nicht 6446 bis 6548 ? Oder vielleicht 6446 bis 6545 ?
gott sei dank bin ich kein lehrer... ;-) von 6446 bis einschließlich 6548
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
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
Also wenn G92 E0 kommt, ohne daß 3 oder 4 Zeilen danach das prime pillar kommt, dann leitet das keine Löschsequenz ein, richtig?
Also wenn Zeile mit "; prime pillar" gefunden, suche Rückwärts bis "G92". Speichere als AnfangX.
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.
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!!!
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); |
hey super, vielen herzlichen Dank! genau nach Wunsch... und sogar zum Anpassen. Habs auch schon getestet - funktioniert! Danke nochmal an alle...
Ich melde mich dann bei dir wenn ich mal was aus dem 3D-Drucker brauche...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.