Hilfe zu PC-->Arduino(Master/Slave)-->Modbus-->Frequenzumformer

Hallo,

ich habe mich hier angemeldet, da ich ein paar Hilfen in die richtige Richtung von Euch bräuchte.

Und zwar habe ich mir eine Hobby-CNC Fräse gebaut, die ich auch soweit ganz gut im Griff habe.
Als Steuerung der Fräse verwende ich die Software Mach3, mit der ich zufrieden bin.
Die Ansteuerung der Frässpindel habe ich über das integrierte Modbus von Mach3 mit einem USB to RS485 Stick gelöst, welches auch zu meiner Zufriedenheit wunderbar funktioniert. Dieses Setup habe ich bevorzugt, da ich so genauer die Spindedrehzal einstellen kann und ich kann auch z.B. das Drehmoment aus dem Frequenzumformer(FU) auslesen.

Da Mach3 nur einen Modbus steuern kann, und ich ganz gerne den Arduino dazu verwenden möchte ein paar mehr EIn- & Ausgänge für die Fräse hätte, müsste ich den Arduino dazu bringen die Modbus Befehle an den FU weiterzuleiten.

Die Ein- & Ausgänge zu verarbeiten klappt auch schon einigermassen ganz gut, nur die Modbus Geschichte will nicht in meinem Kopf.
Habe die letzten Wochen schon einiges im Internet gelesen, aber je mehr ich ausprobiere umso undurchsichtiger wird es für mich. Mag auch sein, dass ich nicht mehr der jüngste bin, aber Lust das umzusetzen und was zu lernen dabei habe ich nach wie vor.

Nun zum meinem vorhaben.

Ich möchte gerne einen Master-Arduino haben (den 2560 wegen der Vielzahl an Ein- und Ausgängen), der über USB angeschlossen ist. An diesem kommt ein RS485 Shield.....Dieser sollte dann einmal ein paar Ein- & Ausgänge verwalten, den FU steuern und einen Slave Arduino versorgen der ebenfalls für die Steuerung von Ein- & Ausgängen dient.
Den Slave Arduino deshalb, da ich dadurch eine Menge an Kabeln sparen könnte, denn den Slave möchte ich als externes Bedienpanel nehmen, wo ich unter anderem die Maschine und/oder Spindel starten kann, Vorschub override und so weiter.

  • Könnte man sowas mit dem Master/Slave Arduino aufbauen?

  • Geht sowas überhaupt programmiertechnisch mit dem Arduino? Das er die Modbus Befehle sendet und empfängt und sich um die Ein-/Ausgänge kümmert?

  • Anstatt den MasterArduino über USB anzuschließen, könnte man diesen auch als 2ten Slave degradieren und meinen vorhandenen USB-RS485 Stick und PC als Master nutzen?

Hoffe ich konnte mein vorhaben einigermassen verständlich nieder schreiben und bedanke mich schonmal rechtherzlich für jede Hilfestellung die ich bekommen kann.

Liebe Grüße
Andre

bin mir noch nicht sicher ob ich alles verstanden haben. Kannst du mal aufzeichnen was du alles hast (PC mit Mach3 Software / ein Mach3 Board / Ein Mega / Ein UNO ) zwischen welchen Objekten ein Modbus existiert, und wer davon Master und wer Slave sein soll?

Bisher lese ich noch keinen Grund raus warum das grundsätzlich nicht gehen soll. Daher besser ein Systembild ergänzen.

Das klingt ein bisschen nach Überforderung für den Arduino. Modbus RTU ist etwas heikel im Timing, vor allem bei höheren Baudraten.
Ich würde empfehlen, stattdessen einen ESP32 zu nehmen. Da hast du auch einige GPIOs und genug Rechenpower, um gleichzeitig als Modbus-Bridge zu fungieren.
Wenn du magst, schaue dir mal meine eModbus-Library an. Die kennt u.a. einen Bridgemodus, bei dem der ESP32 Modbus-Requests entweder selber beantwortet, oder an angeschlossene Modbus-Server weiterleitet.

Ich kenne das Mach3 nicht und ein Link fehlt, deshalb hier die Nachfrage: kann das Teil nur einen Modbus steuern oder nur ein einziges Modbus-Gerät? Letzteres wäre mehr als dämlich. Wenn Ersteres zutrifft, dann muss der Arduino gar nichts weiterleiten, sondern nur in den Bus eingebunden werden.

Ja.

