# S7Online Schnittstelle, Win7 und (libnodave



## Jochen Kühner (15 Februar 2011)

*S7Online Schnittstelle, Win7 und (libnodave oder accons7)*

ich hab Probleme mit der S7Online Schnittstelle und libnodave unter Windows 7!

Wenn Ich die S7Online Schnittstelle mit dem TCP/IP Treiber unter CSharp mit libnodave verwende geht alles.

Wenn Ich aber z.B. versuche den Netlink Treiber über S7Online zu verwenden, dann stürtzt das Programm ab, so ballt in libnodave scp_open aufgerufen wird.

Wenn Ich aber die S7Onlinx.dll direkt in CSharp einbinde, dann crasht es bei einem Aufruf von scp_open noch nicht!

Hat für dieses Verhalten jemand eine Erklärung?


----------



## Jochen Kühner (15 Februar 2011)

mit Accon AG-Link gibts das gleiche Problem!


----------



## Rainer Hönle (16 Februar 2011)

Welche Version von S7Net und von ACCON-AGLink kommt zum Einsatz?


----------



## Jochen Kühner (16 Februar 2011)

Die jeweils neuste! (S7Net 2.9.2, AGLink von gestern)

Ich hab das damit auch nur getestet um Fehler in LibNoDave auszuschließen!


Das komische ist ja nur, das direkte aufrufe von S7Onlinx.dll Funktionen aus einem CSharp Programm nicht zum absturz führen!

Genauso komisch ist, das S7Onlinex geht, wenn man die TCP Schnittstelle als Adapter einstellt!


----------



## Rainer Hönle (16 Februar 2011)

Werde mir das im Laufe der Woche (eher Wochenende) ansehen.
Welche S7-Version ist installiert, V5.5?


----------



## Jochen Kühner (16 Februar 2011)

Ja! Die anderen sind ja unter Win7 nicht freigegeben!


----------



## Rainer Hönle (16 Februar 2011)

Jochen Kühner schrieb:


> Ja! Die anderen sind ja unter Win7 nicht freigegeben!



Das heißt ja noch nichts. Wurde hier auch schon diskutiert.

Real oder in VM?


----------



## Jochen Kühner (16 Februar 2011)

Reelle Maschine...


----------



## klaly (19 Februar 2011)

Hallo Jocen, 

könntest du mir deinen Code zur direkten Verwendung der s7onlinx.dll bitte zur verfügung stellen, ich wollte diese DLL aus C# heraus verwenden, es würde mir evtl ein wenig Arbeit sparen. Es ist ja wohl nicht so einfach diese DLL direkt aus C# heraus aufzurufen.
Leider kann ich zu deinem eigentlichem Problem nicht weiter helfen. 

mfG. klaly


----------



## Jochen Kühner (19 Februar 2011)

dazu gibts keinen Code. Ich habe einfach nur scp_open aufgerufen, da libnodave schon beim Aufruf dieser Funktion crasht! Ich hab nicht die komplette Schnittstelle implementiert, sondern einfach nur zum test scp_open aufgerufen!


----------



## klaly (20 Februar 2011)

Hallo Jochen, 



Jochen Kühner schrieb:


> Wenn Ich aber z.B. versuche den Netlink Treiber über S7Online zu verwenden, dann stürtzt das Programm ab, so ballt in libnodave scp_open aufgerufen wird.
> 
> Wenn Ich aber die S7Onlinx.dll direkt in CSharp einbinde, dann crasht es bei einem Aufruf von scp_open noch nicht!



kannst du mal versuchen statt dem Netlink Treiber den PC-Adapter MPI Treiber zu benutzen. Evtl funktioniert es ja dann sauber. 

Welche Version von Libnodave verwendest du ?
Ich verwende immer noch V0.8.4.3, für die S7Online habe ich auf alle Fälle mal den Aufruf  SetSinecHWnd(h, handle); aus openS7online rausgeworfen, weil der meiner Meinung nach überflüssig ist. 
Libnodave hat ja dafür gar keinen Eventhandler dafür. 

Ich werde am Montag mal mit einem Windows7 32bit mal einen kleinen Test mit einer Libnodave machen. Mal schaun ob es bei mir auch crashed. 

mfG. klaly


----------



## Jochen Kühner (20 Februar 2011)

nee kann Ich nicht, da Ich ja keinen Pc Karte habe! Aber testen obs abstürtzt kann ich ja... 

Denn aufruf von setSinecHwnd hab ich auch rausgeschmissen, da dies ja nur bei asynchroner Verwendung von s7onlinx.dll sinn macht, was libnodave ja aber nicht tut!


----------



## Jochen Kühner (20 Februar 2011)

Habs jetzt grad nochmal probiert, S7Online über libnodave oder AGLink stützt nicht ab, wenn kein NetLink vorhanden ist!

PS. Hat jemand über S7Online schon mal die PLCSIM Verbindung verwendet? Ich bekomme da nämlich keine Verbindung!


----------



## Rainer Hönle (20 Februar 2011)

Jochen Kühner schrieb:


> Habs jetzt grad nochmal probiert, S7Online über libnodave oder AGLink stützt nicht ab, wenn kein NetLink vorhanden ist!



Noch eine Frage bevor ich mir das heute Nachmittag ansehe: Handelt es sich um den NetLink-PRO oder den NetLink-USB (bzw. deren compact-Varianten)?


----------



## Jochen Kühner (20 Februar 2011)

Bei NetLink USB hatte Ich das Problem auch schon, aber es handelt sich dabei um einen ProFamily WLAN! (Für den USB gibts ja noch keine Win7 Treiber!)


----------



## Rainer Hönle (20 Februar 2011)

