# libnodave - lokale MPI Adresse bei MPI/MPI2 Protokoll?



## bool (30 Mai 2010)

Hallo,

ich hatte in den letzten Wochen erfolgreich mit meinem VB.NET Programm via libnodave mit diversen (jeweils immer nur mit einer!) S7-300er SPSen (jeweils MPI Adr. "2") und einem RS232 -> MPI Adapter erfolgreich verbunden und Daten auslesen können. Die lokal eingestellte Adresse verwendeten MPI Adapter war hierbei die Adresse "0" und ausser der SPS mit der Adresse "2" gab es keine weiteren MPI Teilnehmer im Netz. 
Als ich mich nun an eine S7 315 angehängt hatte, welche bereits mit einem MP277 Panel mit WinCCFlexible kommuniziert, funktionierte zwar der erste Verbindungsaufbau an sich, das Auslesen aus der SPS schlug jedoch meist fehl. Auch die Funktion "listReachablePartners()" reflektierte nur die eigene MPI Adresse "0", die Adresse "1" des MP277 und die Adresse "2" der SPS wurden nicht zurückgegeben. Sobald auf dem MP277 das WinCCFlexible Projekt heruntergefahren wurde, konnte hingegen die SPS wieder gesehen werden und auch Daten aus solchiger ausgelesen werden.
Interessanter Weise brachte die Funktion "listReachablePartners()" erst die alle Teilnehmer (SPS + MP277) zurück nachdem ich die lokale Adresse meines MPI Adapters auf "3" geändert habe. Auch die Adressen 4,5,6,7 funktionierten anscheinend problemlos. Wenn ich dagegen eine Adresse im oberen Adressraum (z.B. "22") als Lokaladresse parametriert habe, kam es wieder zu selbigem Effekt wie bei Adresse "0".

Ist hierzu etwas bekannt?


Gruss,

bool


----------



## Jochen Kühner (30 Mai 2010)

*Mhmmm...*

Besteht das Problem nur mit diesem Protokoll oder auch mit S7Online? Hast du das Problem auch im Simatic Manager?

Denke nicht das sonst dazu was bekannt ist. 

Ich kann mir mal die Seriellen Protokolle anschauen wenn ich mit dem S7Online-Zeugs weiter bin (Also Routing und TCP/IP funktioniert). Ich hab auch noch einen Seriellen Adapter im Büro rumliegen... (Dauert aber mindestens noch 2 Wo)


----------



## bool (30 Mai 2010)

Jochen Kühner schrieb:


> Besteht das Problem nur mit diesem Protokoll oder auch mit S7Online? Hast du das Problem auch im Simatic Manager?
> 
> Denke nicht das sonst dazu was bekannt ist.
> 
> Ich kann mir mal die Seriellen Protokolle anschauen wenn ich mit dem S7Online-Zeugs weiter bin (Also Routing und TCP/IP funktioniert). Ich hab auch noch einen Seriellen Adapter im Büro rumliegen... (Dauert aber mindestens noch 2 Wo)


 
Mit dem S7Online Protokoll konnte ich mich ohne Probleme mit der lokalen Adresse "0" selbst über den Siemens RS232->MPI Adapter mit der SPS verbinden und habe dann auch über die Funktion "listReachablePartners()" auch alle Teilnehmer inkl. MP277 zurückbekommen. 

Da der selbe Adapter über das S7Online in diesem Fall problemlos läuft dürfte es auch kein Problem mit dem SIMATIC Manager geben, muss ich aber auch nochmals prüfen.
Der einzige Nachtteil mit S7Online ist dann hier bei mir, dass ich wie in einem anderen Thread diskutiert keine automatische Wiederherstellung der S7Online Verbindung vornehmen kann, da bei mir (VB.NET in Verbindung mit Windows) das Handle zur Laufzeit des Programms nicht mehr freigegeben wird und das Programm erst geschlossen und wieder neu gestartet werden muss bevor eine neue S7Online Verbindung via libnodave aufgebaut werden kann.

