Einzelnen Beitrag anzeigen

DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Serielle Schnittstelle pollen

  Alt 24. Aug 2006, 12:04
Hallo,

ja ich weiss das Thema 'RS232' gibt es schon ein paar mal, aber zu meiner Frage gibt es dort leider keine Lösung.
Also bitte nicht schlagen!!

Ich habe ein Gerät mit dem ich sowohl über USB als auch über RS232 kommunizieren muss.
Die Kommunikation erfolgt über eine DLL des Hersteller FTDI .
Diese klappt alles wunderbar.
Ich habe eine asynchrone Übertragung. --> Dass heißt ich frage Daten an und bekomme eine Antwort.

Ich muss nun folgendes machen :
1. Datenanfragen
2. Schnittstelle pollen bis erwartete Anzahl Bytes im Buffer, wenn nicht, nach einer bestimmten Anzahl Versuchen abbrechen.
Dass klappt auch wunderbar. Ich habe bei USB eine Funktion zur Abfrage der am Port liegenden Bytes.
Ich kann also folgendes machen:

Delphi-Quellcode:
  repeat {Pollen des USB-Ports}
    Sleep(1);
    QBytes:=Get_QBytes(1); // Bytes am Port
    inc(iPolling);
  until (QBytes =7) or (iPolling >100); 7 Bytes erwartet
3. Dann kann ich die Bytes vom Port lesen.


Ich habe alles im VCL-Thread.

Würde gerne (die gesamte Kommunikation) in einen externen Thread auslagern.

Nunja.

Nun zum Thema,

ich nutzte die AsyncPro Komponente.
Hier gibt es dass Ereignis:
ApdComPort1TriggerAvail(CP: TObject; Count: Word); Mein Problem nun ich will den Port abfragen können und nicht auf ein Ereignis warten müssen, da ich sonst bei einem
Thread(dem VCL-Thread) in Teufels Küche komme.


Vielleicht könnt ihr mir helfen
Gracias...
  Mit Zitat antworten Zitat