# Libnodave mit VB.net über S7Online



## Olli0285 (19 Mai 2010)

Hallo,

ich bin im moment an meinem Technikerprojekt und mölchte eine Visualisierung mit VB.net erstellen.

Mein Problem ist das ich beim Aufruf von "libnodave.opens7online("S7Online") einen Fehler erhalte. Ich denke es liegt an der Parameterübergabe, konnte aber nichts darüber im Forum finden. Screenshot mit Fehlermeldung ist im Anhang.

Libnodave.dll ist im Ordener System32 und ein Verweis auf die net.dll ist auch vorhanden.

Libnodave Version 0.8.4.5
S7 313c
USB Adapter X5678

Wäre schön wenn mir jemand helfen könnte, da die Zeit langsam knapp wird!

MfG

Olli


----------



## PN/DP (19 Mai 2010)

Hallo Olli,

hast Du auf Deinem PC eine Siemens-Software installiert, die S7Online zur Verfügung stellt (z.B. Step7, Softnet PG, ...)?
Hast Du in der Systemsteuerung das Objekt "Setting the PG-PC Interface"?

Gruß
Harald


----------



## Olli0285 (19 Mai 2010)

Hallo Harald,

ja ich hab Step7 installiert und ich kann auch die PG/PC Schnittstelle einstellen.

MfG

Olli


----------



## Jochen Kühner (19 Mai 2010)

*Hm...*

Kannst mal mit meiner LibNoDave Connection Library versuchen, da ist auch ein Demo Programm dabei..

http://www.sps-forum.de/showthread.php?t=35761

ansonsten gibts hier auch noch ein Update der Libnodave.net mit welcher du auch den S7 Online Fehler auslesen kannst...

http://www.sps-forum.de/showthread.php?t=35760


----------



## Earny (19 Mai 2010)

Hallo,

ich habe in einem älteren Beitrag hier im Forum folgenden Funktionsaufruf für openS7online gefunden:

fds.rfd = libnodave.openS7online ("S7Online", Form1.Handle)

Übergeb doch mal zusätzlich das zweite Argument.


Gruß
Earny


----------



## Olli0285 (19 Mai 2010)

Hallo Earny,

das hab ich auch schon gesehen und probiert funktioniert aber leider nicht. Trotzdem danke!

MfG

Olli


----------



## Jochen Kühner (19 Mai 2010)

Olli0285 schrieb:


> Hallo Earny,
> 
> das hab ich auch schon gesehen und probiert bfunktionierrt aber leider nicht. Trotzdem danke!
> 
> ...



probiers mal mit meiner geupdateten libnodave.net.dll und dem hwnd!


----------



## Olli0285 (19 Mai 2010)

Hallo Jochen,

ich werds morgen Mal probieren und Rückmeldung geben.

MfG

Olli


----------



## Jochen Kühner (19 Mai 2010)

Olli0285 schrieb:


> Hallo Jochen,
> 
> ich werds morgen Mal probieren und Rückmeldung geben.
> 
> ...



Also wenn du die neuste libnodave benutzt sollte es damit auf jeden Fall gehen.

Kannst aber auch immer noch mein Connection Library verwenden, da musst du dich um die LibNoDave internas nicht kümmern!!  ;-)


----------



## oliverlorenz (20 Mai 2010)

Ich würde es mal mit einem seriellen Adapter probieren.
Ich habe noch keine Verbindung über USB hinbekommen.
Hatte auch schon mal hier im Forum danach gefragt aber es schein da 
noch keine Lösung zu geben.


----------



## Earny (20 Mai 2010)

Hallo,
den folgende Verbindungsaufbau und -abbau habe ich mit dem Siemens-USB-Adapter 6ES7 972-0CB20-0XA0 erfolgreich eingesetzt.
Ich setze allerdings nicht den Wrapper (libnodave.net.dll) ein. Dafür benötigt mein VB.Net den LibnodaveModul.vb.
Den LibnodaveModul.vb habe ich hier angehängt. Vor dem Einsatz des Moduls muss dieser am besten in das aktuelle Projektverzeichnis kopiert und dann in die VB-Projektverwaltung aufgenommen werden.
Die Aufnahme geschieht bei VB2005 in: "Projekt" - "Vorhandenes Element hinzufügen...".
Der Verweis auf die libnodave.net.dll sollte sicherheitshalber entfernt werden (falls er vorhanden war).

Klassenweit gültige Variablen:

```
[COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] ph [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] [COLOR=#008000][COLOR=#008000]'Informationen zum Kommunikationskanal[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] di [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] [COLOR=#008000][COLOR=#008000]'Informationen zum Interface[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] dc [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] [COLOR=#008000][COLOR=#008000]'Informationen zur CPU[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] res [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] = 0
```
 

Verbindungsaufbau:

```
[COLOR=#0000ff][COLOR=#0000ff]Private[/COLOR][/COLOR] Sub S7Online()
[COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] localMPI [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] = 0
[COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] plcMPI [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)
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] ph = 0 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR]
[/COLOR]di = daveNewInterface(ph, ph, [COLOR=#800000][COLOR=#800000]"IF1"[/COLOR][/COLOR], localMPI, daveProtoS7online, daveSpeed187k)
res = daveInitAdapter(di)
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] res = 0 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR]
[/COLOR]dc = daveNewConnection(di, plcMPI, 0, 0)
res = daveConnectPLC(dc)
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]If[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]If[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] Sub
```
 
Verbindungsabbau:

```
[COLOR=#0000ff][COLOR=#0000ff]Private[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Sub[/COLOR][/COLOR] VerbindungAbbauen()
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] dc <> 0 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR]
[/COLOR]res = daveDisconnectPLC(dc)
[COLOR=#0000ff][COLOR=#0000ff]Call[/COLOR][/COLOR] daveFree(dc)
dc = 0
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]If[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] di <> 0 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR]
[/COLOR]res = daveDisconnectAdapter(di)
[COLOR=#0000ff][COLOR=#0000ff]Call[/COLOR][/COLOR] daveFree(di)
di = 0
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]If[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] ph = 0 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR]
res = closeS7online(ph)
ph = 0
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]If[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Sub[/COLOR]
[/COLOR]
```
 
Etwas sonderbar ist die Tatsache, dass "ph" beim Verbindungsaufbau mit openS7Online den Wert "0" erhält?! 
Bemerkung: Beim Verbindungsaufbau mit MPI2 oder ISO-over-TCP erhält "ph" immer einen Wert größer 0?!


Gruß
Earny


----------



## Olli0285 (20 Mai 2010)

Vielen Dank für eure Hilfe!

Mit der der geupdateten Libnodave.net.dll von Jochen hat es funktioniert! Dem Wrapper der beim Download dabei war fehlt ein Übergabeparameter.

Bei weiteren Fragen, die wohl noch auftreten, werde ich nochmal posten.

MfG

Olli


----------