Grundsätzlich ja, aber ich habe noch nicht kapiert, ob Dein Master-Arduino vom USB her auch Modbus verarbeiten soll, somit dort Slave wäre. Diese Vorhaben dürfte zum Scheitern verurteilt sein, da die Latenz zu hoch sein dürfte (hängt nicht mit dem Arduino zusammen, sondern mit Deinem "Konzept").

Wenn alles über Modbus gehen soll, dann ist das der einzige gangbare Weg.

Ich sehe nicht, wieso hier der Arduino überfordert sein sollte. Klar hängt natürlich von den "höheren Baudraten" ab, aber so bis 57600 sehe ich kein Problem, wenn nur die erwähnten Dinge gefordert sind.

Die Bridge ist sowieso Quatsch, somit bringt die höhere Rechenpower nicht wirklich viel, Du kriegst höchstens Probleme mit einer allfälligen Nebenläufigkeit (von wegen Timing).

Wow, bin schwer beeindruckt von Euch.........

vielen vielen lieben Dank an Euch schon mal für Euer Interesse und Antworten bei meinem Vorhaben.

Im Anhang, habe ich wie erwünscht mal ein Paar Dateien hochgeladen

Des weiteren kann man sich hier die Mach3 Steuersoftware runterladen:
https://www.machsupport.com/software/mach3/

Die Software ist so lauffähig auf dem PC, auch ohne Steuerkarte d.h. man kann fast eigentlich alles damit machen oder ausprobieren.

Ob der oder die Arduinos überfordert sein werden, kann ich leider nicht sagen, da ich die noch nicht kenne. Ich denke aber mal nicht, denn die brauchen ja eigentlich nicht rechnen oder dergleichen, sondern nur auswerten oder Befehle senden.

Die Ansteuerung der Schrittmotoren übernimmt nach wie vor das Parallel-Port Board.

Wenn die Befehle vom PC mit Mach3 kommen, ist dann schon der PC der Master?
Oder der erste Arduino? Wie wird sowas festgelegt.

Wie gesagt/geschrieben im ersten Post von mir, mir geht es darum, den USB-RS485 Stick durch Arduinos zu ersetzen, um ein paar mehr I/O Pins zu bekommen. Da das jetzige Parallel-Port BoB nur 5 Input und 1 Output Pin hat.
Denn ich würde die ganzen Endschalter lieber gerne einzelnd auslesen, zur Zeit in Reihe und an einem Pin.
Oder gerne würde ich auch eine separate Steuertafel haben, wo ich z.B. durch Tastendruck das Programm starten, Achsen verfahren, Vorschub/Drehzahl steuern kann. Da sollte dann ein Arduino Slave rein, und hätte nur ein paar Modbus Kabel anstatt ein ganzen Kabelstrang

Es gibt auch andere Steuerboards, die bereits mehr I/O Pins haben, doch erstens sind die sehr sehr teuer, und laufen teilweise trotz USB/Ethernet nicht sehr stabil, da diese nur mit Plug-Ins laufen.
Das gute alte Parallel BoB ist durch nichts zu ersetzen, denn hier sendet der PC die Fahrdaten der Motoren an das Steuerboard. Bei der USB/Ethernet Variante sendet der PC zwar auch, aber das Board bereitet diese Daten dann noch auf. Da das Board Daten in einem Puffer zwischen speichert, hat man manchmal das Problem, die Motoren noch fleissig weiter drehen, obwohl man auf dem PC schon längst Stop oder was anderes gedrückt hat.
Deswegen mag ich das alte ParallelPortBoard.

Die jetzige Ansteuerung des Frquenzumrichters habe ich durch viel Trial&Error hinbekommen und funktioniert auch zu meiner vollsten Zufriedenheit. Nur ehrlich gesagt, von der Programmierung der Arduinos habe ich keinen blassen Schimmer. Hatte mir zwar schon aus dem Netz probiert was rauszulesen, aber wirklich verstanden habe ich davon nichts, was die Befehle bewirken. Da bin ich voll auf Eurer Hilfe angewiesen

Also vielen Dank nochmals, und ich hoffe ich konnte Euch ein wenig Info´s zu meinem vorhaben geben.


_
_
Mein zur Zeit

_
_

_
_


_
_

Da hast was vor...
Du musst ein rigoroses FailSave fahren.
...
HardwareEndschalter, NotAus, ÜberfahrKontakte - dann drauf reagieren - da haste was richtig vor... :slight_smile:

Das mein Vorhaben ein wenig aufwendiger sein wird, hab ich mir schon gedacht.
Aber probieren würde ich es doch gerne.
Ich würde erstmal nur den MasterArduino einbinden wollen, mit den Endschaltern und der FU Ansteuerung.
Ist es denn generell möglich, dass der MasterArduino beides gleichzeitig kann? Also den FU mit Daten zu versorgen und auf die Endschalter aufpassen? Das sind für mich ja 2 unterschiedliche Programme.
Wie gesagt....ich kenne mich mit Arduino leider 0(Null) aus.

Ja.
Der kann sogar noch viel mehr :wink:

ABER: Bestimme, was Sicherheitsrelevant ist!
Endschalter, die dieses Merkmal haben, beenden aktiv jegliche Verfahraktion.
Beispiel:
Eine Reissleine am Förderband unterbricht bei Auslösen die Versorgung des Antriebs.
Die Steuerschaltung stellt DANN fest, das die Versorgung unterbrochen wurde.

Ein Endschalter, der sicherheitsrelevant ist, unterbricht die Versorgung des Antrieb. Eine Meldung an die Steuerung erfolgt nachrangig.
Ein (Rück-)Fahren aus diesem Status erfolgt nur, wenn manuell ausgelöst.

Das klingt doch schonmal gut......Dann kanns losgehen :sweat_smile:

Also die Endschalter habe ich i.M. zwangsweise in Reihe an einen Pin angeschlossen, da ich leider nur begrenzte 4 Input Pins habe. In diesem Fall, ist es sogar noch so, dass bei mir der Referenz- und der Endschalter ein und derselbe ist. Wenn die Maschine ihre Homeposition anfährt fungiert dieser Schalter als Referenzswitch. Hat das homing stattgefunden behandelt Mach die Schalter als Endschalter.
Ich würde es gerne so haben, dass ich separate Endschalter habe. Also für die jeweilige Achse einen Referenzschalter sowie einen Endschalter, der ca. 1-2 mm später auslöst. So währe es sauberer gelöst, als wie es jetzt ist......Nur mir fehlen die Input Pins

Ich hatte es ja auch schonmal mit einem Schalter testweise ausprobiert, über Modbus und es funktionierte, doch leider weiss ich nicht, wie ich programmtechnisch dann den Frequenzumformer parallel in Arduino mit einbinden kann.
Denn der läuft ja zur Zeit noch bei mir über den USB-RS485 Stick

YES! genau so ist es richtig.

Neneee!
Der Endschalter muss als NC ausgeführt HINTER dem Treiber eingebunden werden.
UND zusätzlich musst Du den Endschalter mit einem Steuerpin des Arduino manuell betreiben, indem Du den "überbrückst" - Pin brauchst Du so und so...
Wenn es an vorhandenen Pins nicht reicht, hilft evtl. ein Portexpander.

Microschalter als NC habe ich i.M. ja auch verbaut, wegen der Sache mit dem Kabelbruch, damit dieser detektiert wird. Ich würde dann beim Umbau gerne auf Näherungsschalter wechseln, da diese erstens besser einzustellen sind und zweitens Platzsparender zu verbauen sind. Jedenfalls in meiner Konstellation. Hatte es auch schon auf einer Achse kurz ausprobiert und funktioniert soweit.
Da ich dann für jede Achse 3 End- bzw. Referenzschalter(Achse+; Achse- & Achse Home) verbauen wollte, fiel mir auf, dass es aufgrund der zur Zeit mangelnden InputPins so nichts wird. Ausser ich würde diese wieder alle in Reihe schalten, was bei der Menge an Schaltern doch eher bescheiden ist.
Alleine die Fehlersuche, falls einer ausfällt oder ähnliches. Daher kam mir unter anderem die Idee mit dem Arduino. Denn ich bräuchte insgesamt 12 Endschalter für X; Y-Master; Y-Slave und Z.

Den Not-Stop übernimmt das verbaute Parallel-Board. Indem Mach3 die Treiber in den Not-Aus versetzt. Ein Verfahren ist dann nur mit Override möglich, was vorher bestätigt werden mus.
Softwareseitig wird zwar die Endlage mit überwacht, doch falls dieses aus irgendeinem Grund nicht funktioniert, sollten die Endlageschalter greifen um die Mechanik zu schützen.

