# Beckhoff ADS.dll: Beckhoff Beispiel geht - Code übernommen - geht nicht mehr?!



## MikeJ (5 November 2013)

Moin zusammen,

ich habe folgendes Problem bei der Kommunikation zwischen PC mit TC-Runtime und einem PC zum "Daten loggen" via ADS.dll:
Beckhoff liefert ja ein einwandfreies VB.Net Beispiel für die ADS-Kommunikation ("Sample03") incl. passendem SPS-Programm. Mit diesem Beispiel funktioniert die Kommunikation einwandfrei. Selbst wenn ich die vordefinierten Daten in dem .Net-Beispiel auf mein richtiges SPS-Programm ändere geht alles.
Übernehme ich allerdings den Quellcode aus dem .Net-Beispiel in meine .Net-Anwendung geht irgendwie nichts mehr.
Zwar kann ich eine Verbindung zur Runtime aufbauen, erhalte auch direkt nach dem Start noch die ersten AdsNotifications mit dem Status meiner Variablen, danach kommt bei Wert-Änderung jedoch nichts mehr an. Ich verstehe das nicht, selbst wenn ich den kompletten Code aus dem Beispiel per Copy&Paste in ein neues .Net-Projekt übernehme habe ich dieses Phänomen.

Kann mir vielleicht jemand auf die Sprünge helfen woran es liegen könnte?


Vielen Dank und viele Grüße
Mike


----------



## witkatz (5 November 2013)

Ist das neue .Net Projekt vielleicht ein Konsolenanwendung? Dann muss die Eigenschaft TcAdsClient.Synchronize auf false gesetzt werden.

Gruß
witkatz


----------



## MikeJ (10 November 2013)

Hi,

also damit hängt es nicht zusammen.
Ich konnte allerdings folgendes feststellen:

wenn ich mein .Net Projekt direkt nach Neustart des Rechners starte, funktioniert es.
öffne ich PLC-Control oder den System-Manager geht es nicht mehr (auch wenn ich mit PLC nicht mal online gewesen bin).
schließe ich die Programme, klappt auch die Verbindung wieder.
kann damit vielleicht jemand etwas anfangen?! Gibt es ggf. irgendwelche Einstellungen die den Zugriff steuern?
(PS: bin kein Profi in Sachen Beckhoff/TwinCat - es könnten also auch "grundlegende" Dinge sein...)


Viele Grüße
Mike


----------



## witkatz (11 November 2013)

Es scheint dass nur ein Port zulässig ist, könnte es sein dass das TwinCAT System in Stop oder gar nicht gestartet ist und die ganze Kommunikation über die TcAdsDll abgewickelt wird? Die TcAdsDll hat nämlich eine Begrenzung auf einen Port.


----------



## MikeJ (13 November 2013)

Wie in Stop?! Im System-Manager bekomme ich unten rechts die IP meines Ziel-Systems angezeigt (rot hinterlegt) und daneben steht "Echtzeit 5%" (grün hinterlegt).
Wie gesagt, das Beckhoff-Beispiel funktioniert ja auch einwandfrei. Ich verstehe aber nicht, warum genau dieser Code in einem anderen Projekt nicht mehr geht. Es müsste demnach irgend eine Grundeinstellung in Visual Studio für das Projekt sein...?

Viele Grüße
Mike


----------



## witkatz (13 November 2013)

Welchen Verweis auf TcAdsNet Assembly hast du in die neue Anwendung zugefügt? Ist das der gleiche wie im Beckhoff-Beispiel?
Hast du die Anwendung mit einem älteren .Net Framework auch getestet? Welches .Net Framework wird denn im Beckhoff-Beispiel verwendet?



MikeJ schrieb:


> Wie in Stop?! Im System-Manager bekomme ich unten  rechts die IP meines Ziel-Systems angezeigt (rot hinterlegt) und daneben  steht "Echtzeit 5%" (grün hinterlegt).


Zielsystem ist grün, das ist super. Aber in welchem Zustand ist dein lokales System und damit der Router, auch grün oder blau?


----------



## MikeJ (14 November 2013)

Hi,

also das Framework hatte ich auch schon in Verdacht, ich nutze 4.0, Beispiel war 2.0. Aber das Beispiel geht auch mit 4.0 und wenn ich meines auf 2.0 umstelle ändert sich auch nichts. DLL-Verweis ist der selbe.
Ich scheine da allerdings 2 Probleme zu haben:
1) Netzwerkeinstellungen:
Mein Rechner und das Laufzeitsystem sind per Kabel miteinander verbunden.

