LibNodave mit Routing usw...

Zuviel Werbung?
-> Hier kostenlos registrieren
Bei ACCON-AGLink gibt es den Konfigurator. Dort ist es direkt möglich, die Verbindung zu testen. Ebenfalls mitinstalliert wird der API-Guide. Dort kann ohne eine Zeile zu programmieren jede Funktion aufgerufen und getestet werden. Desweiteren sind einige Beispielprogramme enthalten, die sofort ausgeführt werden können. Wenn es um die Verbindungsüberwachung, dann mal ConnTest genauer ansehen. Über welchen Verbindungsweg ACCON-AGLink kommuniziert, kann übrigens komplett von außen über AGLink40_Config.EXE eingestellt werden.
 
Da sind beispielprogramme dabei, aber verbindung aufbauen & abbauen kannst du auch mit dem aglink config programm versuchen, dort kann man die eingestellte verbindung testen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da sind beispielprogramme dabei, aber verbindung aufbauen & abbauen kannst du auch mit dem aglink config programm versuchen, dort kann man die eingestellte verbindung testen.
So, habe es nun endlich geschafft die Verbindung mittels Accon AGLink zu prüfen. Hierfür habe ich das Programm "AGLink40_Config.exe" ausgeführt und die Schnittstelle "S7-PC/CP" eingestellt, bei PG/PC Schnittstelle habe ich dann sowohl den RS232-> MPI Adapter als auch die CP5611 ausprobiert und den Kommunikationstest gestartet, alle geprüften Funktionen gaben "kein Fehler" zurück:

AGL_OpenDevice( DevNr=0 ) : Kein Fehler
AGL_DialUp( DevNr=0, boWait=true ) : Kein Fehler
AGL_InitAdapter( DevNr=0, boWait=true ) : Kein Fehler
AGL_GetLifeList( DevNr=0, List, boWait=true ) : 2
AGL_PLCConnect( DevNr=0, PlcNr=2, boWait=true ) : Kein Fehler
AGL_ReadMLFBNr( ConnNr=0x800, MLFBNr, boWait=true ) : 6ES7 317-2EK13-0AB0
AGL_PLCDisconnect( ConnNr=0x800, boWait=true ) : Kein Fehler
AGL_ExitAdapter( DevNr=0, boWait=true ) : Kein Fehler
AGL_HangUp( DevNr=0, boWait=true ) : Kein Fehler
AGL_CloseDevice( DevNr=0 ) : Kein Fehler


Während der Test lief wurde man unter "PG/PC Schnittstelle einstellen" erwartungsgemäss darauf hingewiesen, dass der Adapter gerade kommuniziert und die Parameter nicht geändert werden können, nachdem der Test beendet war, konnten die Parameter wieder ohne Meldung modifiziert werden.

Die Testprogramme "*.exe" hingegen bringen entweder dass "AGL4DotNET, Version 4.4.0.0" nicht geladen werden konnte oder die folgende Meldung:

Fehler FFF0000D (Geraet ist nicht konfiguriert oder wird nicht unterstuetzt) in AGL_OpenDevice
Bitte <ESC> zum Beenden drcken ...

Was bedeuten diese Meldungen und was muss ich noch einstellen/installieren, dass die AGLink Testprogramme benutzt werden können?

Summasummarum scheint es sich jedoch verbindungstechnisch aber bei meinem Problem um ein libnodave spezifisches Problem zu handeln, da der Adapter an sich bei Accon AGLink nach dem Verbindungsauf- und Abbau wieder anstandslos freigegeben wurde. Interessant wäre hier nun noch zu erfahren, ob auch eine/mehrere Variable(n) (Merker oder DB-Variable) nach jeder Neuverbindung fehlerfrei gelesen werden kann/können.

Jetzt stellt sich die Frage ob man aus diesem Test bezüglich der libnodave Problematik die Ursache bereits eingrenzen kann?

Gruss,

bool



