Ethernet Zugriff auf EtherCAT Feldbus

flar.sps

Level-1
Beiträge
26
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
widme mich gerade eines etwas komplizierten Projektes und brauche dabei eine SPS von Beckhoff sowie einen IPC von einem anderen Hersteller.
Dabei sollte es möglich sein, dass der IPC auf den EtherCAT Bus der die Daten an die SPS weitergibt zugreift.
Es ist aus dieversen Gründen nicht möglich, dass die Daten von der SPS direkt übermittelt werden. Bedeutet, dass der IPC direkten Zugriff braucht.
Hat hierzu jemand bereits Erfahrung. Gibts es hier einen brauchbaren Adapter der dies anbietet und wie leicht lassen sich die Daten auf dem IPC dann auswerten?

Vielen Dank im voraus für eure Antworten.

LG,
Ralf
 
Geht es denn tatsächlich um die Daten der I/Os, bzw. eventuell über das EtherCAT Automation Protocol übertragene Daten oder welche Daten erhoffst Du so zu ermitteln?
Du schreibst, dass die Daten direkt nicht übermittelt werden können warum nicht? Eine Kommunikation über ADS scheidet tatsächlich aus?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Problematik liegt darin, dass zwischen diesen Devices bereits ein sehr hoher Datenaustausch herrscht. Es sollen die Daten der Beschleunigungssensoren (von Beckhoff angeboten) sowie die Daten von 30 Ultraschallsensoren an den IPC übertragen werden.
Leider habe ich noch gar keine Erfahrung mit solchen Methoden gemacht und mir wurde mitgeteilt (andere Abteilung hier), dass es nicht möglich wäre eine Ethernet Schnittstelle (TCP) die wir verwenden für den prinzipiellen Datenaustausch und den Austausch von ADS zu machen.

Kenne mich leider viel zu wenig aus und muss mich hier stark auf die Informationen von anderen verlassen.
 
Ist der IPC auch von Beckhoff? Wenn müsste er einen EtherCAT Master haben, dann kannst du mit der EL6695 eine EtherCAT Master to Master Kommunikation machen.
Alternativ müsste der IPC eine EtherCAT Slave Schnittstelle haben, dann kannst du die Daten auch per EtherCAT übertragen.

Wenn du nur EtherCAT verwenden willst, damit die andere Schnittstelle geschont wird. Kannst du z.B. eine EL6601 nutzen. Damit kannst du Ethernet over EhterCAT machen.

Gruß
 
Ist kein Beckhoff IPC. Ich werde wohl die Version mit ADS wählen frage mich gerade nur wie schnell das wirklich geht wenn ich circa 45 Werte jedes mal haben möchte...
Die Klemme EL6601 kenne ich die verwenden wir bereits aber ist für diese Anwendung denke ich nicht optimal.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine genaue Zeit beim lesen per ADS kann ich dir nicht sagen. Mit einem Summenkommando kannst du aber alle Werte unter einmal lesen. Sollte zeitlich kein Problem sein.
 
Dann ist das ganz sicher die optimale Lösung.
Jetzt stellt sich nur die Frage...
Ich habe eine Verbindung mit Ethernet TCP welche ich benötige um Befehle hin und her zu senden. Kann ich jetzt das ADS über die selbe physikalische Schnittstelle laufen lassen, oder soll ich besser eine seperate physische Schnittstelle verwenden?
 
Von vorne einmal.
Datenaustausch per EL6601 ist eine GANZ schlechte Idee wenn es um Performance geht. Das Ethernet wird dort im EtherCAT getunnelt. Und wenn man die Doku der Klemme liest sieht man auch die max. Performance.

Das einfachste ist tatsächlich dass du über eine Ethernet-Schnittstelle am Beckhoff-IPC per ADS sprichst. Andere Protokolle können parallel genutzt werden (natürlich kein EtherCAT- das ist exklusiv).
ADS ist nicht echtzeitfähig. D.h. du bekommst so oder so die Daten "irgendwann" und mit einem schwankenden Zeit-Versatz.
Es gibt zwei Varianten:
Per Notification -> der Beckhoff-IPC schickt dir regelmaessig ein Packet an Daten von n historischen Werten incl. Zeitstempel. Die max Auflösung ist hier ein Wert / TaskZyklus
Per SyncREAD -> du fragst den Beckhoff-IPC nach Daten. Ein Telegramm braucht zeit bis es von Sender zum Beckhoff-IPC und zurück läuft. Du kannst also nicht jeden Taskzyklus des Beckhoff-IPCs einen Wert haben. Das bedeutet wiederum dass du im Beckhoff-IPC in einer SPS dir die Daten Zwischenpuffern mussst um auf einen Wert / Taskzyklus zu bekommen.

