Postprozessor anpassen, Dokumentation

Hallo,

ich nutze seit vielen Jahren QCAD Pro und bin jetzt auf QCAD/CAM umgestiegen.
Aktuell erstelle ich einen entsprechenden Postprozessor nach meinen Bedürfnissen.
Allerdings fehlen mir ein paar Informationen bzw. finde ich keine entsprechende Dokumentation / Quellcode für die nötigen Script-Funktionen.
In der “QCAD Application Framework API Documentation” sind scheinbar keinerlei CAM-Funktionen dokumentiert (was ja auch nachvollziehbar ist, weil der Teil meinem Verständnis nach ja nicht Open-Source ist).

Zum Beispiel fand ich im Forum bzw. in den vorhandenen Postprozessor-Scripts folgendes:

  • this.registerVariable(…)
  • this.toolChangeMode = CamExporterV2.FirstMoveMode.BeforeFirstZMove / BeforeFirstXYMove / AfterFirstXYMove
  • var toolNames = Cam.getToolNames(this.cadDocument);
  • var toolDiameter = Cam.getToolDiameter(this.cadDocument, toolName, 0.0);

Sind diese Funktionen irgendwo dokumentiert?
Oder entsprechend einsehbarer Quellcode würde mir auch schon deutlich weiterhelfen, z.B. “scripts/Cam/CamExportV2/CamExporterV2.js” wäre hilfreich. Ich möchte ungern für jede auftauchende Frage ein neues Topic erstellen und Euch damit nerven…

Was ich z.B. noch gerne an Änderungen / Anpassungen in meinem Script hätte:

  • Ich habe den Postprozessor so weit, dass er mir am Anfang des G-Codes als Kommentare alle Tools mit Nummer, Durchmesser / Radius auflistet. Hier wünsche ich mir jedoch auch noch den Typ und die Beschreibung des Tools (die Daten sind ja im Werkzeug-Bearbeiten-Dialog vorhanden). Ich weiß nur nicht wie ich das im Script abrufen kann. Gibt es ein Cam.getToolDescriptions(…) oder sowas?
    Nachtrag: Wenn ich mich an “.prototype.initToolpath = function(toolpathBlock)” hänge, kann ich die benötigten Beschreibungen via this.toolBlock.getCustomProperty(“QCAD”, “CamDescription”, “”) ermitteln. Somit kann ich am Ende der G-Code-Datei alles wie gewünscht auflisten. Allerdings kriege ich es am Anfang der Datei nicht hin, weil initToolpath erst während des Schreibens der Datei aufgerufen wird und die Daten zu Beginn nicht vorliegen. Also bisher nur ein Workaround, der mich nicht ganz zufriedenstellt :-/

  • Beim Export würde ich gerne die Werkzeugpfade für die verschiedenen Werkzeuge in verschiedene G-Code-Dateien schreiben. Ich habe leider keinen Werkzeugwechsler und setze aktuell nach jedem manuellen Wechsel die Höhe (Antasten der Werkstückoberfläche). Außerdem finde ich einzelne Dateien pro Werkzeug sinnvoll, wenn man ggf. etwas nacharbeiten möchte (weil z.B. die Höhe nicht gestimmt hat, da möchte ich ungern den gesamten G-Code erneut durchlaufen, sondern nur für dieses Werkzeug). Wie ließe sich das realisieren?


    Ich verwende QCAD/CAM 3.31.2 Pro unter Linux (64 bit). Mein Postprozessor basiert auf GCodeBase.js.

Vielen Dank!
Gruß,
Deejay

this.registerVariable(…) ist ziemlich unkompliziert.
Mit ein paar Versuchen können wir auch herausfinden, was die speziellen Präfixe oder Suffixe sind. (zB [F!])

Ich weiß nicht, wie Ihr Setup mit einem Werkzeugwechsel umgeht. Meins ruft ein spezielles CNC-Makro auf, das den Fräser in eine Standardposition zurückbringt und dann anhält, bis ich das Werkzeug gewechselt habe.

Außerdem ist mir nicht bekannt, welcher G-Code von QCAD fur einer neuen Werkzeugnummer enthalten ist.
Ohne Werkzeugwechsler natürlich.
Dies kann für die Reihenfolge der Dinge hilfreich sein.

Man könnte alle benötigten Werkzeugpfade mit unterschiedlichen Werkzeugen erstellen.
Im CAM-Werkzeugpfaddialog können wir diese anordnen.
Ich vermute dann, dass der Augen-Button vor jedem Werkzeugpfad den betreffenden Pfad für den Export aktiviert/deaktiviert.

Eng verwandt:
toolNames = Cam.getToolNames(doc);
toolBlock = Cam.getToolBlock(doc, toolName);
Ein solcher Block hätte eine benutzerdefinierte Eigenschaft namens „QCAD“, „CamDescription“.