Ergänzung:
Habs nun auch geschafft mit ACCON AGLink API Guide die Verbindung aufzubauen und Daten (MB190) zu lesen. Während dessen war die PG/PC Schnittstelle erwartungsgemäss blockiert, nach dem Verbindungsabbau war diese wieder frei.
Auch ein Reconnect über S7Online hat mittels AGLink mehrfach und problemlos funktioniert, inklusive das erneute Lesen von Daten. Was macht also AGLink anders als libnodave ????
 
Zuletzt bearbeitet:
Ich kann dein Problem halt nicht nachvollziehen, da Ich die Schnitstelle immer wieder ändern kann (auch nach der Verwendung mit libNoDave). Du kannst ja mal versuchen während eines verbindungstests mit aglinkconfig den Stecker zu ziehen, um zu sehen obs danach noch läuft!

Wegen den anderen aglink problemen kann ich dir auch nicht helfen, da müsste man viel. bei deltalogic nachfragen...
 
Auch ein Reconnect über S7Online hat mittels AGLink mehrfach und problemlos funktioniert, inklusive das erneute Lesen von Daten. Was macht also AGLink anders als libnodave ????

Falls man die Situation genau nachstellen kann wie es zustande kommt und bei aglink geht und bei libnodave nicht, kann ich dir meinen s7onlinex wrapper zuschicken, eine dll die die aufrufe an die s7onlinex.dll abfängt und protokolliert, so kannst man genau analysieren was für telegramme geschickt werden!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Falls man die Situation genau nachstellen kann wie es zustande kommt und bei aglink geht und bei libnodave nicht, kann ich dir meinen s7onlinex wrapper zuschicken, eine dll die die aufrufe an die s7onlinex.dll abfängt und protokolliert, so kannst man genau analysieren was für telegramme geschickt werden!

ok, wäre auf jeden Fall einen Versuch wert.
 
Ich kann dein Problem halt nicht nachvollziehen, da Ich die Schnitstelle immer wieder ändern kann (auch nach der Verwendung mit libNoDave). Du kannst ja mal versuchen während eines verbindungstests mit aglinkconfig den Stecker zu ziehen, um zu sehen obs danach noch läuft!

Wenn ich während einer aktiven Verbindung via S7Online über AGLink das Kabel ziehe geht das darauf folgende "Read" schief, dabei scheint dann automatisch die Verbindung wieder abgebaut zu werden, denn der Adapter wird wieder freigegeben. Nach einem erneuten Verbinden funktioniert das "Read" wieder problemlos, d.h. AGLink verhält sich bei mir stabil und so wie man es eigentlich erwartet.

Gruss,

bool
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich während einer aktiven Verbindung via S7Online über AGLink das Kabel ziehe geht das darauf folgende "Read" schief, dabei scheint dann automatisch die Verbindung wieder abgebaut zu werden, denn der Adapter wird wieder freigegeben. Nach einem erneuten Verbinden funktioniert das "Read" wieder problemlos, d.h. AGLink verhält sich bei mir stabil und so wie man es eigentlich erwartet.

Gruss,

bool

Ich habe mir das mal angesehen, AGLink schickt auf jeden fall das Telegramm das es bei einem Disconnect schickt dann auch automatisch wenn die Verbindung unterbrochen wurde.

Aber mein größtes Problem ist das Ich das von dir beschriebene Verhalten bei mir nicht nachstellen kann, sonst könnte Ich versuchen wie man es behebt! Bei mir geht nach klick auf Disconnect und Connect das Read wieder! Und auch bleibt die Schnittstelle nicht belegt!
 
Während dessen war die PG/PC Schnittstelle erwartungsgemäss blockiert, nach dem Verbindungsabbau war diese wieder frei.
Was bedeutet "Schnittstelle blockiert"? Mit AGLink kann selbstverständlich parallel zu anderen Applikation (die sich an die Regeln halten) über die S7Online-Schnittstelle auf die CPU zugegriffen werden ohne dass etwas blockiert. Einfach mal mit STEP7, WinCC flex, ... und AGLink parallel versuchen.
Oder können nur die Schnittstelleneinstellungen nicht geändert werden? Dies ist normal bei einer geöffneten Verbindung. Eine Inspektion am Auto kann ich auch nicht auf der Autobahn machen sondern muss dazu anhalten.
 
Was bedeutet "Schnittstelle blockiert"? Mit AGLink kann selbstverständlich parallel zu anderen Applikation (die sich an die Regeln halten) über die S7Online-Schnittstelle auf die CPU zugegriffen werden ohne dass etwas blockiert. Einfach mal mit STEP7, WinCC flex, ... und AGLink parallel versuchen.
Oder können nur die Schnittstelleneinstellungen nicht geändert werden? Dies ist normal bei einer geöffneten Verbindung. Eine Inspektion am Auto kann ich auch nicht auf der Autobahn machen sondern muss dazu anhalten.

Ich glaube er meint das die Schnittstelle nicht geändert werden kann (fehler der ausgewählte Adapter kommuniziert gerade!)

Mal ne Frage, gibt es von Siemens eigentlich doku zu der s7onlinex Kommunikation mit einer CPU, oder habt ihr das auch alles durch probieren, analysieren usw rausgefunden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube er meint das die Schnittstelle nicht geändert werden kann (fehler der ausgewählte Adapter kommuniziert gerade!)

Mal ne Frage, gibt es von Siemens eigentlich doku zu der s7onlinex Kommunikation mit einer CPU, oder habt ihr das auch alles durch probieren, analysieren usw rausgefunden?
Es gibt keine Doku von Siemens zu dieser Schnittstelle (intern wahrscheinlich schon, aber da haben wir keinen Zugriff darauf).
 
Ich habe mir das mal angesehen, AGLink schickt auf jeden fall das Telegramm das es bei einem Disconnect schickt dann auch automatisch wenn die Verbindung unterbrochen wurde.

Aber mein größtes Problem ist das Ich das von dir beschriebene Verhalten bei mir nicht nachstellen kann, sonst könnte Ich versuchen wie man es behebt! Bei mir geht nach klick auf Disconnect und Connect das Read wieder! Und auch bleibt die Schnittstelle nicht belegt!

Wenn es hilft, kann ich gerne mal mit dem wrapper versuchen den Reconnect auf meinem Rechner mitzuloggen, vielleicht kann man durch den Log dem Problem auf die Schliche kommen. Wenn Du kurz beschreiben könntest wie ich hierfür vorgehen muss wäre ich Dir auf jeden Fall sehr dankbar.

Gruss,

bool
 
Was bedeutet "Schnittstelle blockiert"? Mit AGLink kann selbstverständlich parallel zu anderen Applikation (die sich an die Regeln halten) über die S7Online-Schnittstelle auf die CPU zugegriffen werden ohne dass etwas blockiert. Einfach mal mit STEP7, WinCC flex, ... und AGLink parallel versuchen.
Oder können nur die Schnittstelleneinstellungen nicht geändert werden? Dies ist normal bei einer geöffneten Verbindung. Eine Inspektion am Auto kann ich auch nicht auf der Autobahn machen sondern muss dazu anhalten.

Wie von Jochen beschrieben meine ich mit "Schnittstelle blockieren" nur, dass diese unter "PG/PC Schnittstelle einstellen" nicht verändert werden kann. Eine Parallele Verbindung über die STEP7 Online Verbindung oder Variable beobachten ist auch bei mir möglich.
Das Problem was ich bei mir jedoch festgestellt habe ist, dass auch nach dem Disconnect der Adapter unter "PG/PC Schnittstelle einstellen" nicht wieder freigegeben wird (auch wenn STEP7 etc z.B. gar nicht gestartet wurde). Diese Freigabe geschieht bei meinem Programm genau wie bei dem Programm "Testlibrary" von Jochen Kühner (zumindest auf meinem Rechner) erst wenn ich die ganze Applikation beende.

Dieses Phänomen konnte/musste ich sowohl auf meinem Laptop als auch auf dem Desktop (wo ich testweise Step7 installiert habe) beobachten (beide deutsches WinXP SP3 und Step7 V5.4 SP muss ich nochmals nachsehen). Seltsam ausserdem ist, dass es sogar zwischendurch ein paar mal (max 5x in Folge) funktioniert hat und im Anschluss ohne Programänderung wieder nicht.

