Inhalt - Fräsen mit EMC
o-Words

o-Word sind eigentlich ein Bestandteil des G-Codes von EMC, trotzdem verdienen die kleinen Süßen eine extra Rubrik und sind gleichzeitig auch das letzte Werkzeug was ich EMC nutzern an die Hand geben möchte.
Mit den o-Words lassen sich z.B. Bewegungsablaufe sehr gut auomatisieren. Helfen kann das wenn man einen Werkzeugwechsler hat oder Werkzeuge automatische eingemessen werden sollen. Das Ergebnis kann dann in der Werkzeugtabelle gespeichert werden.
o-words sind auch dann eine gute Wahl wenn es darum geht Werte von einem bis zum nächsten start von EMC zu speichern, da hier mit Variablen gearbeitet werden kann, die auch nach dem beenden von EMC gespeichert bleiben.

Subroutinen
Jedes o-word Programm steht in einer so genannten Subroutine
Das bedeutet nichts anderes als das jedes Programm zwischen definierten Start und Endpunkten steht.

o100 sub
   ..Programm oder Programmteil
o100 endsub

Mit EMC 2 können Werkzeuge über G38
und o-words automatisch vermessen und in die Werkzeugtabelle eingetragen werden.
Jede dieser Subroutinen erhält eine Nummer wie im Beispiel oben. Durch diese Nummer ist es möglich das ein zweiter Programmteil diese Routine sehr einfach aufrufen kann, deshalb sollte diese Form von vorne herein eingehalten werden.

in diese Subroutine können diverse Funktionen eingetragen werden, die häufigste dieser Funktionen ist die if-Anweisung.

