# [Libnodave] String ind SPS schreiben...



## paddy_cmd (4 Juni 2009)

Hallo leute,
ich habe da ein kleines Problem!

Ich versuche einen String von 5 Zeichen in die SPS in einen DB zu schreiben!
das ganze soll über libnodave und TCP/IP gehen!

verbindung bekomme ich einwandfrei hin, aber nicht das schreiben!

Kann mir jemand irgendwie ne Funktion zukommen lassen die einen string an eine bestimmte adresse schreibt.
Mein Programm wird mit VB.net 2008 erstellt!

Danke im Voraus!


----------



## Rainer Hönle (4 Juni 2009)

Einen String oder  einen S7-String? 
Beim S7-String berücksichtigen, dass wenn dieser 5 Bytes lang ist, 7 Bytes geschrieben werden müssen. Und zwar befindet sich im ersten Byte die Maximallänge und im zweiten Byte die Aktuallänge. Bei Schreiben muss natürlich speziell das erste Byte zuvor gelesen (wenn nicht fix und bekannt) und das zweite Byte unter dessen Berücksichtigung angepasst werden.


----------



## paddy_cmd (4 Juni 2009)

naja ich habe in meinem Vb einen normalen string und der muss in einen S7 String geschreiben werden!


----------



## Rainer Hönle (4 Juni 2009)

Da fehlen dann sicher die ersten beiden Bytes bzw. du schreibst an die Adresse der Längeninformationen.


----------



## paddy_cmd (4 Juni 2009)

hmmm momentan schreibe ich noch nichts!
Ich weis net mit welcher funktion ich das machen soll!


----------



## Ralle (4 Juni 2009)

Ich würde die Bytes schreiben. Funktion wäre daveWriteBytes. Im Prinzip ist es doch egal ob man Strings, Int, Dint, Real schreibt, es sind immer einige Bytes, die halt zusammen einen bestimmten Wert ergeben. Bei String sind es 2 Byte Kopf und dann die Charcodes der einzelnen Zeichen.

Hier noch aus Zottels Hilfe:



> daveWriteBytes
> Write a sequence of bytes from a buffer to PLC memory.
> 
> int daveWriteBytes(daveConnection * dc, int area, int DB, int start, int len, void * buffer);
> ...



Also einen passenden Buffer anlegen, den Kopf und die einzelnen Zeichen in den Buffer (Array) kopieren und dann schreiben, fertig.


----------



## Manni01 (18 Juni 2009)

*Hier eine .NET-Funtion....*

...die einen String in ein S7-kompatibles ByteArray wandelt. Brauchst Du nur noch an die entsprechende Stelle in Deinen SendeBuffer kopieren.


```
[COLOR=#0000ff][COLOR=#0000ff]Public[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Shared[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] StringToS7String([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] Wert [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]String[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] MaxS7Length [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR]()
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] Wert.Length > MaxS7Length [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Throw[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]New[/COLOR][/COLOR] ArgumentException([COLOR=#a31515][COLOR=#a31515]"Die Lnge von Parameter 'Wert' darf nicht grer als Parameter 'MaxS7Length' sein"[/COLOR][/COLOR], [COLOR=#a31515][COLOR=#a31515]"Wert, MaxS7Length"[/COLOR][/COLOR])
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] Wert.Length > 254 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Throw[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]New[/COLOR][/COLOR] ArgumentException([COLOR=#a31515][COLOR=#a31515]"Die Lnge von Parameter 'Wert' darf nicht grer als 254 sein"[/COLOR][/COLOR], [COLOR=#a31515][COLOR=#a31515]"Wert"[/COLOR][/COLOR])
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] MaxS7Length < 0 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Throw[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]New[/COLOR][/COLOR] ArgumentException([COLOR=#a31515][COLOR=#a31515]"Parameter 'MaxS7Lenght' darf nicht kleiner als 0 sein"[/COLOR][/COLOR], [COLOR=#a31515][COLOR=#a31515]"MaxS7Length"[/COLOR][/COLOR])
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] MaxS7Length > 254 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Throw[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]New[/COLOR][/COLOR] ArgumentException([COLOR=#a31515][COLOR=#a31515]"Parameter 'MaxS7Lenght' darf nicht grer als 254 sein"[/COLOR][/COLOR], [COLOR=#a31515][COLOR=#a31515]"MaxS7Length"[/COLOR][/COLOR])
[COLOR=#0000ff][COLOR=#0000ff]Try[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] b(MaxS7Length + 1) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] text [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR]() = System.Text.Encoding.ASCII.GetBytes(Wert)
b(0) = [COLOR=#0000ff][COLOR=#0000ff]CType[/COLOR][/COLOR](MaxS7Length, [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR])
b(1) = [COLOR=#0000ff][COLOR=#0000ff]CType[/COLOR][/COLOR](Wert.Length, [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR])
System.Array.Copy(text, 0, b, 2, text.Length)
[COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] b
[COLOR=#0000ff][COLOR=#0000ff]Catch[/COLOR][/COLOR] ex [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] Exception
[COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Nothing[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Try[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR]
[/COLOR]
```
 