Da einiges von der Performance o.ä. abhängt. Was hast du als IPC? Wie viele Variablen und Bytes sind es die du hast (45 Werte sind entweder 45 Byte oder 8x45 Byte). Hast du eine PLC? Wie viele wErte brauchst du pro Zeiteinheit....
Sprich!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
vielen Dank Guga, mein IPC ist ein Semil-1700GC von Neousys Technologies.
Es sind 45 LREALs die ich übermittlen muss und das ganze möglicht schnell, also ein delay von maximal 2 Taskzyklen ist hier noch verträglich! Die PLC ist von Beckhoff C6525-0070.
Ich sollte alle Werte innerhalb eines Zyklus übermitteln, das wäre die Idee. Allerdings bin ich (wie gesagt) in dem ganzen Thema etwas sehr neu und kenne mich gar nicht aus mit externer Datenabfrage mittels ADS und bin gerade überfragt was hier die Performance betrifft.
Wenn möglich sollten alle Daten nach einem Zyklus beim IPC gelandet sein, das maximum sind 2 Taskzyklen.

LG[FONT=&quot][/FONT][FONT=&quot]



[/FONT]
 
Nimm es mir nicht übel. Deine Anforderung sind ziemlich exorbitant - und das sollst du ohne fundierte Hintergrundkenntnisse lösen?
Zwei Zyklen Delay bis wohin? Und was ist dass in Absolutzeit? E.g. 2msec oder 200µs oder ?? Und wenn ich dich jetzt auch verstehe willst du Determinismus.

ADS ist eigentlich schon außen vor. 45 LREAL-Werte jeden Zyklus rauszufeuern ist schon mal was resourcentechnisch nicht zu unterschätzen ist.Das muss dann durch zwei Ethernet-Stacks und dann noch in einem in deinem C# (oder was auch immer) muss es decodiert werden...
Und dann müssen die noch wohin? Also welches Tool braucht denn diese Daten und was macht Ihr damit.

Also erzählt mal deutlich mehr über den Hintergrund/Rahmen/Bedingungen. Sonst wird das auf keinen Fall was. Und ob das mit den zwei Zyklen überhaupt möglich ist, da bin ich noch ziemlich skeptisch.


Guga
 
Hab die Anforderung nach deiner Nachricht noch einmal überprüft ich arbeite, da ja nicht ganz alleine daran.
1.) Was muss ich übermitteln:
möglichst schnell, muss ich folgende Werte übermitteln, da diese eine Position bestimmen, welche anschließend aus einer 3D Punktwolke, welche mit einem LiDAR aufgenommen wird, herausgefiltert werden müssen. Hier rede ich jetzt von einer maximal Zeit von 20ms (Zykluszeit 10ms)
8x BOOL
23x REAL
dann gibt es noch werte die sind für das Benutzerinterface, da ist die Zeit egal, das läuft naher noch über ein Internetmodul erst auf das Darstellungsgerät.
4x BOOL
6x REAL

2.) die "zeitkritschen" Werte müssen über eine Ethernet-Schnittstelle zu einem IPC dort werden sie dann teils in C++ und teils in Python weiterverarbeitet.

3.) das Tool ist ein ROS-System zum einen und eine C++ Datei die Inverse Kinematiken aus "Real-Time-Maps" bestimmt.

ich hoffe ich konnte damit mal ein besseres Wissen geben!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
20msec sollten mit Notifications machbar sein - wenn die beiden IPCs jeweils die Last tragen können.
Ohne testen wird es aber nichts...

Folgender Hintergrund - für Variablen aus der SPS:
Nachdem die Task für die SPS zu Ende ist und wenn das System Luft hat wird die ADS-Kommunikation angetriggert. Insofern sollten Notifications dann ziemlich zügig aus dem Beckhoff-IPC rausgeschickt werden. Um die Resourcen zu schonen würde ich alle (schnellen) Variablen in einer Struktur per Notification nutzen (Stichwort Marshalling in C++). Und hier dem System sagen dass es wirklich jeden Zyklus eine Notification verschickt. Das Ganze solltest du mit dem ADS-Monitor auch überprüfen.
In deiner C++ Applikation empfehle ich dir zudem den Zeitstempel mit auszuwerten da dies für deinen UseCase wohl nicht unerheblich ist.

Also: Nutze deinen IPC, schaue das der Core wo die SPS und die Aux-Task läuft genug Reservern hat, definiere dir deine Struktur und hole es in deiner Applikation.

Für die anderen Werte kannst du andere Notifications erstellen wo dann nachträglich alle n-Zyklen (bzw. bis zu einer Zeit x) dir nachträglich einige Werte en block jeweils incl Zeitstempel geschickt werden. Wenn es andere Datenquellen als diese eine SPS gibt dann darfst du diese bei einer 10msec Zykluszeit nicht umkopieren sondern musst sie von der entsprechenden Quelle holen. Sonst hast du im TwinCAt einen Zyklus und somit 10msec verpulvert.

Guga
 
Zurück
Oben