Zitat von Haudruferzappeltnoch: „im Tutorial zu Streams steht man kann nur mit davon abgeleiteten Klassen arbeiten.“So isses. Kopiere den Inhalt in einen MemoryStream, den kannst Du als Byte-Array ablegen. docs.microsoft.com/de-de/dotne…memorystream?view=net-6.0
Zitat von Haudruferzappeltnoch: „Wie kopiere ich denn den Inhalt?“Stream.CopyTo() docs.microsoft.com/de-de/dotne…-copyto(system-io-stream) Du musst Dir mal im ObjectBrowser oder in den Docs ansehen, was da alles für Methoden zur Verfügung stehen. Da findest Du gewiss ohne das Forum die passende.
Zitat von Haudruferzappeltnoch: „ich weiß nicht was das StopBit ist, oder die Baudrate, oder der Handshake oder oder oder“Wichtiger ist die port.NewLine-Property, die gibt die Zeilenende-Zeichen vor, dann kannst Du im DataReceived-Event mit .ReadLine arbeiten. docs.microsoft.com/de-de/dotne…?view=dotnet-plat-ext-6.0 Dazu musst Du nur die Beschreibung des Dagtentransferprotokolls der Gegenstelle lesen. Oder beide Seiten programmieren.
Zitat von Haudruferzappeltnoch: „Ist ein Zeichen ein Byte?“Jein. Du kannst das SerialPort einmal betreiben zur Übertragung von Strings. Da sind die Zeichen Chars entsprechend des eingestellten Encodings. Die Lese- und Schreib-Befehle arbeiten mit Strings, gesendet werden sie entsprechend des eingestellten Encodings. Andererseits kannst Du das SerialPort betreiben zur Übertragung von Byte-Arrays, dann sind die behandelten Zeichen Bytes. Auf der Leitung selbst (die kannst Du mit einem Sniffer-Tool…
Definiere Zitat von Haudruferzappeltnoch: „auf die Daten gucken“Du kannst eine Gegenstelle implementieren und einfach ohne Event in einem Timer-Tick- oder Button-Click-Event die vorhandenen Dagten auslesen wie auch immer (Bytes oder String) und Dir ansehen.
Zitat von Haudruferzappeltnoch: „(das kann von der Gegenstelle ausgehend schon ein String sein?)“Das sollte in der Beschreibung der Gegenstelle stehen. Das nennt sich Übertragungsprotokoll.
Zitat von Haudruferzappeltnoch: „Wann bekommt das Gerät denn selbst ein Signal in diesem Prozess?“Wenn Du das programmtechnisch organisierst. Oder ist das bloß ein Sender aber kein Empfänger?
Zitat von Haudruferzappeltnoch: „Das sind aber immer Bytes hätte ich gedacht“In der untersten Ebene des Systems gehen da ausschließlich Bytes aufs Kabel. Höhere Programmiersprachen (z.B. .NET) machen dann daraus ggf. Strings, wenn mit Encoding und den Strring-Methoden gearbeitet wird.
Zitat von Naifu: „Wenn du wissen willst was das für Bytes sind, wandele den String halt um.“Was soll das? Mit dem falschen Encoding geht das vor die Hose. Wenn er die Bytes haben will, liest er sie mit Public Function Read (buffer As Byte(), offset As Integer, count As Integer) As Integer aus.
Zitat von Haudruferzappeltnoch: „warum will ich das denn an unterschiedlichen Stellen im Buffer haben?“Beispiel: Es wird ein Bild übertragen in Häppchen zu 1000 Byte. Wenn das Bild 1000000 Byte lang ist, hast Du 1000 Übertragungen á 1000 Byte. Und jedes Häppchen muss unmittelbar auf das vorherige Häppchen in den Zielspeicher eingetragen werden, damit das Format noch stimmt.
@Haudruferzappeltnoch AHa. SerialPort.BaseStream ist für andere Klasse gedacht, wenn die einen Stream übergeben bekommen wollen. Für Dich ist der (gegenwärtig) uninteressant, lass ihn einfach links liegen.
@Haudruferzappeltnoch Keine Ahnung. Wenn das DataReceived-Event kommt, sind Daten verfügbar, da musst Du nicht die Anzahl der verfügbaren Bytes abfragen. Da der Scanner einen Text sendet, solltest Du auch mit den String- nicht aber mit Byte-Methoden des SerialPorts arbeiten: SerialPort.ReadExisting() docs.microsoft.com/de-de/dotne…?view=dotnet-plat-ext-6.0 Da Deine Strings mit 00 enden (das ist die C-String-Ende-Kennung) solltest Du diese noch abschneiden: VB.NET-Quellcode (4 Zeilen)und feddich.
Zitat von Haudruferzappeltnoch: „b(SP1.BytesToRead - 1)“Das ist leider in VB.NET so, da alte BASIC-Versionen 1 als Startindex haben. Deshalb legt VB.NET die Arrays um ein Element größer an, damit alte Algotithmen da laufen.
Zitat von Haudruferzappeltnoch: „Threading.Thread.Sleep(1)“ist eventuell schlecht, da dieser Thread angehalten wird. Probier mal, ob Task.Wait() besser funktioniert.
Zitat von Haudruferzappeltnoch: „eingestellt ebenso beim Scanner“Du kannst bei Deinem Scanner das Zeilenende-Zeichen vorgeben? Das habe ich noch nicht erlebt.
@Haudruferzappeltnoch Die Trennzeichen der Tabelle siehen ja etwas fehlgeleitet aus. Ansonsten ist das eine normale ASCII-Zeichen-Tabelle ohne Steuercodes (32 bis 127). Da steht nix drin, was in Bezug zu Deinem Barcodescanner steht.