Datenaustausch Modbus PLC200 <-> Rasperry PI

DaFi

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Datenaustausch Modbus PFC200 <-> Rasperry PI

Hallo,

seit mehreren Tagen versuche ich verzweifelt einen Datenaustausch über Modbus TCP zwischen einer Wago 750-8206 und einem R-Pi herustellen.
Als Software für die Wago benutze ich eCockpit und für den PI Codesys 3.5.
Sowohl sowohl mit Modbus noch eCockpit noch Codesys habe ich vorher intensiv gearbeitet bzw. gar nicht. Aber aufgrund der Vorgegebenen Hardware ist dies nicht zu verhindern. (Bis jetzt habe ich nur mit Simatic und Profibus gearbeitet und die machen mir das leben nicht so schwer.)
Auf beiden Geräten laufen eigenständige Programme, die jeweils Ein- und Ausgänge des Anderen benötigen.
Wenn ich es richtig verstehe müssen beide als Master im Modbus Konfiguriert werden und über einen Koppler verbunden werden (so ist es zumindest beim Profi).
Folgende Fragen stellen sich mir jetzt:
- Ist ein 750-881 dafür geeignet? Die Hardware wäre vorhanden
- was ist beim Mapping zu beachten?
- muss man auch beim Modbus TCP Bausteine für die Kommunikation schreiben?
- gibt es einen anderen (einfacheren) Weg die Kommunikation herzustellen?

Vielen Dank im Vorraus.
 
Zuletzt bearbeitet:
Erzähl mal n bissel über den Raspi, läuft da ne selbstcompilierte PLC Software drauf? Oder ist das so eine fertig gekaufte Raspi-PLC?

