User Passwort
 Passwort speichern Passwort vergessen?
 
 
 
 Alle Foren
 PDA-Dev :: Windows Mobile
 Windows Mobile - Allgemeines
 Problem mit serieller Datenübertragung

Hinweis: Sie müssen sich registrieren, um eine Antwort schreiben zu können.
Um sich zu registrieren, klicken Sie hier. Die Registrierung ist kostenlos!

Auflösung:
Benutzer:
Passwort:
Funktion:
Format: FettKursivUnterstreichenDurchstreichen Links ausrichtenZentrierenRechts ausrichten Horizontale Line Hyperlink einfügenEmail einfügenBild einfügen Code einfügenZitat einfügenListe einfügen Spoiler einfügen Infos zur Code-Formatierung
   
Nachricht:

Smilies
Achtung [!] Aufgeregt [angry] Big Smile [:D] Computer... [comp]
Durchgedreht [O] Idee [i!] Jubel [jump] Ratlos [:I?]
Schüchtern [8)] Smile [:)] Sprachlos [:O!] Traurig [:(]
Wütend [:(!] Zunge [:P] Zustimmung [^] Zwinkern [;)]

     HTML ist AUS | Forum Code ist AN
Tags:
Bereits vorhandene Tags: SerialPort
Wiederholen Sie wichtige Tags oder fügen Sie neue Tags hinzu.
Trennen Sie mehrere Tags durch Kommas voneinander ab.

  Signatur anhängen.
Dieses Thema abonnieren.
    

  Übersicht  
Useless user
Erstellt am: 04.11.2010 : 09:09:06 Uhr
Hallo,
es ist in letzter Zeit ziemlich still hier geworden, aber vlt. lies das jemand der mir helfen kann. Es geht darum über den seriellen Port Daten zwischen PC und WinCe-Gerät auszutauschen (natürlich gibt es hunderttausend sinnvollere Wege das zu tun, aber der Kunde will das so und lässt sich auf keine Diskussion ein).
Meine aktuelle Lösung segmentiert die Daten und baut sie auf der anderen Seite wieder zusammen. Hierbei ergibt sich folgendes Phänomen:
- wenn ich die Blockgröße 1 KB wähle funktionert es sauber, ist aber inakzeptabel langsam
- wenn ich die Blockgrößen größer als 1 KB wähle, kommt die Übertragung nicht sauber durch, d.h. es gehen Zeichen verloren und zwar nicht am Ende sondern so ungefähr in der Mitte der Übertragung
Die Frage ist nun, wie kann ich stabil UND halbwegs schnell die Daten übertragen. Liegt es am Algorithmus oder an den Einstellungen des Ports. Ich vermute irgendwie es ist ein Puffer-problem. Ich habe echt wenig Hintergrundwissen auf diesem Gebiet.
Vielen Dank!
PS: Baudrate ist 115200,scheint aber keinen Einfluss auf das Problem zu haben.
Mein Code:
 
Public Function GetOpenPort() As SerialPort
Dim port As New SerialPort(_portName, _baudRate, Parity.Even, 8, StopBits.One)
port.DtrEnable = True
port.RtsEnable = True
' 8 KB Buffer
port.ReadBufferSize = 8 * 1024
port.WriteBufferSize = 8 * 1024
port.ReadTimeout = 3000
port.Open()
Return port
End Function
' &HFF ist das Kennzeichen für das Ende des Blocks
Private Sub WriteLine(ByVal port As SerialPort, ByVal line As String)
Dim data As Byte()
data = System.Text.Encoding.Default.GetBytes(line)
port.Write(data, 0, data.Length)
port.Write(New Byte() {&HFF}, 0, 1)
End Sub
Private Function ReadLine(ByVal port As SerialPort) As String
WaitForData(port)
Dim data As New List(Of Byte)
Dim b As Byte
Do
b = port.ReadByte()
If (b = &HFF) Then Exit Do
data.Add(b)
Loop
Dim line As String
line = System.Text.Encoding.Default.GetString(data.ToArray(), 0, data.Count)
Return line
End Function
 

Die 1 letzen Antworten (Neue zuerst)
Useless user
Erstellt am: 09.11.2010 : 16:02:35 Uhr
Naja, dann musste ich mir wieder selbst helfen. In diesen Forum hatte jemand das selbe Problem:
http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-compact-framework/19456/SerialPort-control-using-RTS-CTS-seems-to-loose
Der Eingangspuffer läuft über wenn man mehr als 1024 Byte überträgt und FlowControl funktioniert überhaupt nicht! :-(
Hab dann ein Verfahren implementiert, bei dem der Empfänger quittiert das er 1024 Bytes empfangen hat - solange wartet der Sender mit dem senden des nächstens Blocks.



pda-dev.de

Quicklinks: Foren-Übersicht | Developer-News | Suche | Impressum

© just-works! Software

Zum Anfang der Seite

Snitz Forums 2000