Alternative zu str(int(float(self.feedrate)))

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 9. September 2014, 12:11

Vielleicht gibt es auch schon Projekte oder Python-Module, die so etwas können?

Durch pypi.python.org und etwas googlen habe ich auf die schnelle folgendes gefunden:

- http://sourceforge.net/projects/pycam/
- http://replicat.org/generators
- http://wiki.linuxcnc.org/cgi-bin/wiki.p ... Generators

K.A. ob da etwas dabei ist oder man Teile davon nutzen oder als Inspiration nehmen könnte :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))
assert encoding_kapiert
hirnwunde
User
Beiträge: 15
Registriert: Mittwoch 3. September 2014, 09:41

Dienstag 9. September 2014, 12:31

Bzgl der Zeilenumbrueche in meinen Posts.

Geht es nur mir so, oder sind Texte, die ueber den ganzen Bildschirm gehen (bei 1920px Breite) weitaus unleserlicher als schmale Einrueckung?
Wenn ich mit den Augen erstmal wieder 50cm nach links muss habe ich Probleme, die naechste Zeile zu finden ... abr gut: das mag meine Alter zuzuschreiben sein. Ich lass ab sofort (hier) die Finger von haeufigeren '\n's :)

Das Tutorial habe ich erstmal ausser acht gelassen, da es fuer Python3 vorgesehen ist, ich aber 2.7 nutze. Mir war der Umstand, dass es fuer 2.7 mehr Module als fuer 3.x gibt ausschlaggebend dafuer, 2.7 zu nutzen. Ungeachtet dessen, ob ich ueberhaupt die Masse an Modulen benoetige. Ich habe nicht ausreichend darueber nachgedacht!

Bisher bin ich mit der "Lern"-Strategie ganz gut gefahren. Aber das war wohl eher mein eigenes Empfinden. Denn ein Grossteil der Arbeiten werden/wurden nur intern genutzt und ich bin der einzige hier, der "programmiert" ;)

@BlackJack

Bezueglich des chaotischen Codes gebe ich dir voll und ganz Recht. Das sind Ergebnisse aus Try&Error ...

Was soll mit dem G-Code passieren?

Ich moechte alle Befehle, die mein Plotter nicht versteht, herausfiltern. (und dem Benutzer spaeter einen Hinweis darauf geben)
Der Umfang der G-Code-Spezifikation ist riesig. Da es jedem Hersteller freigestellt ist, eigene G-Codes zu definieren. Meine Deckel-Maho (von Anno dazumal) deckt die herstellerunabhaengigen ~25 G-Befehle ab, hat aber noch ca. 70 herstellereigene Befehle. Es kann sein, das es Schnittmengen der Befehle auf einer Fanuc (ein anderer CNC-Maschinen-Hersteller) gibt. Aber das ist eben nicht "Vorschrift".
Mein Plotter kann hingegen nur 8 G-Befehle und magere 4 M-Befehle verarbeiten.
Ich habe mir zwar einen Post-Prozessor fuer mein CAM-System geschrieben, um aus SurfCAM hgeraus G-Code fuer meinen Plotter auszugeben. Aber das ist halt nur fuer SurfCAM der Fall. Andere CAM-Systeme wissen nichts von meinem Plotter und geben halt ISO-Code aus. Dieser beinhaltet bspw. auch einen G2-Befehl, um Boegen zu fahren.
Das kann mein Plotter (noch) nicht.
Und somit versuche ich mit dem einlesen das Codes halt nicht unterstuetzte Befehle auszufiltern. Ebenso sollten die Kommentare ausgefiltert werden. (Start einen Kommentars: (, Ende: ))
Im Grunde sollte in der Funktion nur das ausgegeben werden, was auch vom Plotter unterstuetzt wird.

Ein % ist eher ein Steuerzeichen, das beim Ein/Auslesen (nicht der Abarbeiteung des NC-Programms) die Maschine weiss, hier ist das Programm zu Ende.

Mit einfache Sprache wollte ich nicht sagen, das sie trivial sei. Sie ist nur um Laengen simpler zu verstehen als ASM, Java oder Python.

Code: Alles auswählen