Die automatische Wiederherstellung der Verbindung (Verbindungsaufbau nach x Lesefehlern in Folge + parametrierbarere zyklischer Versuch die Verbindung wieder erneut aufzubauen) dagagen funktioniert prinzipiell bei den MPI Protokollen ganz gut, so dass nach einem Protokollfehler oder Verbindungsunterbrechung durch Ziehen des MPI Kabels die Verbindung selbsttätig wieder aufgebaut wird.

Das Seltsame bei dem beschreibenen Phänomen ist, dass wenn das WinCCFlexible Projekt auf dem MP277 aktiv ist, die Verbindung (inkl. dc.connectPLC() ) anscheinend aufgebaut werden kann, die MPI Teilnehmer jedoch nicht gelistet werden und dann auch meist der erste (teilweise auch alle) Funktionsaufruf(e) von dc.execReadRequest() mit unkommentierten Fehlercode schiefgeht.
Dies geschieht übrigens unabhängig davon, ob im WinCCFlexible Projekt das HMI als "einzige Maser im Netz" konfiguriert wurde oder nicht (Dies war zunächst mein erster Verdacht). Ich werde die kommenden Wochen dies auf jeden Fall noch bei anderen Anlagen gleicher oder ähnlischer Konstellation prüfen um auszuschliessen, dass es sich hier um einen Einzelfall handelt.

Gruss,

bool


----------



## Jochen Kühner (30 Mai 2010)

bool schrieb:


> Mit dem S7Online Protokoll konnte ich mich ohne Probleme mit der lokalen Adresse "0" selbst über den Siemens RS232->MPI Adapter mit der SPS verbinden und habe dann auch über die Funktion "listReachablePartners()" auch alle Teilnehmer inkl. MP277 zurückbekommen.
> 
> Da der selbe Adapter über das S7Online in diesem Fall problemlos läuft dürfte es auch kein Problem mit dem SIMATIC Manager geben, muss ich aber auch nochmals prüfen.
> Der einzige Nachtteil mit S7Online ist dann hier bei mir, dass ich wie in einem anderen Thread diskutiert keine automatische Wiederherstellung der S7Online Verbindung vornehmen kann, da bei mir (VB.NET in Verbindung mit Windows) das Handle zur Laufzeit des Programms nicht mehr freigegeben wird und das Programm erst geschlossen und wieder neu gestartet werden muss bevor eine neue S7Online Verbindung via libnodave aufgebaut werden kann.
> ...



Mal sehen was ich nachstellen kann...


----------



## bool (30 Mai 2010)

Jochen Kühner schrieb:


> Mal sehen was ich nachstellen kann...


 
Anbei mal noch ein Auszug aus meinem Debugfile, falls dies für die Nachstellung von Nutzen ist:

*1) lokale Adr. "0" + MP277 "1" + S7 315 "2"*

Fehlverbindungungsbeispiel mit Protokoll MPI (!!!obwohl connectPLC i.O. bringt!!!): 
28.05.2010 09:10:24:500 Start Connection via MPI ...
28.05.2010 09:10:24:500 MPI COM Port: COM1
28.05.2010 09:10:24:531 MPI COM Baudrate: 38.4k
28.05.2010 09:10:24:531 MPI COM Parity: odd
28.05.2010 09:10:24:546 MPI Local Address: 0
28.05.2010 09:10:24:546 MPI Remote Address: 2
28.05.2010 09:10:24:546 MPI Baudrate: 187.5k
28.05.2010 09:10:24:562 MPI Reconnecting after: 5 read errors
28.05.2010 09:10:24:578 MPI Reconnecting Interval: 20000 ms
28.05.2010 09:10:24:578 Open MPI Connection (before 1st call of libnodave.setPort)... fds.rfd=452
28.05.2010 09:10:24:593 Open MPI Connection (libnodave.setPort)... fds.rfd=612
28.05.2010 09:10:24:750 Open MPI Connection (di.initAdapter)... res=0 - ok
*28.05.2010 09:10:25:765 Open MPI Connection (di.listReachablePartners) ... Result: 0*
*28.05.2010 09:10:25:781 No MPI device detected*
*28.05.2010 09:10:26:015 Open MPI Connection (dc.connectPLC)... res=0 - ok*
28.05.2010 09:10:26:015 Open MPI Connection successfull
...

