need-some-blood Geschrieben 26. November 2003 Geschrieben 26. November 2003 Hallo, da tempoär die Suchfunktion deaktiviert wurde, ich aber schnellstmöglich eine Lösung benötige eröffne ich einfach mal ein neues Thema. Hintergrund: - Bekomme Werte über die Serielle Schnittstelle. - Zum ansteuern dieser benotze ich die TSerial Komponente. Problem: - Scheinbar stehen bei mir zuviele Werte zeitgleich an der Schnittstelle. Sodass ich ständig durch die Event-Prozedur durchlaufe. Ich hoffe mit dem Quellcode ist mein Prob klarer zu sehen. Quellcode: procedure TForm_main.Serial1RxData(Sender: TObject); // Hier sollte das Programm nur durchlaufen, wenn neue Daten am Port anstehen. var in_char : char; i : integer; str : string; Recvread : boolean; empfpuffer : array [0..2000] of char; recvlength : integer; begin i:=0; str:=''; Serial1.ZapTXQueue; while Serial1.rxwaiting>0 do begin while Serial1.ReadChar(in_char) > 0 do begin // Solange wie ein Zeichen noch ansteht CopyMemory(@empfpuffer[i],@in_char,1); // <--- PROBLEM Hier werden nun alle Werte in den empfangspuffer geschreiben. Es sollte aber nur der letzte aktuelle hineingeschreien werden. Eigentlich dürfte auch nur dieser an der Schnitstelle anstehen inc(i); Recvread:=true; edit1.text:=booltostr(recvread); end; end; if i>0 then begin recvlength:=i; end; Serial1.ZapRXQueue; Recvread:=False; edit1.text:=booltostr(recvread); end; Mein Problem ist also, dass nicht immer nur der letzte aktuelle Wert an Port ansteht. Kann mir einer Helfen? MVG need-some-blood Zitieren
geloescht_JesterDay Geschrieben 26. November 2003 Geschrieben 26. November 2003 hm... also entweder löschst du die Werte nach dem Empfangen nicht (ZapRXQueue funktioniert nicht) oder der Fehler liegt nicht an deinem Programm, sondern die Daten liegen eben die ganze Zeit an der Schnittstelle an... :confused: Edit: Ach ja, das edit1.text:=booltostr(recvread); bringt dir nicht viel IMHO. In der Schleife wird es so schnell durchlaufen, dass du keinen Unterschied bemerkst (falls die Schleife mehrfach durchlaufen wird), und zum anderen wird direkt am Ende ein edit1.text:=booltostr(False); ausgegeben. Das steht so schnell da da merkst du das obere True auf jeden Fall nicht. Die serielle Schnittstelle mag zwar relativ langsam sein, aber so langsam auch wieder nicht Zitieren
need-some-blood Geschrieben 26. November 2003 Autor Geschrieben 26. November 2003 Dank dir. Die Selbstbestätigung brauchte ich jetzt. Hab schon an meiner Programmierkunst gezweifelt. Jetzt muss ich nur nen Weg finden damit ich testen kann ob ZapRXQueue funktioniert. Wenn es funzt, dann darf ich meinem Chefprogrammierer erklären, das er seinen DOS-Treiber mal checken soll. *grein* Vielen Dank soweit. PS: Zeile "edit1.text:=booltostr(recvread); " war zum testen ob das Prog überhaupt aus der while-schleife rausspringt. Also nur eine Test-Leiche, die ich übersehen habe. MVG need-some-blood Zitieren
geloescht_JesterDay Geschrieben 27. November 2003 Geschrieben 27. November 2003 Hallo, was mir gerade aufgefallen ist: vielleicht solltest du direkt nach dem lesen der Daten (Serial1.ReadChar) die Daten an der Schnittstelle löschen? also in der While Schleife das ZapRXQueue aufrufen, nciht danach. Ich weiss jetzt nicht wie es mit den Daten an der Schnittstelle ist, aber wenn du sie nur liest und nicht löschst sind sie ja noch da... Endlosschleife? Nur so ne Idee die ich gerade hatte... Zitieren
need-some-blood Geschrieben 28. November 2003 Autor Geschrieben 28. November 2003 So habe mir gestern mal Gedanken zu dem Problem gemacht. Die Daten werden an der Schnittstelle wieder gelöscht. Ich lese ja ständig Werte ein, und diese sind verschieden. Also muss es woanders liegen. MVG need-some-blood Zitieren
need-some-blood Geschrieben 5. Dezember 2003 Autor Geschrieben 5. Dezember 2003 So, nur damit ihr ein wenig auf dem laufendem bleibt. Nachdem ich nun keine LKust mehr hatte, das Problem zu suchen, habe cih es umgangen. Lese nun einfach alle Werte in einen String und maskiere mir meien einzelnen Werte dann aus. Eigentlich nur "Nice to know" MVG need-some-blood Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.