>Ist ein 750-881 dafür geeignet? Die Hardware wäre vorhanden
Da bin ich mir sehr sicher, Modbus TCP ist reine Software. Lediglich RTU braucht Hardware ('nen Chip für 80Ct bei Reichelt der bei Siemens mit Plastikschachtel als CM1241 gleich mal um die 100Euro kostet...)


Ich hab so was ähnliches mal via RTU mit dem Raspi gemacht, da mußtest du dem Raspi sagen, daß er Master ist.
Ich bin im Moment an Modbus-TCP via libmodbus (geschrieben in C, also nix Codesys) dran, da hat der Entwickler das getrennt, so wie es sich gehört.
-rw-r--r-- 1 pi users 20822 Apr 2 2014 unit-test-client
-rwxr-xr-x 1 pi pi 7564 Jan 27 10:55 unit-test-server

Haste mal bei Beckoff geschaut? https://infosys.beckhoff.com/index...._modbus_tcp/index.html&id=3328858443228214602
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich es richtig verstehe müssen beide als Master im Modbus Konfiguriert werden
Kann man so pauschal nicht sagen. Es kommt darauf an, ob du noch weitere Kommunikation zu anderen Teilnehmern hast.
Die Wago kann gleichzeitig Server als auch Client sein. Beim Raspi ist es ganauso.
Damit ist Punkt 1 überflüssig.
was ist beim Mapping zu beachten?
Weder Server noch Client können die Gültigkeit der Daten feststellen. Hier müsstest du eine Überwachung programmieren.
muss man auch beim Modbus TCP Bausteine für die Kommunikation schreiben?
Nein. Beide Systeme bringen Konfiguratoren mit, die nur parametriert werden müssen.
gibt es einen anderen (einfacheren) Weg die Kommunikation herzustellen?
Möglichkeiten gibt es viele. Modbus TCP ist aber schon ein sehr einfacher Weg.
 
Nochmal vorweg, ich habe nicht viel Ahnung von Modbus und auch sonst findet man nur recht sperrlich informationen im Netz dazu.
Wäre ich nicht durch die Hardware dazu gezwungen, würde ich es auch gar nicht probieren.
Ja es gibt viele Youtubes mit Wago und Modbus oder auch PI und Modbus, aber immer nur mit Remote I/O (und das sieht immer recht unkompliziert aus), aber es gibt keine wirkliche "Anleitung" für Datenaustausch zwischen zwei CPU's.
Auch der Wago Support hat uns nicht wirklich zugehört und einfach ein Beispielprogramm für eine Remote geschickt.
(Ich erzähle das nur damit ihr Verständis für ggf. "dumme Fragen" meinerseits habt).

Weder Server noch Client können die Gültigkeit der Daten feststellen.
Brauche ich zwingend ein Server/Client verhältnis beim Modbus?
Es kommt darauf an, ob du noch weitere Kommunikation zu anderen Teilnehmern hast.
Ich möchte im Prinzip einfach nur ca. 80bits von der Wago an den PI übergeben welcher dann sein Programm mit den Daten durchläuft und mir wieder ca.80 bits als Ergebnis zurück an die Wago gibt welche dann wieder mit diesen Daten ihr Programm durchläuft. Sonst gibt es keine weite Kommunikation.
Vom Profibus kenne ich es, dass ich einfach nur auf der jeweiligen CPU Daten als In's oder Out's bekannt mache, die Adressen einstelle und fertig.
Ich hatte eigentlich gehofft, dass das mit dem Modbus auch so einfach ist, aber je mehr ich damit beschäftige, desto verwirrter werde ich.

Erzähl mal n bissel über den Raspi, läuft da ne selbstcompilierte PLC Software drauf? Oder ist das so eine fertig gekaufte Raspi-PLC?
Was genau meinst du mit selbstkompilierter Software? Auf dem PI läuft ein von uns selbst geschriebenes Programm über Codesys, wenn du das meinst.

Ist ein 750-881 dafür geeignet? Die Hardware wäre vorhanden
Hier ist meine Hauptfrage eigentlich eher: Ist diese zusätzliche Hardware notwendig, oder kann ich die auch weg lassen und direkt ein Ethernet vom PI zur Wago ziehen.
Auch hier kommt meine Annahme aus der Profibuswelt, in der ich eine DP/DP Kopplung zwischen zwei Master schalten muss.
Deswegen auch meine Frage, ob ich überhaupt beide CPU's als Master betrachten muss.

Modbus TCP ist aber schon ein sehr einfacher Weg.
Das dachte ich vorher auch. Und grade deswegen habe ich das Gefühl, sehr heftig auf dem Schlauch zu stehen und hoffe ihr habt verständis dafür.
 
Zuletzt bearbeitet:
Ich habe gestern meine Kommunikation zwischen Raspi (libmodbus in C programmiert) und S7-1212 hinbekommen.

Ziel:
Der Raspi ist Client und stellt Anfragen, die 1212 Server antwortet auf Anfragen. Mehr nicht.

Was ich an der s7 konfigurieren musste - und was bei dir an der Wago SPS sehr ähnlich sein wird: Du mußt IP-Adresse des korrespondierenden Gerätes und Port 502 bekannt geben.
Dann natürlich den Speicherbereich der den Modbus-Registern zugeordnet ist. Bei mir hab ich zum Testen 'ne Struktur in nem globalen DB mit fünf 16-bit Worten (10 Byte) angelegt und mit Startwerten 0x1111, 0x2222, 0x3333, 0x4444 und 0x5555 beschrieben - der leichten Identifikation wegen.

Das ist eigentlich alles was der Server wissen muß.
Die Halte-Register (definiert ab Adresse 40001; die nullte Adresse ist für libmodbus 40001, die erste ist 40002, usw.) lassen sich lesen und schreiben. Die Zählweise ist nicht immer bei allen Hard/Software-Anbietern die gleiche. Die sogenannten Input-Register lassen sich nur lesen.
Das Modbus Protokoll kennt mehrere Funktionen, sogenannte Modes. Mode 3 liest die Halte-Register, Mode 4 die Input-Register. Da darfste nix durcheinander bringen, sonst liest du entweder nichts oder was trügerisch Falsches. In S7 sind die Modes zum Teil auf den ersten Blick nicht eindeutig sondern ergeben sich erst aus der automatischen Erkennung des Bereichs (Input- oder Halteregister) den du lesen möchtest.


>[...] und einfach ein Beispielprogramm für eine Remote geschickt.
Ey, das ist Gold! Was willst'n noch mehr?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

zu Modbus findet man eine ganze Menge, auch hier im Forum.

Du brauchst keinen extra Koppler dazwischen, die beiden Geräte können direkt miteinander kommunizieren. Du solltest ein Gerät als Master und das andere als Slave konfigurieren. Das ist am einfachsten.

Sieh Dir dazu mal folgenden Beitrag an: https://www.codesys-blog.com/kommunikation/modbus-kommunikation-in-codesys/

Da mußt Du den ersten Teil umsetzen. Den Slave in e!cockpit zu konfigurieren läuft etwas anders. Dazu mal einen Blick in die Dokumentation (Handbuch) werfen und bei Unklarheiten hier fragen.

Gruß
 
Hallo,

ich sehe gerade das Du sonst auch OPC UA für die Kommunikation nutzen kannst. Hier die Anleitung für Wago: https://www.wago.com/de/d/APP_a750000

Da steht zwar Anwendungshinweis für Codesys 2,3 ist aber für e!cockpit. Du mußt dann nur noch gucken wie Du das auf dem Raspberry einbindest. Da kann Dir aber sicher der Kollege von 3S hier im Forum weiterhelfen.

Gruß
 
Zurück
Oben