# Libnodave mit Helmholz USB -> MPI Adapter ?



## bool (8 April 2010)

Hallo,

seit ein paar Tagen (eher Nächten) beschäftige ich mit libnodave (0.8.4.5)unter Visual Basic 2008 Express.

Mein Ziel ist es einen Datenlogger zu programmieren, welcher konfigurierbare Datenbereiche (E,A,M,DB...) einer S7 317 PN/DP in ebenfalls konfigurierbaren Formaten (bin, dez,hex...) in eine simple Datei schreibt. Dies möchte ich absichtlich mit einem autarken Programm erstellen, da ich ohne Excel oder ähnliches auskommen möchte.

So weit so gut, über ISO TCP funktioniert das ganze schon mal prinzipiell, jedoch scheitere ich bei dem Versuch über den SSW7 USB nach MPI Adapter von Helmholz Daten zu lesen. Dieser steht zwar nicht direkt in der libnodave Kompatibilitätsliste, ich hatte aber irgendwo hier im Forum gelesen, dass auch Adapter von Helmholz u.U. funktionieren sollen.

Mit dem Protokoll "*libnodave.daveProtoMPI*" scheint die SPS Verbindung erfolgreich initiert zu werden (der Rückgabewert von "di.initAdapter" und "dc.connectPLC" ist "0", also eigentlich alles ok, auch leuchten beim Adapter alle Kommunikations LEDs). Beim Leseversuch per "dc.readBytes" oder auch das Multiread "dc.execReadRequest" jedoch schmiert mir das Programm mit Speicherverletzungsfehler (Rückgabewert von "dc.execReadRequest": FFFFFFFB) ab, auch lässt sich die "erfolgreich" geöffnete Verbindung nicht mehr schliessen.


Mit den Protokollen "*libnodave.daveProtoMPI2*" oder "*libnodave.daveProtoMPI3*" bekomme ich leider gar keine Verbindung aufgebaut. 

Bei "*libnodave.daveProtoMPI2*" ist der Rückgabewert von "di.initAdapter" "0" und "dc.connectPLC" ist Fehlercode "3", ich weiss jedoch leider nicht wo die Fehlercodes dokumentiert sind. Wenn mir vielleicht jemand mitteilen könnte wo die Rückgabewerte inkl Fehlercodes der libnodave Funktionen und auch deren Parameteroptionen aufgelistet sind würde mir dies evtl auch schon helfen den Fehler eingrenzen zu können. 


Bei "*libnodave.daveProtoMPI3*" ist der Rückgabewert von "di.initAdapter" bereits "FFFFFFFF"hex, ich weiss jedoch wie gesagt leider nicht was dieser Code aussagt

Ich habe bei allen Versuchen, sowohl 19,2 als auch 187,5kBaud probiert, auch habe ich die Tests einmal auf einem Rechner ohne und einmal mit installiertem SIMATIC Manager durchgeführt. 

Sind evtl. auch bereits Adapter von PI (z.B. USB oder Ethernet nach MPI) bekannt welche mit libnodave funktionieren?


Ich bin für jede neue Erkenntnis offen und dankbar.


Gruss,

bool


----------



## Key (8 April 2010)

Morgen bool,

probiere doch mal die mitgelieferten Beispiele. Dort kann man auch die Debugausgabe aktivieren und evtl. mehr erfahren auch Zottel und die anderen können dann evtl. erkennen wo er abschmiert.

Zu den Fehlercodes. Da gibt es nicht viel aber ein paar stehen in den C-Sourcen drin, musst du mal stöbern. Generell steht da unter anderem...

"Result codes. Generally, 0 means ok,
>0 are results (also errors) reported by the PLC
<0 means error reported by library code."

Soll also heißen das der Fehlercode 3 bei dir beispielsweise von der PLC kommt was nun genau der ausssagt kann ich dir leider nicht sagen.

Gruß Key


----------



## bool (8 April 2010)

Hallo Key,

danke für die prompte Antwort.

Ich werde mal versuchen das "simpleMPI.vb" und "simpleMPI2.vb" in Betrieb nehmen und sehen was ich dort für Debuginformetionen bekomme.

Was mich verwundert, ist dass wenn ich die vorcompilierten Beispiele starte wie z.B. simpleMPI2.exe, welche sich bei den libnodave Dot.NET Beispielen befinden, diese mit der Systemmeldung "*****.exe hat ein Problem festgestellt und muss beendet werden." abstürzen.

