Autor Beitrag
adina83
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Fr 30.06.06 16:11 
Ich möchte die Schnittstelle eines Messgerätes abfragen und benutze dafür die Programmiervorschläge von SchelmvomElm (Verfasst am: Do 03.02.05 17:26
Titel: Serielle Schnittstelle ansprechen und pollen)

Zur Signalisierung der Daten, die vom Messgerät zurückkommen benutze ich einen Thread. Wird dieser ausgelöst so wird das Bit serial_int gesetzt und dann lese ich die Daten von der Schnittstelle.
Nun kommt es aber vor das sehr viele Daten zurückgesendet werden und ich dann nur den Anfang lese. Wie kann ich es erreichen das mein Bit serial_int erst gesetzt wird nachdem alle Daten gesendet wurden. Eine Pause möchte ich nicht einfügen da sich diese auch auf kurze Nachrichten auswirken würde. Für Anregungen wäre ich sehr dankbar

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TSerialThread.Execute;
var
  SerialEvent, WaitResult, BytesRead: Cardinal;
begin
//  SetCommMask(PortHandle,EV_CTS or EV_BREAK or EV_DSR or
//  EV_ERR or EV_RING or EV_RLSD or EV_RXCHAR or EV_RXFLAG or EV_TXEMPTY);
  SetCommMask(PortHandle,EV_RXFLAG);

  if not WaitCommEvent(PortHandle,SerialEvent,@StatusOs) then
  begin
    if (GetLastError = ERROR_IO_PENDING) then
    begin
      WaitResult := WaitForSingleObject(StatusOs.hEvent,INFINITE);
      case WaitResult of
        WAIT_OBJECT_0:
        begin
          if GetOverlappedResult(PortHandle,StatusOs,BytesRead,false) then
            serial_int:=true;
        end;
      end;
    end;
  end else serial_int:=true; end;
end.
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mo 03.07.06 12:47 
Kannst du das nicht nacheinander weg in einen MemoryStream schreiben und von diesem wieder auslesen? Streams hatten irgendwo eine Funktion der Ereignis mit dem Sie erst nach einem bestimmten Zeichnkette zu lesen anfingen...
adina83 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Mo 03.07.06 16:29 
Versteh ich nicht ganz. Die Zeichenkette die zurück gesendet wird hat eine unbestimmte Länge und leider kein Abschlusszeichen auf das ich benachrichtigt werden kann.
Welche Vorteile hätte ich bei Verwendung eines Streams?
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Di 04.07.06 08:11 
Ach schade ich hatte gedacht, dass du ein Signal kriegst so ACKNOWLEDGE oder so. Ne dann bringen dich Streams auch nicht weiter :oops:
adina83 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 29



BeitragVerfasst: Do 13.07.06 17:45 
Ich hab jetzt auf Asynch32 zurückgegriffen. Damit gabs keine Probleme.

Besten Dank an alle die mir geholfen haben.