# Libnodave



## stblme01 (30 Januar 2008)

Hallo kurze frage, gibts es in der Libnodave Bibliothek eine Funktion zum Strings lesen und schreiben? Ich habe keine gefunden.

Und wie sieht es einer funktion zur überprüfung der Verbindung aus?
Ist so eine Funktion vorhanden?


----------



## Gerhard Bäurle (30 Januar 2008)

Hallo,

das ist ein klassischer Fall für die Verwendung der *Such-Funktion* 
des Forums.


----------



## stblme01 (30 Januar 2008)

Finde es irgendwie einfach nicht.

Mir reicht schon ein "ja" oder "nein" als antwort auf meine fragen.


----------



## Zottel (30 Januar 2008)

bevor ich auch noch danach suche, gebe ich lieber die Antwort:
Nein, es ist keine Funktion zum lesen von Strings vorhanden.
Ja, man kann mit Libnodave Strings lesen.

Eine solche Funktion macht keinen Sinn:
Strings sind für Libnodave einfach eine Reihe von Bytes. Die kannst du alle mit daveReadBytes lesen. Ich vergesse immer, wie die Zahl der Zeichen festgelegt wird, 0 am Ende oder Länge vorangestellt. Im ersten Fall müßte Libnodave sowieso den ganzen Speicher auslesen und dann nach der 0 suchen, im zweiten würde man mit zwei separaten Lesezugriffen nur Zeit verschwenden. Lies einfach soviele Bytes wie für den String reserviert sind. Nur wenn das mehr wären als ein Aufruf von daveReadBytes übertragen kann, würde es sich lohnen, die tatsächliche Länge auszuwerten.


----------



## paddy_cmd (11 März 2009)

Hallo alle miteinander!
@ Zottel danke für die Libnodave!

Ich habe da mal auch ne frage zu Strings:

Momentan bin ich an einem Projekt mitdem ich Daten aus einer S7-400
auslese.Nun bin ich an die Hürde mit den Strings gestoßen!

Nach 5 sec. überlegen und 5 zeilen Code spuckt mein programm mir meinen String aus!Aber immer nur maximal 6 Zeichen!

Habe ich in meinem DB string[50] angelegt und gefüllt liest er mir immer noch nur 6 zeichen aus ich kann machen was ich will!

In der .dll steht ja drin das der pointer immer auf das nächste byte springt!
aber warum nicht über das 6.byte hinaus?


```
'Aufruf:
txtKassettenName.Text = com.GetVal(DBOffset + cbKassettenAuswahl.SelectedIndex, 6, 4)

'Funktion:
Private Function getstring() As String 

        Dim i As Integer
        Dim zeichen As String
        zeichen = ""

        For i = 0 To 4
            zeichen = zeichen & Chr(dc.getU8) 
        Next i
        Return zeichen

    End Function
```
Das in der For schleife nur 4 steht ist beabsichtigt! Aber wenn ich den Wert auf 100 ändere,dann leist er mir die ersten 6 zeichen aus obwohl noch 44 im String stehen!
Die funktion getU8 rückt sich ja automatisch eins weiter!
Ich weis net warum der immer nur 6 Zeichen liest!
kann mir von euch jemand helfen?


----------



## Zottel (12 März 2009)

paddy_cmd schrieb:


> Hallo alle miteinander!
> @ Zottel danke für die Libnodave!
> 
> Ich habe da mal auch ne frage zu Strings:
> ...


Mit diesem Code kann ich nichts sagen. Was passiert denn nach 6.Zeichen? Gibt es einen Fehler? Oder sinnlose Zeichen? 
Was bewirkt das '&' in VB.Net? Zeichenverkettung???
Probier mal:

```
'Funktion:
Private Function test()

        For i = 0 To 100
            Console.write(dc.getU8) // oder wie das heißt....
        Next i
    End Function
```
Das oder so ähnlich sollte dir einfach die numerischen Werte der Bytes im Puffer von dc. liefern.
Vielleicht geht bei der Umwandlung gewisser Werte (0, Steuerzeichen, alles <32) durch Chr() was schief?
Ob diese Werte von der SPS kamen oder einfach undefinierte/alte Inhalte des Puffers sind, ist dc.getU8 egal.
Nach einem erfolgreichen Aufruf von dc.readBytes(..,..,..len) enthält der Puffer eben len gültige Bytes.
Nach einem erfolgreichen Aufruf von dc.readBytes() steht der Pufferzeiger auf dem ersten Byte. In C könnte man mit getU8 auch beliebig über das Ende des Puffers hinauslesen. Ob .NET oder Windows oder der neueste Pentium das irgendwann merkt, weiß ich nicht.


----------



## Rainer Hönle (12 März 2009)

Zottel schrieb:


> Was bewirkt das '&' in VB.Net? Zeichenverkettung???


Genau das.


----------



## paddy_cmd (12 März 2009)

Wenn ich einen String habe der string[50] lang ist,und den Auslese geht der zwar z.b 100 mal durch meine For durch, liest aber nur 6 zeichen aus und dann nichtsmehr! Es kommt einfach nichts mehr! In Vb sieht das so aus solange er am rödeln ist steht zeichen = "ASHGIJ      der string ist noch net geschlossen aber wenn er dann die schleifendurchläufe fertig durch hat dan steht da zeichen = "DJHSDF"  ;   Gibt es ne beschränkung von getU8?
Oder DC?
Ich kenne mich mit dem ganzen Kram net so dolle aus!Bin mich da am reinhacken!Morgen kann ich den CODE von meiner Connection posten!
Evtl ist d noch der Wurm drin!

Bytes,Int,Floats,DInt kann ich alles ohne Probs lesen,, den text auch da ich nur 5 zeichen benötige, aber zu wissen warum wäre auch net schlecht!

Danke schon mal im voruS!

gr333z paddycmd


----------



## Rainer Hönle (12 März 2009)

Einfach mal den Rückgabewert von dc.getU8 einer Zwisvhenvariablen zuweisen und ansehen (beim Debuggen), was hier zurückkommt. Vielleicht ist dies ja das Problem.


----------