@otti94
ganz klar ist mir noch nicht wie du das systematisch aufbauen willst:

Bei Modbus RTU gibt es einen Master (heute Client) und viele Slaves (heute Server).

imho is dein Mach3 Programm der Modbus Master (lila)
Modbus ist ein Bus, die Modbus Linie soll zu allen Modbus Teilnehmern gehen.

Was Meinst du mit "Arduino Master am USB Port"? wenn dieser vom PC aus gesteuert werden soll, dann müsste das ein Slave sein.

Was ist die strichlierte Linie zum FU? Ist das Modbus? Sollen die Befehle für den FU vom PC kommen?

1 Like

Modbus ist für Deinen "Arduino Slave" (man sagt besser "Server") insofern problematisch, weil nur der Client Kommunikation starten darf. Wenn Du also irgendwas am Bedien-Arduino eingibst, müsste der darauf warten, dass der Client ihn danach fragt...

wenn Mach3 es schaff laufend die "TasterRegister" und "Encoder Register" abzufragen dann könnte das bei 19200 noch halbwegs responsive sein. Also bis man den Taster debounced hat, sollte der Client ihn auch abfragen können.

Ach so....das könnte sein.....ich dachte, wenn ich den vorhandenen USB entferne und dann einen Arduino an den USB Port anschließe ist der Arduino der Master bzw. Server, da hier ja das erste Modbus Modul dran sitz und von diesem geht es dann weiter.

Also Mach3 soll die Abfragen / Befehle ausführen, dann müsste es so sein, wie du schon sagtest, dass der PC mit Mach3 der Master ist

Die Baudrate könnte man ja noch bestimmt etwas erhöhen, hatte diese nur am Anfang genommen. Es lief damit und ich hatte es so gelassen.

Nun bringst Du mich ganz durcheinander.... ich dachte immer "Server oder Master" ist, der "mehr" zu sagen hat, und "Client oder Slave" muss sich danach richten.

Master / Client initiert eine Verbindung. Master / Client setzt abfragen ab.

Slave / Server stellt eine Resource zur Verfügung und antwortet auf Anfragen.

Wenn die Begriffe nun klar sind, mach noch mal eine neue Zeichnung.

Politisch korrekt ist der Client (Kunde, früher Master) der, der Requests stellen kann, wann immer er will. Die Server (Anbieter, früher Slaves) sind die, die dann Responses senden, wenn sie angesprochen waren.

Danke Euch beiden.....Nun ist es mir klar...Wieder was dazu gelernt....
Dachte immer dass der Server "höher" ist als der Client....Aber jetzt wo ihr es sagt....leuchtet es mir ein.....der Client PC sendet etwas an den Server-PC und dieser muss antworten, ungekehrt würde der Server-PC nichts senden, ohne das der Client-PC es nicht will.....Richtig?

Werde nachher mal probieren eine neue, hoffentlich richtige , Skizze anzufertigen, so dass ich nicht mehr für Euch in Rätseln sprechen muss. (Die Geschichte mit der Glaskugel, die in Reparatur ist)

Ich hatte mir auch überlegt, dass ich erst einmal versuche, den Frequenzumrichter via Arduino zum laufen zu bringen. Und wenn das dann läuft, müsste beides (FU & Tasterabfrage) zur zusammenarbeit überredet werden.

Also ob es politisch korrekt ist oder nicht, sei mal dahingestellt, aber in der Modbus-Welt ist der Master eigentlich immmer noch, der Master, wenn es sich um Modbus RTU (über RS-485) handelt. Die Begriffe Server/Client werden eigentlich nur bei Modbus TCP verwendet, wo sie meiner Meinung nach auch mehr Sinn ergeben, da es sich da wirklich um TCP-Server bzw. -Client handelt und dort ein Server auch wirklich mehrere Clients haben darf, was bei Modbus RTU nicht der Fall sein darf.

Aber das ist nur das Naming, darüber dürft Ihr natürlich streiten. Ich habe kein Problem mit Master und Slave, solange es sich dabei um Geräte (Maschinen) handelt.

Zu Deinem Modbus ist noch zu erwähnen: RS-485 (die physikalische Basis) ist immer ein Strang, er darf nicht stern-förmig verkabelt werden und die Enden müssen korrekt terminiert sein (120Ω).

Wenn Mach3 selbst Modbus spricht, muss der PC der Master sein, somit wären alle Arduinos Slaves.

Offizielle Verlautbarung von Modbus.org