Libnodave - S7ONLINE - Traeger-USB

StefanK

Level-1
Beiträge
178
Reaktionspunkte
22
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe eine kleine VB.NET-Anwendung geschrieben, die ein paar Daten per Libnodave aus einer S7-315-2DP lesen soll.

Per RS232 funktioniert das gut. Nun sollen die Daten mit einem Traeger-USB Adapter über S7ONLINE gelesen werden.

Verbindung soll wie folgt aufgebaut werden:

Code:
fds(Connection).rfd = libnodave.PlcCommLib.openS7online("S7ONLINE")
fds(Connection).wfd = fds(Connection).rfd

If fds(Connection).rfd > 0 Then
    di(Connection) = New libnodave.PlcCommLib.daveInterface(fds(Connection), "IF1", 0, libnodave.PlcCommLib.daveProtoS7online, libnodave.PlcCommLib.daveSpeed187k)
    res = di(Connection).initAdapter

     If res = 0 Then
        di(Connection).setTimeout(500000)
        dc(Connection) = New libnodave.PlcCommLib.daveConnection(di(Connection), 2, 0, 0)
        res = dc(Connection).connectPLC
        If res = 0 Then
            Return True
        Else
            Call Disconnect(Connection)
            Return False
        End If
    Else
        libnodave.PlcCommLib.closePort(fds(Connection).rfd)
        Return False
    End If
Else
    Return False
End If

In dieser Zeile:
Code:
fds(Connection).rfd = libnodave.PlcCommLib.openS7online("S7ONLINE")
kommt folgende Fehlermeldung:

Code:
Ein Aufruf an die PInvoke-Funktion "libnodave
libnodave.PlcCommLib::openS7online" 
hat das Gleichgewicht des Stapels gestört. 
Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der 
nicht verwalteten Zielsignatur überein. 
Überprüfen Sie, ob die Aufrufkonvention und die Parameter 
der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.

Ich habe keine Ahnung was ich damit anfangen kann...

Gruß
Stefan
 
Hallo,
ich habe eine kleine VB.NET-Anwendung geschrieben, die ein paar Daten per Libnodave aus einer S7-315-2DP lesen soll.

Per RS232 funktioniert das gut. Nun sollen die Daten mit einem Traeger-USB Adapter über S7ONLINE gelesen werden.

Verbindung soll wie folgt aufgebaut werden:

Code:
fds(Connection).rfd = libnodave.PlcCommLib.openS7online("S7ONLINE")
fds(Connection).wfd = fds(Connection).rfd

If fds(Connection).rfd > 0 Then
    di(Connection) = New libnodave.PlcCommLib.daveInterface(fds(Connection), "IF1", 0, libnodave.PlcCommLib.daveProtoS7online, libnodave.PlcCommLib.daveSpeed187k)
    res = di(Connection).initAdapter

     If res = 0 Then
        di(Connection).setTimeout(500000)
        dc(Connection) = New libnodave.PlcCommLib.daveConnection(di(Connection), 2, 0, 0)
        res = dc(Connection).connectPLC
        If res = 0 Then
            Return True
        Else
            Call Disconnect(Connection)
            Return False
        End If
    Else
        libnodave.PlcCommLib.closePort(fds(Connection).rfd)
        Return False
    End If
Else
    Return False
End If

In dieser Zeile:
Code:
fds(Connection).rfd = libnodave.PlcCommLib.openS7online("S7ONLINE")
kommt folgende Fehlermeldung:

Code:
Ein Aufruf an die PInvoke-Funktion "libnodave
libnodave.PlcCommLib::openS7online" 
hat das Gleichgewicht des Stapels gestört. 
Wahrscheinlich stimmt die verwaltete PInvoke-Signatur nicht mit der 
nicht verwalteten Zielsignatur überein. 
Überprüfen Sie, ob die Aufrufkonvention und die Parameter 
der PInvoke-Signatur mit der nicht verwalteten Zielsignatur übereinstimmen.

Ich habe keine Ahnung was ich damit anfangen kann...

Gruß
Stefan

Opens7online hat 2 parameter! Der zweite erwartet die hwnd deines febsters, kannst aber auch 0 übergeben!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
2 Parameter..!?

Opens7online hat 2 parameter! Der zweite erwartet die hwnd deines febsters, kannst aber auch 0 übergeben!

