Samstag, 8. März 2014

Verwendung des Stepcraft Werkzeuglängensensors mit LinuxCNC

Manuelle Verwendung

Nach Durchführung der Referenzfahrt legt man den Werkzeuglängensensor auf die Oberfläche des Werkstücks und fährt man mit Manuelle Kontrolle den Fräser über den Sensor. Dazu verwendet man entweder die Radiobuttons X/Y/Z sowie den - und + Knopf, oder die Pfeiltasten (für X und Y) sowie die Bildlauf-Tasten (für Z) auf der Tastatur.
Mit dem Slider Schrittgeschwindigkeit kann man die Geschwindigkeit reduzieren, wenn man sonst die Position nicht trifft.

Mit der Z-Achse fährt man einige mm über den Sensor, dann wechselt man auf den MDI Reiter, und setzt das Kommando G38.2 Z-10 F20 ab.

Die Z-Achse fährt nun nach unten, bis der Schalter im Sensor erreicht und ausgelöst wird, dann stoppt die Maschine.

Da wir wissen, dass der Sensor auf 33mm Höhe liegt, können wir das nun wiederum im Manuelle Kontrolle Reiter einstellen:
Wie in der Grafik schon dargestellt:
  1. Die Z-Achse auswählen
  2. Auf den Antasten Knopf klicken
  3. 33 in das Eingabefeld des Dialogs eingeben
  4. OK klicken
Danach zeigt die Koordinaten-Anzeige Z: 33.000, wir haben die Werkzeuglänge exakt eingestellt.

Einbindung in Axis

Nun ist die manuelle Verwendung wie oben gezeigt, doch eher mühsam, daher folgt nun eine Anleitung, wie wir die schritte bequem ins Axis-GUI integrieren können.

Anpassungen im .ini - File

Zuerst muss man das .ini - File der Fräse öffnen und an zwei Stellen Anpassungen vornehmen:
Unter [DISPLAY] muss die Datei mit der GUI-Definition als PYVCP angegeben werden (die Datei laengensensor.xml folgt weiter unten)

Ein wenig weiter unten in der Datei geht es weiter ...
Unter [HAL] definiert das POSTGUI_HALFILE die "Verbindungen" unseres GUIs zur Fräse (die Datei laengensensor.hal folgt weiter unten).
Wichtig ist auch die Zeile HALUI = halui, diese war bei mir schon dabei, scheint aber in vielen Fällen zu Fehlen, dann bekommt man die Fehlermeldung: Pin 'halui.mdi-command-00' does not exist.
Unter [HALUI] haben wir hier 4 mal den Schlüssel MDI_COMMAND mit folgenden Befehlen:
  1. G30.1 ... Merken der aktuellen Position als Referenzpunkt
  2. G30 ... Anfahren der gemerkten Position
  3. G38.2 Z-3 F20 ... Langsam (20 mm / Minute) mit der Z Achse bis zu 3 mm nach unten fahren, aufhören, sobald der Kontakt geschlossen ist.
  4. G92 Z33 ... Setzen der Z Koordinate auf 33 mm (die Höhe des Stepcraft Sensors)

GUI-Datei

Unser GUI sieht so aus:

4 Knöpfe, die mit je einem sogenannten halpin verbunden sind.

HAL-Datei

Was machen nun diese Halpins? Das steht in der laengensensor.hal:



Die vier Halpins sind mit mdi-command-00 bis mdi-command-01 verbunden und deren Bedeutung haben wir wiederum in der .ini - Datei unter [HALUI] festgelegt.

Die etwas eigenartige Kette von Verknüpfunen lautet also:
  • .ini File bindet laengensensor.xml und laengensensor.hal ein
  • laengensensor.xml macht 4 Knöpfe, die sich auf Pins in der laengensensor.hal beziehen
  • laengensensor.hal definiert Pins, die MDI-Befehler ausführen die in der .ini - Datei stehen.
Starten wir nun Axis, bekommen wir neben der 3-D Ansicht unsere Panel mit den 4 Knöpfen (die auch hoffentlich funktionieren):

Geschafft! Das Axis-GUI erweitert um unsere 4 Knöpfe.

Anwendungsidee

