OnNotification - aus Stream einen String auslesen - erste Zeichen fehlt

twincatter

Level-1
Beiträge
137
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

hab mal wieder ein Problem mit der ADS-Kommunikation bzw. mit .NET

Der OnNotification-Event kommt in meinem VB.NET Programm an wenn sich eine überwachten Variable ändert --> ok
Bei allen Datentypen kann ich dann problemlos mit z.B. binReader.ReadBoolean.ToString() die Daten auslesen--> ok
Wenn ich jedoch mit binReader.ReadString eine Zeichenfolge auslesen will fehlt immer das erste Zeichen --> warum?
Mit binReader.ReadChars(200) kommt die komplette Zeichenfolge an.

Ich könnte jetzt natürlich ReadChars verwenden, dann würde es erst mal laufen.
Ich bin mit aber nicht sicher ob ich irgendwo einen Fehler mache.

Müßte sich aus einem ADS-Stream mit ReadString die gesamte Zeichenfolge auslesen lassen?

Vielen Dank, Michael

 
Hallo Michael,

wenn ich Dich richtig verstehe hast du den String in TwinCAT erzeugt und willst ihn in .net auslesen.
Dann könnt die Ursache der unterschiedliche Umgang mit Strings sein.
In TwinCAT sind Strings Nullterminiert. Was bedeutet, dass du das Ende des Strings mit dem Ascii-Zeichen für Null erkennst.
In .net wird dagegen am anfang der Zeichenkette die Länge des Strings angegeben.
Wenn ich richtig liege, denkt .net das dein erstes Zeichen aus dem String die Länge des Strings ist.
Kannst ja mal die Länge des Strings auslesen.
Wenn dann dort der Ascii-Wert deines erstes Stringszeichen steht habe ich wohl recht.

Gruß

dummy
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nimmst die "AdsBinaryReader.ReadPlcString" Method und gibst die Länge des Strings an.
Bei .ReadString ist das erste Zeichen eigentlich ein Präfix. Wenn als die erste Zahl z.B. 8 ist so liest man
damit nur 8 Zeichen aus. Ist zumindest in C# so.

Versuchs mal
 
Hallo,

mit der Deklaration "Private binReader As TwinCAT.Ads.AdsBinaryReader" funktioniert das Auslesen von Strings wie gewünscht. (Danke art_anlagen :)).

Mit der Deklaration "'Private binReader As System.IO.BinaryReader" fehlte, wie beschreiben, immer das erste Zeichen.

Weshalb in den Beckhoff-Beispielen "System.IO.BinaryReader" verwendet wird kann ich nicht nachvollziehen :confused:.

Werde jedenfalls ab jetzt nur noch TwinCAT.Ads.AdsBinaryReader einsetzen.!

Vielen Dank, Michael
 
Zurück
Oben