Hi und Danke für deine Antwort. Ich hatte in früheren Beiträgen auch gesehen, das 'OpenS7online' 2 Parameter hat. Seltsamerweise hat's bei mir nur einen:
Code:
Aus dem Objektkatalog:
Public Shared Function openS7online(ByVal portName As String) As Integer
 
Hallo Stefan,

der nachfolgende Code ermöglicht einen Verbindungsaufbau zwischen einem PC mit VB.Net und einer S7-CPU über einen USB-Adapter mit dem s7online-Protokoll von libnodave.
Die öffentlich deklarierten Funktionen habe ich aus dem Libnodave-Modul für VB6.0 bzw. Excel entnommen. Ich habe den Modul lediglich auf VB.Net "umgestellt".
Code:
[SIZE=3][COLOR=#0000ff][SIZE=3][COLOR=#0000ff][SIZE=2]Public[/SIZE][/COLOR][/SIZE][/COLOR][/SIZE] [COLOR=#0000ff][COLOR=#0000ff]Declare[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] openS7online [COLOR=#0000ff][COLOR=#0000ff]Lib[/COLOR][/COLOR] [COLOR=#800000][COLOR=#800000]"libnodave.dll"[/COLOR][/COLOR] ([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] peer [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]String[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] handle [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Public[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Declare[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] daveNewInterface [COLOR=#0000ff][COLOR=#0000ff]Lib[/COLOR][/COLOR] [COLOR=#800000][COLOR=#800000]"libnodave.dll"[/COLOR][/COLOR] ([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] fd1 [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] fd2 [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] name [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]String[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] localMPI [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] protocol [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] speed [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Public[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Declare[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] daveInitAdapter [COLOR=#0000ff][COLOR=#0000ff]Lib[/COLOR][/COLOR] [COLOR=#800000][COLOR=#800000]"libnodave.dll"[/COLOR][/COLOR] ([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] di [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Public[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Declare[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] daveNewConnection [COLOR=#0000ff][COLOR=#0000ff]Lib[/COLOR][/COLOR] [COLOR=#800000][COLOR=#800000]"libnodave.dll"[/COLOR][/COLOR] ([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] di [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] mpi [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] Rack [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] Slot [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Public[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Declare[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] daveConnectPLC [COLOR=#0000ff][COLOR=#0000ff]Lib[/COLOR][/COLOR] [COLOR=#800000][COLOR=#800000]"libnodave.dll"[/COLOR][/COLOR] ([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] dc [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR]
[/COLOR]
[COLOR=#0000ff][COLOR=#0000ff]Private[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Sub[/COLOR][/COLOR] btnAufbau_Click([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] sender [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] System.Object, _
[COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] e [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] System.EventArgs) [COLOR=#0000ff][COLOR=#0000ff]Handles[/COLOR][/COLOR] btnAufbau.Click
[COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] MPIAdressLocal [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] = 0, MPIAdressPLC [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] = 2
[COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] Slot [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] = 0, Rack [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] = 2
ph = openS7online([COLOR=#800000][COLOR=#800000]"S7online"[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]Me[/COLOR][/COLOR].Handle)
di = daveNewInterface(ph, ph, [COLOR=#800000][COLOR=#800000]"IF1"[/COLOR][/COLOR], MPIAdressLocal, daveProtoS7online, daveSpeed187k)
res = daveInitAdapter(di)
dc = daveNewConnection(di, MPIAdressPLC, Rack, Slot)
res = daveConnectPLC(dc)
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Sub[/COLOR]
[/COLOR]

Gruß
Earny
 
Hi und Danke für deine Antwort. Ich hatte in früheren Beiträgen auch gesehen, das 'OpenS7online' 2 Parameter hat. Seltsamerweise hat's bei mir nur einen:
Code:
Aus dem Objektkatalog:
Public Shared Function openS7online(ByVal portName As String) As Integer

Das war früher so, vielleicht hast du eine ältere Version von libnodave.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
D a n k e

Hallo und Danke an alle!

Ich habe mir (damals) eine Wrapper-DLL aus dem VB6 Modul gemacht und nie wieder angepasst.
Nachdem ich die Funktion "openS7online" angepasst habe (jetzt C#), läuft's.

Obwohl der Verbindungsaufbau nicht immer beim ersten Versuch klappt, kann aber auch am Adapter liegen. Aber egal, das Programm ist nur für den internen Gebrauch, um Fehlermeldungen auszulesen { immer wenn der Programmierer weg ist, läuft die Anlage nicht mehr ;-) }.

Nochmal danke, Gruß
Stefan
 
Zurück
Oben