Home   

ubit-rc.de - 6040Z CNC Fräsmaschine

E100 Inverter (vfd) per ModBus steuern

Der mitgelieferte Inverter Nowforever E100 lässt sich wunderbar per ModBus steuern. ModBus ist ein einfaches Kommunkationsprotokoll welches z.B. mit Hilfe einer seriellen RS485-Schnittstelle mehrere Geräte verbinden kann. Ein Gerät fungiert dabei als Master - alle übrigen (bis zu 31 Geräte) als Slaves.

Da ich speziell für die Steuerung der Fräsmaschine einen altern PC mit Windows XP einsetze der noch eine RS232-Schnittstelle besitzt habe ich mir einen einfachen RS232/RS485-Konverter für unter 10 € bestellt. Ich habe dann einfach den Konverter mit den Anschlussklemmen des Inverters (diese befinden sich unter einer Klappe) verbunden.
Konverter + mit +485 am Inverter, Konverter - mit -485 am Inverter.
Ich habe einfach Kabel genommen die ich gerade zur Hand hatte. Theoretisch sollte man verdrillte und geschirmte Kabel verwenden (Schirmung dabei an GND anschließen) - es scheint aber auch so zu funktioniere.

Anschließend habe ich mir QModBus installiert um die Verbindung zu testen. QModBus findet man hier: http://qmodbus.sourceforge.net/

Vorab sollte man prüfen ob die Einstellungen des Inverters für die serielle Kommunikation korrekt sind. Mit der Enter-Taste der Invertersteuerung gelangt man in die Einstellungen. Wichtig sind folgende Register:

Bei der Konfiguration wählt man zunächst die Registergruppe - hier also P0. Anschließend kann mit den Pfeiltasten hoch/runter die Registernummer angewählt werden. Nochmal auf Enter und man kann den Wert für das Register einstellen. Mit ESC geht es wieder zurück.

Wenn man nun QModBus startet muss man dort die Serielle Schnittstelle sowie die Kommunikationsparameter eintragen. Also:

Mit dieser Einstellung veranlasst man QModBus die ModBus-Register 1280 bis 1287 auszulesen (hexadezimal sind das die Register 500H bis 507H). Laut Handbuch des E100 sind diese Register wie folgt belegt (ich habe hier nur die Wichtigsten Daten aufgelistet):

Register (hex)Bedeutung
500HBit 0 = 0: Spindel läuft nicht
Bit 0 = 1: Spindel läuft
Bit 1 = 0 : Im Uhrzeigersinn
Bit 1 = 1: Gegen den Uhrzeigersinn
501HEingestellte Frequenz
502HAusgangsfrequenz
503HAusgangsstrom (multipliziert mit 10)
504HAusgangsspannung (multipliziert mit 10)
507HInterne Temperatur des Inverters

In der Anleitung des Inverters sind die Registernummern hexadezimal angegeben. Das ist ein Zahlensystem bei dem jede Ziffer den Wert 0-15 annehmen kann. Die Ziffernwerte 10-15 werden dabei durch die Buchstaben A-F dargestellt. Hexadezimale Zahlen erkennt man meist daran das ein "H" angehängt ist oder vorweg ein "0x" steht. Im Web findet man jede Menge Umrechnungsprogramme mit denen sich hexadezimale Zahle in Dezimale Zahlen umwandeln lassen. In Mach3 müssen die Zahlenwerte/Register immer dezimal eingetragen werden. Daher also: Register 500H wird in Mach3 zu Register 1280.

Um den Inverter später auch steuern zu können benötigen wir noch ein paar ModBus-Register in die wir schreiben können. Hier eine kleine Aufstellung:

Register (hex)Bedeutung
900HBit 0 = 0: Spindel aus
Bit 0 = 1: Spindel an
Bit 1 = 0: Uhrzeigersinn
Bit 1 = 1: Gegen den Uhrzeigersinn
901HFrequenzvorgabe

Wenn man nun auf "Send" klickt, werden diese Register aus dem Inverter ausgelesen und im Bus-Monitor angezeigt. Ändert man z.B. mit dem Potentiometer die Frequenz oder startet/stoppt man die Spindel und klickt nochmal auf "Send" sollten sich die Werte verändern. Klappt das nicht, hat man vielleicht den falschen Port ausgewählt oder die Kabel zwischen Konverter und Inverter müssen getauscht werden. Man probiert so lange herum bis man die gewünschten Daten abfragen kann. Jetzt kann man sicher sein das die Verbindung funktioniert und kann mit der Konfiguration in Mach3 fortfahren. Es gibt auch Berichte in diversen Foren nach denen man zusätzlich GND zwischen Inverter und Konverter verbinden muss. Bei mir war das nicht notwendig.

