Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 6 von 7 ErsteErste ... 4567 LetzteLetzte
Ergebnis 51 bis 60 von 61

Thema: libnodave via S7Online macht Probleme nach Verbindungstrennung und erneuten Verbinden

  1. #51
    bool ist offline Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Beiträge
    94
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Daumen hoch


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich hatte gemäss einem ergoogleten Beispiel die S7Online Verbindung mt einer Schleife aufgebaut in welcher die Funktion fds.rfd=openS7Online() aufgerufen wurde bis das Ergebnis > 0 ist.

    fds.rfd=0 darf hier aber nicht ausgeschlossen werden.

    Ausserdem ist an dieser Stelle eine Schleifenfunktion wohl eher nicht zu empfehlen, zumindest nicht wenn in der Schleife nicht alle aufgebauten Verbindungen (hier fds.rfd=0) wieder sauber abgebaut werden.

    Tests grade eben haben auf jeden Fall bestätigt, dass mit fds.rdf=0 sowohl ein Lesen während dieser bestehenden Verbindung, als auch ein erneuter Verbindungsaufbau nach einer Verbindungstrennung über S7Online möglich ist.

    siehe auch folgenden Thread in welchem das Thema zwischenzeitlich weiterdiskutiert wurde und schliesslich zu dieser Erkenntnis geführt hat:

    http://sps-forum.net/showthread.php?...d=1#post266220

    Viele Grüsse und Danke an alle die mich in den letzten Tagen/Wochen bei der Lösungsfindung unterstützt haben,

    bool
    Zitieren Zitieren Problem gelöst !!!  

  2. #52
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von bool Beitrag anzeigen
    Ich hatte gemäss einem ergoogleten Beispiel die S7Online Verbindung mt einer Schleife aufgebaut in welcher die Funktion fds.rfd=openS7Online() aufgerufen wurde bis das Ergebnis > 0 ist.

    fds.rfd=0 darf hier aber nicht ausgeschlossen werden.

    Ausserdem ist an dieser Stelle eine Schleifenfunktion wohl eher nicht zu empfehlen, zumindest nicht wenn in der Schleife nicht alle aufgebauten Verbindungen (hier fds.rfd=0) wieder sauber abgebaut werden.

    Tests grade eben haben auf jeden Fall bestätigt, dass mit fds.rdf=0 sowohl ein Lesen während dieser bestehenden Verbindung, als auch ein erneuter Verbindungsaufbau nach einer Verbindungstrennung über S7Online möglich ist.

    siehe auch folgenden Thread in welchem das Thema zwischenzeitlich weiterdiskutiert wurde und schliesslich zu dieser Erkenntnis geführt hat:

    http://sps-forum.net/showthread.php?...d=1#post266220

    Viele Grüsse und Danke an alle die mich in den letzten Tagen/Wochen bei der Lösungsfindung unterstützt haben,

    bool
    Noch eine Frage, geht der abbau und das Editieren nun auch mit der orginalen libnodave richtig, oder sind die Änderungen welche Ich für den disconnect eingebaut habe nötig?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  3. #53
    bool ist offline Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Beiträge
    94
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Noch eine Frage, geht der abbau und das Editieren nun auch mit der orginalen libnodave richtig, oder sind die Änderungen welche Ich für den disconnect eingebaut habe nötig?

    Habe grad mal die originale libnodave.dll und libnodave.net.dll (plus PtrToStringAnsi Anpassung) von libnodave Version 0.8.4.5 genommen und nen kurzen Kommunikationstest mit mehreren Reconnects gemacht und siehe da es funktionierte, und das obwohl noch die alte openS7online() Funktion verwendet wird, welcher noch nicht das Window-Handle übergegebn wird.
    Nach dem Disconnect wurde ausserdem der verwendete Adapter wieder korrekt freigegeben. In meinem Fall scheint tatsächlich alles an dem doppelten openS7online() Funktionsaufruf gehangen zu haben.

    Gruss,

    bool
    Geändert von bool (18.06.2010 um 13:21 Uhr)

  4. #54
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von bool Beitrag anzeigen
    Habe grad mal die originale libnodave.dll und libnodave.net.dll (plus PtrToStringAnsi Anpassung) von libnodave Version 0.8.4.5 genommen und nen kurzen Kommunikationstest mit mehreren Reconnects gemacht und siehe da es funktionierte, und das obwohl noch die alte openS7online() Funktion verwendet wird, welcher noch nicht das Window-Handle übergegebn wird.
    Nach dem Disconnect wurde ausserdem der verwendete Adapter wieder korrekt freigegeben. In meinem Fall scheint tatsächlich alles an dem doppelten openS7online() Funktionsaufruf gehangen zu haben.

    Gruss,

    bool
    Das mit dem Windowshandle hat soweit Ich das sehe auch nichts zu bedeuten. Laut doku wird das handle ja nur gebraucht wenn man die asychronen scp_recieve funktionen der s7onlinx.dll verwendet, was libnodave aber nicht tut!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  5. #55
    bool ist offline Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Beiträge
    94
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe nun nachdem der Reconnect nach Verbindungsabbruch unter Verwendung des S7Online Protokolls nun tadellos funktioniert (Danke an dieser Stelle nochmals an J.K.) nun noch ein kleines Problem beim Verbindungsabbruch (S7Online über CP5611 und RS232->MPI) selbst festgestellt.

    Ich bekomme hin und wieder eine Speicherverletzung durch die Funktionen dc.getU8(), dc.getU16(), dc.getU32(), etc.... Dies habe ich bislang eigentlich nur bei S7Online Verbindungen über MPI Adapter festgestellt, bei Etherentverbindung gab es bislang noch keine Meldung bezüglich einer Speicherverletzung beim Ziehen des Netzwerkkabels.
    Inzwischen habe ich die Auswertung der Funktion res=dc.useResult(rs, 0) mit berücksichtigt und dadurch herausbekommen, dass es vorkommen kann, dass die vorangehende Lesefunktion res = dc.execReadRequest(multireadPDU01, rs) eigentlich "0" (ok) zurück gibt, die Funktion useResult() aber den Wert -126 (this result contains no data), also Fehler meldet.

    Dies passiert nicht immer sondern so wie es ausschaut eher zufällig, je nachdem in welchem Moment das MPI Kabel gezogen wird. Ich hatte die Speicherverletzung zwar mit der Exceptionbehandlung via try...catch abgefangen, ist aber natürlich nicht die sauberste Lösung Jetzt überprüfe ich vor der Ausführung der get***() Funktionen ob die useResult() <> "0" meldet und reagiere dann ebenfalls nach x Fehlern in Folge mit einem Reconnect.

    Ist dies bei Euch ebenfalls so nachvollziehbar und gibt es ggf. eine bessere Variante Verbindungsfehler zur SPS zu detektieren?

    Gruss,

    bool

  6. #56
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von bool Beitrag anzeigen
    Habe nun nachdem der Reconnect nach Verbindungsabbruch unter Verwendung des S7Online Protokolls nun tadellos funktioniert (Danke an dieser Stelle nochmals an J.K.) nun noch ein kleines Problem beim Verbindungsabbruch (S7Online über CP5611 und RS232->MPI) selbst festgestellt.

    Ich bekomme hin und wieder eine Speicherverletzung durch die Funktionen dc.getU8(), dc.getU16(), dc.getU32(), etc.... Dies habe ich bislang eigentlich nur bei S7Online Verbindungen über MPI Adapter festgestellt, bei Etherentverbindung gab es bislang noch keine Meldung bezüglich einer Speicherverletzung beim Ziehen des Netzwerkkabels.
    Inzwischen habe ich die Auswertung der Funktion res=dc.useResult(rs, 0) mit berücksichtigt und dadurch herausbekommen, dass es vorkommen kann, dass die vorangehende Lesefunktion res = dc.execReadRequest(multireadPDU01, rs) eigentlich "0" (ok) zurück gibt, die Funktion useResult() aber den Wert -126 (this result contains no data), also Fehler meldet.

    Dies passiert nicht immer sondern so wie es ausschaut eher zufällig, je nachdem in welchem Moment das MPI Kabel gezogen wird. Ich hatte die Speicherverletzung zwar mit der Exceptionbehandlung via try...catch abgefangen, ist aber natürlich nicht die sauberste Lösung Jetzt überprüfe ich vor der Ausführung der get***() Funktionen ob die useResult() <> "0" meldet und reagiere dann ebenfalls nach x Fehlern in Folge mit einem Reconnect.

    Ist dies bei Euch ebenfalls so nachvollziehbar und gibt es ggf. eine bessere Variante Verbindungsfehler zur SPS zu detektieren?

    Gruss,

    bool
    So wie Ich das sehe Wertet libnodave beim ausführen von Funktionen an s7onlinx.dll nur den rückgabewert der funktion aus, aber nicht die zurückgegeben daten.

    Vieleicht kannst du ja mit meinen Wrapper sehen was nach einem verbindungsabbruch anderst von s7online zurück kommt, als wenn die verbindung noch besteht!

    Dazu kann dir auch meine excel Tabelle aus folgenden Thread (http://www.sps-forum.de/showthread.php?t=36719) helfen. Da gibt es eine Tabelle LibNoDave Kommunikation, und ein Script (aa) mit welchem du die daten aus der log.txt in die einzelnen tabellenzeilen eintragen lassen kannst.
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  7. #57
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Noch zur Info.

    Über s7online läuft eine Anfrage nach Daten immer über 4 telegramme ab. (hoffe Ich erzähle jetzt keinen stuss)

    scp_send aufruf mit der pdu um daten zu lesen.
    scp_recieve quittung des telegrammes
    scp_send aufruf um die daten abzufragen
    scp_recieve aufruf mit den empfangen daten.
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Noch zur Info:  

  8. #58
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Ich denke man muss die Daten des ersten scp_recieves analysieren, ob da ein fehler kommt.

    Habe gerade auch nochmal in die libnodave geschaut, es wird nicht mal der rückgabewert der funktionen scp_send und scp_recieve ausgewertet!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Und nochmal was...  

  9. #59
    bool ist offline Benutzer
    Themenstarter
    Registriert seit
    26.03.2010
    Beiträge
    94
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Ich denke man muss die Daten des ersten scp_recieves analysieren, ob da ein fehler kommt.

    Habe gerade auch nochmal in die libnodave geschaut, es wird nicht mal der rückgabewert der funktionen scp_send und scp_recieve ausgewertet!
    Hallo Jochen,

    Danke für die (wie gewohnt) schnelle und informative Rückmeldung.

    Ich denke mal, das ist halt wahrscheinlich einer der Gründe warum die S7Online Kommunikation noch Entwicklungsstatus hat.

    Gerne werde ich im Rahmen meiner eingeschränkten Möglichkeiten als Hochspracheneinsteiger meinen Teil dazu beitragen und mir die Telegramme ebenfalls einmal ansehen und versuchen Unterschiede in den Telegrammen festzustellen.

    Gruss,

    bool

  10. #60
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von bool Beitrag anzeigen
    Hallo Jochen,

    Danke für die (wie gewohnt) schnelle und informative Rückmeldung.

    Ich denke mal, das ist halt wahrscheinlich einer der Gründe warum die S7Online Kommunikation noch Entwicklungsstatus hat.

    Gerne werde ich im Rahmen meiner eingeschränkten Möglichkeiten als Hochspracheneinsteiger meinen Teil dazu beitragen und mir die Telegramme ebenfalls einmal ansehen und versuchen Unterschiede in den Telegrammen festzustellen.

    Gruss,

    bool
    Hab in libnodave mal noch Logging Meldungen eingebaut das die Rückgabewerte von scp_send und scp_recieve ausgegeben werden.

    Das kannst du mit meinem Connection Lib Testen. Dazu einfach in der Connect Funktion der LibNoDaveConnection.cs die Zeile //libnodave.daveSetDebug(0x1ffff); auskomentieren. Dann kannst du wenn du meine Connection Lib startest die Debug Daten im Ausgabe Fenster sehen!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 01.02.2011, 11:27
  2. Libnodave und S7online
    Von adi im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 05.01.2011, 16:31
  3. LibNoDave + S7Online
    Von Lazarus™ im Forum Hochsprachen - OPC
    Antworten: 14
    Letzter Beitrag: 05.05.2009, 19:56
  4. LibNoDave - S7Online - TCP/IP
    Von Jochen Kühner im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 09.03.2009, 12:33
  5. Libnodave und S7Online
    Von Ralle im Forum Hochsprachen - OPC
    Antworten: 14
    Letzter Beitrag: 02.02.2007, 13:49

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •