Autor |
Beitrag |
Tobias31966
Hält's aus hier
Beiträge: 12
|
Verfasst: Do 09.04.09 13:05
Hallo Leutz,
ich versuche seit einiger Zeit unter Delphi 6 die TComm-Komponente von M.Raab zu verwenden. Leider kann ich zwar Daten senden (Vom PC über Nullmodemkabel zum Laptop), diese aber dort nicht lesen. Ich sende einen String ('TestText') und empfange 3 CharReceived-Ereignisse der Länge (cbInQue) 1, 2 und 8. Sende ich nochmals, so erhalte ich wieder drei Ereignisse mit 9, 10 und 16 usw.
Die Auswertung des als @String-Typ übergebenen Puffers (TComm.Read gelingt auch nicht.
Wo stelle ich mich denn nur zu dumm an?
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Do 09.04.09 13:29
Ich kenn die Komponente nun nicht, selber verwende ich TApdComPort
aber da liegt doch bestimmt ein Beispielprogramm bei, oder? Wenn nicht, zeig wenigstens mal den Code, mit dem du die Daten emfängst.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Tobias31966 
Hält's aus hier
Beiträge: 12
|
Verfasst: Do 09.04.09 15:32
die komponente findest du in diesem fred, mehr habe ich nicht gefunden
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Do 09.04.09 15:44
1. Was ist ein Fred? Meinst du Thread? Dann sag das doch.
2. welchem "diesem"? Da ist kein Link..
3. Hast du uns immer noch keinen Quellcode gezeigt, der nicht funktioniert.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 10.04.09 00:41
Es ist sicherlich diese Komponente gemeint, da gibts nicht mehr als Beispiel, da steht auch nicht mehr dazu:
www.delphi-forum.de/....php?p=447813#447813
Aber welcher Code nicht funktioniert fehlt als Info hier zur Frage trotzdem noch.
|
|
Tobias31966 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 10.04.09 07:44
Danke für den link, irgendwie habe ich es nicht geschafft, den darzustellen.
Ja das ist die richtige Komponente.
ich habe also vom PC aus 'TestText' gesendet. Hier gehen einmalig 8 Zeichen weg.
Auf dem Laptop habe ich die drei Ereignisse überwacht. Es meldet sich nur das Ereignis 'OnCharReceived' und zwar dreimal.
Wenn ich in der Ereignisbehandlung dann versuche den Pufferinhalt zu lesen ´
Comm1.Read(@S, Length(S));
dann kommt da nur Mist an. Mit ein wenig Glück bekomme ich sogar eine Zugriffsverletzung hin.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 10.04.09 07:55
Was hat denn Length(S) da zu suchen? Du musst da angeben wie viele Zeichen du lesen willst...
Nimm als Puffer am besten eine Variable vom Typ Char und gib an, dass du 1 Byte lesen willst jeweils...
|
|
Tobias31966 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 10.04.09 13:25
und das in einer schleife, for 1 to cbInQue?
mmhh na gut, ich versuche es mal
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 10.04.09 17:54
Ja, genau. Du kannst natürlich auch einen String oder PChar nehmen, musst beim String aber dann auch vorher die Länge setzen (SetLength) bzw. beim PChar den Speicher reservieren.
|
|
Tobias31966 
Hält's aus hier
Beiträge: 12
|
Verfasst: Fr 10.04.09 21:47
das mi6t dem string hab ich probiert. Vorher mit SetLength(S, cbInQue). Da ich aber eigentlich ( zeichenlesen müßte, er aber drei mal mit 1, 2 und dann 8 kommt, hat es eben nicht geklappt.!
|
|
Tobias31966 
Hält's aus hier
Beiträge: 12
|
Verfasst: So 12.04.09 07:01
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 12.04.09 07:09
Ich habe da nix für den Com-Port zum Testen mehr da, deshalb musst du schon selbst debuggen. Ich nutze nur noch USB, da läuft das vollkommen anders. Der Quelltext ist schließlich da, da musst du selbst schauen was bei Read passiert und was da ggf. schief läuft. 
|
|
GTA-Place
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 12.04.09 22:20
Sonst probier doch mal folgende Komponente, die funktioniert bei mir ganz gut:
www.ararat.cz/synapse/doku.php/download (weiter unten, SynaSer)
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Tobias31966 
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 14.04.09 04:44
Hallo Sebastian Jänicke,
danke für den Tip, aber genau das hat nicht funktioniert, da der Ausbnahmefehler, die Zugriffsverletzung für mich nicht zu debuggen ist. Ein derartiger Profi bin ich leider nicht.
und wenn ich die Write-Funktion verfolge bekomme ich einmalig gesendete 8 Bytes, aber ich finde die über die Read-Funktion auf dem Empfänger-PC nicht mehr!
Hallo Fabian Gärtner,
danke für diesen Link ich werde ihn gegebenenfalls einmal testen. Allerdings hat mir an der bisherigen Geschichte gerade die Komponente gefallen!
lg Tobias
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.04.09 04:52
Tobias31966 hat folgendes geschrieben : | danke für den Tip, aber genau das hat nicht funktioniert, da der Ausbnahmefehler, die Zugriffsverletzung für mich nicht zu debuggen ist. Ein derartiger Profi bin ich leider nicht. |
Naja, was passiert denn, wenn du einen Haltepunkt auf Comm1.Read(... setzt und dann ab da schrittweise durchgehst? Also wenn das Programm am Haltepunkt ankommt mit F7 in Read reingehst und dann weiter zeilenweise durchgehst (F8). So müsstest du genauer sehen was passiert.
Leider weiß ich nicht wie ich sonst helfen könnte, ich kann es eben wie gesagt nicht ausprobieren. Hast du einmal versucht immer nur ein Zeichen zu lesen? Kommt da was sinnvolles an?
Sonst wird auch häufig diese Komponente genannt, die recht einfach sein soll:
sourceforge.net/projects/comport/
|
|
Tobias31966 
Hält's aus hier
Beiträge: 12
|
Verfasst: Di 14.04.09 18:30
Die habe ich auch schon gesehen, die ist aber alles andere als einfach, weil ziemlich riesig. Mit F7 komme ich zwar ins Read rein, dort erhalte ich aber nur kryptische Dinge (die API-Funktionen), nichts was mein kleiner Kaninchenverstand auch nur ansatzweise begreift.
|
|
mikro1986
      
Beiträge: 22
|
Verfasst: Mi 15.04.09 15:01
Auch wenn es schon was länger her ist,
aber in deinem Quellcode hast du in der Ereignisroutine CharReceived von Comm2 Comm1 aufzurufen... ist das von dir so gewollt, oder ist da nen Zahlendreher drin??
gruß
mikro1986
|
|
Tobias31966 
Hält's aus hier
Beiträge: 12
|
Verfasst: Mi 15.04.09 15:31
Danke Mikro,
das ist nicht so gewollt, werde es gleich mal überprüfen. Aber das Problem bleibt sicher. Wenn ich am Laptop über eine Brücke Pin2/3 sende habe ich eh nur eine Comm verwendet.
|
|
mikro1986
      
Beiträge: 22
|
Verfasst: Mi 15.04.09 16:29
wäre aber logosch, wenns so net klappt... weil er wartet darauf, dass bei comm2 was passiert um comm1 zu lesen, da kannste net das richtige lesen können
|
|
Tobias31966 
Hält's aus hier
Beiträge: 12
|
Verfasst: Do 16.04.09 09:34
ja stimmt, ist auch bei zwei verwendeten Rechnern so. Wenn ich aber bei einem rechner teste und die Pins 2 und 3 brücke erhalte ich immer noch dieses unsinnige Ergebnis.
Ich versuce es schon mit PChar, kriege aber die Typwandlungen nicht so hin. Die Zugriffsverletzung entfällt schon mal, nun muß ich nur noch die Speicherinhalte lesen und deuten können.
|
|