Fehlverbindungungsbeispiel mit Protokoll MPI2: 
27.05.2010 18:47:20:984 Start Connection via MPI2 ...
27.05.2010 18:47:20:984 MPI COM Port: COM1
27.05.2010 18:47:20:984 MPI COM Baudrate: 19.2k
27.05.2010 18:47:20:984 MPI COM Parity: odd
27.05.2010 18:47:21:000 MPI Local Address: 0
27.05.2010 18:47:21:000 MPI Remote Address: 2
27.05.2010 18:47:21:000 MPI Baudrate: 187.5k
27.05.2010 18:47:21:000 MPI Reconnecting after: 5 read errors
27.05.2010 18:47:21:000 MPI Reconnecting Interval: 20000 ms
27.05.2010 18:47:21:000 Open MPI Connection (before 1st call of libnodave.setPort)... fds.rfd=0
27.05.2010 18:47:21:015 Open MPI Connection (libnodave.setPort)... fds.rfd=508
27.05.2010 18:47:24:015 Open MPI Connection (di.initAdapter)... res=0 - ok
*27.05.2010 18:47:26:015 Open MPI Connection (di.listReachablePartners) ... Result: 0*
*27.05.2010 18:47:26:046 No MPI device detected*
*27.05.2010 18:47:30:046 Open MPI Connection (dc.connectPLC) failed ... Errorcode: 4 - no message defined!*
27.05.2010 18:47:31:062 Close MPI Connection (dc.disconnectPLC)... res: -1 - no message defined!
27.05.2010 18:47:35:062 Close MPI Connection (di.disconnectAdapter)... IntPtr=0
27.05.2010 18:47:35:078 Close MPI Connection (closePort)... res=1 - No data from I/O module
...

*2)lokale Adr. "0" + S7 315 "2" (MP277 "1" noch immer am MPI Bus, aber WinCCFlexible runtergefahren)*
27.05.2010 18:48:33:796 Start Connection via MPI2 ...
27.05.2010 18:48:33:796 MPI COM Port: COM1
27.05.2010 18:48:33:812 MPI COM Baudrate: 38.4k
27.05.2010 18:48:33:812 MPI COM Parity: odd
27.05.2010 18:48:33:812 MPI Local Address: 0
27.05.2010 18:48:33:812 MPI Remote Address: 2
27.05.2010 18:48:33:828 MPI Baudrate: 187.5k
27.05.2010 18:48:33:828 MPI Reconnecting after: 5 read errors
27.05.2010 18:48:33:828 MPI Reconnecting Interval: 20000 ms
27.05.2010 18:48:33:843 Open MPI Connection (before 1st call of libnodave.setPort)... fds.rfd=508
27.05.2010 18:48:33:843 Open MPI Connection (libnodave.setPort)... fds.rfd=512
27.05.2010 18:48:34:203 Open MPI Connection (di.initAdapter)... res=0 - ok
*27.05.2010 18:48:35:078 Open MPI Connection (di.listReachablePartners) ... Result: 126*
*27.05.2010 18:48:35:093 Open MPI Connection - detected MPI device addresses: 0 2 *
*27.05.2010 18:48:35:234 Open MPI Connection (dc.connectPLC)... res=0 - ok*
27.05.2010 18:48:35:250 Open MPI Connection successfull
...

