Eingangswort per ADS und Group/Offset auslesen

AKNOT

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

ich habe ein kleines Problem. Ich habe an einer Maschine ein CP...irgendwas (dürfte nicht wichtig sein, schwankt auch) und an diesem hängt per Ethercat eine EK1100. Ich würde nun gerne per ADS in .NET C# die Eingänge dieser Klemme auslesen.
Verbindungsaufbau und auslesen von Variablen nach Namen am Port 801 und der im Systemmanager angezeigten Zielsystem Ams Net Id funktioniert einwandfrei. Aber das Auslesen der Eingänge will nicht klappen.

Ich möchte bspw. das Notification Event so hinzufügen:
Code:
Int32 Group = 0xF031;
Int32 Offset = 0x59B;
InputList.Add(tcClientIO.AddDeviceNotification(Group,
                                                               Offset,
                                                               new AdsStream(),
                                                               AdsTransMode.OnChange,
                                                               Intervall, TimeOut,
                                                               Input));

Bzw. den Eingang so auslesen:
Code:
int test=tcClientIO.Read(Group,
                                 Offset,
                                 new AdsStream());

Ich habe im Systemmanager im EtherCAT Prozessabbild den ADS Server aktiviert, dieser gibt den Port 27906 vor. An diesen Port und die Ams Net Id vom EtherCAT Gerät (andere als die für den Port 801?!) habe ich die Verbindung des tcClientIO aufgebaut.
Group und Offset entnehme ich dem ausgewählten Eingangskanal. Nur leider klappt weder das Hinzufügen der Notification, noch das Auslesen. Es kommt der Fehler "Target could not be found".
Weiß jemand Rat? Über Hinweise wäre ich dankbar, testen kann ich es erst nächste Woche im Betrieb.

Vielen Dank, Gruß
AKNOT
 
Hat niemand eine Idee? Ich verzweifel noch daran, wobei es wahrscheinlich nur eine Kleinigkeit ist. Ich habe also einen EK1100, an der hängen mehrere EL1008. Und die möchte ich gerne per ADS auslesen...wie mache ich das? Muss ich im Prozessabbild der EK das ADS und Symbole erzeugen aktivieren (dann ist aber nichts mehr mit Port 300...versteh ich da was falsch?), die EK hat eine eigene AmsNetId, muss ich mich mit der verbinden oder mit der, die beim Broadcast im Systemmanager gefunden wird (eigtl. geht nur die), welche Read-Befehle muss ich wie benutzen?

Wäre euch wirklich dankbar!

Gruß
AKNOT
 
Welche beiden Geräte meinst du? Also zu der NetId, die beim Broadcasting gefunden wird, ist eine Route erstellt. Das Variablenauslesen per Symbolname geht...also kann es verbindungstechnisch eigtl. kein Problem geben oder meintest du was anderes?
 
Habe es mittlerweile hinbekommen...man muss über ReadAny lesen und den Typ mit übergeben, dann geht es. Aber es wäre ja nicht BECKHOFF, wenn es nicht gleich ein neues Probleme gäbe. Group Index und Offset, oder zumindest der Offset sind nicht konstant und schwanken ständig bei neuer Kompilierung, anderem Gerät usw.. Es scheint logisch, dass der Offset nicht konstant ist, aber man damit ja nicht arbeiten, wenn man Listen mit diesen Eigenschaften zum Auslesen erstellt.

Also neue Frage...gibt es irgendeine Möglichkeit, evtl. beim Kompilieren oder so, den Offset zu ermitteln, oder irgendwo festzulegen, dass immer derselbe vergeben wird oder irgendeine andere Option die Anforderung eine Liste von Eingängen, welche einer .NET Anwendung übergeben wird zu nutzen, ohne dass man sie alle 5 min ändern muss?

Danke für Anregungen,
Gruß

AKNOT
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Die Offsets musst Du wohl in Deiner C# Anwendung behandeln. Offsets etc. findest du in der Symboldatei. Bei meinen Projekten mach ich das immer über ADS mit Übergabe des Variablennamens. Du kannst ja IO Variablen deklarieren z.B.:

Var_Input AT %I* : array[0..15] of Bool

Auf diese Variablen kannst Du dann in Deiner C# Anwendung per ADS zugreifen

cheers
 
Ich würd auch sagen das der Zugriff über den Variablennamen am einfachsten ist. Wenn du dann immernoch Groupindex und Offset brauchst, bekommst du die über die ADSSymbolInfo.
 
OK, danke für die Antworten, ich werde mir das anschauen. Die Anforderung vom Kunden war eben die physikalischen Eingänge direkt abzufragen, auch um sie mit den verknüpften Variablen zu vergleichen.

Gruß
 
Zurück
Oben