Habe jetzt einmal unter Win7 die Testfunktion im AGLink40_Config mit eingestellter S7Online-Schnittstelle aufgerufen und alles klappt wie es sollte. Kein Fehler, kein Absturz und Anzeige der angeschlossenen SPSen. Verwendet habe ich auch die Version 2.9.2 von S7Net.
Wann tritt das Problem wo genau auf? Ist eine Firewall aktiv?


----------



## Jochen Kühner (20 Februar 2011)

Ja, AGLink_Config geht bei mir auch. Erst wenn Ich den Verbindungsaufbau aus einem .NET Programm heraus versuche crasht es!


----------



## Rainer Hönle (20 Februar 2011)

Jochen Kühner schrieb:


> Ja, AGLink_Config geht bei mir auch. Erst wenn Ich den Verbindungsaufbau aus einem .NET Programm heraus versuche crasht es!



Jetzt verstehe ich nichts mehr. Ich dachte scp_open direkt funktioniert. Was geht denn jetzt nicht? Kannst Du mir ein kurzes Projekt mit AGLink, das den Fehler bei Dir erzeugt, zusenden? Meine Mailadresse hast Du ja sicher.


----------



## Jochen Kühner (20 Februar 2011)

scp_open direkt in .net geht!

scp_open in libnodave in .NET genutzt stürzt ab!

scp_open (denk ich mal) über aglink in .NET stürzt ab.

AGLinkConfig geht

Mfg.


----------



## Jochen Kühner (21 Februar 2011)

@Rainer:

Hast dus jetzt zum abstürzen bekommen?


----------



## Ralle (21 Februar 2011)

Jochen Kühner schrieb:


> @Rainer:
> 
> Hast dus jetzt zum abstürzen bekommen?



Denk mal, der Rainer ist mitsamt seinem Rechner abgestürzt. Jochen, was hast du nur angerichtet ... *ROFL*


----------



## Question_mark (21 Februar 2011)

*...*

Hallo,

so wie ich unseren Rainer kenne, haut der bis um 4.00 morgens in die Tasten, 
schläft mal kurz und antwortet so ab ca. 6.00 dann gerne hier im Forum 

Gruß

Question_mark


----------



## Rainer Hönle (22 Februar 2011)

Jochen Kühner schrieb:


> @Rainer:
> 
> Hast dus jetzt zum abstürzen bekommen?



Bis jetzt noch nicht. Hast Du mir ein minimales Beispielprojekt, mit dem das Verhalten reproduziert werden kann? Einfach an meine bekannte Mailadresse schicken.


----------



## Jochen Kühner (22 Februar 2011)

Für libnodave kannst meine WPF ToolBox verwenden, über die Verbindungs Config, kann man auch eine Testverbindung aufbauen, da crasht es dann schon.

Für AgLink hab Ich einfach mit einem eurer C# Beispielprogramme nur eine Verbindung aufgebaut. (AGL4 NCKDemoApp - C#) . Wenn Ich die Verbindung konfiguriere, dann geht im Konfig Programm der aufbau. Sobald Ich im C# Programm auf Connect klicke, Crash!


----------



## LowLevelMahn (23 Februar 2011)

*machs doch nicht so schwer*

häng hier doch einfach deine Testprogramme rein - fix und fertig zum testen - das reduziert jeglichen Aufwand (und "falsche" Fehler) auf das absolute Minimum.


----------



## Jochen Kühner (24 Februar 2011)

LowLevelMahn schrieb:


> häng hier doch einfach deine Testprogramme rein - fix und fertig zum testen - das reduziert jeglichen Aufwand (und "falsche" Fehler) auf das absolute Minimum.



Meine Verbindung kann hiermit getestet werden: http://www.sps-forum.de/showthread.php?t=41928

AGLink mit den im Download von AGLink enthaltenen Beispiel CSharp Programmen!


----------



## Jochen Kühner (27 Februar 2011)

*Dep*

Dank Rainer weis Ich nun das es an DEP (Data Execution Prevention) liegt. Wenn Ich diese komplett deaktiviere (Anleitung dazu hier: http://www.winfaq.de/faq_html/Content/tip2000/onlinefaq.php?h=tip2323.htm), dann crasht es nicht mehr! 

Mal schaun was man da machen kann...


----------



## Rainer Hönle (28 Februar 2011)

Es wird ein privilegierter Befehl ausgeführt, der durch den dep(p) in seiner Standardeinstellung verhindert wird. Bei S7 tritt das Problem nicht auf. Mal sehen, was wir machen können.


----------



## Jochen Kühner (28 Februar 2011)

Rainer Hönle schrieb:


> Es wird ein privilegierter Befehl ausgeführt, der durch den dep(p) in seiner Standardeinstellung verhindert wird. Bei S7 tritt das Problem nicht auf. Mal sehen, was wir machen können.


 
Was mich aber trotzdem wundert, das wenn Ich die S7OnlinX Dll Funktionen direkt aus CSharp aufrufe gibts kein crash, ebensowenig wenn Ich libnodave direkt in einem C Programm verwende!

Nur die Nutzung der Funktionen durch eine weitere Dll macht Probleme!


----------



## Rainer Hönle (28 Februar 2011)

Ich vermute, dass das irgend etwas mit den Manifesten zu tun hat. Aber wir sind noch am Anfang der Suche. Denn seltsam ist es schon, dass ein und derselbe Code einmal eine Ausnahme wirft und das andere Mal problemlos läuft.


----------



## Jochen Kühner (28 Februar 2011)

Und noch verwunderlicher finde Ich, das es ja z.B. mit dem Siemens eigenen TcpIp Treiber über S7OnlinX funktioniert!


----------



## Rainer Hönle (28 Februar 2011)

Das ist nicht verwunderlich, da der privilegierte Befehl in unserem Treiber ausgelöst wird.


----------