Ich habe mir schon einmal überlegt ob es ggf Sinn macht den Aufwand zu betreiben und den gesamten Kommunikationsaufbau in einen eigenen Thread/Form zu verlegen und zu probieren ob nach dessen Schliessen der Disconnect /Schnittstellefreigabe besser funktioniert.

Gruss,

bool
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn es hilft, kann ich gerne mal mit dem wrapper versuchen den Reconnect auf meinem Rechner mitzuloggen, vielleicht kann man durch den Log dem Problem auf die Schliche kommen. Wenn Du kurz beschreiben könntest wie ich hierfür vorgehen muss wäre ich Dir auf jeden Fall sehr dankbar.

Gruss,

bool

Hab meinen wrapper angehängt. Du musst im Windows System32 verzeichnis die s7onlinx.dll in mys7onlinx.dll umbenennen und meine s7onlinex.dll ins system32 verzeichnis kopieren. Meine Dll ruft nach dem Schreiben der Protokolldatei die Funktion in mys7onlinx.dll auf!

Bei jedem Zugriff auf die Dll Funktionen Open, Put und Get schreibt der Wrapper auf c:\ eine datei log.txt

Nun kannst du mir ja mal eine datei vom Read mit gezogen kabel, vom verbindungsabbau und vom neuaufbau alles mit libnodave schicken.

Die log.txt bitte immer löschen und mir nicht das ganze protokoll schicken, d.h. z.B.: Verbindung aufbauen, Variable lesen (obs geht), log.txt löschen, Kabel ziehen, eine Variable lesen, log.txt umbenennen, verbindung abbauen, log.txt umbenennen, verbindung aufbauen log.txt umbenennen...

Mfg....
 

Anhänge

  • s7onlinx.zip
    32,5 KB · Aufrufe: 21
Hab meinen wrapper angehängt. Du musst im Windows System32 verzeichnis die s7onlinx.dll in mys7onlinx.dll umbenennen und meine s7onlinex.dll ins system32 verzeichnis kopieren. Meine Dll ruft nach dem Schreiben der Protokolldatei die Funktion in mys7onlinx.dll auf!

Bei jedem Zugriff auf die Dll Funktionen Open, Put und Get schreibt der Wrapper auf c:\ eine datei log.txt

Nun kannst du mir ja mal eine datei vom Read mit gezogen kabel, vom verbindungsabbau und vom neuaufbau alles mit libnodave schicken.

Die log.txt bitte immer löschen und mir nicht das ganze protokoll schicken, d.h. z.B.: Verbindung aufbauen, Variable lesen (obs geht), log.txt löschen, Kabel ziehen, eine Variable lesen, log.txt umbenennen, verbindung abbauen, log.txt umbenennen, verbindung aufbauen log.txt umbenennen...

Mfg....

ok, das hört sich auch für mich verständlich an. Werde ich heute am späteren Abend in Angriff nehmen. Danke auf jeden Fall schon mal für den klasse Support.

Gruss,

bool
 
Routing

Habe mal Routing für den Netlink lite implementiert... Kanns aber im Moment nicht testen, nur eine CPU vorhanden... Wenns jemand probieren könnte...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab meinen wrapper angehängt. Du musst im Windows System32 verzeichnis die s7onlinx.dll in mys7onlinx.dll umbenennen und meine s7onlinex.dll ins system32 verzeichnis kopieren. Meine Dll ruft nach dem Schreiben der Protokolldatei die Funktion in mys7onlinx.dll auf!

Bei jedem Zugriff auf die Dll Funktionen Open, Put und Get schreibt der Wrapper auf c:\ eine datei log.txt

Nun kannst du mir ja mal eine datei vom Read mit gezogen kabel, vom verbindungsabbau und vom neuaufbau alles mit libnodave schicken.

Die log.txt bitte immer löschen und mir nicht das ganze protokoll schicken, d.h. z.B.: Verbindung aufbauen, Variable lesen (obs geht), log.txt löschen, Kabel ziehen, eine Variable lesen, log.txt umbenennen, verbindung abbauen, log.txt umbenennen, verbindung aufbauen log.txt umbenennen...

Mfg....

