Dieses Beispiel zeigt die Integration des Frequenzumrichters WJ200 / Omron MX2 in LinuxCNC mittels RS485-Schnittstelle. Die Vorteile gegenüber 0-10V & Relais Ansteuerung sind

  • voll digitale bidirektionale Kommunikation
    • keine analoge Drehzahlvorgabe die kalibriert werden muss
    • Drehzahl wird auf die Dezimalstelle genau digital übermittelt
    • Verkabelung: nur 2-Draht! Es werden keine Relais sowie Ein-Ausgänge dafür belegt
  • Überwachung der Kommunikation mittels Wadstchdog
  • einbindung in Not-Aus-Schaltung bei Kommunikations- oder Umrichterfehler
  • Anzeige & Verarbeitung von Leistungsdaten (z.B. Last an der Spindel)
  • Implementation von Drehzahlsteuerung und – Feedback („spindle-at-Speed“)

Hardware

Die Verbindung zwischen Frequenzumrichter und Steuerungs-PC (LinuxCNC) erfolgt in diesem Fall über einen RS232<->RS485 Adapterund ein 2adriges Kabel. Die RS485-Adapter sind sehr günstig im Internet zu bekommen (Aliexpress, Ebay, <10€). Es gibt auch Adapter von USB auf RS-485. Weitere Hardware wird nicht benötigt.

Software / Linuxcnc

In LinuxCNC ist bereits eine HAL-Komponente für den Frequenzumrichter enthalten. Diese stellt folgende Ein-/Ausgabepins zur Verfügung:

Eingänge:

wj200-vfd.N.commanded-frequency Solldrehzahlvorgabe
wj200-vfd.N.reverse bit Drehrichtungsvorgabe (1 = rückwärts, 0 = vorwärts)
wj200-vfd.N.run Startsignal (1 = start, 0 = stop)
wj200-vfd.N.enable Frequenzumrichter (FU) aktivieren – der FU befindet sich solange im Fehlerstatus „tripped“ bis dieses Signal auf 1 gesetzt wird (Sicherheitsfunktion)

Ausgänge:

wj200-vfd.N.is-running „FU läuft / Spindel dreht sich“
wj200-vfd.N.is-at-speed Solldrehzahl erreicht
wj200-vfd.N.is-ready FU ist bereit für Start-Signal
wj200-vfd.N.is-alarm FU im Fehlermodus
wj200-vfd.N.watchdog-out(getaktetes) Signal zur Überwachung der Kommunikation.

Der Blick in den Quellcode des wj200-Moduls offenbart 2 weitere Ausgabepins:

wj200-vfd.N.motor_current Motorstrom (A)
wj200-vfd.N.heatsink_temp Temperatur Kühlkörper

Konfiguration

Damit die Ansteuerung funktioniert müssen der Frequenzumrichter als Eingabequelle auf RS485 konfiguriert sein (standardmäßig ist dies auf das lokale Bedienterminal eingestellt, Parameter A001 und A002 auf „3“ konfigurieren) und die HAL-Pins der WJ200-Komponente wie folgt verbunden werden:

Zuerst muss das Modul in Linuxcnc geladen und die Adresse des Frequenzumrichters in der Datei custom.hal eingestellt werden:

loadusr -W wj200_vfd
setp wj200-vfd.0.mbslaveaddr 1
setp wj200-vfd.0.enable 1

Damit die im GCode vorgegebene Drehzahl von LinuxCNC an den Frequenzumrichter übergeben wird, muss der entsprechende Ausgang der LinuxCNC-„Motion“-Komponente mit dem Eingangspin „Solldrehzahlvorgabe“ des Frequenzumrichters verbunden werden. Die vom Stepconf-Wizard erzeugte Konfiguration erzeugt hierfür bereits eine „Verknüpfung“, welche in der Datei custom.hal ergänzt werden kann:

net spindle-cmd-rps-abs => wj200-vfd.0.commanded-frequency

Der Start/Stop-Pin („Spindel an/aus“) muss ebenfalls vom Motion-Modul an den Frequenzumrichter übergeben werden:

net spindle-startsignal motion.spindle-on => wj200-vfd.0.run

Ebenso die Drehrichtung:

net spindle-direction motion.spindle-reverse => wj200-vfd.0.reverse

Damit lässt sich der Frequenzumrichter grundlegend steuern, jedoch noch ohne Feedback und ohne Fehlerüberwachung!

Rückgabewert „Solldrehzahl erreicht“

In der Standardkonfiguration von LinuxCNC ist dies dauerhaft auf „true“ („ja“) gesetzt. Damit LinuxCNC jedoch die Rückmeldung des Frequenzumrichters bei der Ausführung von GCode berücksichtigen kann, muss die Zeile in der custom_postgui.hal

sets spindle-at-speed = true

auskommentiert („#“) werden und in der custom.hal die Zeile

net spindle-at-speed <= wj200-vfd.0.is-at-speed

eingefügt werden. Die erste Fräsoperation im GCode wird von nun an erst abgearbeitet, wenn die Solldrehzahl erreicht ist. LinuxCNC wartet also vor der ersten(!) Fräsoperation, bis dieses Signal als „true“ vom Frequenzumrichter zurückgemeldet wird. Eilgänge und andere GCodes, die keine Fräsoperationen sind, werden hingegen abgearbeitet. D.h. im schlimmsten Fall fährt der Fräskopf an die Stelle des 1. Eintauchens über dem Werkstück und verharrt dort.

Die Anzeige von Status und Drehzahl soll auch in der Bedienoberfläche Gmoccapy angezeigt werden. Dies wird über eine „Verknüpfung“ in der custom_postgui.hal erreicht:

net spindle-at-speed => gmoccapy.spindle_at_speed_led 

net spindle-cmd-rps-abs => gmoccapy.spindle_feedback_bar

Kommunikation überwachen

Der getaktete „Watchdog“-Pin des FU wird mit einer Watchdog-Komponente von LinuxCNC „verknüpft. Damit die Kommunikation durch die Watchdog-Komponente nun überwacht werden kann, sind folgende Verdrahtungen notwendig:

Integration & Aktivierung der Watchdog-Komponente in der custom.hal Datei:

loadrt watchdog num_inputs=1
addf watchdog.process servo-thread
addf watchdog.set-timeouts servo-thread

Taktsignal (Watchdog-Signal) vom VFD an die Watchdog-Komponente übergeben:

net vfd-watchdog wj200-vfd.0.watchdog-out => watchdog.input-0

Limit für Zeitüberschreitung vorgeben (maximale Zeit in Sekunden, die das Taktsignal ausbleiben darf, bevor das Watchdogmodul einen Fehler ausgibt):

setp watchdog.timeout-0 0.2

Watchdog aktivieren mit

setp watchdog.enable-in 1

Und im letzten Schritt muss der Ausgangpin der Watchdog-Komponente parallel zu anderen EStop-Signalen (Not-Taster) einen E-Stop auslösen können – siehe hierzu nächstes Kapitel.

Einbindung in EStop

Folgende 3 Ereignisse sollen einen EStop auslösen:

  • Betätigung des Not-Schalters
  • RS485-Kommunikationsverlust mit dem VFD
  • VFD-Fehler

Diese Ereignisse können über folgende HAL-Pins abgefragt werden:

  • watchdog.ok-out => Dieser Pin ist nur wahr („true“ / 1), wenn die Watchdog-Komponente aktiv ist („enable 1“) und es zu keiner Zeitüberschreitung mit dem Vfd gekommen ist.
  • wj200-vfd.0.is-alarm => Dieser Pin ist nur wahr („true“ / 1) wenn der Vfd einen Fehler meldet
  • estop-ext => Diese Verknüpfung ist in der Standard-Konfiguration mit einem Parallelport-Pin verknüpft, worüber üblicherweise der mechanische Not-Taster abgefragt wird.

Logisch betrachtet muss immer dann ein „EStop“ ausgelöst werden, wenn mindestens einer der eben genannten Pins vom beschriebenen Zustand abweicht. Oder umgekehrt: Es liegt nur dann kein EStop-Ereignis vor, wenn alle oben genannten 3 Pins den beschriebenen Zustand aufweisen („Und“-Verknüpfung).

Um die 3 Parameter logisch miteinander zu verknüpfen eignet sich die LUT5-Komponente. Hiermit können beliebigen Kombinationen von bis zu 5 Eingangs-Pins jeweils einem definierbaren Zustand eines Ausgabe-Pins zugewiesen werden. Zuerst wird die LUT5-Komponente in der custom.hal eingebunden, aktiviert und konfiguriert:

loadrt lut5 count=1
addf lut5.0 servo-thread
setp lut5.0.function 0x2

Mit „function 0x2“ wird der Lut5-Ausgabepin nur dann auf wahr („true“ / 1) gesetzt, wenn die folgenden 3 Zustände an den LUT5-Eingangspins 0 bis 2 gleichzeitig vorliegen:

  • watchdog.ok-out = true (1)
  • wj200-vfd.0.is-alarm = false (0)
  • estop-ext = false (0)

Im zweiten Schritt werden diese 3 Pins mit 3 Eingangspins der LUT5-Komponente verbunden

net estop-watchdog-timeout watchdog.ok-out => lut5.0.in-0
net estop-vfd-error wj200-vfd.0.is-alarm => lut5.0.in-1
net estop-ext => lut5.0.in-2

und der Lut5-Ausgabepin an LinuxCNC übergeben

net estop-signal lut5.0.out => iocontrol.0.emc-enable-in

In der [Name].hal Datei muss im letzten Schritt die standardmäßige direkte Verknüpfung zwischen Notaus-Taster (über Parallelport-Pin) und LinuxCNC

net estop-ext => iocontrol.0.emc-enable-in

auskommentiert („#“) werden.

Wird als externer Not-Taster ein „Öffner“ verwendet, so ist ggf der Parallelport-Pin zu invertieren. Hierzu in der [Name].hal Datei die Zeile

net estop-ext <= parport.0.pin-11-in

durch

net estop-ext <= parport.0.pin-11-in-not

ersetzen

Fehlermeldungen ausgeben

Die Anzeige der Fehlerursache als „Message“ erfolgt durch die message-Komponente von LinuxCNC. In der Custom.hal Datei sind dafür folgende Einträge erforderlich:

Einbinden und Aktivieren der message-Komponente sowie Definition der Fehlermeldungen:

loadrt message names=m_vfd-error,m_vfd-com,m_estop-ext messages="VfD-Error (check vfd-display),Vfd-Communication lost, External E-Stop"
addf m_vfd-error servo-thread
addf m_vfd-com servo-thread
addf m_estop-ext servo-thread

Verbinden der Meldungen mit den jeweiligen EStop-Verknüpfungen (siehe Kapitel „Einbindung in EStop“):

setp m_vfd-com.edge 0 (nur erforderlich bei Verwendung von „Öffnern“ als Not-Taster, siehe oben)
net estop-1 => m_vfd-error.trigger
net estop-0 => m_vfd-com.trigger
net estop-ext => m_estop-ext.trigger