O0001
M6 T12
M3 S12000
G0 X30 Y30
G0 Z12 M8
(Das ist ein Kommentar)
G1 Z1 F200
G1 X30 Y60 F350
G1 X60 Y60
G1 X60 Y30
G1 X30 Y30
G1 Z20 F500
G0 Z200
M6 T0
M30
  1. Programmnummer 0001
  2. M6 = Wechsel ein Werkzeug ein - In diesem Falle T12
  3. M3 = Spindel drehen im Uhrzeigersinn / S12000 mit 12000 U/min-1
  4. G0 = im Eilgang (Schnellsmoegliche Bewegung der Achsen) auf Position X30/Y30
  5. das selbe nochmal auf Position Z12 (ohne X/Y-Bewegung)
  6. G1 = Fahre mit dem bei F (350) angegebenen Vorschub auf Z1 / ist dieser nicht angegeben, wird der zuletzt angegebene Wert genommen
  7. fahre auf Position X30/Y60 mit dem zuletzt angegebenen Vorschub (350)
In Zeile 11 Wird dann mit einem Vorschub von 500 Z bewegt und Z.13. legt das Werkzeug wieder ins Magazin ab, sodass sich in der Spindel keines mehr befindet. M30 sagt der Maschine, das das Programm nun zu Ende ist.

Ich koennte in den NC-Programmen Unterprogramme aufrufen, denen wenn noetig Uebergabeparameter mitgeben, in den NC-Programmen mathematische Funktionen nutzen ... von den Funktionen ist mein Plotter aber Meilenweit entfernt und ich habe auch gar keinen Anspruch darauf, das der das jemals kann. Deswegen eine Art Vorfilter, der alles nicht unterstuetztes ignoriert und nur die unterstuetzten Befehle an den Arduino sendet. (das geschieht dann via Serieller Schnittstelle)


@ Hyperion:
Was Du da gefunden hast, sind Programme, die G-Code aus 2D/3D-Daten erstellen.
Ich will ja schon erstellten G-Code auf dessen Kompatibilitaet mit meinem Plotter ueberpruefen. ;-)
Danke dennoch fuer den Einsatz :)
BlackJack

Dienstag 9. September 2014, 13:28

@hirnwunde: Also ich kann Texte über den ganzen Breitbildschirm auch nicht lesen, dass muss ich ja aber auch nicht, denn ich stelle ja nicht alles im Vollbild dar sondern jeweils so breit das ich es gut lesen kann. Und bei Fliesstext bricht das dann eben an den Stellen um bei denen *ich* die Breite durch das Fenster vorgebe. Und bei jemand anderem der es gerne breiter oder schmaler haben möchte kann der sich das auch so hinziehen wie er es gerne hätte. Diese Möglichkeit hat der Leser nicht mehr wenn der Autor selber Umbrüche dort einbaut wo *ihm* das Lesen am angenehmsten erscheint.

Also ob G-Code simpler ist als Assembler (die Sprache), also ohne irgendwelche Pseudo-Instructions für den Assembler (das Programm zum übersetzen), halte ich nicht zwingend für gegeben. Ein RISC-Prozessor oder so kleine 8-Bit-Prozessoren wie sie in den Heimrechnern früher verbaut wurden, sind ja auch nicht wirklich kompliziert. :-)

Das was Du bis jetzt beschreibst was mit dem Quelltext passieren soll kann eigentlich alles mit Textoperationen und ein paar Funktionen abgedeckt werden ohne dass man das bisschen Struktur in diesen Quelltexten in Datenstrukturen parst, mal von einer Liste mit einzelnen Zeilen abgesehen vielleicht.

Semantisch stelle ich mir das Löschen von unbekannten Befehlen ein wenig problematisch vor. Ist da nicht Gefahr gross, dass das Ergebnis unbrauchbar ist?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 9. September 2014, 13:35

hirnwunde hat geschrieben: @ Hyperion:
Was Du da gefunden hast, sind Programme, die G-Code aus 2D/3D-Daten erstellen.
Ich will ja schon erstellten G-Code auf dessen Kompatibilitaet mit meinem Plotter ueberpruefen. ;-)
Danke dennoch fuer den Einsatz :)
Ich habe sie mir ja auch nicht *genau* angeguckt, aber evtl. besitzen diese ja auch einen Parser, der einem das ganze schon in aufbereiteter Form präsentiert. Und auf dieser Struktur (im allgemeinen AST genannt) dürfte das Herausfiltern von Befehlen vermutlich einfacher sein, als selber einen Parser zu schreiben ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))
assert encoding_kapiert
Antworten