TwinCat 3, multiple Aufrufe FB_EcCoESdoRead

Fenfen

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

Kurz Zusammengefasst: Ich bin neu hier und versuche mich gerade erst mit TwinCat 3.1. Dabei habe ich die Aufgabe einen Achs-Controller (ACS Motion Control) in die PLC einzubinden.

Ich versuche anhand von Beispielen aus der Doku den Controller via CoE auszulesen und werde auch den ein oder anderen Parameter schreiben müssen. Momentan macht mir das Lesen jedoch mehr Kopfschmerzen. Doku: https://infosys.beckhoff.com/englis...system/4358261771.html&id=7226910604449245485

Generell scheint mein Code zu funktionieren, ich kann also einzelnen Elemente Auslesen und bekommen auch die richtigen Werte übermittelt.

Wenn nun mehrere dieser Leseanfragen zusammengefasst werden komme ich schnell an eine Grenze bei der ich dann den Error 4 (ADS: Insert mailbox error) erhalte. Damit kann ich leider nicht viel Anfangen und die Doku die ich gefunden habe schweigt sich über den Grund dieser Aussage leider aus.

Da ich immer auf den selben EtherCat Client zugreife, habe ich mir einen FB gebaut der diese Zugriffe etwas einfacher machen sollte: FB_CoE_ACS_DINT32

Dieser wird aus FB_ACS_AxisStatus_I aufgerufen und soll den Zustand der einzelen Achsen in ein Statuswort überführen.

Kann jemand näheres zum Insert mailbox error sagen? Wo muss ich da ansetzen?

Merci!

Schönes WE,

Fenfen
 

Anhänge

Zuletzt bearbeitet:
Wenn ich hier mal schaue
https://infosys.beckhoff.de/index.php?content=../content/1031/tf6300_tc3_ftp/374277003.html&id=
wird es als "Postfach voll" übersetzt.

Prinzipiell gibt es eine Limitierung in der Mailbox (Anzahl der parallelen aktiven Anfragen). Möglich das du da reinläufst. Das sollte sich aber meines Erachtens dann so spiegeln das du bei ein paar Aufrufen die Fehlernummer 4 bekommst und der Rest durchläufst. Ach ja... lies mal..
https://download.beckhoff.com/download/document/Application_Notes/DK9322-0413-0070.pdf


Guga
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Darf ich dich kurz fragen warum du das alles über die Mailbox liest?
den Parameter 0x6040 kannst du doch auch zyklisch einlesen oder, dazu musst du den nur ins zyklische Abbild mit rein nehmen oder geht das bei dem Drive nicht?
Vielleicht kannst du die anderen Status aus dem Statuswort ebenfalls zyklisch lesen?

Sg
M.
 
Hallo Guga,

Vielen Dank!

Es ist tatsächlich so das die Fehlernummer 4 nur bei einigen Aufrufen kommt. Die restlichen laufen normal durch. Ich werde mal sehen ob ich die Aufrufe reduziert oder anders verwalten kann.
 
Hallo seehma,

das ist eine gute Frage.
Ich arbeite hier mit einem Integrator der uns den ACS einbaut. Nach einigen Diskussionen wie das in die SPS einzubinden ist kam er mit der Lösung das alles via CoE gemacht werden sollte. Das löst sich jetzt aber gerade auf. Ich wüsste nicht wie ich den Parameter ins zyklische Abbild nehmen kann, kann ich?

Gruss,
Fenfen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eigentlich schon, du kannst nicht alle mit rein nehmen aber die wichtigsten sollten gehen.

Gehe dazu einfach im System Manager zum IO-Baum -> beim jeweiligen Antrieb doppelt drauf klicken, dann rechts im Reiter Process Data (so heißts im Englischen, auf deutsch vermutlich Prozessdaten). Hier dann im linken Teil unter Sync-Manager auf Outputs klicken, dann unten bei PDO-Assignment einen auswählen (falls noch nicht angehackt 0x1600-0x160x) und dann rechts bei PDO List nochmals einen markieren.
Zum Beispiel den ersten unter 0x1600. Dann kannst du unten bei PDO Content die Liste sehen wo alle zyklischen Daten dargestellt werden. Normalerweiße sollten die wichtigsten, also jene die du zyklisch benötigst schon eingetragen sein (Statuswort, Istposition und Istgeschwindigkeit), falls nicht dann musst du noch weitere Sync-Manager 0x1601 oder 0x1602 aktivieren (einfach links den Hacken setzen) und dann rechts bei PDO Content mit Rechter Maustaste Insert den Parameter hinzufügen. Wichtig dabei ist der Index, der Subindex und die Größe des Parameters. Je nach Pflege des Ethercat-XML-Files vom Hersteller kannst du gemütlich die Parameter auswählen oder musst sie selbst reinfrickeltn.

Pro Sync-Manager kannst du normalerweiße 64 Byte an zyklischen Daten hinzufügen, das kann aber von Hersteller zu Hersteller variieren. Auch die Anzahl der Sync-Manager variiert von Hersteller zu Hersteller.

Wichtig ist noch, bei manchen Herstellern muss es immer ein Vielfaches von 16Bit sein und manche Hersteller fixieren die Standard-PDOs. Das heißt du kannst solche Parameter nur bei den zusätzlich von dir Aktivierten hinzufügen.

Anschließend, wenn das alles läuft, kannst du bei dir in der Applikation eine Variable als Output oder Input deklarieren und verknüpfen und du bekommst hier immer frische Daten ohne einen Baustein aufzurufen. Es empfiehlt sich das ganze etwas zu kapseln, falls du später mal eine Umrechnung o.ä. machen möchtest. Beispiel die Position von UDINT mit drei Nachkommastellen auf ein Real umwandeln oder so.

Soweit ich das verstanden habe ich das CoE nur eine Art Protokoll. Man hat versucht den CAN Standard auf Ethercat zu übersetzen und gleichzeitig die Protokolle (Bsp: CiA402, Ds402) mitzunehmen. Rausgekommen ist dann dieser Ablauf mit den Prozessdatenobjekten und den Sync-Managern die quasi die Daten von der internen Welt des Controllers ummappen auf die tolle, schöne, neue Ethercat-Echtzeit-Welt.

Sg
M.

PS: Ich hoffe ich hab hier nicht die Begriffe durcheinander gebracht, falls doch bitte korrigieren.
 
Leider habe ich bei den Drives nicht so viel Luxus wie Du beschreibst. Ich habe mal ein Screenshot vom entsprechenden Bereich angehängt. Momentan gibt es lediglich eine Statusvariable (keine Doku was da drin Steht) sowie eine Postitionsvariable die momentan noch die Position in mm (ohne Nachkommastellen) wieder gibt. Ich versuche gerade beim Hersteller herauszubekommen ob da mehr geht. Drives.jpg
 
OK, ich bin mir nicht sicher welcher dieser ganzen Ethercat Slaves jetzt dein Problemkind ist, aber der 250U0 schaut mal so aus wie ein 8-Achs-Controller oder so?
Das sieht so aus als wären da pro Achse mal ein Statuswort und ActualPosition und vermutlich im Output Target Position und Control Word. CSP kann heißen Cyclic Synchronous Position was eine Betriebsart im CoE - CiA402 Drive Protokoll ist -> Wenn der Controller nur diese Betriebsart kann, dann müsstest du vermutlich die NC-Motion von Beckhoff verwenden.

Leider kann ich die Anleitungen nicht runterladen, hier muss man sich registrieren auf der ACS Seite...

Jetzt nochmal zurück zu deiner ursprünglichen Anfrage: Wie kommst du genau auf diese Parameter die du in dem FB_ACS_AxisStatus_I Baustein liest? Prinzipiell musst du dich erstmal entscheiden, möchtest du den Motion Controller von Beckhoff verwenden (NC-Motion), oder hat vielleicht sogar der ACS-Controller diese Funktionalität schon inkludiert. Wenn der ACS das kann, dann musst du dir das Protokoll ansehen, mit dem du eine Bewegung der Achse auslösen kannst, das kriegst du aus der Doku.

Normalerweise, geben die Hersteller die oben beschriebenen Parameter nach draußen an einen Motion Controller (wie den von Beckhoff eben) und dort werden dann die Trajektorien berechnet und zyklisch geschrieben. Der Controller macht dann nur noch Interpolationsarbeit falls dein Motion Controller langsamer läuft und fährt stur den zyklisch gesandten Punkten nach.

Was ich noch sagen wollte:
Prinzipiell sollten solche Statusdinge nur gelesen werden, wenn ein Fehler passiert. Also so: die Achse meldet im Statuswort einen Fehler -> du liest eine Diagnose-Variable aus und dort steht dann, Limit erreicht o.ä. Das ganze zyklisch lesen macht meistens keinen Sinn. Die wichtigsten Dinge kommen übers Statuswort und nur wenn hier was auffällt, dann weiter in die Diagnose abtauchen. Falls du dringend andere Variablen brauchst, dann hab ich das immer ins Prozessabbild gegeben, anstatt es zyklisch über den asynchronen Kanal zu lesen. Natürlich nur wenn das geht, kann von Controller zu Controller abweichen.

Sg
 
Zuletzt bearbeitet:
Zurück
Oben