o100 sub
  o101 if[#2 EQ 3]
    G0 X0 Y0
    (msg, Werkzeug 3 wurde eingelegt)
  o101 endif
o101 endsub

Die Funktionen oder Anweisungen bekommt ebenfalls eine Nummer, genau wie auch die Subroutine. Wichtig dabei ist, das jede dieser Nummern nur einmal für eine Subroutine oder Funktion verwendet wird.


Variablen
In der eckigen Klammer hinter der Funktion im obigen Beispiel wird verglichen ob der Wert der Variable #2 Gleich (EQUAL) 3 ist, wenn das der Fall ist werden die Befehle Ausgeführt die zwischen if und endif stehen.
Ist der Wert der Variable #2 aber nicht = 3 so werden auch die Befehle zwischen if und endif nicht ausgeführt. Die Befehle werden also nur in Abhängigkeit ausgeführt.
Die Variable ist ein Wert der sich im G-Code Programm ständig verändern kann, sie kann z.B. das Ergebnis einer Längenmessung enthallten, oder die Werkzeugnummer. Damit #2 aber den Wert des Werkzeuges bekommt, muss die Werkzeugnummer an die Variable übergeben werden.

Nehmen wir an wir haben den Pin iocontrol.0.tool-number (Typ float, out) über einen conv_S32_float Baustein in HAL mit dem motion.analog-in-00 (Typ float, in) miteinander Verbunden. Wir haben dadurch den aktuellen Wert der Werkzeugnummer am analogen Eingang zur Verfügung. Zum einlesen dieses Wertes benötigen wir folgenden Befehl in einer G-Code Datei.

M66 E0 L0

Dabei ist M66 der Befehl zum einlesen von analogen und digitalen Eingängen, E0 bedeutet das der analoge Eingang 0 gelesen werden soll und L0 steht dafür das das Ergebnis sofort ohne Wartezeit eingelesen werden soll. Details dazu gibt es in der G-ode Reference.
Aber wo ist nun das Ergebnis?? Genau für diesen Zweck gibt es Variablen in denen solche Werte abgelegt werden. EMC hat für eine Reihe von Prozessen schon Variablen fest gelegt, die wir uns daher nicht mehr aussuchen dürfen. Damit man bei der Wahl einer Variable keine Schwierigkeiten verursacht gucken wir uns kurz an, welche EMC selbst braucht.  EMC VARIABLEN
Wir halten fest: Die Werte 5061 bis 5399 dürfen wir für unsere eigenen Variablen nicht wählen. Einer der Werte ist jedoch wie für uns gemacht, nämlich der mit der Nummer 5399 den in diesem steht unser Ergebnis für den analogen Eingang. Damit das Ergebnis, die Werkzeugnummer, für die anfänglich erstellte Routine in die Variable #2 übergeben wird, schreiben wir folgendes:

#2=#5399

Würden wir nun die Routine ausführen und es wäre Werkzeug 3 eingelegt, würde die Maschine die Position x0 y0 ansteuern und eine Message (Nachricht) auf dem Bildschirm erscheinen mit den Worten "Werkzeug 3 wurde eingelegt".

Damit eine Variable dauerhaft gespeichert wird und beim beenden von EMC nicht verloren geht, muss diese in der emc.var eingetragen werden. Die Datei befindet sich im selben Verzeichnis wie die ini-Datei.
Funktionen
Eine Funktion ist bereits bekannt, die if-Funktion. Beim programmieren mit den o-words gibt es jedoch eine ganze Reihe von Funktionen und Möglichkeiten, die man in der G-Code Reference mit kleinen Beispielen nachlesen und erproben kann. Da sie dort bereits gut erklärt sind, führe ich sie hier nicht erneut auf. Eine Funktion soll hier allerdings trotzdem aufgeführt werden, da diese evtl. ein wenig schwieriger zu handhaben ist.

Aufrufen von Subroutinen mit Call
Die Nummerrieung vor den Subroutinen erfüllt einen Zweck, denn so können die Routinen von einander unterschieden und auch bei größeren Programmen mit vielen Routinen von verschiedenen Stellen aus aufgerufen werden.

o200 sub
   ...Programmteil zum vermessen eines Werkzeuges
o200 endsub

o201 sub
  ...Programm zum holen von Werkzeug 1
  o200 call
o201 endsub

o202 sub
  ...Programm zum holen von Werkzeug 2
  o200 call
o202 endsub

Das Beispiel oben stellt schematisch dar wie die call Funktion
eingesetzt werden kann. Die Subroutinen 201 und 202 rufen
jeweils die Routine 200 auf um ein Werkzeug veremssen zu lassen. 
Mit der call-Funktion können außerdem auch Werte an die
aufgerufene Routine übermittelt werden.

o200 sub
      #1 = Werkzeugnummer
   ...Programmteil zum vermessen eines Werkzeuges
   ...Programmteil zum speichern des Ergebnisses in der Werkzeugtabelle
o200 endsub

o201 sub
  ...Programm zum holen von Werkzeug 1
  o200 call [1]
o201 endsub

o202 sub
  ...Programm zum holen von Werkzeug 2
  o200 call [2]
o202 endsub

Das Programm von oben ist nun erweitert worden. Nachdem das Werkzeug vermessen wurde, wird das Ergebnis in der Werkzeugtabelle gespeichert. Damit der zu speichernde Wert dem richtigen Werkzeug zugeordnet werden kann, benötigt der aufgerufenen Baustein die Werkzeugnummer.
Hinter der call-Funktion können daher bis zu 30 eckige Klammern aufgeführt werden. Der Wert in der 1. Klammer entspricht dann in der aufgerufenen Routine der Variablen #1, der Wert in der 2. Klammer entspräche der Variablen #2, und so weiter.
Aufrufen von Dateien mit Call
Die call Funktion kann sogar zum aufrufen von Dateien benutzt werden. Nehmen wir an, wir haben ein Programm entworfen das Werkzeuge automatisch vermessen kann. Da wir das Werkzeug manuell einsetzen müssen macht es sind nach jedem Werkzeugwechsel eine automatische Messung durchzuführen damit man sich die "händische" Messung ersparen kann.
Das entworfene Programm hat nun aber 30 Zeilen und diese müsste ich in mein Fräsprogramm nach jedem M6 T0-10 einfügen. Auf die dauer ist das sehr umständlich und deshalb hier der einfachere Weg.

Das entworfene Programm wird z.B. in der Datei vermessung.ngc gespeichert und bekommt folgenden Zusatz in diese Datei:

o<vermessung> sub
   ...entworfenes Programm zur automatischen Vermessung
o<vermessung> endsub

Der Ort an dem die Datei vermessung.ngc gespeichert ist muss der sein der in der ini-Datei im Bereich [Display] -->PROGRAM_PREFIX  angegeben ist. Außerdem MUSS der Dateiname vollständig aus kleinen Buchstaben bestehen ! Sind diese beiden Dinge beachtet, kann das entworfene Programm zur automatischen Vermessung mit folgender Zeile aus einem Fräspogramm heraus ausgeführt werden:

o<vermessung> call

Wie bei anderen call-Anweisungen auch können hier ebenfalls bis zu 30 Werte in eckigen Klammern mit übermittelt werden.
Weitere Detail zu o-words sind in der G-Code Reference zu finden.

Viel Spaß beim tüffteln.
In EMC2 können Werkzeugwechsler individuwll angepasst und im Menü eingebettet werden. (Video zeigt Zeitraffer)
>EMC2 Was brauche ich?<
>EMC2 testen<
>EMC2 installieren<
>EMC2 Stepcon Wizard<
>EMC2 Optionen<
>EMC2 HAL-Verbindungen<
>EMC2 HAL-Bausteine<
>EMC2 Python<
>EMC2 o-Words<