So, anbei meine ersten Ergebnisse:
Ich habe folgende Tests gemacht:

S7Online Verbindung mit folgenden Programmen aufgebaut und im Anschluss wieder abgebaut (ohne Variablen zu lesen um das Logfile zunächst übersichtlich zu halten):

A) Testlibrary (von JK)
B) MeinProg (von mir)
C) Accon AGLing API Guide

Was hierbei sofort auffällt ist, dass sowohl bei meinem Programm, als auch bei der Testlibrary die S7Online Verbindung 2x aufgemacht wird beim Accon AGLink jedoch nur einmal und hier liegt vermutlich der Hund begraben. Bei meinem Prog geschieht dies durch eine Schleife automatisch bis das Ergebnis von openS7online > 0 ergibt. Dies habe ich einem Beispiel entnommen und entsprechend angewand:

Dim hWnd As IntPtr = Me.Handle
WriteDebugInfo("Open S7Online Connection (GetForegroundWindow)... hWnd=" & CStr(hWnd))
WriteDebugInfo(
"Open S7Online Connection (before 1st call of libnodave.openS7online)... fds.rfd=" & CStr(fds.rfd))
For i = 0 To 3
fds.rfd = libnodave.openS7online(S7Online_Accesspoint, CInt(hWnd))
WriteDebugInfo("Open S7Online Connection (libnodave.openS7online)... fds.rfd=" & CStr(fds.rfd))
WriteDebugInfo("Open S7Online Connection (libnodave.openS7online)... S7Online intern=" & libnodave.daveStrS7onlineError())
If fds.rfd > 0 Then
fds.wfd = fds.rfd
ExitFor
EndIf
Next


Wenn hier keine Schleife und Abfrage durchgefuehrt und fd.rdf gleich 0 akzeptiert wird geht dafuer das anschliessende dc = New libnodave.daveConnection(di,...) schief, bzw. das Programm haengt sich auf.


Bei der Testlibrary hatte ich bereits festgestellt, dass der Connect erst funktioniert wenn ich die Connect-Taste ein zweites Mal gedrückt habe beim ersten Connect kommt die Fehlermeldung: "Error connecting: Could not creating the Physical Interface (Maybe wrong IP, COM-Port not Ready,...)", doch hatte ich dem nicht so viel Bedeutung zugeschrieben, da es bei meinem Programm ja auch meist einen zweiten Versuch erfordert. Nach dem zweiten Connect erhalte ich dann das Feedback "Connected".

Ich vermute, das dann beim "Disconnect" nur noch der zweite "Connect" freigegeben wird, der erste jedoch im "Nirvana" verweilt bis die Applikation geschlossen wird.
Beobachtung: Nach dem ersten "Connect" wird bereits der Adapter unter "PG/PC Schnittstelle einstellen" reserviert/fürs editieren gesperrt. Wenn ich dann im Anschluss "Disconnect" drücke wird dieser auch anstandslos wieder freigegeben, auch wenn dies mehrmals wieder holt wird (Connect->Disconnect->Connect->Disconnect...). Wenn ich aber nun 2x "Connect" betätige wird auch 2x openS7online() ausgeführt und danach auch nach einem oder gar mehrmaligem "Disconnect" der Adapter unter "PG/PC Schnittstelle einstellen" nicht wieder freigegeben.

Jetzt gilt es herauszufinden wieso bei mir mit libnodave eine S7Online Verbindung offenbar nicht nach dem ersten Connect funktioniert.

Hat da vielleicht jemand eine Idee?

Gruss,

bool
 

Anhänge

  • S7Online_Accon_AGLink_API_Guide_Connect_&_Disconnect_log.txt
    8,5 KB · Aufrufe: 5
  • S7Online_MeinProg_Connect_&_Disconnect_log.txt
    6,1 KB · Aufrufe: 8
  • S7Online_Testlibrary_Connect_&_Disconnect_log.txt
    5,8 KB · Aufrufe: 4
Zuletzt bearbeitet:
So, anbei meine ersten Ergebnisse:
Ich habe folgende Tests gemacht:

