Autor Beitrag
NAND
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 29.11.10 11:43 
Hallo

ich stehe wieder vor einem Problem, beim Datenempfang über RS232.
Ich warte mit folgender Funktion/Event auf Daten am Port.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
S : String = '';

procedure TForm1.acpTriggerAvail(CP: TObject; Count: Word);
var
I : Word;
begin
for I := 1 to Count do
    S:= acp.GetChar ;

ListBox3.Items.Add(S);
end;


Ich weiß das am Port 345 Bytes mit HexWerten z.B. 00,01,03,06,90 so in der Art ankommen mussen.
Hab das auch mit einem Terminal Programm geprüft.

Bei mir kommt aber folgendes heraus:
(gekürzt auf nur 30 Zeichen)
<\0><\0><3>h%%<18><\0><\0><3>h%%<16>1<\0><\0><7><\0><\0>%<16>1<\0><16><\0><\0><3>d
So in der Art, in einer ListBox nur ganz komische Zeichen.

So sollte die Anzeige aussehen:
00 00 03 68 25 25 12 00 00 03 68 25 25 10 31 00 00 07 00 00 25 10 31 00 10 00 00 03 64

Ich verwende die Komponente Turbo Power Async Pro 4.07 unter Delphi 7 mit Win7.
Vieleicht verwende ich die falsche Methode die Daten aufzufangen die am Port ankommen...?

Könnte mir damit jemand auf die Sprünge helfen?

MfG NAND

Moderiert von user profile iconMartok: Delphi-Tags gesetzt
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Mo 29.11.10 13:23 
Ersetze die Anweisung
ausblenden Delphi-Quelltext
1:
S:= acp.GetChar;					

durch
ausblenden Delphi-Quelltext
1:
S:= IntToHex(acp.GetChar,2);					

und hänge notfalls noch ein Leerzeichen dran.
NAND Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 29.11.10 13:40 
Hallo Gammatester hab ich probiert.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.acpTriggerAvail(CP: TObject; Count: Word);
var
I : Word;
begin
for I := 1 to Count do
    S := IntToHex(acp.GetChar,2);
    ListBox3.Items.Add(S);
end;


Fehler Meldung vom Compiler:

[Fehler] YCI.pas(408): Es gibt keine überladene Version von 'IntToHex', die man mit diesen Argumenten aufrufen kann.
[Fataler Fehler] FT747CI.dpr(5): Verwendete Unit 'YCI.pas' kann nicht compiliert werden.

Keine Ahnung warum das passiert. Man liest ja viel über diese Funktion im Zusammenhang mit Hex Werten.
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Mo 29.11.10 13:59 
Ah ja. Dann nimm mal
ausblenden Delphi-Quelltext
1:
S := IntToHex(ord(acp.GetChar),2);					

Für diesen Beitrag haben gedankt: NAND
NAND Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 29.11.10 14:43 
Danke Gammatester,

das funktioniert prima so.Genauso wollte ich es haben.
Wenn du vieleicht noch kurz erklären könntest was da genau passiert?

ausblenden Delphi-Quelltext
1:
S := IntToHex(ord(acp.GetChar),2);					

Für was steht das ord?
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Mo 29.11.10 15:08 
IntToHex erwartet als ersten Parameter einen Integerwert. Die Funktion acp.GetChar gibt wohl ein Char zurück. Ord() liefert den Ordinal/Integer-Wert eines Zeichens, zB ord('A')=65 für das ASCII-'A'.

Für diesen Beitrag haben gedankt: NAND
NAND Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 29.11.10 15:09 
Danke für die Erklärung jetzt kann ich es mir besser vorstellen.