TC3, Python und eine Bibliothek für ADS: Nur ein Client erlaubt?

drfunfrock

Level-1
Beiträge
934
Reaktionspunkte
72
Zuviel Werbung?
-> Hier kostenlos registrieren
Weil es für ADS keine .Net Bibliothek unter Linux gibt, habe ich auf eine Python-Bibliothek auf Github zugegriffen und auch noch etwas Reverse -Engineering betrieben, so dass ich eine komplette Symbolliste bekomme. Ich bin gerade dabei, dass ganze auf Async umzustellen, weil das dann mit den Timeouts wesentlich eleganter wird. Speziell das hantieren mit Exceptions ist mit der Async-Bibliothek einfacher, da diese nicht mehr in Threads auftreten.

Ich bekomme zu einer TC2 SPS Zugriff mit bis zu 15 clients während TC3 auf einem PC mit einem Client keinen weiteren client erlaubt. Ist es möglich das zu ändern? Der Hintergrund ist der, dass ich dann das Loggen von Daten in eine DB machen möchte.
 
Ich bin mir leider nicht sicher ob es eine maximale Anzahl an Clients gibt. Das einzige was ich weiß ist, du kannst den Speicher für den TC3-Router erhöhen. Jede Verbindung die von der "asynchronen"-Welt in die "echtzeit"-Welt aufgebaut wird, läuft über den Router und der muss das irgendwie Zwischenspeichern (Buffern).

Ich bin mir nicht sicher wo es beim Twincat 2 geht, beim Twincat 3 kannst du links im Solution Explorer beim Punkt System -> RealTime -> Router Memory (MByte): hier erhöhen, wenn vorhanden auf 256.

Vielleicht geht deinem Router einfach nur der Speicher aus!?
Sg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ne, ich gehe nicht über den Router, da meine Bibliothek the ADS-Spec implementiert. Meine Source-AMS-ID ist völlig willkührlich. Und die Dest-AMD-ID ist nur dazu da, dass die SPS die Requests akzeptiert. Das ganze ist ein bisschen ärgerlich, weil ich dann den Monitor mit PC einfach grösser auszulegen habe, anstatt einfach ein Python-Proggie auf dem Server zu starten.
 
TC3 unterscheidet sich hier nicht von TC2.
Es ist möglich sich mit mehreren Clients aufzuschalten.

Der Fehler sitzt also irgendwo anders.

Guga
 
Wenn ich das richtig verstanden habe, gehen ALLE Requests aus der nicht-echtzeit-Welt in die echtzeit-Welt über den Router. Ohne Router, keine Kommunikation mit der Außenwelt
(also auch Visual Studio).

Ich glaube der Router startet auch mit dem SystemService (Runtime) automatisch mit.

Sg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
TC3 unterscheidet sich hier nicht von TC2.
Es ist möglich sich mit mehreren Clients aufzuschalten.

Der Fehler sitzt also irgendwo anders.

Guga

Das wäre schön wenn die Welt so einfach wäre. Ich habe hier eine CX8050 mit TC2 und die kann bis zu 15 ADS clients gleichzeitig bedienen, während das selbe Programm nicht auf einen PC mit TC3 zugreifen kann, wenn ein VisualStudio Project mit TC3 aktiv ist.
 
Wenn ich das richtig verstanden habe, gehen ALLE Requests aus der nicht-echtzeit-Welt in die echtzeit-Welt über den Router. Ohne Router, keine Kommunikation mit der Außenwelt
(also auch Visual Studio).

Ich glaube der Router startet auch mit dem SystemService (Runtime) automatisch mit.

Sg

Ja der Router ist wichtig als Systemkomponente für die SPS. Sobald allerdings man selbst ADS implementiert, ist er nur auf dem Zielsystem wichtig, denn die AMS-Packete bauen auf TCP auf und der TCP-Port auf dem System der SPS ist 0xBF02. Auf Github hat Beckhoff ein eine ADS-Implementation für C++ bereitgestellt, die bis auf den Download der Symbole alles enthält. Ich habe das dann nur noch nach Python portiert. Das war recht einfach.
 
OK, nur nochmal für mich fürs Verständnis:

Man hat ja einmal den TCRouter auf dem Entwicklungsrechner und einmal auf der Steuerung (Runtime, Target).
Wenn du den Speicher erhöhst und anschließend die SPS aktivierst dann ist das eine Einstellung die auf der Runtime (Target) aktiviert wird und dort den Router Memory erhöht (Sobald die Steuerung neugestartet wird bzw. der TcSysSrv) und nicht bei dir lokal am Entwicklungsrechner.

Wenn jetzt auf der Steuerung standardmäßig 2MByte Router Memory aktiv ist und du dann eine gewisse Anzahl an Zugriffen drauf machst, dann wird der Speicher auf dem Target sehr schnell aufgebraucht sein, deshalb hätte ich den jetzt auf 128MByte (als Beispiel) erhöht um zu sehen ob das vielleicht hilft...

Das mit den begrenzten Zugriffen ist mir neu!? Ich hatte schon mit einigen TC2 und TC3 Anlagen zu tun und hatten beim Zugreifen auf Variablen nur mit dem Speicher Probleme, nie mit der Anzahl der aktiven Verbindungen.

Sg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mal so um zu beweisen das mehrere Clients auf ein Zielsystem zugreifen können: Öffne Visual Studio mehrmals mit dem gleichen Projekt- du kannst in jedem VS dir die Online-Werte des Zielsystems anschauen.

Die ADS-Schnittstelle von TC3 und TC2 ist identisch (abgesehen von veränderten Ports).
Und um es mal herunterzubrechen:
TC2: Du generierst dir auf Python-Seite für jeden Client einen ADS-Port.
Auf welche Ports / Indexgrp/ Indexoffset greifst du beim CX8050 zu?
TC3: Welche Ports / Indexgrp /Indexoffset

Wenn du als TC3-Welt ein vollständiges Windows-System hast (also kein CE): Installiere mal den AmsViewer und schau mal rein bzw. poste die entsprechende *.cab-Datei die du auf dem Zielsystem aufgenommen hast.

Guga
 
Zurück
Oben