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.
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 Liste := TStringList.Create;
if OpenDialog1.Execute then 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); Setlength(prdwerte,length(prdwerte)+length(data)); data_length:=length(data); for x:=1 to data_length do begin prdwerte[Length(prdwerte) - Length(Data)] := strtoint(Data[x]); delete(data,0,1); 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. |