# Libnodave - S7ONLINE - Traeger-USB



## StefanK (23 September 2011)

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:


```
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:

```
fds(Connection).rfd = libnodave.PlcCommLib.openS7online("S7ONLINE")
```
kommt folgende Fehlermeldung:


```
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


----------



## Jochen Kühner (23 September 2011)

StefanK schrieb:


> 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.
> ...



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


----------



## StefanK (23 September 2011)

*2 Parameter..!?*



Jochen Kühner schrieb:


> 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:

```
Aus dem Objektkatalog:
Public Shared Function openS7online(ByVal portName As String) As Integer
```


----------



## Earny (24 September 2011)

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".

```
[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


----------



## Ralle (24 September 2011)

StefanK schrieb:


> 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:
> 
> ```
> Aus dem Objektkatalog:
> ...



Das war früher so, vielleicht hast du eine ältere Version von libnodave.


----------



## StefanK (26 September 2011)

*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


----------

