Autor Beitrag
Ruachel
Hält's aus hier
Beiträge: 14

Win XPpro SP2, WIN2000
D6 Pers
BeitragVerfasst: Do 12.04.07 01:07 
Hallo Zusammen,

Ich muss gleich vorausschicken, dass ich keinesfalls ein
Profi in Delphi bin, ich bin gerade mal so am lernen.

Also:

Ich möchte ein Programm schreiben, mit dem man Daten über die serielle
Schnittstelle an ein Gerät schicken kann, und möchte natürlich
auch die Antworten auswerten.

Zu diesem Zweck habe ich mir SerialNG besorgt.

Das Daten senden funktioniert auch ohne Probleme, aber beim
Empfangen komm ich nicht weiter.

So sieht meine "Empfangsroutine" aus:

ausblenden volle Höhe 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:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
procedure lesen (port:TSerialPortNG);
Var
buffer,ergebnis:String;
timeout: integer;
abgelaufen:TDateTime;
datenok:boolean;
stringlaenge,i,e:integer;
kommtwas:Boolean;
inhalt,x,z:integer;
begin

buffer:='';
datenok:=false;
timeout:=5000;
abgelaufen:=IncMillisecond(getTime(),timeout);
i:=0;
e:=0;
sleep(50);

 while (getTime() <= abgelaufen) and (not datenok) do begin
      //Showmessage (inttostr(port.NextClusterSize));
    if port.nextClusterSize > 0 then begin // es sind daten (cluster) angekommen
      buffer := buffer + port.ReadNextClusterAsString();   // Daten ablegen

      if copy(buffer, length(buffer), 1) = #10 then begin // Endzeichen Gerätenachricht
        datenok := true;
        showmessage('Daten ok');
      end;
    end;

 end;




    if  (getTime()>abgelaufen) and (not datenok) then begin
    Showmessage ('Verbindung fehlgeschlagen');

    end;

Showmessage ('Buffer:'+buffer);
ergebnis:=analyse(Buffer);
port.Active:=false;
freeandnil(port);

end;


Ich denke das sieht ziemlich normal aus.

Nun habe ich folgendes Problem:

"port.nextClusterSize" scheint immer den Wert "-1" bzw "0" zu führen,
sobald ich die Showmessage in der ersten Zeile while-Schleife auskommentiere..

Denn, wenn ich diese Showmessage in die Schleife "if port.nextClusterSize > 0" stelle,
wird sie gar nie angezeigt und die Routine läuft ins timeout (jetzt 5000ms).

Wenn ich die showmessage in der while-Schleife anzeigen lasse, funktioniert alles sofort
nach dem Klick auf OK.. ?

Natürlich kann ich diese Showmessage da nicht gebrauchen :oops:

Ich wäre euch für jeden Denkanstoß dankbar..
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Do 12.04.07 11:01 
TSerialPortNG hat einen ClusterEvent. Diesem musst Du nur Deine Bearbeitungsmethode zuweisen. So wirst Du benachrichtigt, wenn neue Daten vorhanden sind und sie werden automatisch abgerufen.