Autor Beitrag
skaven
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: So 24.10.04 11:22 
Hallo zusammen, übermittel einen Fahrbefehl mittels rs232 au einen servomotor, das funktioniert auch, in dem selben zyklus übermittel ich einen weiteren befehl und lesen dann direkt die antwort aus. Ich bekomme leider keinen korrekten Antwortbefehl zurück, nur aus einer 5 stelligen Zahlenkette max. 3 stellen.

Wie kann das ? Muß ich eine Zeitverzögerung zwischen dem übermitteln udn auslesen der daten haben?

Liegen die Zeitfenster, schreiben und lesen zu nah beieinander?

Hänge Euch mal mein Programm an, wäre nett wenn Ihr mir ein paar Tips geben könntet.

Danke schon mal.

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:
47:
48:
49:
50:
51:
52:
53:
procedure TForm1.DateieinlesenClick(Sender: TObject); 
var
   Liste : TStringList; 
   i, x, differenzwert : Integer; 
   data, filename : string; 
   F: TextFile; 
   prdwerte : array of integer; 
begin 
//Init 
  Liste := TStringList.Create; 

//Main Proc 
  if OpenDialog1.Execute then          { Dialog zum Dateiöffnen anzeigen } 
    begin 
      filename := OpenDialog1.FileName; 
      try 
        Liste.LoadFromFile(filename); 
        for i := 0 to Liste.Count-1 do 
          begin 
          apdcomport1.putstring(Liste[i]); 
          apdcomport1.putstring(#13); 
          repeat 
            apdcomport1.putstring('prd'); 
            apdcomport1.putstring(#13); 
            //repeat 
            //until data = '-->'; 
            Setlength(prdwerte,length(prdwerte)+length(data));
            data_length:=length(data);//länge nehmen
          for x:=1 to data_length do
           begin
            prdwerte[Length(prdwerte) - Length(Data)] := strtoint(Data[x]);
            delete(data,0,1); //durch das löschen verringert sich die länge von data und der index beim nächsten durchlauf ist erhöht...
           end;
         until data_length<=10;
          end 
      finally 
      end; 
    end; 
  Liste.Free; 
end; 

procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); 
var 
  Data: String; 
  I: Integer; 
begin 
  data := ''; 
  for I:= 0 to Count-1 do 
    Data :=data + ApdComPort1.GetChar;
  Memo1.text:= data;
end;

end.