Ich weiß, das sind nicht viele Informationen für viele Fragen.

Grüße,
CVH

Hallo CVH,

danke für die Hilfe.

Mit ein paar Versuchen können wir auch herausfinden, was die speziellen Präfixe sind.

Das ist nicht notwendig bzw. habe ich selbst schon geschafft. Ich hatte bei dieser Frage eher gehofft, dass es vielleicht eine Stelle gibt, wo dies dokumentiert und nachlesbar ist. Aber so wie ich das verstanden habe, gibt es sowas wohl nicht. Durch Versuchen konnte ich jedenfalls das richtige Prefix für mich ermitteln.

Ich weiß nicht, wie Ihr Setup mit einem Werkzeugwechsel umgeht. Meins ruft ein spezielles CNC-Makro auf, das den Fräser in eine Standardposition zurückbringt und dann anhält, bis ich das Werkzeug gewechselt habe.

Bei mir ist es bisher so, dass ich nach dem manuellen Werkzeugwechsel manuell die Werkstückhöhe einstelle. Ich verwende LinuxCNC und dort geht das meines Wissens nur, wenn das Programm beendet ist. Daher ist für mich bisher ein Werkzeugwechsel während des Programmablaufs ein Problem.
Ich spanne vor dem Programmstart mein Werkzeug und stelle manuell die Höhe ein, dann lasse ich das Programm komplett ablaufen. Ggf. spanne ich danach ein weiteres Werkzeug und starte ein weiteres Programm… Ja, hört sich umständlich an, aber vielleicht finde ich da auch noch einen Weg das zu verbessern.

Man könnte alle benötigten Werkzeugpfade mit unterschiedlichen Werkzeugen erstellen.
Im CAM-Werkzeugpfaddialog können wir diese anordnen.
Ich vermute dann, dass der Augen-Button vor jedem Werkzeugpfad den betreffenden Pfad für den Export aktiviert/deaktiviert.

Danke, das hilft mir schon weiter. Das funktioniert tatsächlich. Ausgeblende Pfade werden nicht exportiert. So kann ich dann die Pfade für jedes Werkzeug separat exportieren (in verschiedene Dateien). Eventuell versuche ich noch, dass beim Export jedes Mal nach dem Dateinamen gefragt wird (damit ich nicht vorher jedes Mal den Dateinamen im CAM-Konfigurationsdialog ändern muss.

toolNames = Cam.getToolNames(doc);
toolBlock = Cam.getToolBlock(doc, toolName);
Ein solcher Block hätte eine benutzerdefinierte Eigenschaft namens „QCAD“, „CamDescription“.

Ja, die beiden Möglichkeiten habe ich auch schon gefunden. Cam.getToolNames(doc) liefert jedoch nur die Werkzeugnummern, nicht die Beschreibung. Die Abfrage der Eigenschaft CamDescription vom Toolblock nutze ich aktuell, um die Beschreibungen der Tools in einer eigenen Variablen zwischenzuspeichern und dann alle zusammen am Ende der CAM-Datei zu schreiben. Mir fehlt leider noch die Möglichkeit, alle Toolblöcke am Anfang des Scripts zu ermitteln… dann könnte ich diese alle zu Beginn abfragen und auch an den Anfang der Datei ausgeben. Aber mal sehen, das sehe ich aktuell eher als “nice to have”.

Ich weiß, das sind nicht viele Informationen für viele Fragen.

Naja, jede einzelne Information hilft weiter. Manchmal reicht ja, wenn man die richtige Stelle findet und kann sich von dort weiterhangeln…
Deswegen: Danke für die Hilfe!

Gruß,
Deejay

Nachtrag:
Manchmal sieht man den Wald vor Bäumen nicht.

Über var toolNames = Cam.getToolNames(doc); kann man natürlich alle Werkzeuge (Werkzeugnummern) holen.
In einer Schleife kann man dann über var toolBlock = Cam.getToolBlock(doc, toolNames[index]); den dazugehörigen ToolBlock abfragen und dann mittels toolBlock.getCustomProperty(“QCAD”, “CamDescription”, “”); die Beschreibung des Werkzeugs ermitteln…

Gruß,
Deejay

Das waren die bereitgestellten Informationen … in Kürze.
Ich war gerade dabei, eine ausführlichere Antwort zu verfassen, aber Sie haben es bereits herausgefunden. :wink:

Der betreffende Block ist ein Standard-CAD-Block, der alle Informationen als benutzerdefinierte Eigenschaften enthält.

Eine von RObject geerbte Funktion ist:
RBlock.getCustomProperties() … Alles in einem Array
oder
RBlock.getCustomPropertyKeys() … Alle vorhandenen Schlüssel in einem Array

Grüße,
CVH