S7Online Verbindung mit folgenden Programmen aufgebaut und im Anschluss wieder abgebaut (ohne Variablen zu lesen um das Logfile zunächst übersichtlich zu halten):

A) Testlibrary (von JK)
B) MeinProg (von mir)
C) Accon AGLing API Guide

Was hierbei sofort auffällt ist, dass sowohl bei meinem Programm, als auch bei der Testlibrary die S7Online Verbindung 2x aufgemacht wird beim Accon AGLink jedoch nur einmal und hier liegt vermutlich der Hund begraben. Bei meinem Prog geschieht dies durch eine Schleife automatisch bis das Ergebnis von openS7online > 0 ergibt. Dies habe ich einem Beispiel entnommen und entsprechend angewand:

Dim hWnd As IntPtr = Me.Handle
WriteDebugInfo("Open S7Online Connection (GetForegroundWindow)... hWnd=" & CStr(hWnd))
WriteDebugInfo(
"Open S7Online Connection (before 1st call of libnodave.openS7online)... fds.rfd=" & CStr(fds.rfd))
For i = 0 To 3
fds.rfd = libnodave.openS7online(S7Online_Accesspoint, CInt(hWnd))
WriteDebugInfo("Open S7Online Connection (libnodave.openS7online)... fds.rfd=" & CStr(fds.rfd))
WriteDebugInfo("Open S7Online Connection (libnodave.openS7online)... S7Online intern=" & libnodave.daveStrS7onlineError())
If fds.rfd > 0 Then
fds.wfd = fds.rfd
ExitFor
EndIf
Next


Wenn hier keine Schleife und Abfrage durchgefuehrt und fd.rdf gleich 0 akzeptiert wird geht dafuer das anschliessende dc = New libnodave.daveConnection(di,...) schief, bzw. das Programm haengt sich auf.


Bei der Testlibrary hatte ich bereits festgestellt, dass der Connect erst funktioniert wenn ich die Connect-Taste ein zweites Mal gedrückt habe beim ersten Connect kommt die Fehlermeldung: "Error connecting: Could not creating the Physical Interface (Maybe wrong IP, COM-Port not Ready,...)", doch hatte ich dem nicht so viel Bedeutung zugeschrieben, da es bei meinem Programm ja auch meist einen zweiten Versuch erfordert. Nach dem zweiten Connect erhalte ich dann das Feedback "Connected".

Ich vermute, das dann beim "Disconnect" nur noch der zweite "Connect" freigegeben wird, der erste jedoch im "Nirvana" verweilt bis die Applikation geschlossen wird.
Beobachtung: Nach dem ersten "Connect" wird bereits der Adapter unter "PG/PC Schnittstelle einstellen" reserviert/fürs editieren gesperrt. Wenn ich dann im Anschluss "Disconnect" drücke wird dieser auch anstandslos wieder freigegeben, auch wenn dies mehrmals wieder holt wird (Connect-
>Disconnect->Connect->Disconnect...). Wenn ich aber nun 2x "Connect" betätige wird auch 2x openS7online() ausgeführt und danach auch nach einem oder gar mehrmaligem "Disconnect" der Adapter unter "PG/PC Schnittstelle einstellen" nicht wieder freigegeben.

Jetzt gilt es herauszufinden wieso bei mir mit libnodave eine S7Online Verbindung offenbar nicht nach dem ersten Connect funktioniert.

Hat da vielleicht jemand eine Idee?

Gruss,

bool

Als bei mir wird definitiv nach dem ersten Click auf Connect die Verbindung aufgebaut. gehts denn, wenn du nach dem ersten klick auf connect dann auf disconnect und dann wieder connect drückst? (Auch wenn nicht verbunden wurde!) Dann sollte die Verbindung geschlossen werden.

Achso nochwas, das Close der S7Online Verbindung protokolliere ich noch gar nicht! Viel. sollte Ich das auch noch einbauen!
 
Geeeeeeeeschaaaaaaaaft !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

So, anbei meine ersten Ergebnisse:
Ich habe folgende Tests gemacht:

S7Online Verbindung mit folgenden Programmen aufgebaut und im Anschluss wieder abgebaut (ohne Variablen zu lesen um das Logfile zunächst übersichtlich zu halten):

