ADS Verbindung extrem langsam

CaptainKirk

Level-1
Beiträge
23
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
folgendes Problem: Ich greife mit einer selbst geschriebenen vb.net Anwendung auf einen BC9100 mit SPS-Runtime zu. Ich benutzte dazu TwinCat.ADS. Die Route habe ich mit TcAmsRemoteMgr.exe hinzugefügt. TwinCat ist auf dem Rechner nicht installiert, nur die notwendigen Dlls. Die Verbindung funktioniert, ich kann Daten lesen und schreiben. Allerdings extrem langsam. Ich kann den Timeout auf Minimum 55ms heruntersetzen, aber das ist immer noch zu langsam. Ich habe es mit Schleifen und Timern versucht: Nichts zu machen. Auf dem PC läuft übrigens Windows 7 x64.
Hat irgendwer ähnliche Erfahrungen gemacht? Gibt es einen Weg die Verbindung zu beschleunigen? Ich bin für jeden Hinweis dankbar...
 
Mit dem Timeout hat das nix zu tun. Ich würde vermuten, dass es wohl eher an deinem Programm oder am BC liegt (der ist ja nun nicht soo flott). Was sagt das Infosys dazu und wie stark ist der BC ausgelastet?
Und: Was tust du in deinem Programm? Ich finde, dass klingt danach, als hättest du irgendwas programmiert, was halt einfach nicht schneller geht...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Majestic_1987
danke für deine Antwort.
Ich glaube nicht das es am BC liegt. TwinCat fragt die Variablen ja auch blitzschnell ab, und das über WLAN. Und die Auslastung ist nicht der Rede wert (mittlere Zykluszeit mit 1888μs gemessen), auf dem BC wird lediglich ein Analogwert umgerechnet den ich dann über ADS auslese.
 
Jo der Code und ein paar zusätzliche Infos wären hilfreich (wieviele Variablen liest du, was heißt "zu langsam" etc.) Ansonsten können wir hier nur fröhlich im Nebel herumstochern.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo CaptainKirk,

also wir hatten in einem unserer Projekte versucht, Daten zwischen einem CX1010 und einem Win7 x64 Rechner via ADS auszutauschen. An sich lief das Ganze.....wenn man genug Zeit gehabt hätte. Das Problem bei uns war, dass die Datenübertragung zwischen 5 und 300 ms gedauert hatte, obwohl nur verhältnismäßig wenige Bytes ausgetauscht werden mussten. Nach (wirklich) monatelangem hin- und hertesten haben wir uns gegen die ADS-Kommunikation und für eine ETherCAT-PCI-Karte entschieden -> im Vergleich zur ursprünglichen Variante ein Traum. Wir konnten die ADS-Kommunikation nur begrenzt beschleunigen, die großen Latenzen blieben aber.

Also wie gesagt, an sich läuft es und eignet sich meiner Meinung nach gut für Visualisierungen, aber wir mussten uns aufgrund der großen Probleme mit der Echtzeitfähigkeit für eine andere Variante entscheiden.
 
Wir nutzen fast ausschließlich das Summenkommando. Mein Kollege hat einen Kommunikationshandler geschrieben der aus einer vorgegebenen Variablenliste den Abfragestream generiert und den Antwortstream automatisch zerlegt und als Einzelwerte ausgibt. Damit können wir große Datenmengen in rel. kurzer Zeit aus der SPS holen (unser Stresstest waren über 1000 Variablen unterschiedlichster Typen im 100ms Intervall). In der Theorie sollte das noch schneller gehen, aber für uns reicht das allemal.

Warum das Summenkommando? Weil für jede Abfrage oder setzen eines Werte über ADS eine neue Verbindung aufgebaut wird, mit entsprechendem Overhead. Das dauert laut Beckhoff 2ms je Einzelvariable. 100 Abfragen --> 200ms usw usf. Für das Summenkommando wird nur eine Verbindung aufgebaut und dann alle Abfragen als ein kompletter Stream gesendet und die Antwort kommt als Stream zurück. (100 Abfragen --> 2ms, 400 Abfragen --> 2 ms).

Für Anwendungen die harte Echtzeit und dazu noch sehr kurze Update-Zeiten benötigen halte ich ADS aber auch nicht geeignet. Für HMI Anwendungen bei denen große Datenmengen gelesen und geschrieben werden müssen und man gerne mal 50ms Zeit hat, ist ADS eigentlich perfekt.
 
Danke erstmal für die vielen Antworten. Das mit dem Summenkommando werde ich mir mal ansehen. Allerdings lese ich nur ein paar Bytes, keine großen Datenmengen.
Den Code kann ich euch auch gerne zeigen, ist kein Geheimnis. (Bevor mir aber irgendjemand vorwirft ich hätte was total dummes im Code gemacht: Sowohl TwinCat als auch .Net sind für mich neu;) )

Jo der Code und ein paar zusätzliche Infos wären hilfreich (wieviele Variablen liest du, was heißt "zu langsam" etc.) Ansonsten können wir hier nur fröhlich im Nebel herumstochern.
Ich lese 6 Bytes. Zu langsam heißt ca 100 bis 1000ms Verzögerung beim abfragen.
 

Anhänge

  • FahrpultIO.zip
    28,5 KB · Aufrufe: 10
Zuviel Werbung?
-> Hier kostenlos registrieren
Also, ich habe mittlerweile herausgefunden woran es liegt. Alleine mit den ADS-Dlls scheint es nicht getan zu sein. TwinCAT muss auf dem System installiert sein, zumindest die TC ADS Communication Lib. Warum genau das so sein muss weiß ich nicht.
 
Die direkte Kommunikation ohne TwinCAT Unterbau rät Beckhoff ab. Da nur eine Verbindung möglich ist. So kann es schnell zu Timeouts kommen.

Daher einfach für TwinCAT 2 den kostenlosen Lizenlevel "CP" installieren.

Oder für TwinCAT 3 das kostenlose ADS Setup verwenden.
http://beckhoff.de/german/twincat/tc1000.htm?id=1890306418903071

Somit hat man einen ADS Router der die Verbindungen verwaltet und kann auch noch den ADS Monitor für die Diagnose nutzen.
 
Zurück
Oben