*3) lokale Adr. "3" + MP277 "1" + S7 315 "2"*
28.05.2010 09:10:47:171 Start Connection via MPI ...
28.05.2010 09:10:47:187 MPI COM Port: COM1
28.05.2010 09:10:47:203 MPI COM Baudrate: 38.4k
28.05.2010 09:10:47:203 MPI COM Parity: odd
28.05.2010 09:10:47:218 MPI Local Address: 3
28.05.2010 09:10:47:234 MPI Remote Address: 2
28.05.2010 09:10:47:234 MPI Baudrate: 187.5k
28.05.2010 09:10:47:250 MPI Reconnecting after: 5 read errors
28.05.2010 09:10:47:250 MPI Reconnecting Interval: 20000 ms
28.05.2010 09:10:47:265 Open MPI Connection (before 1st call of libnodave.setPort)... fds.rfd=612
28.05.2010 09:10:47:281 Open MPI Connection (libnodave.setPort)... fds.rfd=620
28.05.2010 09:10:47:796 Open MPI Connection (di.initAdapter)... res=0 - ok
*28.05.2010 09:10:48:890 Open MPI Connection (di.listReachablePartners) ... Result: 126*
*28.05.2010 09:10:48:906 Open MPI Connection - detected MPI device addresses: 1 2 3 *
*28.05.2010 09:10:49:109 Open MPI Connection (dc.connectPLC)... res=0 - ok*
28.05.2010 09:10:49:125 Open MPI Connection successfull
...

*4) lokale Adr. "4" + MP277 "1" + S7 315 "2"*
28.05.2010 09:00:42:171 Start Connection via MPI2 ...
28.05.2010 09:00:42:187 MPI COM Port: COM1
28.05.2010 09:00:42:187 MPI COM Baudrate: 38.4k
28.05.2010 09:00:42:187 MPI COM Parity: odd
28.05.2010 09:00:42:203 MPI Local Address: 4
28.05.2010 09:00:42:218 MPI Remote Address: 2
28.05.2010 09:00:42:218 MPI Baudrate: 187.5k
28.05.2010 09:00:42:218 MPI Reconnecting after: 5 read errors
28.05.2010 09:00:42:234 MPI Reconnecting Interval: 20000 ms
28.05.2010 09:00:42:234 Open MPI Connection (before 1st call of libnodave.setPort)... fds.rfd=440
28.05.2010 09:00:42:250 Open MPI Connection (libnodave.setPort)... fds.rfd=512
28.05.2010 09:00:42:843 Open MPI Connection (di.initAdapter)... res=0 - ok
*28.05.2010 09:00:43:921 Open MPI Connection (di.listReachablePartners) ... Result: 126*
*28.05.2010 09:00:43:937 Open MPI Connection - detected MPI device addresses: 1 2 4 *
*28.05.2010 09:00:44:093 Open MPI Connection (dc.connectPLC)... res=0 - ok*
28.05.2010 09:00:44:125 Open MPI Connection successfull
...

*5) lokale Adr. "12" + MP277 "1" + S7 315 "2"*
28.05.2010 09:01:32:234 Start Connection via MPI2 ...
28.05.2010 09:01:32:250 MPI COM Port: COM1
28.05.2010 09:01:32:250 MPI COM Baudrate: 38.4k
28.05.2010 09:01:32:265 MPI COM Parity: odd
28.05.2010 09:01:32:265 MPI Local Address: 12
28.05.2010 09:01:32:281 MPI Remote Address: 2
28.05.2010 09:01:32:281 MPI Baudrate: 187.5k
28.05.2010 09:01:32:281 MPI Reconnecting after: 5 read errors
28.05.2010 09:01:32:296 MPI Reconnecting Interval: 20000 ms
28.05.2010 09:01:32:296 Open MPI Connection (before 1st call of libnodave.setPort)... fds.rfd=516
28.05.2010 09:01:32:312 Open MPI Connection (libnodave.setPort)... fds.rfd=440
28.05.2010 09:01:32:562 Open MPI Connection (di.initAdapter)... res=0 - ok
*28.05.2010 09:01:33:578 Open MPI Connection (di.listReachablePartners) ... Result: 0*
*28.05.2010 09:01:33:593 No MPI device detected*
*28.05.2010 09:01:33:734 Open MPI Connection (dc.connectPLC) failed ... Errorcode: 3 - the desired item is not available in the PLC (200 family)*
*...*

Hoffe das hilft ein bischen bei der Analyse weiter.

Gruss,

bool


----------