A) Testlibrary (von JK)
B) MeinProg (von mir)
C) Accon AGLing API Guide

Was hierbei sofort auffällt ist, dass sowohl bei meinem Programm, als auch bei der Testlibrary die S7Online Verbindung 2x aufgemacht wird beim Accon AGLink jedoch nur einmal und hier liegt vermutlich der Hund begraben. Bei meinem Prog geschieht dies durch eine Schleife automatisch bis das Ergebnis von openS7online > 0 ergibt. Dies habe ich einem Beispiel entnommen und entsprechend angewand:

Dim hWnd As IntPtr = Me.Handle
WriteDebugInfo("Open S7Online Connection (GetForegroundWindow)... hWnd=" & CStr(hWnd))
WriteDebugInfo(
"Open S7Online Connection (before 1st call of libnodave.openS7online)... fds.rfd=" & CStr(fds.rfd))
For i = 0 To 3
fds.rfd = libnodave.openS7online(S7Online_Accesspoint, CInt(hWnd))
WriteDebugInfo("Open S7Online Connection (libnodave.openS7online)... fds.rfd=" & CStr(fds.rfd))
WriteDebugInfo("Open S7Online Connection (libnodave.openS7online)... S7Online intern=" & libnodave.daveStrS7onlineError())
If fds.rfd > 0 Then
fds.wfd = fds.rfd
ExitFor
EndIf
Next


Wenn hier keine Schleife und Abfrage durchgefuehrt und fd.rdf gleich 0 akzeptiert wird geht dafuer das anschliessende dc = New libnodave.daveConnection(di,...) schief, bzw. das Programm haengt sich auf.


Bei der Testlibrary hatte ich bereits festgestellt, dass der Connect erst funktioniert wenn ich die Connect-Taste ein zweites Mal gedrückt habe beim ersten Connect kommt die Fehlermeldung: "Error connecting: Could not creating the Physical Interface (Maybe wrong IP, COM-Port not Ready,...)", doch hatte ich dem nicht so viel Bedeutung zugeschrieben, da es bei meinem Programm ja auch meist einen zweiten Versuch erfordert. Nach dem zweiten Connect erhalte ich dann das Feedback "Connected".

Ich vermute, das dann beim "Disconnect" nur noch der zweite "Connect" freigegeben wird, der erste jedoch im "Nirvana" verweilt bis die Applikation geschlossen wird.
Beobachtung: Nach dem ersten "Connect" wird bereits der Adapter unter "PG/PC Schnittstelle einstellen" reserviert/fürs editieren gesperrt. Wenn ich dann im Anschluss "Disconnect" drücke wird dieser auch anstandslos wieder freigegeben, auch wenn dies mehrmals wieder holt wird (Connect->Disconnect->Connect->Disconnect...). Wenn ich aber nun 2x "Connect" betätige wird auch 2x openS7online() ausgeführt und danach auch nach einem oder gar mehrmaligem "Disconnect" der Adapter unter "PG/PC Schnittstelle einstellen" nicht wieder freigegeben.

Jetzt gilt es herauszufinden wieso bei mir mit libnodave eine S7Online Verbindung offenbar nicht nach dem ersten Connect funktioniert.

Hat da vielleicht jemand eine Idee?

Gruss,

bool

GEEEEEEEESCHAAAAAAAAFT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Der Ansatz war schon richtig, fds.rdf darf oder muss ggf sogar = 0 sein!
Ich hatte nur noch das "fds.wfd = fds.rfd" mit deaktiviert, als ich grade eben die Schleife auskommentiert habe.

Es muss also einfach un knapp heissen:

fds.rfd = libnodave.openS7online(S7Online_Accesspoint, CInt(hWnd))
fds.wfd = fds.rfd

... und schon gehts, der Reconnect funzt und die S7Online Adapterparameter sind nach dem Disconnect wieder editierbar.

Vielen Dank vor allem an Jochen Kühner, dessen Wrapper mit Logfunktion hier Licht ins Dunkel gebracht hat.

Viele Grüsse,

bool
 
Zurück
Oben