Mein Rechner:                                  Laufzeit-System:
IP:          192.168.10.19       192.168.10.20
Subnet-Mask: 255.255.255.0       255.255.255.0
Gateway:     kein Eintrag        kein Eintrag

DNS:         kein Eintrag        kein Eintrag

Ich habe inzwischen festgestellt, dass wenn ich mit meinem lokalen Rechner keine weitere Netzwerkverbindung eingehe, scheitern beide Programme (sowohl meins, als auch das Beckhoff-Beispiel) am Befehl "AddDeviceNotification" mit einem Timeout.
Gehe ich mit meinem Rechner z.B. per W-Lan eine Internetverbindung ein (über DHCP) geht auch die Verbindung zur Laufzeit, obwohl das Laufzeitsystem definitiv nicht am W-Lan hängt. Kann das mit der fehlenden Gateway/DNS-Einstellung bei meiner Kabel-Verbindung zu tun haben?

2) Wenn ich das W-Lan mal an lasse und eine Verbindung aufbauen kann, unterscheiden sich mein Programm und das Beckhoff-Beispiel nur noch darin, dass mein Programm die Verbindung zur Laufzeit "beendet" sobald ich lokal noch PLC Control öffne (ohne online zu gehen). Ich bekomme zwar keinen Fehler und auch kein "OnStateChenged" von der Laufzeit, jedoch werden auch keine Notifications mehr gesendet.
Beim Beckhoff-Beispiel kann ich sogar mit dem PLC Control online gehen und es läuft weiter.


Mein lokales System ist im Konfig-Mode, also blau - das bezieht sich doch aber auf die Laufzeit auf meinem lokalen Rechner, oder?! (Run geht bei mir nicht, da ich ein 64Bit Betriebssystem habe).


Viele Grüße
Mike


----------



## witkatz (14 November 2013)

Wenn dein lokales TwinCAT System in Config Mode ist (blau) dann ist der Router gestartet und die TwinCAT System sollten miteinander kommunizieren. 
In der Firewall sollten die ADS Ports 48898 TCP und 48899 UDP freigegeben werden. 
Hat deine Maschine vielleicht mehrere IP Adressen? Welche Netzwerk-Adresse ist in der Route auf dem Laufzeitsystem eingetragen?


----------



## MikeJ (14 November 2013)

Ok, die Firewall habe ich nun mal eingestellt, hier war noch nichts freigegeben.
Auch gab es auf dem Laufzeitsystem noch einen Netzwerkanschluss, welchen ich nun mal deaktiviert habe.
Jetzt ist es zumindest schon mal so, dass ich eine Verbindung zur Laufzeit ohne zusätzliche W-Lan Verbindung hin bekomme 


Folgende Einstellungen sind im Laufzeitsystem hinterlegt:
	

		
			
		

		
	





Jetzt gilt es nur noch herauszufinden, warum das Beckhoff-Beispiel bei gleichzeitiger PLC-Control-Verbindung weiter läuft, während mein Programm nach ein paar Sekunden kapituliert.


----------



## witkatz (14 November 2013)

Für eine Analyse des Datenverkehrs könnte man ein Netzwerk Analyse-Tool wie Wireshark oder auch den Ads Monitor von Beckhoff bemühen.


----------



## MikeJ (14 November 2013)

Habe gerade noch feststellen können, dass das Programm nicht  komplett "dicht" macht. Ich bekomme zwar keine Notifications mehr, kann  aber weiterhin Variablen auf der SPS schreiben - die jedoch mit einer  Verzögerung von 6-8 Sekunden auf die SPS übertragen werden.
Weiterhin  ist mir bei den Notifications aufgefallen, dass 2 von 5 Werten zyklisch  übertragen werden, obwohl sich der Wert nicht ändert und TransMode auf  "onChange" gesetzt ist (dies ist allerdings auch beim Beispiel so). 
ADS-Monitor klingt gut, werde mal danach suchen...


----------



## witkatz (14 November 2013)

ftp://ftp.beckhoff.de/Software/TwinCAT/Unsupported_Utilities/ADSMonitor/TcAdsMon.exe


----------

