vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Problem mit encoding? 
Autor: Lupus52
Datum: 16.12.16 13:56

Hallo,

nun habe ich das nächste Problem

Ich fülle einen String mit Bytes, deren Werte teilweise über 127 sind.

Dann sende ich mit SerialPort.write(meinstring)

Auf der anderen Seite kommen alle Bytes mit Wertigkeit ab 128 als Fragezeichen an. Werden also umcodiert auf dezimal 63

Nach dem was ich bis jetzt gelesen habe liegt das an automatischem Encoding. Nur wo und wie kann ich das abstellen.

Ich möchte meine Folge von Steuerbytes (0 bis 255) unverändert auf die andere Seite bekommen
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit encoding? 
Autor: eierlein
Datum: 16.12.16 14:15

Siehe http://www.vbarchiv.net/forum/id22_i99877t99873_ansteuern-der-seriellen-schnittstelle.html

mySerialPort.Encoding = System.Text.Encoding.Default 'Standard ist  ASCII 7-Bit
Oder Bytes (ByteArray) senden.

Beitrag wurde zuletzt am 16.12.16 um 14:20:43 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit encoding? 
Autor: Lupus52
Datum: 16.12.16 15:19

Hallo,

Danke

>mySerialPort.Encoding = System.Text.Encoding.Default 'Standard ist ASCII 7-Bit

Genial einfach - es geht!

Irgendwi bei meiner Stöberei war ich nahe dran. Deshalb ja schon meine fast gezielte Frage nach dem Encoding gestellt.

Irgendwo las ich auch was von "Standard" und suchte also die Alternative. Auf "Default" bin ich nicht gekommen, weil das für mich eben "Standard" heisst. Auch laut Lexikon.

Und eine konkrete Erklärungen zu den ganzen Encodings habe ich auch nicht gefunden. Aber egal - es reicht, wenn es so geht.

>Oder Bytes (ByteArray) senden.

Das wäre mir fast lieber. Dann brüchte ich nicht immer alles umständlich zusammensetzen. Wobei es egal wäre.

Aber ich habe noch nicht gefunden wie das geht. Alle Beispiele sind nur so, wie ich es bis jetzt mache. Also ".write"

_serialPort.BytesToRead /Write habe ich zwar gefunden. Aber das sendet ja kein Array

Vielleicht kannst du mir da auch noch einen Tip geben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit encoding? 
Autor: eierlein
Datum: 16.12.16 15:55

Sieh dir mein Beispiel nochmal an.
Es gibt dort ein Ein-Byte Byte-array.

Ein Mehrbyte Beispiel:
Dim Data() As Byte = {255, 1, 0, 65}
mySerialport.Write(Data, 0, 4)   'Ab Startposition 0 4 Bytes


Beitrag wurde zuletzt am 16.12.16 um 16:12:39 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit encoding? 
Autor: GPM
Datum: 16.12.16 16:15

Hier ein Selbst-Test mit nur einer Schnittstelle:

'1. SerialPort einfügen
'2. Sende-Empfangstest bei einer einzelnen COM-Schnittstelle durch die 
' Verbindung von RD+TD (9p = Pin2+Pin3)
Public Class Form1
    Dim WithEvents Btn As New Button With {.Dock = DockStyle.Bottom, .Text = _
      "Senden", .Height = 30, .Parent = Me}
    Dim Tb As New TextBox With {.Dock = DockStyle.Fill, .Multiline = True, _
    .Parent = Me}
 
    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles _
      Me.Load
        SerialPort1.PortName = "COM5"  'Eigenen Portname einsetzen!
        SerialPort1.Open()  'Zum Testen reichen die Standardeinstellungen
    End Sub
 
    Private Sub SerialPort1_DataReceived(sender As Object, e As _
      System.IO.Ports.SerialDataReceivedEventArgs) Handles _
      SerialPort1.DataReceived
        Dim daten As String = ""
        Do While SerialPort1.BytesToRead > 0
            daten &= SerialPort1.ReadByte.ToString & ","
        Loop
        Me.Invoke(Sub() Tb.Text = daten) 'Invoke nötig, wenn ein Control aus 
        ' einem anderen Thread angesprochen wird!
    End Sub
 
    Private Sub Btn_Click(sender As Object, ByVal e As EventArgs) Handles _
      Btn.Click
        'Dim txt As String = Chr(0) & "123" & Chr(129)
        'Dim b() As Byte = System.Text.Encoding.Default.GetBytes(txt)
        Dim b() As Byte = {0, 48, 49, 50, 129}
        SerialPort1.Write(b, 0, b.Length)   '0,48,49,50,129
    End Sub
End Class
MfG GPM
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit encoding? 
Autor: Lupus52
Datum: 16.12.16 23:06

Danke - verstanden. Werde es testen.

Schönes Wochenende
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit encoding? 
Autor: Lupus52
Datum: 16.12.16 23:10

Die einzige Zeile, die was mit Encoding zu tun, hat ist ausremarkt.
Ich verstehe den Sinn deines Posts leider nicht
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit encoding? 
Autor: GPM
Datum: 16.12.16 23:43

Lupus52 schrieb:
Zitat:


>Oder Bytes (ByteArray) senden.
Das wäre mir fast lieber. Dann brüchte ich nicht immer alles umständlich zusammensetzen.
Wobei es egal wäre.


Hier werden die Daten aus einem Byte-Array gesendet.
Im auskommentierten Teil wird nur ein String in ein Byte-Array gewandelt.
Das Ergebnis ist das Gleiche.
Wenn das so schwer zu verstehen ist, dann ....... vergiss halt das Beispiel.

MfG GPM
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit encoding? 
Autor: Lupus52
Datum: 16.12.16 23:59

Die Antworten gehen halt leider an meiner Frage vorbei. Das hier was gesendet wird ist klar.

Eine Antwort zum Encoding fehlt aber leider in dem großen Beispiel völlig
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit encoding? 
Autor: GPM
Datum: 17.12.16 00:18

Lupus52 schrieb:
Zitat:

Die Antworten gehen halt leider an meiner Frage vorbei. Das
hier was gesendet wird ist klar.
Eine Antwort zum Encoding fehlt aber leider in dem großen
Beispiel völlig


Um Bytes zu senden braucht man kein Encoding.
Um einen Text in Bytes zu wandeln wird hier halt Encoding.Default eingesetzt.

MfG GPM
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit encoding? 
Autor: Lupus52
Datum: 17.12.16 08:36

GPM schrieb:
Zitat:

Lupus52 schrieb:

Um Bytes zu senden braucht man kein Encoding.
Um einen Text in Bytes zu wandeln wird hier halt
Encoding.Default eingesetzt.

MfG GPM


Danke - das war die Info die mir gefehlt hat. Du hast es gut gemeint mit dem riesen Listing. Aber allas Wesentliche und einzig Wichtige nicht erklärt.

Das passiert leider überall im Leben, dass Fachleute anders ticken als der unwissende Fragesteller. Und nur ganz wenige so erklären können, dass es andere auf niedrigerem Level auch verstehen können. Und so schreiben manche 50 Zeilen drumherum ohne das Problem zu lösen. Und andere brauchen 5 Zeilen und die Frage ist verständlich beantwortet.

Nun denn - danke trotzdem.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel