Autor Beitrag
Tobias31966
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Do 09.04.09 15:32 
die komponente findest du in diesem fred, mehr habe ich nicht gefunden
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Fr 10.04.09 13:25 
und das in einer schleife, for 1 to cbInQue?
mmhh na gut, ich versuche es mal
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 12.04.09 07:01 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button3Click(Sender: TObject);
var S: String;
begin
S := Edit1.Text;
Comm1.Write(@S, Length(S))
end;

procedure TForm1.Comm2CharReceived(Sender: TObject; cbInQue: Cardinal);
var S: String;
begin
ShowMessage(IntToStr(cbInQue) + ' Zeichen wurden empfangen');
SetLength(S, cbInQue);
Comm1.Read(@S, cbInQue);
Label4.Caption := 'Empfangen: >' + S + '<'
end;


Ich hatte gehofft, daß es so einfach wäre, ist es aber leider nicht...

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. :nixweiss:
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.04.09 04:52 
user profile iconTobias31966 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 22



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: 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.