User Passwort
 Passwort speichern Passwort vergessen?
 
 
 
 Alle Foren
 PDA-Dev :: Windows Mobile
 Windows Mobile - Allgemeines
 Problem mit serieller Datenübertragung
Autor Vorheriges Thema Thema Nächstes Thema  

Useless user

PDA-Spezialist


465 Beiträge

Erstellt am: 04.11.2010 :  09:09:06 Uhr  Profil anzeigen  Besuche Useless user's Homepage  Antwort mit Zitat
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
 


Bearbeitet von: Useless user am: 04.11.2010 09:10:55 Uhr
   

Useless user

PDA-Spezialist


465 Beiträge

Erstellt  am: 09.11.2010 :  16:02:35 Uhr  Profil anzeigen  Besuche Useless user's Homepage  Antwort mit Zitat
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.
Zum Anfang der Seite
  Vorheriges Thema Thema Nächstes Thema  
Springe nach:
 
  Bookmark & Share  
 
 
 
  Tags  
   
 
 



pda-dev.de

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

© just-works! Software

Zum Anfang der Seite

Snitz Forums 2000