Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   1024 Bytes per AsyncPro (https://www.delphipraxis.net/165845-1024-bytes-per-asyncpro.html)

Lee500 18. Jan 2012 18:06

1024 Bytes per AsyncPro
 
Hallo Forum,

Ich habe mir schon ca. 2 Stunden die Finger wundgesucht, aber noch nichts wirklich passendes gefunden. Ich will mit der AsyncPro Componente 1024 Bytes Daten empfangen, speichern, manipulieren und dann später auch wieder senden. Wenn ich das ganze über den OnTriggerAvail mache, bekomme ich je nach laune des Programms zwischen 150 und 300 Bytes empfangen. Danach ist schluss.

Ich habe auch mal versucht im TriggerAvail nur zu gucken wie viele Bytes im Buffer sind und nach 1024 Bytes den Buffer auszulesen. Funktioniert aber auch nicht wirklich zuverlässig. Danach habe ich dann mal ein wenig mit TriggerStatus und TriggerTimer rumprobiert, um die Pause nach dem Dateneingang zu finden. Der TriggerStatus (stLine, lsBreak) löste manchmal mitten in der Übertragung aus.

Habt ihr vielleicht noch eine Idee, wie ich genau die 1024 Bytes empfangen kann? Allerdings sollte er natürlich auch abbrechen wenn nur 1000 Bytes ankommen und er nix mehr empfängt.

Ich hoffe ihr könnt mir helfen, bin am verzweifeln.

Gruß
Michael

Chemiker 18. Jan 2012 19:15

AW: 1024 Bytes per AsyncPro
 
Hallo Lee500,

vom welchem Gerät werden die Bytes den übertrage?

Bis bald Chemiker

Lee500 18. Jan 2012 20:01

AW: 1024 Bytes per AsyncPro
 
Hallo Chemiker,

Die Daten kommen von der MC-22. Einer Steuerung aus dem Modellbaubereich. Auf die Daten kann ich also keinen Einfluss nehmen und muss Sie so auslesen, wie sie kommen. Allerdings weiß ich nicht so recht, was diese Information jetzt bringt :)

Gruß
Michael

Furtbichler 18. Jan 2012 21:36

AW: 1024 Bytes per AsyncPro
 
AsyncPro ist für serielle Kommunikation? Stimmen Baudrate, Daten/Stopbits usw.? Wie sieht das Protokoll aus? Dir ist klar, das die Daten nicht en block kommen, sondern happenweise und du warten musst, bis alles da ist?

Alien_F 19. Jan 2012 07:31

AW: 1024 Bytes per AsyncPro
 
Wie wäre es, stattdessen mit der AsyncPro TApdDataPacket Komponente zu arbeiten? Dort kann man Datenpakte definieren ( z.b. Länge= 1024 ). Dort gibt es auch ein TimeOut Event, falls nach einer bestimmten Zeit wirklich mal nichts ankommt.

Chemiker 19. Jan 2012 19:47

AW: 1024 Bytes per AsyncPro
 
Hallo,

@Alien_F: Das TApdDataPacket ist nicht auf Delphi 2010 umgestellt. Das bedeutet, dass man es selber anpassen muss.

Das Problem sollte auch nicht die Byte-Anzahl sein sondern es muss ja irgendwie ein Protokoll vorhanden sein, wie soll sonst festgestellt werden, wann die Daten komplett übertragen worden sind und das Programm nicht während der Übertragung erst die Daten von der Schnittstelle bekommt.

Bis bald Chemiker

Lee500 22. Jan 2012 14:54

AW: 1024 Bytes per AsyncPro
 
Zitat:

Zitat von Furtbichler (Beitrag 1146584)
AsyncPro ist für serielle Kommunikation? Stimmen Baudrate, Daten/Stopbits usw.? Wie sieht das Protokoll aus? Dir ist klar, das die Daten nicht en block kommen, sondern happenweise und du warten musst, bis alles da ist?

Ja, ich habe die ComPort Komponente von AsyncPro genommen. Die Baudrate, Datenbits, Stopbits etc. stimmen, da ich mit dem Hyperterminal alles Problemlos empfangen kann. Das die Daten nicht im Block kommen ist mir klar. Ich habe es mal so versucht, das ich beim OnTriggerAvail, also immer wenn Daten da sind, diese in einen Buffer kopiert habe und dann gewartet habe bis die 1024 Bytes da sind. Das hat aber wie schon gesagt nicht funktioniert, da er bei 150-300 Bytes seinen Dienst quittiert hat.

Zitat:

Zitat von Chemiker (Beitrag 1146766)
Hallo,

@Alien_F: Das TApdDataPacket ist nicht auf Delphi 2010 umgestellt. Das bedeutet, dass man es selber anpassen muss.

Das Problem sollte auch nicht die Byte-Anzahl sein sondern es muss ja irgendwie ein Protokoll vorhanden sein, wie soll sonst festgestellt werden, wann die Daten komplett übertragen worden sind und das Programm nicht während der Übertragung erst die Daten von der Schnittstelle bekommt.

Bis bald Chemiker

Richtig, die TApdDataPacket Komponente habe ich nicht, da es diese nicht für Delphi 2010 gibt.

Das Protokoll in dem Sinne ist eigentlich nur das die Steuerung immer exakt 1024 Bytes sendet. Das letzte Byte ist ein Paritätsbyte.

Mein Problem liegt aber weniger darin, dass das Protokoll oder irgendwelche Einstellungen der seriellen Schnittstelle nicht passen, sondern eher darin, dass die ComPort Komponente nach 150-300 Bytes einfach den Dienst niederlegt.

Furtbichler 22. Jan 2012 16:00

AW: 1024 Bytes per AsyncPro
 
Schon verstanden, merkwürdig das Ganze. Vielleicht steckt die Tücke im Detail Code. Zeig doch mal das OnTriggerAvail. Wird die Komponente vielleicht deaktiviert?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 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