Viele Grüße, Manni


----------



## uz71 (3 Juli 2009)

*Einzelne Bits in S7 Db screiben*

Hallo

evt kann mir jemand erklären wie man mit libnodave einzelne Bits in einen S7 DB schreiben kann
z.b. Db100.dbx0.0 mit 1 oder 0 beschreiben

lesen bekomme ich hin
verbindung von pc (excel) zur S7 über TCP/IP aufbauen
daten aus DB lesen und in Excel zellen schreiben alles kein Problem


nur umgekehrt geht es einfach nicht.

also mit einem butten in excel das bit db100.dbx0.0 mit 0 oder 1 zu schreiben

Gruss uz


----------



## Manni01 (8 Juli 2009)

*Neue VB.NET-String-Funktionen*

Als Ergänzung hier nochmal 2 .NET-Funktionen:

S7-String schreiben:

```
[COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<summary>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' Konvertiert einen String in das S7-Stringformat und kopiert ihn in ein Bytearray[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</summary>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="String">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Der zu konvertierende String[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="MaxS7Length">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Die maximale Lnge des Strings in der S7[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="Array">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Das Array in das der konvertierte String kopiert werden soll[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="Address">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Die Startadresse, ab der der konvertierte Wert in das Bytearray kopiert werden soll[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<returns>[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]0 wenn ok, -1 wenn Fehler[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</returns>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<remarks></remarks>[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Public[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Shared[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] SetS7String([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] [String] [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]String[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] MaxS7Length [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByRef[/COLOR][/COLOR] [Array] [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR](), [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] Address [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] [String].Length > 254 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Throw[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]New[/COLOR][/COLOR] ArgumentException([COLOR=#a31515][COLOR=#a31515]"Die Lnge von Parameter '[String]' darf nicht grer als 254 sein"[/COLOR][/COLOR], [COLOR=#a31515][COLOR=#a31515]"[String]"[/COLOR][/COLOR])
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] MaxS7Length < 0 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Throw[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]New[/COLOR][/COLOR] ArgumentException([COLOR=#a31515][COLOR=#a31515]"Parameter 'MaxS7Length' darf nicht kleiner als 0 sein"[/COLOR][/COLOR], [COLOR=#a31515][COLOR=#a31515]"MaxS7Length"[/COLOR][/COLOR])
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] MaxS7Length > 254 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Throw[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]New[/COLOR][/COLOR] ArgumentException([COLOR=#a31515][COLOR=#a31515]"Parameter 'MaxS7Length' darf nicht grer als 254 sein"[/COLOR][/COLOR], [COLOR=#a31515][COLOR=#a31515]"MaxS7Length"[/COLOR][/COLOR])
[COLOR=#0000ff][COLOR=#0000ff]Try[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] [String].Length > MaxS7Length [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR]
[/COLOR][String] = [String].Remove(MaxS7Length - 1)
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]If[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]'Den betreffenden Bereich erstmal initialisieren[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]For[/COLOR][/COLOR] i [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] = 0 [COLOR=#0000ff][COLOR=#0000ff]To[/COLOR][/COLOR] MaxS7Length - 1
[Array].SetValue([COLOR=#0000ff][COLOR=#0000ff]CByte[/COLOR][/COLOR](0), Address + i)
[COLOR=#0000ff][COLOR=#0000ff]Next[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]'Den String in ein ASCII-kodiertes Array wandeln[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] TextArray [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR]() = System.Text.Encoding.ASCII.GetBytes([String])
[COLOR=#008000][COLOR=#008000]'Setzen der maximalen Lnge[/COLOR]
[/COLOR][Array](Address) = [COLOR=#0000ff][COLOR=#0000ff]CType[/COLOR][/COLOR](MaxS7Length, [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR])
[COLOR=#008000][COLOR=#008000]'Setzen der tatschlichen Lnge[/COLOR]
[/COLOR][Array](Address + 1) = [COLOR=#0000ff][COLOR=#0000ff]CType[/COLOR][/COLOR]([String].Length, [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR])
[COLOR=#008000][COLOR=#008000]'Den Text in das ByteArray kopieren[/COLOR]
[/COLOR]System.Array.Copy(TextArray, 0, [Array], Address + 2, TextArray.Length)
[COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] 0
[COLOR=#0000ff][COLOR=#0000ff]Catch[/COLOR][/COLOR] ex [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] Exception
[COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] -1
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Try[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [SIZE=3][COLOR=#0000ff][SIZE=3][COLOR=#0000ff][SIZE=2]Function[/SIZE][/COLOR]
[/SIZE][/COLOR][/SIZE]
```
 
S7-String lesen:

```
[COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<summary>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' Konvertiert aus einem Bytearray einen S7-String in einen String[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</summary>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="Array">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Das Array, von dem der String konvertiert werden soll[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="Address">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Die Startadresse, ab der der String konvertiert werden soll[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<returns>[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Bei Erfolg der konvertierte String, sonst Nothing[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</returns>[/COLOR]
[/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<remarks></remarks>[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Public[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Shared[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] GetS7String([COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] Array [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR](), [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] Address [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]String[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] Address < 0 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Throw[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]New[/COLOR][/COLOR] ArgumentException([COLOR=#a31515][COLOR=#a31515]"Parameter 'Address' darf nicht kleiner als 0 sein"[/COLOR][/COLOR], [COLOR=#a31515][COLOR=#a31515]"Address"[/COLOR][/COLOR])
[COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] Address > Array.Length [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Throw[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]New[/COLOR][/COLOR] ArgumentException([COLOR=#a31515][COLOR=#a31515]"Parameter 'Address' darf nicht grer sein als die Lnge des Arrays"[/COLOR][/COLOR], [COLOR=#a31515][COLOR=#a31515]"Address"[/COLOR][/COLOR])
[COLOR=#0000ff][COLOR=#0000ff]Try[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]Dim[/COLOR][/COLOR] AktLnge [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR] = Array(Address + 1)
[COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] System.Text.Encoding.ASCII.GetString(Array, Address + 2, AktLnge)
[COLOR=#0000ff][COLOR=#0000ff]Catch[/COLOR][/COLOR] ex [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] Exception
[COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Nothing[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Try[/COLOR]
[/COLOR][COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR]
[/COLOR]
```
 
VG, Manni


----------



## Manni01 (8 Juli 2009)

*Funktionen zum Setzen/Rücksetzen von Bits*

Hier noch VB.NET Funktionen für Bit-Operationen:

```
[SIZE=3][/SIZE][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<summary>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' Setzt ein Bit in einem Byte
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</summary>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="Byte">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Das Byte welches bearbeitet wird[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="BitNr">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Die Nummer des Bit's (0-7)[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<returns>[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]0 wenn ok, sonst -1[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</returns>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<remarks></remarks>
[/COLOR][/COLOR][COLOR=#0000ff][COLOR=#0000ff]Public[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Shared[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] SetBit([COLOR=#0000ff][COLOR=#0000ff]ByRef[/COLOR][/COLOR] [Byte] [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] BitNr [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer
[/COLOR][/COLOR][COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] BitNr > 7 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] -1
[Byte] = [Byte] [COLOR=#0000ff][COLOR=#0000ff]Or[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]CByte[/COLOR][/COLOR](&H1 << BitNr)
[COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] 0
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<summary>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' Rcksetzt ein Bit in einem Byte
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</summary>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="Byte">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Das Byte welches bearbeitet wird[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="BitNr">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Die Nummer des Bit's (0-7)[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<returns>[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]0 wenn ok, sonst -1[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</returns>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<remarks></remarks>
[/COLOR][/COLOR][COLOR=#0000ff][COLOR=#0000ff]Public[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Shared[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] ResetBit([COLOR=#0000ff][COLOR=#0000ff]ByRef[/COLOR][/COLOR] [Byte] [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] BitNr [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer
[/COLOR][/COLOR][COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] BitNr > 7 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] -1
[Byte] = [Byte] [COLOR=#0000ff][COLOR=#0000ff]And[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]CByte[/COLOR][/COLOR](&HFF [COLOR=#0000ff][COLOR=#0000ff]Xor[/COLOR][/COLOR] (&H1 << BitNr))
[COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] 0
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<summary>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' Fragt ein Bit in einem Byte ab
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</summary>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="Byte">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Das Byte welches bearbeitet wird[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<param name="BitNr">[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Die Nummer des Bit's (0-7)[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</param>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<returns>[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]Zustand des Bit's wenn ok, sonst -1[/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]</returns>
[/COLOR][/COLOR][COLOR=#008000][COLOR=#008000]''' [/COLOR][/COLOR][COLOR=#808080][COLOR=#808080]<remarks></remarks>
[/COLOR][/COLOR][COLOR=#0000ff][COLOR=#0000ff]Public[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Shared[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR] GetBit([COLOR=#0000ff][COLOR=#0000ff]ByRef[/COLOR][/COLOR] [Byte] [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Byte[/COLOR][/COLOR], [COLOR=#0000ff][COLOR=#0000ff]ByVal[/COLOR][/COLOR] BitNr [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer[/COLOR][/COLOR]) [COLOR=#0000ff][COLOR=#0000ff]As[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Integer
[/COLOR][/COLOR][COLOR=#0000ff][COLOR=#0000ff]If[/COLOR][/COLOR] BitNr > 7 [COLOR=#0000ff][COLOR=#0000ff]Then[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] -1
[COLOR=#0000ff][COLOR=#0000ff]Return[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]CInt[/COLOR][/COLOR]((([Byte] [COLOR=#0000ff][COLOR=#0000ff]And[/COLOR][/COLOR] &H1 << BitNr) >> BitNr) [COLOR=#0000ff][COLOR=#0000ff]And[/COLOR][/COLOR] &H1)
[COLOR=#0000ff][COLOR=#0000ff]End[/COLOR][/COLOR] [COLOR=#0000ff][COLOR=#0000ff]Function[/COLOR][/COLOR]
```
 
VG, Manni


----------