Gedacht ist das nun so, dass man die Fräse an eine Position fährt, wo man den Sensor bequem drunterstellen kann. Dann fährt man schon mal mit Z bis knapp vor den Sensor, damit man sieht, ob der Druckknopf auch schön unterhalb des Fräsers steht (wer das nicht will, muss beim MDI_COMMAND in der .ini-Datei einen größeren Z-Wert angeben, z.B. Z-50).
Diese Position kann man sich nun mit dem ersten Knopf merken, um sie später (nach einem Werkzeugtausch) mit dem zweiten Knopf wieder leicht anfahren zu können.
Mit dem dritten Knopf führt man die Längenmessung aus, d.h. es wird nach unten gefahren, bis der Kontakt des Schalters im Sensor geschlossen wird.
Danach drückt man auf den vierten Knopf, wodurch Z automatisch auf die Höhe (33mm) gesetzt wird (Hat man einen anderen Sensor, muss man das vierte MDI Kommando in der .ini-Datei entsprechend anpassen)

Download

Die Dateien laengensensor.xml und laengensensor.hal zum Download.

X/Y-Nullpunkt Knopf

Auf Anregung eines Benutzers im Stepcraft Forum habe ich die Axis-Erweiterung noch um einen Knopf ergänzt, der X und Y an der aktuellen Stelle auf 0 setzt.
Dazu muss man:
  1. In laengensensor.xml einen weiteren Knopf einführen, der mit einem neuen halpin verbunden ist
  2. In laengensensor.hal den halpin definieren und ihn mit dem nächsten mdi-command verbinden
  3. In der .ini - Datei MDI_COMMAND = G92 X0 Y0 anfügen
Das Gesamt-Ergebnis sieht dann so aus:
laengensensor.xml:
<pyvcp>
    <button>
        <halpin>"set-probe-xy"</halpin>
        <text>"Längensensorposition merken"</text>
    </button>
    <button>
        <halpin>"goto-probe-xy"</halpin>
        <text>"Zur Längensensorposition"</text>
    </button>
    <button>
        <halpin>"do-the-probe"</halpin>
        <text>"Werkzeuglänge messen"</text>
    </button>
    <button>
        <halpin>"set-the-toollength"</halpin>
        <text>"Werkzeuglänge setzen"</text>
    </button>
    <button>
        <halpin>"set-xy-zero"</halpin>
        <text>"X/Y auf 0 setzen"</text>
    </button>
</pyvcp>


laengensensor.hal:
net set-probe-xy halui.mdi-command-00 <= pyvcp.set-probe-xy
net goto-probe-xy halui.mdi-command-01 <= pyvcp.goto-probe-xy
net do-the-probe halui.mdi-command-02 <= pyvcp.do-the-probe
net set-the-toollength halui.mdi-command-03 <= pyvcp.set-the-toollength
net set-xy-zero halui.mdi-command-04 <= pyvcp.set-xy-zero

.ini-Datei (Ausschnitt):
[HALUI]
MDI_COMMAND = G30.1
MDI_COMMAND = G30
MDI_COMMAND = G38.2 Z-3 F20
MDI_COMMAND = G92 Z33
MDI_COMMAND = G92 X0 Y0


Die (finale?) Deluxe-Version

Nach ein paar weiteren Überlegungen (u.a. im Stepcraft Forum) habe ich nun noch die Knöpfe "do-the-probe" und "set-the-toollength" zusammengefasst und ausserdem das automatische Freifahren des Sensors noch dazuprogrammiert.
Dazu braucht man neben den drei schon bekannten Dateien (laengensensor.xml, laengensensor.hal und .ini-Datei der Fräse) eine vierte (probez.ngc), wo der zusammengefasste Code (runterfahren, Höhe setzen, freifahren) drin ist, diese Datei legt man im Verzeichnis linuxcnc/nc_files ab.

Hier die 4 Dateien:
laengensensor.xml:
<pyvcp>
    <button>
        <halpin>"set-probe-xy"</halpin>
        <text>"Längensensorposition merken"</text>
    </button>
    <button>
        <halpin>"goto-probe-xy"</halpin>
        <text>"Zur Längensensorposition"</text>
    </button>
    <button>
        <halpin>"do-the-probe"</halpin>
        <text>"Werkzeuglänge messen"</text>
    </button>
    <button>
        <halpin>"set-xy-zero"</halpin>
        <text>"X/Y auf 0 setzen"</text>
    </button>
</pyvcp>

laengensensor.hal:
net set-probe-xy halui.mdi-command-00 <= pyvcp.set-probe-xy
net goto-probe-xy halui.mdi-command-01 <= pyvcp.goto-probe-xy
net do-the-probe halui.mdi-command-02 <= pyvcp.do-the-probe
net set-xy-zero halui.mdi-command-03 <= pyvcp.set-xy-zero


.ini-Datei (Ausschnitt):
[HALUI]
MDI_COMMAND = G30.1
MDI_COMMAND = G30
MDI_COMMAND = O<probez> call
MDI_COMMAND = G92 X0 Y0


probez.ngc
O<probez> sub

G38.2 Z-20 F60
G92 Z33
G0 Z40 F800

O<probez> endsub

 


Damit kann man den Sensor unter den Fräser stellen, den Knopf Werkzeuglänge messen drücken und alles ist gut: Der Fräser fährt runter, bis er Schalter auslöst, merkt sich Z=33mm und fährt anschliessenf auf Z=40mm hoch, damit man den Schalter wegräumen kann.

30 Kommentare:

  1. Hallo Robert,

    ich hatte deine nützlichen Buttons in meinem LinuxCNC integriert und alles lief wunderbar.
    Nun plötzlich ist der ganze rechte Bereich mit den Buttons nicht mehr sichtbar. Ich habe nichts geändert (zumindest nicht bewusst ) und de Dateien scheinen in Ordnung zu sein.
    Woran könnte es liegen?

    Danke!

    Enzo

    AntwortenLöschen
  2. Hmm. Bekommst du irgendeine Fehlermeldung?
    Wenn der ganze Bereich verschwunden ist würde ich vermuten, dass es schon an der PYCVCP = laengensensor.xml Zeile liegt.

    Sonst schick mir mal das ganze Config-Verzeichnis als zip an r.lichtenberger at gmail.com, dann werf ich einen Blick darauf ...

    AntwortenLöschen
  3. Hallo Robert,

    und danke für deine Antwort, die ich erst jetzt lese.

    Ich habe inzwischen mein Problem gelöst.
    Es ist so, dass das Konfigurationsprogramm von Linuxcnc immer eine ganz neue config-Datei schreibt und die alte überschreibt. Ich hatte es wohl nochmals aufgerufen um etwas zu ändern und damit waren die Eingaben, die ich nach deiner Anleitung gemacht hatte, weg. Ich habe es später zufällig entdeckt. Um das zu verhindern, nehme ich jetzt eventuelle Änderungen direkt in der XML-Datei vor.

    Nun läuft alles wieder. Vielen Dank!

    AntwortenLöschen
  4. Danke für die Anleitung, hat super funktioniert.

    AntwortenLöschen
  5. Hallo Robert,

    Erstmal Danke für die sehr detaillierte Anleitung zur Integrierung des WLS. Hab jetzt aber doch eine Frage, weißt du zufällig, was man einstellen muss, wenn man den WLS auf die Nutenplatte/Opferplatte fest installiert? Demnach wäre der Nullpunkt dann ja unterhalb des Werkstücks, die Fräse würde also in die Platte schneiden. Wahrscheinlich ist es ganz logisch, nur steh ich grad irgendwie an.

    Danke!
    Lg Jürgen

    AntwortenLöschen
  6. Wenn der WLS auf der Nutenplatte/Opferplatte aufliegt, gibt es zwei Möglichkeiten: Man hat seinen G-CODE so ausgelegt, dass er eben nur bis Z=0 (oder knapp unter 0 bei einer Opferplatte) fräst oder aber man muss danach noch die Dicke der Werkstückplatte dazuaddieren.

    Da dies aber eben von Werkstück zu Werkstück verschieden sein kann gebe ich lieber den WLS auf die Werkstückplatte drauf und definiere Z=0 entspricht der Werkstückoberfläche.

    AntwortenLöschen
    Antworten
    1. Danke für die schnelle Antwort. Hat mir den "Knoten" etwas gelöst. Werde es noch auf deiner Beschreibung belassen.

      Danke nochmals

      Löschen
  7. Hallo,

    erstmal vielen Dank für die sehr gute Anleitung.
    Ich bin Neuling und bei mir haben die Schalter keine Funktion.
    Aufgefallen ist mir das bei "x/y auf Null setzen" da ändert sich nichts. Wenn ich im MDI Fenster G92 x0 y0 eingebe gehen die Werte auf null.
    Hab mir mehrmals die Anleitung vorgenommen kann aber keinen Unterschied zu dem finden was ich eingegeben habe.

    Ich nutze Linuxcnc 2.6.4
    Über Hilfe würde ich mich freuen
    Gruß
    Michael

    AntwortenLöschen
    Antworten
    1. Funktionieren denn die anderen Knöpfe? Sonst bitte mal deine Dateien (.xml, .hal, .ini) hier rein posten ...

      Löschen
    2. # Generated by stepconf 1.1 at Sat Nov 19 10:44:15 2016
      # Änderungen an dieser Datei werden beim nächsten
      # Aufruf von stepconf überschrieben.

      [EMC]
      MACHINE = TripleBeast
      DEBUG = 0

      [DISPLAY]
      DISPLAY = axis
      EDITOR = gedit
      POSITION_OFFSET = RELATIVE
      POSITION_FEEDBACK = ACTUAL
      ARCDIVISION = 64
      GRIDS = 10mm 20mm 50mm 100mm 1in 2in 5in 10in
      MAX_FEED_OVERRIDE = 1.2
      MIN_SPINDLE_OVERRIDE = 0.5
      MAX_SPINDLE_OVERRIDE = 1.2
      DEFAULT_LINEAR_VELOCITY = 100.00
      MIN_LINEAR_VELOCITY = 0
      MAX_LINEAR_VELOCITY = 100.00
      INTRO_GRAPHIC = linuxcnc.gif
      INTRO_TIME = 5
      PROGRAM_PREFIX = /home/michael/linuxcnc/nc_files
      INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm

      PYVCP = laengensensor.xml

      [FILTER]
      PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image
      PROGRAM_EXTENSION = .py Python Script
      png = image-to-gcode
      gif = image-to-gcode
      jpg = image-to-gcode
      py = python

      [TASK]
      TASK = milltask
      CYCLE_TIME = 0.010

      [RS274NGC]
      PARAMETER_FILE = linuxcnc.var

      [EMCMOT]
      EMCMOT = motmod
      COMM_TIMEOUT = 1.0
      COMM_WAIT = 0.010
      BASE_PERIOD = 29000
      SERVO_PERIOD = 1000000

      [HAL]
      HALFILE = TripleBeast.hal
      HALFILE = custom.hal
      HALUI=halui
      POSTGUI_HALFILE = custom_postgui.hal

      POSTGUI_HALFILE = laengensensor.hal

      [HALUI]
      MDI_COMMAND = G30.1
      MDI_COMMAND = G30
      MDI_COMMAND = O call
      MDI_COMMAND = G92 X0 Y0
      probez.ngc
      O sub

      G38.2 Z-20 F60
      G92 Z33
      G0 Z40 F800

      O endsub

      [TRAJ]
      AXES = 3
      COORDINATES = X Y Z
      LINEAR_UNITS = mm
      ANGULAR_UNITS = degree
      CYCLE_TIME = 0.010
      DEFAULT_VELOCITY = 600.00
      MAX_VELOCITY = 6000.00

      [EMCIO]
      EMCIO = io
      CYCLE_TIME = 0.100
      TOOL_TABLE = tool.tbl

      [AXIS_0]
      TYPE = LINEAR
      HOME = 0.0
      MAX_VELOCITY = 81.8965517241
      MAX_ACCELERATION = 500.0
      STEPGEN_MAXACCEL = 1250.0
      SCALE = 400.0
      FERROR = 1
      MIN_FERROR = .25
      MIN_LIMIT = -0.001
      MAX_LIMIT = 391.622
      HOME_OFFSET = -2.050000
      HOME_SEARCH_VEL = -40.000000
      HOME_LATCH_VEL = 1.250000
      HOME_IGNORE_LIMITS = YES

      [AXIS_1]
      TYPE = LINEAR
      HOME = 0.0
      MAX_VELOCITY = 81.8965517241
      MAX_ACCELERATION = 500.0
      STEPGEN_MAXACCEL = 1250.0
      SCALE = 400.0
      FERROR = 1
      MIN_FERROR = .25
      MIN_LIMIT = -0.001
      MAX_LIMIT = 556.845
      HOME_OFFSET = -22.500000
      HOME_SEARCH_VEL = -50.000000
      HOME_LATCH_VEL = 1.250000
      HOME_IGNORE_LIMITS = YES

      [AXIS_2]
      TYPE = LINEAR
      HOME = 0.0
      MAX_VELOCITY = 81.8965517241
      MAX_ACCELERATION = 1000.0
      STEPGEN_MAXACCEL = 1250.0
      SCALE = 400.0
      FERROR = 1
      MIN_FERROR = .25
      MIN_LIMIT = -60.0
      MAX_LIMIT = 20.0
      HOME_OFFSET = 0.0

      pyvcp>
      button>
      halpin>"set-probe-xy"
      text>"Längensensorposition merken"
      /button>
      button>
      halpin>"goto-probe-xy"
      text>"Zur Längensensorposition"
      /button>
      button>
      halpin>"do-the-probe"
      text>"Werkzeuglänge messen"
      /button>
      button>
      halpin>"set-the-toollength"
      text>"Werkzeuglänge setzen"
      /button>
      button>
      halpin>"set-xy-zero"
      "X/Y auf 0 setzen"
      /button>
      /pyvcp>

      net set-probe-xy halui.mdi-command-00 <= pyvcp.set-probe-xy
      net goto-probe-xy halui.mdi-command-01 <= pyvcp.goto-probe-xy
      net do-the-probe halui.mdi-command-02 <= pyvcp.do-the-probe
      net set-xy-zero halui.mdi-command-03 <= pyvcp.set-xy-zero


      Löschen
    3. die < am anfang musste ich entfernen sonst konnte ich die hier nicht hochladen

      Löschen
    4. Ich denke das hier ist das Problem:
      [HAL]
      HALFILE = TripleBeast.hal
      HALFILE = custom.hal
      HALUI=halui
      POSTGUI_HALFILE = custom_postgui.hal

      POSTGUI_HALFILE = laengensensor.hal

      Es darf glaub ich nur ein POSTGUI_HALFILE geben und möglicherweise darf es auch keine Leerzeile da geben.

      Löschen
  8. bin mir sicher das ich irgendwo einen Fehler mache,finde nur nicht wo

    AntwortenLöschen
  9. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  10. Danke Dir , werde es morgen mal testen

    AntwortenLöschen
  11. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  12. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  13. Hallo,
    bei mir funktioniert die Längensensorfunktion nicht mehr, ich kann x,y nullen, aber wenn ich auf Werkzeuglänge messen drücke,kommt "file not open". Ich weiss leider nicht wo ich da suchen muss, hab nochmal alles durchgeschaut,kann aber meinen Fehler nicht finden.Es hat bisher immer funktioniert.

    AntwortenLöschen
  14. Hmm. Hat sich was an der Maschine verändert? Neue Version installiert oder etwas in der Art?

    Ich vermute mal, er findet die probez.ngc nicht (mehr). Das ist sozusagen das Makro, das er ausführt, wenn man auf den Längensensor-Knopf drückt.

    Schau mal, ob dieses File da ist, ob es lesbar ist, etc.

    AntwortenLöschen
  15. Danke für die schnelle Antwort.
    Die probez.ngc muss doch unter linuxcnc/nc_files liegen oder? Da ist die und ich kann die auch lesen, steht auch alles so wie vorher drin. Sonst muss ich nochmal alles von vorne machen,anders wäre schöner.

    AntwortenLöschen
  16. wo finde ich den Eintrag , wo er suchen muss?

    AntwortenLöschen
  17. Weiss nicht woran es gelegen hat, hab noch eine Sicherung aller Dateien gefunden und einfach damit alle ersetzt, jetzt gehts wieder.

    AntwortenLöschen
  18. Hallo ich nochmal:-),
    hab das jetzt auf meine zweite Fräse eingerichtet.
    Alle Button bis auf Werkzeuglänge messen funktionieren.
    Bei Werkzeuglänge messen kommt im Linuxcnc: file not open.
    Nur weiss ich nicht wo ich da suchen muss, möchte nicht wieder die ganzen Einstellungen von vorne machen.

    AntwortenLöschen
  19. Starte doch mal LinuxCNC von einem Terminal aus und mach einen Screenshot vom gesamten Output. "file not open" ist zu wenig, um damit auf die Fehlerursache schließen zu können.

    AntwortenLöschen
  20. Dast steht im Terminal, hoffe damit kann mir geholfen werden :-)

    LINUXCNC - 2.7.14
    Machine configuration directory is '/home/m/linuxcnc/configs/Holzfraese'
    Machine configuration file is 'Holzfraese.ini'
    Starting LinuxCNC...
    Found file(REL): ./Holzfraese.hal
    Found file(REL): ./custom.hal
    INFO CLASSICLADDER- No ladder GUI requested-Realtime runs till HAL closes.
    RTAPI: ERROR: Unexpected realtime delay on task 1
    This Message will only display once per session.
    Run the Latency Test and resolve before continuing.


    AntwortenLöschen
  21. Das steht da nachdem ich den Längensensor button gedrückt habe

    emc/task/emctask.cc 389: interp_error: File not open
    File not open

    AntwortenLöschen
  22. schäm
    Manchmal ist man blind(blöd), habe statt MDI, MIDI eingegeben.Und das ist mir nach geschätzten 500m ansehen erst aufgefallen.

    AntwortenLöschen
  23. Hallo
    super Beschreibung die du hier gibst. Möchtet dies gerne an
    meiner Fräse "nachbauen".
    Wie/Wo hast du den Taster angeklemmt? bzw. als was im Config Menü deklariert? ist es da der "Sensor"?

    AntwortenLöschen