Macht es eventuell sogar Sinn bezüglich der Nutzung von libnodave auf C++ oder C# (jeweils Studio 2008 Express) umzusatteln um in den Genuss der ausführlicheren Dokumentation und aktuelleren Beispiele und Updates zu gelangen? Ich frage, da ja wie Du schreibst die nodave libs in C (oder ggf einer dessen "Derivate") geschrieben werden und ich mir dann vorstellen könnte, dass man dann ggf. hier auf dem aktuelleren Stand ist es vielleicht auch mehr Besipiele gibt oder bin ich da auf dem Holzweg?

Danke auf jeden Fall für die Info mit den positiven Fehlercodes, ich wusste noch nicht, dass es sich hierbei um direkte SPS Meldungen handelt.
Falls jemand weiss wo diese dokumentiert sind wäre ich für diese Info ebenfalls super dankbar.

Wie schaut es eigentlich mit dem Entwicklungsstand von "S7Online" aus, ist dieser schon für eine verlässliche Nutzung und mehrstündige Polls bereit und was ist die einfachste Variante dies kostenlos zu nutzen? 
Habe im Forum was von Netpro gelesen, braucht man hierfür dann eine Lizenz oder geht dies dann auch im "Demomode"?

Soweit allen noch ein frohes Programmieren und natürlich einen schönen Abend.

Gruss,

bool


----------



## Key (9 April 2010)

Macht meines erachtens wenig sinn auf Express2008 um zu steigen. Da sich die Doku der Bibliothek ja nicht ändern. Die Sourcen beilben die gleichen.

Also ich nutze C# und da ist der Wrapper auch nicht dokumentiert. Also bringt es dir nur etwas in der herkömlichen Doku nach zu schaun aber die ist doch auch bei dir mit dabei. Zwar etwas dürftig aber für den Anfang sollte die reichen. Sie ist im doc Verziechnis deines linodave 0.8.4.5 Ordners enthalten.

Gruß Key


----------



## bool (9 Mai 2010)

Leider habe ich noch immer die selben Probleme bei der MPI Kommunikation.
Kann mir vielleicht jemand sagen was der Fehlercode "-5" bei dc.execReadRequest() bedeutet, da ich wie in Thread http://www.spsforen.com/showthread.php?t=35827
beschrieben habe leider von libnodave.daveStrerror(res) nur kryptische Zeichen zurück bekomme.

Danke bereits im voraus.

Gruss,

bool


----------



## Jochen Kühner (9 Mai 2010)

*schaust...*

schaust hier:

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

mit der dlll hier geht auch der error code...


----------



## bool (9 Mai 2010)

Jochen Kühner schrieb:


> schaust hier:
> 
> http://sps-forum.de/showthread.php?t=35760
> 
> mit der dlll hier geht auch der error code...


 
Danke für den Link, doch leider ist mir nicht ganz klar wie ich die libnodave.net.cs in mein VB.net (VB2008 Express) Projekt integrieren soll.
Über Verweise (siehe Screenshot im Anhang) kann ich keine cs Dateien einbinden und einfach in dll umbenennen scheint auch nicht zu gehen. Gehe ich richtig der Annahme, dass es sich hier um eine C-Sharp Datei handelt?
Wie kann ich diese dann einbinden? 


Über eine kurze Info wäre ich sehr dankbar.


Gruss,

bool


----------



## Jochen Kühner (10 Mai 2010)

bool schrieb:


> Danke für den Link, doch leider ist mir nicht ganz klar wie ich die libnodave.net.cs in mein VB.net (VB2008 Express) Projekt integrieren soll.
> Über Verweise (siehe Screenshot im Anhang) kann ich keine cs Dateien einbinden und einfach in dll umbenennen scheint auch nicht zu gehen. Gehe ich richtig der Annahme, dass es sich hier um eine C-Sharp Datei handelt?
> Wie kann ich diese dann einbinden?
> 
> ...




Da ist doch eine msnet.bat im libnodave zipfile, die bildet aus dem csharpfile die dll!


----------



## bool (10 Mai 2010)

Jochen Kühner schrieb:


> Da ist doch eine msnet.bat im libnodave zipfile, die bildet aus dem csharpfile die dll!


 
Danke schon mal für die Info. 

