Zum Inhalt springen

Delphi 6.0 mit TSeriel Problem mit Abrufen der Seriellen Schnittstelle


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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 ;)

Geschrieben

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

Geschrieben

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...

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...