Hallo,
Du wartest mit Deiner Anwendung nach dem Senden des ersten Strings, bis die Rückmeldung empfangen wurde. Während dieser Zeit steht die Anwendung, und reagiert auf nichts.
Da es sich um eine asynchrone Datenübertragung handelt, ist es besser, das ganze über Events zu steuern, also unabhängig vom Programmverlauf:
1) Button -> Sende ersten String
2) Event wird ausgelöst, wenn Rückmeldung empfangen wurde
3) Im Event wird der nächste String gesendet
Es gibt bei den AsyncPro Komponenten ein ApdDataPacket, welches nichts anderes tut, als auf den Empfang einer vorzugebenden Zeichenfolge zu warten, und dann einen Event auszulösen.
Versuch es mal so:
1) Senden des ersten Strings
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin ApdComPort1.OutPut := 'PA1'#13#10; end; |
2) Setz ein ApdDataPacket auf die Form, setze ComPort auf ApdComPort1, dann Rechts-Klick auf ApdDataPacket und "Edit Properties". In "Packet start condition" aktivierst Du "When String is received", und kopierst die Rückmeldung #6#13#10 in das Editfeld dahinter.
3) In den Event OnStringPacket kommt das:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.ApdDataPacket1StringPacket(Sender: TObject; Data: String); begin ApdComPort1.OutPut := #5#13#10; end; |
Es wird also durch den Buttonklick nur der erste String gesendet. Danach läuft das Programm normal weiter. Das hat u.A. den Vorteil, daß Du auch mehrere ComPorts bedienen kannst, wenn Du gleichzeitig mehrere Geräte auswerten mußt. Wenn die Rückmeldung empfangen wird, wird automatisch der zweite String gesendet. Ich habe das schon mehrfach zur Steuerung von externen Geräten verwendet, es funktioniert sehr zuverlässig.
Holger