Das mit der Batchdatei war mir neu. Werde ich morgen in aller Frühe versuchen, da ich jetzt bereits etwas schwächel und so wie ich gesehen habe erst noch den C-Compiler installieren und die Pfade in der Batchdatei umbiegen muss da ich noch die gleichen Meldungen wie mein Leidensgenosse vor mir erhalte (siehe http://sps-forum.de/showpost.php?p=63917&postcount=5)

Gruss und schon mal eine gute Nacht,

bool


----------



## Jochen Kühner (10 Mai 2010)

bool schrieb:


> Danke schon mal für die Info.
> 
> Das mit der Batchdatei war mir neu. Werde ich morgen in aller Frühe versuchen, da ich jetzt bereits etwas schwächel und so wie ich gesehen habe erst noch den C-Compiler installieren und die Pfade in der Batchdatei umbiegen muss da ich noch die gleichen Meldungen wie mein Leidensgenosse vor mir erhalte (siehe http://sps-forum.de/showpost.php?p=63917&postcount=5)
> 
> ...




Du kannst aber genausogut ein Neues C# projekt in Visual Studio anlegen, Typ Klassenbibliothek und dann die Source einfügen und Kompilieren, oder in einer Solution, dann dieses Projekt als refernez in dein VB Projekt einfügen!


----------



## bool (10 Mai 2010)

Jochen Kühner schrieb:


> Du kannst aber genausogut ein Neues C# projekt in Visual Studio anlegen, Typ Klassenbibliothek und dann die Source einfügen und Kompilieren, oder in einer Solution, dann dieses Projekt als refernez in dein VB Projekt einfügen!


 
Inzwischen habe ich die libnodave.net.dll erstellen können.
Hierfür habe ich C# 2008 Express installiert und dann nach dem c#-compiler (csc.exe) gesucht, da die msnet.bat im libnodave zipfile immer noch meckerte. 

Die msnet.bat beinhaltet mehrere Einträge:
csc /t:library libnodave.net.cs
vbc /r:libnodave.net.dll VB/simpleMPI.vb
csc /r:libnodave.net CS/testMPI.cs
csc /r:libnodave.net CS/testS7online.cs

Damit der compiler aus der libnodave.net.cs die erwünschte libnodave.net.dll erzeugte musste ich eine neue Batchdatei im Verzeichnis des c# -compilers (bei mir: "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727")mit einem Eintrag erstellen und diese ausführen: 
csc /target:library libnodave.net.cs

Ich hoffe, dass die anderen drei Einträge für die Erzeugung der dll nicht von Belang sind, oder was bedeuten diese?

Die Funktion libnodave.daveStrerror(res) bringt nun auch die lange vermissten Meldungen im Klartext (wenn auch nicht immer ein Text dafür existert, aber ich habe auf jeden Fall keine Viereckchen oder kryptische Symole mehr). Danke hierfür an alle die mir hierbei geholfen haben.

Das Problem mit dem Daten auslesen mittels des MPI Adapter ist jedoch leider noch im argen. Zwar scheint die Verbindung wie bereits beschrieben zum Adapter aufgebaut werden zu können, beim Lesen von Daten mittels der Funktion dc.execReadRequest() bekomme ich aber immer noch den Fehlercode -5 (Klartext "no message defined")

Grade eben habe ich auch noch mit einem einzelnen Leseauftrag mittels der Funktion dc.ReadBytes() probiert, doch auch hier das selbe Ergebnis (Errorcode -5).

Falls es vieleicht zur Lösungsfindung hilfreich ist, hier die MPI Adapterdaten:
Hersteller: Helmholz
Adapter: SSW7-USB (MPI<>USB)
Der Adapter ist nach dem dieser am USB Port eingesteckt wurde (wenn Treiber installiert) über einen virtuellen COM Port (Prolific USB-to-Serial Bridge) eigentlich wie übere einen echten physikalischen COM Port ansprechbar.
Der Adapter verfügt über 3 LEDs (Power,Active,Connect).
Nachdem die Verbindung aufgebaut ist (alle res = 0) leuchten alle drei LEDs, Lesefunktionen scheitern jedoch wie beschrieben mit Fehlercode -5.

Ich hoffe hier kann mir jemand weiterhelfen.

Gruss,

bool

---------------------------------------------------------------------------------------------------------------
Auch mein S7Online Problem ist jedoch leider hiermit noch nicht gelöst (siehe http://sps-forum.de/showthread.php?t=35831).
Zwar bekomme ich nun ebenfalls die openS7online(S7ONLINE, HWND) Deklaration inkusive hWnd aber ein Variablenzugriff nach dem ersten Verbindungsabbau und erneuten Verbindungsaufbau funktioniert leider immer noch nicht. Dies möchte ich jedoch in diesem Thread nicht vertiefen, doch freue ich mich über jeden Post in dortigem Thread.


----------