Die Ansteuerung des Inverters in Mach3 erfolgt am Besten mit Hilfe eines sogenannten Brains. Das ist eine einfache Logik die man sich mit dem Brain-Editor zusammenklicken kann. Ich gehe hier davon aus das man die Standard-Benutzeroberfläche von Mach 3 1024.set verwendet.

Zunächst müssen wir die ModBus-Kommunikation in Mach3 aktivieren. Hierzu aus dem Menu "Config"-"Ports & Pins" auswählen und dort "ModBus InputOutput Support" und "ModBus PlugIn Supported" anwählen:

Damit Mach3 die Einstellungen auch nutzt müssen wir das Programm beenden und neu starten.

Nun muss man Mach3 noch beibringen welche ModBus-Register verwendet werden. Das geschieht im Menüpunkt "Function Cfg's"-"Setup Serial ModBus Control":

Sorry - der Screenshot ist fehlerhaft. 2304 und 1280 sind vertauscht!

Mit diesen Einstellungen erstellen wir zwei Registergruppen auf die wir dann später zugreifen können. Die erste Gruppe CFG#0 dient zum Auslesen der Daten aus dem Inverter und startet bei Register 1280 (=500H). Mit der zweiten Gruppe (Ab 900H = 2304 Dezimal) CFG#1 steuern wir später den Inverter und damit die Spindel. Ganz wichtig ist übrigens der Haken bei "ModBus Run"! Auch hier empfiehlt es sich Mach3 zu beenden und neu zu startern.

Nun kommen wir zur Erstellung des Brains. In Mach3 über das Menu "Operator"-"Brain Editor" den Brain-Editor starten. Als Name für den neuen Brain verwenden wir "E100 VFD".

Im Brain-Editor kann man nun mehrere sogenannte "Lobes" erstellen. Beginnen wir mit der Rückmeldung der Ausgabefrequenz des Inverters an Mach3. Hierzu fügen wir zunächst einen neuen Knoten hinzu (Menu "Commands"-"Add" oder Plus-Icon). Wir klicken auf "ModBus" und stellen folgende Werte ein:

Die CFG# ist 0 - also die oben definierte erste Registergruppe die bei Register 500H beginnt. Im Feld "Enter ModBus Adress to use" steht eine 2. Es wird also auf Register 500H + 2 = 502H zugegriffen. Laut Tabelle oben steht darin die Ausgangsfrequenz des Inverters. Ein Klick auf "OK" und wir erhalten folgendes Bild:

Wir klicken nun die so erstellte Box an (sie färbt sich grün) und klicken nochmal auf das Plus-Symbol. Diesmal wählen wir "No Operation" und klicken auf "OK":

