# Verbindungsaufbau mit USB-Adapter und Libnodave-MPI2-Protokoll



## Earny (6 September 2011)

Hallo,

ich würde gern für die Kommunikation zwischen dem PC und der S7-CPU den USB-Adapter (6ES7 972-0CB20-0XA0) mit MPI2-Protokoll einsetzen.

Ich benutze nur die libnodave.dll - ohne libnodave.net.dll - unter VB.Net, VB6.0 und Excel.

Mit den nachfolgenden Anweisungszeilen klappt der Verbindungsaufbau über das S7online-Protokoll:

```
[COLOR=black][FONT=Courier New][SIZE=1]Dim MPIAdressLocal As Integer = 0, MPIAdressPLC As Integer = 2[/SIZE][/FONT][/COLOR]
[LEFT][COLOR=black][FONT=Courier New][SIZE=1]Dim Slot As Integer = 0, Rack As Integer = 2[/SIZE][/FONT][/COLOR]
[COLOR=black][FONT=Courier New][SIZE=1]ph = openS7online("S7online", Me.Handle)[/SIZE][/FONT][/COLOR]
[COLOR=black][FONT=Courier New][SIZE=1]di = daveNewInterface(ph, ph, "IF1", MPIAdressLocal, daveProtoS7online, daveSpeed187k)[/SIZE][/FONT][/COLOR]
[COLOR=black][FONT=Courier New][SIZE=1]res = daveInitAdapter(di)[/SIZE][/FONT][/COLOR]
[COLOR=black][FONT=Courier New][SIZE=1]dc = daveNewConnection(di, MPIAdressPLC, Rack, Slot)[/SIZE][/FONT][/COLOR][/LEFT]
[COLOR=black][FONT=Courier New][SIZE=1]res = daveConnectPLC(dc)[/SIZE][/FONT][/COLOR]
```
 
Ich würde lieber das MPI2-Protokoll einsetzen. Nachfolgend habe ich die Anweisungszeilen aufgelistet, die mit den alten Siemens-PC-Adaptern für den Anschluss an die COM1-Schnittstelle problemlos funktionieren.

```
[COLOR=black][FONT=Courier New][SIZE=1]Dim Rack As Integer = 0, Slot As Integer = 2[/SIZE][/FONT][/COLOR]
[LEFT][COLOR=black][FONT=Courier New][SIZE=1]Dim MPIAdressPLC As Integer = 2, MPIAdressLocal As Integer = 0[/SIZE][/FONT][/COLOR]
[COLOR=black][FONT=Courier New][SIZE=1]ph = setPort("COM1", 38400, Asc("O"))[/SIZE][/FONT][/COLOR]
[COLOR=black][FONT=Courier New][SIZE=1]di = daveNewInterface(ph, ph, "IF1", MPIAdressLocal, daveProtoMPI2, daveSpeed187k)[/SIZE][/FONT][/COLOR]
[COLOR=black][FONT=Courier New][SIZE=1]Call daveSetTimeout(di, 1000000)[/SIZE][/FONT][/COLOR]
[COLOR=black][FONT=Courier New][SIZE=1]res = daveInitAdapter(di)[/SIZE][/FONT][/COLOR]
[COLOR=black][FONT=Courier New][SIZE=1]dc = daveNewConnection(di, MPIAdressPLC, Rack, Slot)[/SIZE][/FONT][/COLOR]
[COLOR=black][FONT=Courier New][SIZE=1]res = daveConnectPLC(dc)[/SIZE][/FONT][/COLOR][/LEFT]
```
 
Weiß vielleicht jemand, wie ich das MPI2-Protokoll für den Einsatz mit dem USB-Adapter abändern müsste?
Das will bei mir nicht klappen.


Gruß
Earny


----------



## Jochen Kühner (6 September 2011)

Es gibt doch 3 verschiede serielle MPI Protokolltypen. Hast du denn die anderen auch probiert?


----------



## Earny (6 September 2011)

Hallo Jochen,

ich könnte natürlich auch noch das MPI- und das MPI3-Protokoll ausprobieren.
Mir ist aber überhaupt nicht klar, was bei "ph = setPort(..., ..., ...)" bei den drei Argumenten angegeben werden soll. Beim S7online-Protokoll sind hier nur zwei Argumente vorhanden!?

Gruß
Earny


----------



## Jochen Kühner (6 September 2011)

Earny schrieb:


> Hallo Jochen,
> 
> ich könnte natürlich auch noch das MPI- und das MPI3-Protokoll ausprobieren.
> Mir ist aber überhaupt nicht klar, was bei "ph = setPort(..., ..., ...)" bei den drei Argumenten angegeben werden soll. Beim S7online-Protokoll sind hier nur zwei Argumente vorhanden!?
> ...



Schau doch mal welche übertragungsrate du für deinen USB Adapter unter PG/PC Schnittstelle eingestellt hast. Diese Zahl gehört dann an den Uten wert! Der erste ist dein Comport (hoffe den hast du richtig) und das dritte ist die Parität, was da für den Adapter richtig ist, musst du probieren, ich weiss es nicht. Da kann glaub E oder O rein.

Wenn du rumspielen willst mit welchen werten es klappt, kannst du z.B. mit meiner JFK-VarTab alle möglichen Kombinationen einfach durchtesten. (Das Tool nutzt auch libnodave (http://jochensserver.dyndns.org/wordpress/?page_id=58))


----------



## Earny (6 September 2011)

Hallo Jochen,

ich muss meine positive Rückmeldung von gestern leider korrigieren.
Es funktioniert nicht. Ich hatte mich getäuscht, weil es keine Fehlermeldung 
beim Verbindungsaufbau gab. Tatsächlich kommt aber keine Verbindung zustande.
Jedenfalls geht kein Austasch von Nutzdaten, d.h. es ist nicht möglich,
nach dem "Verbindungsaufbau" Werte aus der Steuerung zu lesen oder 
Werte in die Steuerung zu schreiben.
Mit dem S7online-Protokoll von Libnodave klappt das über den USB-Adapter
problemlos.
Der nachfolgende Verbindungsaufbau, bei dem das MPI2-Protokoll mit dem
USB-Adapter eingesetzt werden soll, funktioniert also nicht!!!
Der Fehler dürfte in der Zeile "ph = setPort(..., ..., ...)" liegen, weil der
Rückgabewert der Funktion setPort( ) den Wert -1 hat.

```
[SIZE=3][COLOR=#0000ff][SIZE=3][COLOR=#0000ff][SIZE=1]Dim[/SIZE][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=1] 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[/SIZE]
[SIZE=1][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[/SIZE]
[SIZE=1]ph = setPort([COLOR=#800000][COLOR=#800000]"USB"[/COLOR][/COLOR], 187500, Asc([COLOR=#800000][COLOR=#800000]"O"[/COLOR][/COLOR]))[/SIZE]
[SIZE=1]di = daveNewInterface(ph, ph, [COLOR=#800000][COLOR=#800000]"IF1"[/COLOR][/COLOR], MPIAdressLocal, daveProtoMPI2, daveSpeed187k)[/SIZE]
[SIZE=1]res = daveInitAdapter(di)[/SIZE]
[SIZE=1]dc = daveNewConnection(di, MPIAdressPLC, Rack, Slot)[/SIZE]
[SIZE=1]res = daveConnectPLC(dc)[/SIZE]
```
 
Ich habe auch verschiedene Einstellungen in der PG/PC-Schnittstelle durchprobiert. 
Auch die Einstellungen für die Parität, d.h. Asc("O") oder Asc("E") funktionieren beide nicht.

Gruß
Earny


----------

