| |
VB.NET - Ein- und UmsteigerProblem 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 | |
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. | |
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. | |
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. | |
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 | |
Re: Problem mit encoding? | | | Autor: Lupus52 | Datum: 16.12.16 23:06 |
| Danke - verstanden. Werde es testen.
Schönes Wochenende | |
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 | |
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 | |
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 | |
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 | |
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. | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|
|
|
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
|
|