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

Seite 1 von 7 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 61

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

  1. #1
    Registriert seit
    26.03.2010
    Beiträge
    94
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    inzwischen bin ich dabei mit dem S7Online Protokoll zu experimentieren und habe dieses prinzipiell mit dem PCMCIA CP5511 MPI/Profibus Adapter zum laufen bekommen. Den Verbindungsauf und Abbau habe ich gemäss diverser Programmbeispiele folgendermassen vorgenommen:


    Verbindungsaufbau (wichtigsten Funktionen aus dem Code extrahiert):
    fds.rfd = libnodave.openS7online(S7Online_accesspoint)
    fds.wfd = fds.rfd
    di = New libnodave.daveInterface(fds, "IF1", S7Online_localAddress, libnodave.daveProtoS7online, nodaveBaudrate)
    di.setTimeout(1000)
    res = di.initAdapter
    dc = New libnodave.daveConnection(di, S7Online_remoteAddress, S7Online_rack, S7Online_slot)
    res = dc.connectPLC

    Verbindungsabbau (wichtigsten Funktionen aus dem Code extrahiert):

    res = dc.disconnectPLC()
    di.disconnectAdapter()
    'res = libnodave.closePort(fds.rfd)
    'WriteDebugInfo("Close S7Online Connection: closePort() ... (res=" & CStr(res) & " - " & libnodave.daveStrerror(res) & ")")
    res = libnodave.closeS7online(fds.rfd)
    WriteDebugInfo("Close S7Online Connection: closeS7online() ... (res=" & CStr(res) & " - " & libnodave.daveStrerror(res) & ")")

    Für mich stellen sich nun folgende Fragen:

    Muss ich beim Verbindungsabbau die Funktion
    a) libnodave.closeS7online(fds.rfd) oder
    b) libnodave.closePort(fds.rfd) ausführen
    oder sogar beide?
    Bei dem von mir als Vorlage verwendeten Programmbeispiel wurde Variante b) verwendet aber wofür gibt es dann a)?

    Warum funktioniert das Lesen nur nach dem ersten Verbindungsaufbau und ab dem zweiten Verbindungsaufbau nicht mehr?

    Dann bekomme ich vom dc.execReadRequest() nur noch eine "-128"
    Leider funktioniert bei mir ausserdem die Funktion "libnodave.daveStrerror(res)" nicht richtig, ich bekomme leider den Fehlertext nicht im Klartext sondern nur kryptische Zeichen zurück.

    Ich habe in einem anderen Thread gelesen, dass in "neueren versionen der LibNoDave an S7Online eine HWND Übergeben" werden muss.
    Was steckt da dahinter? Was muss ich machen und wie würde dies Codetechnisch für VB 2008 Express aussehen?

    Danke bereits jetzt im voraus für Eure Unterstützung.

    Gruss,

    bool
    Zitieren Zitieren libnodave via S7Online macht Probleme nach Verbindungstrennung und erneuten Verbinden  

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

    Standard

    benutzt du auch S7Online aus der neusten LibNoDave der du die HWND des Fensters mitgeben musst?
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Hwnd.  

  3. #3
    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
    benutzt du auch S7Online aus der neusten LibNoDave der du die HWND des Fensters mitgeben musst?
    Hallo Jochen,
    was meinst Du mit der neuen LibNoDave und wie muss welcher Funktion das HWND des Fensters übergeben werden?
    Ich verwende die LibNoDave 0.8.4.5 mit der libnodave.dll, libnodave.lib und libnodave.net.dll vom 12.07.2009.
    Als Verweis eingebunden habe ich die libnodave.net.dll da VB2008Express ja auf .NET basiert. Bei der Funktion
    fds.rfd = libnodave.openS7online(S7Online_accesspoint) kann ich leider kein HWND als zweiten Parameter übergeben.

    Gibt es da neuere Bibliotheken und wenn ja wo kann ich diese herbekommen? Ich habe die dll aus LibNoDave 0.8.4.5 und eigenlich erst vor ein paar Wochen von http://sourceforge.net/projects/libnodave/
    runtergeladen.

    Für Informationen diesbezüglich wäre ich sehr dankbar.

    Gruss,

    bool
    Geändert von bool (09.05.2010 um 15:19 Uhr) Grund: bearbeitet, da Dateidatum der eingebundenen dll nicht korrekt war

  4. #4
    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 bool Beitrag anzeigen
    Verbindungsaufbau (wichtigsten Funktionen aus dem Code extrahiert):
    fds.rfd = libnodave.openS7online(S7Online_accesspoint)
    fds.wfd = fds.rfd
    di = New libnodave.daveInterface(fds, "IF1", S7Online_localAddress, libnodave.daveProtoS7online, nodaveBaudrate)
    di.setTimeout(1000)
    res = di.initAdapter
    dc = New libnodave.daveConnection(di, S7Online_remoteAddress, S7Online_rack, S7Online_slot)
    res = dc.connectPLC

    Verbindungsabbau (wichtigsten Funktionen aus dem Code extrahiert):

    res = dc.disconnectPLC()
    di.disconnectAdapter()
    'res = libnodave.closePort(fds.rfd)
    'WriteDebugInfo("Close S7Online Connection: closePort() ... (res=" & CStr(res) & " - " & libnodave.daveStrerror(res) & ")")
    res = libnodave.closeS7online(fds.rfd)
    WriteDebugInfo("Close S7Online Connection: closeS7online() ... (res=" & CStr(res) & " - " & libnodave.daveStrerror(res) & ")")

    Für mich stellen sich nun folgende Fragen:

    Muss ich beim Verbindungsabbau die Funktion
    a) libnodave.closeS7online(fds.rfd) oder
    b) libnodave.closePort(fds.rfd) ausführen
    oder sogar beide?
    Bei dem von mir als Vorlage verwendeten Programmbeispiel wurde Variante b) verwendet aber wofür gibt es dann a)?

    Warum funktioniert das Lesen nur nach dem ersten Verbindungsaufbau und ab dem zweiten Verbindungsaufbau nicht mehr?

    Dann bekomme ich vom dc.execReadRequest() nur noch eine "-128"
    Leider funktioniert bei mir ausserdem die Funktion "libnodave.daveStrerror(res)" nicht richtig, ich bekomme leider den Fehlertext nicht im Klartext sondern nur kryptische Zeichen zurück.
    Hilft hier überhaupt die neue Funktion welcher das hWnd des aktiven Fensters mit übergegeben wird oder müsste dies auch mit der älteren Variante funktionieren welche so wie es scheint noch bei der aktuellen libnodave.net.dll (für .NET Applikationen) implementiert ist?
    Oder gibt es eine aktueller dll welche ich hier verwenden sollte?
    Welche der folgenden Funktionen müssen beim Verbindungsabbau in welcher Reihenfolge ausgeführt werden, so dass die Verbindung sauber und komplett geschlossen wird und nach dem nächsten Verbindungsaufbau wieder erfolgreich gelesen werden kann?

    a) libnodave.closeS7online(fds.rfd) oder
    b) libnodave.closePort(fds.rfd) ? oder beide?

    Danke bereits im voraus.

    Gruss,

    bool

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

    Standard

    also bei mir geht der aufruf ohne die hwnd gar nicht mehr, kann es sein, das du viel noch eine alte version der dll im system32 ordner hast!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren Hm.  

  6. #6
    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
    also bei mir geht der aufruf ohne die hwnd gar nicht mehr, kann es sein, das du viel noch eine alte version der dll im system32 ordner hast!
    Hab grad den kompletten Windowsordner durchsuchen lassen, doch da habe ich überhaupt keine libnodave DLL, ich habe sie nur im Projektordner, im Debug und Releaseordner.

    Die libnodave.net.dll habe ich wie in meinem anderen Thread gepostet über Verweise eingebunden.

    Gruss,

    bool

  7. #7
    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
    Hab grad den kompletten Windowsordner durchsuchen lassen, doch da habe ich überhaupt keine libnodave DLL, ich habe sie nur im Projektordner, im Debug und Releaseordner.

    Die libnodave.net.dll habe ich wie in meinem anderen Thread gepostet über Verweise eingebunden.

    Gruss,

    bool
    Also bei mir wurde von CSharp auf jeden fall gemeckert das er in der Libnodave .dll die funktion ohne 2 parameter nicht gefunden hat. Ich habe aber die libnodave.net.dll auch nicht benutzt sondern das csharp sourcefile!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  8. #8
    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
    Also bei mir wurde von CSharp auf jeden fall gemeckert das er in der Libnodave .dll die funktion ohne 2 parameter nicht gefunden hat. Ich habe aber die libnodave.net.dll auch nicht benutzt sondern das csharp sourcefile!
    Heisst dies, dass das gesamte libnodave in csharp also sourcefile vorliegt und alle Funktionen direkt eingesehen und bei Bedarf (wie hier nun in meinem Fall) angepasst werden können?
    So langsam glaube ich, dass in Bezug auf libnodave es wahrscheinlich am besten wäre sich von VB zu lösen und auf CSharp umzusatteln.


    Gruss,

    bool

  9. #9
    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
    Heisst dies, dass das gesamte libnodave in csharp also sourcefile vorliegt und alle Funktionen direkt eingesehen und bei Bedarf (wie hier nun in meinem Fall) angepasst werden können?
    So langsam glaube ich, dass in Bezug auf libnodave es wahrscheinlich am besten wäre sich von VB zu lösen und auf CSharp umzusatteln.


    Gruss,

    bool
    Nein, das heisst es nicht, d.h. Ich habe die LibNoDave.net.cs in meinem Projekt und nicht als Dll eingebunden, nicht die libnodave.dll!
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Jochen Kühner Beitrag anzeigen
    Nein, das heisst es nicht, d.h. Ich habe die LibNoDave.net.cs in meinem Projekt und nicht als Dll eingebunden, nicht die libnodave.dll!
    Wie in meinem anderen Thread gepostet, habe ich (mit Hilfe Deiner Tips) inzwischen die libnodave.net.dll aus der Datei libnodave.net.cs erzeugen können.

    Zwar bekomme ich nun ebenfalls die openS7online(S7ONLINE, HWND) Deklaration inkusive hWnd aber ein Variablenzugriff nach dem ersten Verbindungsabbau und erneuten Verbindungsaufbau funktioniert leider immer noch nicht. Ich bekomme von der Funktion dc.execReadRequest() nur noch eine "-128", dieses mal jedoch mit dem Klartext "Unexpected function code in answer". Wie gesagt, nach dem ersten Verbindungsaufbau funktioniert das Pollen der Daten mit dc.execReadRequest() einwandfrei, nach dem Verbindungsabbau (Programmcodeauszug siehe in meinem ersten post von diesem Thread) und erneuten Verbindungsaufbau dann leider nicht mehr.

    Kann es vielleich auch sein, dass ich das HWND Handle falsch erzeuge?
    Was mich wundert ist nämlich, dass in der angezeigten Deklaration das hWnd als Integer angegeben wird und nicht als IntPtr weshalb ich den Aufruf folgendermassen gestaltet habe:

    Dim hWnd As IntPtr = GetForegroundWindow()
    Dim ihWnd AsInteger = CInt(hWnd)
    For i = 0 To 3
    fds.rfd = libnodave.openS7online(S7Online_Accesspoint, ihWnd)
    fds.wfd = fds.rfd
    If fds.rfd > 0 Then
    ExitFor
    EndIf
    Next


    Auf diese Weise bekomme ich den Handlewert als Integer in die ihWnd Variable geschrieben und sollte so eigentlich funktionieren.
    Doch wie gesagt ergab dies leider keine Besserung nach dem zweiten Connect.

    Ich hoffe Ihr habt weiterhin Ideen, ich werde sie gerne ausprobieren.

    Gruss,

    bool

Ä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
  •