Serielle Schnittstelle

Gast #385792
Lesenswert?

Hallo,
ich habe ein Programm in C geschrieben welches mir Datenpakete die an
der seriellen Schnittstelle ankommen auswertet.
Nun habe ich das Problem das ab und zu eine 0 gelesen wird, die aber
nicht vorhanden ist bzw. sein soll.

Ich finde da keinen Fehler,
anbei mal die Lese Funktion villeicht findet von euch den Fehler ...
Angehängte Dateien:
Gast #385795
Lesenswert?

oder besser schau dir den DCB an den du benutzt, wenn Fehler bei der
Übertragung auftreten kann ein Füllzeichen eingestellt werden, das
statt des Fehlers eingefügt wird. Im übrigen solltest du überprüfen was
die Funktionen zurückliefern, das können nämlich Fehler ,ala kann
Comport nicht öffnen...
Persönliche Seite #385797
Lesenswert?

Wie Wolfram schon sagte hast du evtl eine Funktion aktiviert, die die
Fehlerhafte Bytes (z.b Parity Fehler, denn das hast du ja aktiviert)
mit einem bestimmten, einstellbaren Fehlermarker ersetzt. In deinem
Fall wäre das dann die 0. Um das auszuschiessen, sollte man ALLE
Datenstrukturen, die man nicht vollständig ausfüllt vor der benutzung
auf 0 setzten
Gast #385798
Lesenswert?

oder den Fehler für die fehlerhafte Übertragung finden, bei 19200 und in
1. Test und du siehst jetzt schon Fehler da wird es nicht sehr schön
Daten zu übertragen. Wenn es ein Mikrocontroller ist, der an den PC
sendet, würde ich sagen du bist einer der versucht mit keinem
Baudratenquarz zu arbeiten sondern mit internen Oszillator. Das
funktioniert aber es kommen dann halt so alle 5..20 Zeichen ein
Fehler,
besonders wenn man nur mit 1 Stopbit arbeitet.
Bei der Schnittstelleninitialisierung solltest du noch die Puffergröße
festlegen und wenn du auf Geschwindigkeit kommen willst, lies die Daten
im Block und nicht einzeln.
#385799
Lesenswert?

Ich habe mir Dein Programm nicht im Detail angesehen sondern nur kurz
mit dem was ich vor längerer Zeit mal gemacht habe verglichen.

Bei mir ist es so: SetCommState(iCommId,&fDCB)
Bei Dir aber dagegen: SetCommState(&iCommId,&fDCB)

Ausserdem würde ich nicht eingabe zurückgeben sondern auch überprüfen
ob tatsächlich ein Zeichen gekommen ist (dwRead).

Weiss nicht ob einer der beiden der Fehler ist.

Grüße
Andreas
Gast #385800
Lesenswert?

Hi,
also dwRead liefert immer ne 1... Also werden Zeichen auch gelesen .

Ein Error Char hab ich ja auch nicht definiert. Von daher dürfte das
auch nicht sein, oder ist evt. Standart ?

Wie kann ich den Puffer eigentlich vergrößern ?

@ Wolfram
Meinst Du es wäre besser anstelle eines Bytes z.b. gleich 10 zu lesen ?
Hätte halt den Vorteil das die Funktion nur jedes 1o. mal aufgerufen
wird und damit 'Zeit' spart.

Gruss

Christian
Gast #385801
Lesenswert?

Hi,
habe den Puffer vergrößert nun klappt es. Ausserdem habe ich in der
Initialisierung folgendes eingefügt:
dcb.fAbortOnError = 1;
um sicher zu gehen das er bei einem Fehler auch abricht und nicht sonst
was veranstaltet ....

Danke für eure Hilfe und Hinweise ;-)))

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren