Offenes ADS Protokoll

s.murauer

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

ich bin auf der Suche nach einer offenen ADS Protokoll - Implementation, wo ich mir diverse Kommandos zu sehen erhoffe.

Konkret möchte ich eigentlich wissen, wie der Befehl lautet eine Ads Route in die Routingtabelle einer SPS aufzunehmen.

Beispiel: TwinCat System Manager -> Add Route -> Ok -> Schickt Befehl zu der Steuerung, dass diese den RoutingEintrag bei der eigenen Tabelle einträgt.

Genau das will ich nachbauen: Ich schicke (vereinfacht gesagt) mithilfe eines C#-Programmes einen (Ads-)Befehl mit den Daten der Route zur Steuerung und diese trägt dann die Route ein.

Irgendwelche Ideen?
 
Hallo,

am besten, Du nutzt den Ads Monitor, um zu schauen, was genau passiert, wenn Du eine Route hinzufügst etc.

Hier der Link zum Download.
Es handelt sich hierbei allerdings um ein Unsupportet Utility!

Gruß,
Mac203
 
In der TcUtilities.lib gibt es Bausteine FB_AddRouteEntry und FB_RemoveRouteEntry. Die Library ist zur Zeit nicht geschützt, sie lässt sich mit TwinCAT öffnen. Du kannst in der Implementierung der Bausteine nachschauen, wie die Zugriffe auszusehen haben und versuchen das in C# nachzuprogrammieren.

Gruß,
witkatz
 
Das funktioniert alles mit dem TwinCAT Ams Logger
Der TwinCAT Ams ADS Viewer ist doch nur zum Anzeigen, einer mit dem Logger aufgezeichneten Datei gedacht.
 
hab ich mich auch gefragt, aber wenn ich die logdatei aufmache öffnet sich wireshark und zeigt die Aufzeichnungen. (leider eben nicht "entschlüsselt" wie im "AdsAmsViewer").
Zum verrückt werden...
 
Hallo s.murauer
bevor mein Vorschlag, in die Implementierung der entsprechenden Bausteine hineinzuschauen gänzlich übersehen wird, frage ich lieber noch mal nach. Hast du dir das angeschaut? Da steht im Prinzip alles drin was du brauchst, IndexGroup und IndexOffset der entspr. Dienste sowie die erforderlichen Datenstrukturen.

Gruß,
witkatz
 
Im Prinzip hast Du Recht, witkatz, es ist geschickt gemacht.....
Es wird auf den Port 10000 (Ring 3) geschrieben.
Code:
fbAdsWrite(    NETID        := sNetID,
                        PORT        := AMSPORT_R3_SYSSERV,
                        IDXGRP        := SYSTEMSERVICE_ADDREMOTE,
                        IDXOFFS    := 0,
                        LEN        := SIZEOF( dataEntry.head ) + dataEntry.head.cbAddress + dataEntry.head.cbName,
                        SRCADDR    := ADR( dataEntry ),
                        WRITE        := TRUE,
                        TMOUT        := tTimeout );
Nur die Gruppe mit 801 wundert mich etwas....

Geschickt wird dann einfach:

Code:
TYPE ST_AmsRouteEntry :
STRUCT
    sName             : STRING(MAX_ROUTE_NAME_LEN);    (* String containing route name *)
    sNetID             : T_AmsNetId;                            (* TwinCAT network address (ams net id) *)
    sAddress        : STRING(MAX_ROUTE_ADDR_LEN);    (* String containing route network Ipv4 address or host name. *)
    eTransport        : E_RouteTransportType;        (* Route transport type *)
    tTimeout         : TIME;                            (* Route timeout *)
    dwFlags         : DWORD;                        (* Additional flags *)
END_STRUCT
END_TYPE
Ich würde sagen, im Prinzip relativ einfach zu Bildern.

@s.murauer
Warum nutzt Du für sowas nicht das Automatio Interface?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo nochmal, sry für die verspätete Antwort!

Zum Anfang einmal der Grund für die ganze Aktion:

Ich hab ein C# Programm für mein Win_CE geschrieben, bei welchem ich mit dem TcAdsClient auf eine Steuerung zugreifen will und bestimmte Variablen dabei auslesen möchte.

Das ganze muss dynamisch funktionieren, d.h der kann beliebige Routen über das Programm zu Steuerungen erstellen.

Die Seite am Win_CE hab ich schon (schreibe einfach über das Programm die Registry-Einträge für die Routen zur Steuerung).

Jetzt brauch ich eben noch die Seite der Steuerung, d.h wenn der Benutzer eine Route zu einer Steuerung einträgt, muss ich gleichzeitig einen Befehl zu der Steuerung schicken, dass diese die Route bei sich ebenfalls einträgt (sonst keine Kommunikation).

Im Prinzip hab ich alles fertig, nur fehlt mir die dynamische Routenerstellung auf der Steuerung.

Zu den Lösungsvorschlägen:

Danke erstmal ^^

@Bausteinen:
D. h ich könnte versuchen einen Tcp Socket mit der Ip Adesse der Steuerung und Port 10000 (Ring 3) zu erstellen und zu verbinden.

Vorrausgesetzt das funktioniert muss ich mir noch einen Ams Header basteln und in den Ams Daten Teil dann irgendwie den RouteEntry mitschicken?
 
Hm, ich hätte das jetzt mit einem klassischen WriteAny gemacht und schlicht die IDXGRP, IDXOFFS, Len, VAR(=Struktur) übertragen.
Ich habe allerdings gerade gesehen, dass mit dem Compact Framework unter CE nicht funzt:
http://infosys.beckhoff.com/content/1031/tcsample_net/html/twincat.ads.sample07.htm?id=10810

Alternativ könntest Du einen Stream definieieren und diesen mit dem BinaryWriter verschicken:
http://infosys.beckhoff.com/content/1031/tcsample_net/html/twincat.ads.sample02.htm?id=10805

Wozu das Ads-Protokoll nachbilden, wenn Du doch die TcAdsDll einsetzen kannst?
Meines Erachten nach, eine unnötige Arbeit.

Gruß,
Mac203
 
Das Problem ist ja das ich diese Funktionen nicht nutzen kann.

Ich will ja die Route eintragen damit ich mir zu der Steuerung verbinden und TcAdsClient verwenden kann.

Weil wenn ich die Route nur auf meinem Win-Ce hab kann ADS keine Verbindung herstellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay, Denkfehler von mir.
Solange du kein Connect hast, geht's ja nicht....

In diesem Fall wiederrum gebe ich Dir Recht: Vermutlich muss Du dann eine Socketverbindung aufmachen und das ADS-Protokoll nachbilden.
Dort würde ich dann ein ADS-Write als Command-Id reinlegen und abschicken.

Aber mal ganz ehrlich: Steht dieser Aufwand in Relation?
 
nachdem das die Anforderung ist muss ich es wohl oder übel nachbilden ^^

Wird wieder eine Byte-Gewusle ohne Ende. (S7 Kommunikation auch schon nachgebildet ^^)

Falls doch noch jemand eine Idee hat, oder schon ein Kommando nachgebildet hat, bitte melden ^^

Danke!
 
Zurück
Oben