# Fragen zu Libnodave, die immer wieder kommen



## Zottel (15 März 2010)

Ich bekam eben die 7. PN vom selben User. Ich kopiere sie mal hierhin und beantworte sie hier. Dann haben vielleicht auch andere was davon.


> Ich weiß du bist sehr beschäftigt und kannst dich nicht um Kleinigkeiten  kümmern aber um die Entwicklung von Libnodave zu fördern forderst du  uns in der Doku auf dir Feedback zu geben.


Au, Scheiße, ja...


> Falls die Antwort auf diese Frage nein ist, brauchst du nicht  weiterlesen:


Andernfalls kann mich auch keiner dazu zwingen...


> Kann man über S7online DBs lesen?


Ja. Wenn welche da sind.


> Falls ja:
> Ich arbeite mit Libnodave über S7online, da ich einen CP5611 verwende.  Eingänge, Ausgänge und Merker lesen klappt tadellos. Großes Lob und  Respekt...


Wenn Eingänge, Ausgänge und Merker klappen, muß es grundsätzlich in Ordnung sein. Dann solten DBs gar kein Problem darstellen.


> Jedoch beim Lesen von DBs bekomme ich stets res = 10.


Auszug aus nodave.h:

#define daveResItemNotAvailable 10        /* means a a piece of data is not available in the CPU, e.g. */
                        /* when trying to read a non existing DB */


> In der Anleitung  wird darauf hingewiesen, dass es sich hierbei vermutlich um einen Fehler  in der SPS handelt und mit daveStrerror bekommt man genauere hinweise.  Es werden jedoch nur Vierecke ausgegeben.


Sorry für die Vierecke! Als ich das programmiert habe, nahm .NET an, daß ein Standard-String (8-Bit-Zeichen) zurückgegeben wird. Neuere .NET-Versionen erwarten heute Unicode. DIE haben das geändert, nicht ICH. Ich programmiere kein .NET und weiß nicht, wie ich es so machen kann, daß altes UND neues .NET zufrieden sind.
Vielleicht kann da jemand helfen?


> ich programmiere in c# daher sieht die Funktion beispielsweise wie folgt  aus:
> dc.readBytes(libnodave.daveDB,5,68,4, by)
> //by ist ein bytearray


Da muß ein DB 5 vorhanden sein. Er muß mindestens 68+4 = 72 Bytes lang sein.


----------



## RobiHerb (20 März 2010)

*Mal sehen*

Mit den Strings werde ich mal sehen, was sich da machen lässt, allerdings nicht sofort. Ich hatte so ein Problem auch vor kurzem mit der Umsetzung einer DOS Zeichensatz Antwort aus einer alten SPS in die .NET Umgebung.


----------



## Jochen Kühner (22 März 2010)

*Ganz einfach....*

Einfach in der Davestrerror

Marshal.PtrToStringAuto(_daveStrerror(res));

durch

Marshal.PtrToStringAnsi(_daveStrerror(res));

ersetzen!


----------

