Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TApdDatapacket dynamische Größe (https://www.delphipraxis.net/179915-tapddatapacket-dynamische-groesse.html)

Jonas Shinaniganz 10. Apr 2014 15:14

TApdDatapacket dynamische Größe
 
Hallo Community,

ich nutze das Async Professional TApdComport und die TApdDatapackets , geladen von songbeamer.de und selbst kurz für XE5 angepasst.

Während ich fast alle Aufgaben mit dieser großen Lib erschlagen kann komme ich an einer Sache nicht recht weiter.

Über RS-232 wird mir ein Paket geschickt welches mit einem bestimmten Start-String anfängt, sagen wir mal (Ansi) "ABC". Das 4te Zeichen ist dann ein Bytewert Der Bytewert sagt aus wie viele Blöckte von je 30 Byte direkt danach gesendet werden.

Wenn also ABC antrifft, schlägt mein TApdDatapacket zu. Ich habe ja den StartString gesetzt. Dann lese ich das Byte an der 4ten Stelle aus. Zum Beispiel eine 3. Jetzt weiß ich wie viele Byte ich entprechend lesen muss (ABC3 d.f. 3*30 = 90 Byte). Nun muss ich ja irgendwie dynamisch die Endbedingung für das Paket setzen können, sodass es bei 90 + die ursprünglichen 4 Byte triggert.

Ist soetwas vorgesehen?

Lieben Gruß.

Uwe Raabe 10. Apr 2014 17:01

AW: TApdDatapacket dynamische Größe
 
Ohne das jetzt ausprobiert zu haben:

Datapacket1:
Delphi-Quellcode:
Enabled := true;
StartCond := scString;
StartString := 'ABC';
EndCond := ecPacketSize;
PacketSize := <1 oder 4, je nachdem ob StartString mitgezählt wird>
DataPacket2:
Delphi-Quellcode:
Enabled := false;
StartCond := scAnyData;
EndCond := exPacketSize;
PacketSize := 0;
DataPachet1 OnPacket-Event:
Delphi-Quellcode:
DataPacket2.PacketSize := <was auch immer in dem Byte steht>
DataPacket2.Enabled := true;
DataPacket1.Enabled := false;
DataPachet2 OnPacket-Event:
Delphi-Quellcode:
<das Packet verarbeiten>
DataPacket2.Enabled := false;
DataPacket1.Enabled := true;

Jonas Shinaniganz 11. Apr 2014 14:10

AW: TApdDatapacket dynamische Größe
 
Okay, schade das es dafür in den Datapackages keine Funktion gibt. Aber so klappt es :)
Ist auf jeden Fall eine tolle Sache, verwende über 20 Stück von den Paketen. Angenehmes Arbeiten!

Ergänzung:

Zitat:

// PacketSize := <1 oder 4, je nachdem ob StartString mitgezählt wird>
StartString wird hier immer mitgezählt, kann man nicht einstellen

Zitat:

EndCond := exPacketSize;
sollte sein:

Zitat:

EndCond := [ecPacketSize];
Das DataPacket1 - Event ist muss nicht das DataPacket1 deaktivieren und deswegen ist auch die aktivierungs-Zeile im zweiten Paket nichtig.

Naja ich wurde jedenfalls auf groteske Art von der Schnittstellen Dokumentation angelogen. Durch dein Vorgehen bin ich jetzt weiter, auch wenn es eigentlich ganz anders Abläuft als beschrieben.

Danke :)

Uwe Raabe 11. Apr 2014 14:42

AW: TApdDatapacket dynamische Größe
 
Ist schon 'ne Weile her, daß ich damit gearbeitet habe. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz