CoE Befehle für EL6201 ASI- Masterklemme

Meiner

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich möchte einen ASI- Slave in einem Prüfablauf umadressieren. Leider ist diese Umadressierung nicht mit mit dem FB_ASI_Adressing möglich, da ich die EL- Klemmen benutze.
Nun riet mir der Support von Beckhoff zu den CoE Befehlen. Also habe ich den FB_EcCoESdoWrite eingefügt.
Die AMS, die Indices und die Adresse sind mir klar, aber bei dem pointer src buffer weiß ich nicht so recht weiter.
Ich habe dort jetzt eine DWord Variable mit einem ADR- Baustein angeschlossen und diese global auf MD200 gelegt. Die einzelnen Bytes habe ich dann auf MB200...MB203 verteilt.
Leider redet der Baustein nicht mit mir )-;
Ist das so richtig oder müssen diese Daten die gesendet werden anders festgelegt werden?
CoE.JPGGlobal_CoE.JPGIch habe hier mal den Baustein und die Globalen Variablen eingefügt.
Ist das so richtig?

Danke für eure Antworten!
 
#1: Die AMS-NetID ist falsch. Du musst die Nummer vom EtherCAT - Master nutzen und nicht die vom (Haupt)-System
#2 Schau bitte in die Doku der Klemme in die Details des CoE-Objektes 0x2000. Ich persönlich würde ja eine Struktur definieren mit den 4 Bytes und komplett ohne Adressen arbeiten.
Aber z.B. bei dir in %MD201: Bit 8,9,10 sind 1. Laut Doku sind diese aber reserviert.
Wenn du mit einem DWORD-arbeitest, schalte doch die Anzeige einfach mal in Hex oder binär um um zu kontrollieren was du sendest.

Guga
 
@Oliver.
Folgendes Gedankenspiel: TwinCAT mit 2 EtherCAT-Mastern und identischer Bestückung. Wie willst du die Telegramme zu Klemme am Master 1 oder an Master 2 unterscheiden?
=> AmsNetID vom EtherCAT Master.

Im Regelfall: AmsNet ID vom Rechener = a.b.c.d.x.y
für x.y

1.1: TwinCAT selber (Hauptgerät)
ansonsten kannst du sagen
x= der physikalische Adapter. Würde also für EtherCAT Master 1 und 2 unterschiedlich sein
y= Sub-Gerät am Master. Z.B. wenn du mehrere Profibus-Master im EtherCAT-Strang hast definiert dies an welchen Profibus du dich wendest.
Wenn y=1 dann wird sozusagen der Master direkt angesprochen. Im Falle von CoE wird dann das EtherCAT-Device über die Indexgruppe definiert, die AmsNet ID ist aber y.1

Guga
 
Zuletzt bearbeitet:
Ja natürlich - ADS ist die Kernkommunikation von Beckhoff und geht eigentlich von egal woher .

Jetzt kommt aber die Frage ob die das C++ Modul von TwinCAT meinst. In dem Fall schau mal nach dem entsprechendem C++ ADS-Beispiel im Infosys.
Wenn du ein "sonst" beliebiges C++ Projekt meinst (also mit Visual Studio oder Qt oder ...), dann wirst du die entsprechende C++ DLL der Ads-Schnittstelle einsetzen müssen.

Guga
 
Hallo Guga,

danke für die schnelle Antwort. Ich habe die Doku von Beckhoff angeschauet und habe die folgenden Befehle gefunden :
AdsWriteReq, AdsWriteInd...

Meine erste Frage wäre dann: was ist der Unterschied zwischen den einzelnen Befehle ? Die Doku ist unverständlich.
Zweitens nehmen wir an, dass ich die Klemme EL7221-9014 habe und das CoE mit dem Index 8010:15 ändern will: wie kann ich den Befehl AdsWriteReq sauber benutzen? (Ich habe irgendwie Probleme mit den Datentypen gekriegt).
Das ist meine erste Erfahrung mit C++. Ich habe früher nur mit MATLAB programmiert.

Vielen Dank für Ihre Hilfe und Unterstützung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ironiemodus: "Ich liebe es Kaffeesätze zu interpretieren."
In deinem Fall versage ich aber. Ich brauche noch die Antwort aus meiner Frage oben.
- "C++" als Info reicht mir nicht 100%ig.


Ansonsten gilt: Schreiben auf Objekt 0x8010:15.
AdsWrite mit...

Indexoffset = 0xF302
Indexgrp := 8015000F
Length = 4 Byte


AmsNetID und Port s.o.

Wo steht das ? https://infosys.beckhoff.com/conten.../html/ethercat_ads.htm?id=8250243621223725773
 
Hallo,

das funktioniert wunderbar.

Ich habe gerade dieses folgendes Problem:
wenn ich mehrere Parameter ändern will (innerhalb einer For-Schleife), kriege ich ab einem bestimmten Parameter folgenden Fehler : Device out of Memory. Ich habe mir gedacht, dass mein Router voll ist und dementsprechend darf ich nicht mehr schreiben.

Ich habe mit dem AdsWriteCon probiert. Ich wollte mit dem Befehl einfach bis zum erfolgreichen schreiben warten und danach den nächsten Wert einsetzen.
Leider funktionierte der Befehl nicht.

Wer von euch hat schon mal damit probiert und kann mir helfen?

Viele Grüße,
Kelmos
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Ich habe gerade dieses folgendes Problem:
wenn ich mehrere Parameter ändern will (innerhalb einer For-Schleife), kriege ich ab einem bestimmten Parameter folgenden Fehler : Device out of Memory. Ich habe mir gedacht, dass mein Router voll ist und dementsprechend darf ich nicht mehr schreiben.

Ich habe mit dem AdsWriteCon probiert. Ich wollte mit dem Befehl einfach bis zum erfolgreichen schreiben warten und danach den nächsten Wert einsetzen.
Leider funktionierte der Befehl nicht.

Wer von euch hat schon mal damit probiert und kann mir helfen?
wenn ich Deinen Beitrag so lese stellen sich mir die Nackenhaare auf und die Fußnägel kräuseln sich.
Der Befehl AdsWriteCon benötigt sicher mehrere Zyklen und darauf warten in einem Zyklus geht nicht. Warten ist etwas was eine SPS eh nicht kann, die muss laufen.
Du kannst Dir z.B. mit einer CASE-Anweisung eine Schrittkette bauen in der Du in einem Schritt von AdsWriteCon den Eingang Start, Enable, Write, oder wie auch immer er heißt setzt und außerhalb rufst Du den Baustei in jedem Zyklus auf. Im nächsten Schritt fragst Du dann ab, ob der Befehl erfolgreich beendet wurde.

Von irgendwas mit Internetzugang gesendet.
 
also....Confirm/Requests werden nur benötigt wenn du elementar den Read/Write (Server-seitig) nachbauen willst.
....Indication/Response werden benötigt wenn du elementar den Client nachbauen willst.

Use cases: ein eigener ADS-Client z.B. in einem Echtzeit C++-TCom. Oder aber das fremde Protokolle über ADS in dein System hereinkommen (CAN-SDOs z.B.).

Prinzipiell ist es der Sonderfall wenn du halt was machen musst was der Standard nicht abdeckt.
Du läufst aber in die Mailbox Beschränkung (sagt mir dank der detaillierten Beschreibung meine Glaskugel). Also arbeite das Ganze blockweise sequentiell ab (siehe Post #11).

Guga

Guga
 
Zurück
Oben