-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
28. Mai 2009
Das muss ich nochmal aufgreifen.
Könnte man diesen Trigger aufgreifen und auf Count triggern, wenn mind. x Zeichen im Puffer liegen?
Wie oft fällt dieser Trigger eigentlich? Immer dann, wenn wieder ein Zeichen im Puffer dazu gekommen ist?
Gruß, Carsten
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
8. Mai 2009
So, mit den beiden von mir genannten Erweiterungen geht es.
In der repeat..until-Schleife zum Auslesen der Kopfdaten weiß ich, dass deren Länge 3 Zeichen haben muss. Ich warte also so lange, bis drei Zeichen im InBuffer liegen und hole sie mir dann via GetChar raus, wobei ich diese Zeichen NICHT aus dem InBuffer lösche bzw. löschen lasse. So habe ich die Länge und kann in der nachfolgenden...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
8. Mai 2009
Gut, mache bzw. lasse ich. Trotzdem überlege ich noch, die Komponente dahingehend zu erweitern, entweder den Status von InAvailMessage über eine Funktion nach außen zu führen und/oder GetChar mit einem booleanschen Flag ReadOnly:= true/false zu erweitern - oder beides. :gruebel:
function TApdBaseDispatcher.GetChar(var C : Char; AReadOnly: boolean = false) : Integer;
{-Return next char...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
8. Mai 2009
Also jedes Mal umschalten in Abhängigkeit der Daten bzw. des Datentransfer. Lässt sich das bewerkstelligen, wenn der Port offen ist?
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
8. Mai 2009
Als Kommentar, richtig. Nur muss man den erstmal gelesen haben. :P
Sah jetzt bei 2 Versuchen ganz brauchbar aus. Danke erstmal für den Tipp, ich werde weiter testen.
Gruß, Carsten
Grrmmpppf - NÖ! :evil:
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
8. Mai 2009
Hallo zusammen!
So, nach einer 'etwas längeren' Debug-Session und Codeanalyse mit einem Kollegen sind wir dem Übel auf die Spur gekommen, wobei wir der Ansicht sind, dass es sich um einen Bug in ApdCOMPort (v4.07) handelt. Aber der Reihe nach:
Das Übel beginnt mit dem ApdCOMPort.GetChar in meinem Programm. Nach Aufruf des Befehls wird in die Datei 'AwUser.pas' in Zeile 1570ff verzweigt....
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
7. Mai 2009
Vielen Dank für die Erklärung. Demzufolge ist also dir Trace-Datei maßgebend zur Fehlersuche.
Und hier sind ja die empfangenen Daten verkehrt, demzufolge kommen also schon die Daten "von unten irgendwo her" falsch bei mir an.
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
7. Mai 2009
Hier nochmal nachgehakt:
Wie ist denn eigentlich der Datenverlauf durch den PC?
Gerät => Treiber => UART => ApdCOMPort => PC-Programm
Gerät => UART => Treiber => ApdCOMPort => PC-Programm
M.M.n. unterstützt ein Treiber die Hardware, insofern bin ich der Meinung, das erstgenannte ist richtig.
Gruß, Carsten
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
7. Mai 2009
Teste ich mal.
BTW: Was ist der Unterschied zw. der TRC- und LOG-Datei? In der LOG-Datei sind die empfangenen Daten i.O., in der TRC-Datei allerdings sehe ich fehlerhafte Empfangsdaten. :gruebel:
Gruß, Carsten
Nachtrag:
Bei InSize:= 2 gibt es eine Exception.
Im Projekt ist eine Exception der Klasse EBadArgument mit der Meldung 'Bad argument passed to function' aufgetreten. :evil:
...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
7. Mai 2009
Hhhmm, datt Ding will ja eine Start- und End-Condition. Als StartCond wähle ich 'scAnyData', doch was nehme ich als EndCond?
Ich weiß vorher weder etwas über das geschickte Ende noch etwas über die Datenlänge, die da kommt.
Halt, ich habe jetzt die ecPacketSize angeknipst und die Länge auf 3 gesetzt. Dann läuft es erstmal eine Weile bis zur genannten Exception ecOutputBufferTooSmall. :wall:
...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
7. Mai 2009
Das habe ich getan und bekomme schon nach rel. kurzer Zeit eine Exception, die da lautet:
Im Projekt ist eine Exception der Klasse EOutputBufferToSmall mit der Meldung 'Output buffer too small for small for block' aufgetreten.
Die Größen:
InSize:= 16384;
OuSize:= 16384;
Gruß, Carsten
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
7. Mai 2009
Na, dann versuche ich mal Licht ins Dunkle zu bringen. :)
Bei dem Gerät handelt es sich um ein Gerät mit echter USB-Schnittstelle, wird allerdings wie bereits geschrieben via einem Virtual COM Port Treiber mit dem PC (Windows) verbunden. Die Erklärung, warum das so gemacht wird und nicht mit echtem USB würde den Rahmen sprengen.
Die Baudrate liegt bei 9600Baud, wobei die Einstellung keinen...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
6. Mai 2009
Das Problem ist, dass es weder ein Hardware noch Software Flow Control mit dem Gerät gibt. Der PC (mein Programm) wartet in den genannten Schleifen max. 3 Sek. auf eine Rückmeldung bzw. darauf, dass Daten im InBuffer von ApdCOMPort liegen. Die Rückmeldung vom Gerät soll quasi (im übertragenen Sinne) der Handshake sein und das Zeichen dafür, dass vom Gerät die Daten verarbeitet wurden.
Ich...
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
6. Mai 2009
Damit hatte ich es noch nicht versucht. Allerdings hatte ich noch vergessen zu erwähnen, dass ich sowohl den Log- als auch Trc-Mitschnitt aktiviert hatte und dort die Daten korrekt auftauchen.
Gruß, Carsten
-
Forum: Sonstige Fragen zu Delphi
Delphi
by Carsten1234,
6. Mai 2009
Hallo zusammen,
ich habe mit der aktuellsten Version das Problem, dass mir offensichtlich Daten im Buffer verloren gehen oder überschrieben werden.
Vorab:
Über einen Virtual COM Port Treiber wird ein Gerät via USB angeschlossen. Schicke ich Daten an das Gerät, erfolgt von diesem eine Rückmeldung in einer bestimmten Art und Weise. Die ersten drei Zeichen, der sog. Kopfblock, enthält u.a. die...