Der Inverter liefert uns die Frequenz mit 2 Nachkommastellen als Ganzzahl. Wird also eine Frequenz von 200 Hz erzeugt, liefert das ModBus-Register den Wert 20000. Wir möchten aber die Drehzahl der Spindel wissen. Dazu müssen wir nun eine Formel erstellen und den ausgelesenen Wert mit 0,6 multiplizieren. Wir klicken daher auf die No-Operation Box (wird wieder grün) und nochmal auf Add (Plus-Icon). Im Dialog klicken wir nun auf "Formula" und tragen "A*0.6" ein (Achtung: Dezimalpunkt statt Dezimalkomma"):

Wir erhalten folgendes Bild:

Damit wir den Wert später auch irgendwo anzeigen können müssen wir die Befehlskette nun noch beenden. Hierzu markieren wir die Box mit der Formel und klicken auf das grüne "Terminator-Symbol" (oder Menu "Commands"-"Terminate Lobe"). Im Dialog wählen wir "DRO's" und speichern den Wert im DRO 1100:

Das Ergebnis sollte so aussehen:

Nun speichern wir den neuen Brain erstmal im Unterverzeichnis "Brains" unseres Mach3-Installationsverzeichnisses unter dem Namen "E100 VFD.brn" und wechseln zu Mach3. Dort wählen wir im Menu "Operator"-"Brain Control". Im Dialog laden wir zunächst alle Brains neu (Klick auf "Reload all Brains"). Unser neuer Brain sollte nun in der Liste erscheinen. Wir klicken ihn an und setzen den Haken bei "Enabled" (WICHTIG!!!). Anschließend klicken wir auf "View Brain". Es öffnet sich der Brain-Monitor - sieht ähnlich aus wie der Brain-Editor. Hier sehen wir aber nun welche Werte in den einzelnen Boxen ankommen:

Wenn wir nun die Spindel mit dem Tastenfeld am Inverter/Controller starten und die Frequenz verändern sollten wir im Brain-Monitor sehen wie die aktuelle Spindelfrequenz bzw. -drehzahl dort angezeigt wird. Wenn das soweit funktioniert können wir uns der eigentlichen Steuerung der Spindel widmen.

Hierzu öffnen wir wieder den Brain-Editor, achten darauf das keine Box grün ist und erzeugen eine neue "Lobe" mit der Plus-Taste. Diesmal nutzen wir eine LED-Anzeige die von Mach3 gesteuert wird. LED 11 mit dem Namen "Spindle On" sollte funktionieren:

Wir fügen zunächst wieder eine "No Operation" ein. Als Terminator müssen wir nun den ModBus nehmen:

Wir erhalten:

Wir speichern nun den Brain und wechseln wieder zu Mach3. Menu "Operator"-"Brain Control". Dort laden wir den Brain neu (oder einfach "Reload All Brains") und rufen wieder den Brain-Viewer mit unserem Brain auf. Wenn wir nun die Spindel in Mach3 starten (z.B. im MDI-Screen mit dem G-Code M3 oder durch Klick auf die entsprechende Schaltfläche), so sollten wir im Brain sehen wie sich die komplette Lobe auf Grün umstellt. Allerdings läuft unsere Spindel trotzdem nicht automatisch an. Damit das funktioniert müssen wir dem Inverter noch mitteilen das wie die Spindel über den ModBus steuern möchten und nicht mehr über das Tastenfeld.

Dazu müssen wir die Einstellung P0-000 auf den Wert 2 umstellen. Wenn wir das gemacht haben, können wir nun bereits die Spindel über Mach3 starten und anhalten.

Als nächstes widmen wir uns der Drehzahlsteuerung. Damit diese funktioniert müssen wir am Inverter noch P0-002 (die Haupt-Frequenzquelle) auf den Wert 6 (Serial communication) umstellen. Anschließend starten wir wieder den Brain-Editor und erstellen eine neue Lobe. Wir beginnen mit dem DRO "202 - Spin RPM - Overden". Hier stellt Mach3 die aktuelle Soll-Geschwindigkeit inklusive ggf. vorhandener Übersteuerung zur Verfügung. Anschließend wieder ein "No-Operation". Nun folgt eine Formel - wir müssen den Drehzahlwert durch 0,6 dividieren um die Frequenz zu erhalten. Abschließend wieder ein ModBus-Terminator mit folgender Einstellung:

Insgesamt sollte das nun so aussehen:

Zurück zu Mach3, Brain neu laden, Brain-Viewer starten und mit den Spindel-Einstellungen in Mach3 herumspielen. Wir sollten nun in der Lage sein die Spindel ein- und auszuschalten sowie die Drehzahl vorzugeben.

Bleibt noch die Drehrichtung ebenfalls kontrollierbar zu machen. Hierzu öffnen wir wieder den Brain-Editor und erzeugen eine weitere Lobe. Diesmal starten wir mit LED "165 - Spindle CCW on". Anschließend wieder ein "No-Operation" und als Terminator nehmen wir Modbus Register 900H, Bit 1 - das ist das Steuerbit für die Drehrichtung:

Komplett also:

Damit sollten wir nun die volle Kontrolle über die Spindel haben. Schön wäre es natürlich noch, wenn wir die tatsächliche Spindeldrehzahl bzw. Ausgangsfrequenz des Inverters in der Mach3-Oberfläche anzeigen lassen könnten. Kein Problem. Dafür haben wir ja schon den DRO 1100 mit dem passenden Wert belegt. Wir müssen also nur noch die Benutzeroberfläche (das Screenset) entsprechend anpassen. Dazu nutzen wir den Mach3-Screen Designer MachScreen (URL: http://www.kd-dietz.com/klausphp/). Den installieren wir uns und dann kopieren wir im Mach3-Verzeichnis das Standard-Screenset "1024.set" in eine eigene Datei "6040.set". Wir starten nun MachScreen und öffnen dieses neue Screenset.

Auf der Seite 1 finden wir rechts ein Textfeld "RPM" und rechts daneben ein Anzeigefeld für die Spindeldrehzahl:

Wenn wir mit der Maus auf das Anzeigefeld klicken öffnet sich ein Popup in dem wir das Element auswählen können (es liegen mehrere Elemente übereinander, daher ist die Auswahl mit der Maus hier nicht eindeutig). Das gewählte Element wird markiert und in den Eigenschaften sehen wir was Mach3 hier anzeigt. Wir ändern das auf OEM Code 1100:

Auf Seite 2 gibt es das auch nochmal. Auch hier entsprechend ändern.

Nun speichern wir das Screenset in MachScreen und laden es in Mach3. Nun sollte im RPM-Feld die tatsächliche Spindeldrehzahl angezeigt werden.

Wer mag kann nun noch z.B. den aktuellen Stromverbrauch der Spindel oder die Temperatur des Inverters z.B. im Diagnose-Bildschirm hinzufügen. Wie das funktioniert findet Ihr nun selbst heraus, oder?