Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SerialNG Byte senden ? (https://www.delphipraxis.net/134005-serialng-byte-senden.html)

Blamaster 13. Mai 2009 22:18


SerialNG Byte senden ?
 
Hi,

ich bin hier langsam am verzweifeln.

Ist es irgendwie möglich mit SerialNG ein Byte zu versenden.

Ich möchte beispielsweise die Zahl 122 als Byte senden. Wenn ich die nun mit SerialPortNG1.SendString('122') sende kommt aber nicht die Zahl 122 an, sondern habe ich das Gefühl das jede Stelle des String einzeln gesendet wird, kann das sein ?

Der Controller macht momentan folgende.

Sobald der Interrupt ausgelöst wird übergibt er die Daten an ein Byte, dieses wird dann auf einem Lcd ausgegeben.

Wenn ich also nun wie oben beschrieben die 122 sende wir auf dem Display 49 50 50.

Wie kann ich es nun umsetzen, dass nicht jede Ziffer im String in ein eigenes Byte kommt, sondern die ganze Zahl als solche in ein Byte ?

mfg Blamaster

Gargoyl 13. Mai 2009 22:43

Re: SerialNG Byte senden ?
 
Hi

ich kenne SerialNG nicht, aber wenn du '122' als String sendest ist die anzeigen von '49 50 50' klar. da der AScII Wert '1' eben '49' ist, und der von '2' eben '50'. [ weil ord('1') = 49; und ord('2') = 50 ist].
Sende die '122' als Byte und nicht als String. Vermutlich gibt es bei SerialNG eine Funktion SendByte() oder SendInteger(). Ansonsten probier es eben mit
Delphi-Quellcode:
SerialPortNG1.SendString(chr(122));
Wie gesagt ich habe SerialNG nicht und weiß nicht ob es eine SendByte oder SendInteger Funktion gibt.

Hybrid666 13. Mai 2009 22:59

Re: SerialNG Byte senden ?
 
ich hab mir serialng grade mal runtergeladen und hab nur den code durchforstet

Delphi-Quellcode:
procedure SendData (Data : Pointer; Size : DWord); //Send binary Data
ich denke mal das funzt dann so:

Delphi-Quellcode:
procedure testbla;
var
  B : Byte;
begin
  B := 122;
  SerialNG.SendData(@B,8);
end;
also so würd ich das nu ma rein aus dem code interpretieren.

Das iss alles reine interpretation was nu kommt:
ich denk das du mit SendData dann jeden beliebigen Datentyp (sogar records) verschicken kannst. Mit SizeOf kommst du auch immer an die größe, die er haben will, es ginge also auch
Delphi-Quellcode:
SerialNG.SendData(@B, SizeOf(B));
Viel Spaß noch.

MfG

Chemiker 13. Mai 2009 23:04

Re: SerialNG Byte senden ?
 
Hallo,

@ Gargoyl: damit wird aber nur das Zeichen ‚z’ übermittelt.

@ Blamaster: Die Übertragung muss Binär sein. In der Regel kann man die RS 232 auf Text oder Binär-Format umstellen. Wenn ein Integer übertragen werden soll, müssen 4Byte für die Zahl(normale Integer von Delphi) übertragen werden.

@Hybrid666: Size sollte in diesem Fall aber 1 sein (1Byte).

Bis bald Chemiker

Blamaster 13. Mai 2009 23:07

Re: SerialNG Byte senden ?
 
Hi,

SerialPortNG1.SendString(chr(GetRValue(Color)) + chr(GetGValue(Color)) + chr(GetBValue(Color)));

Damit funktioniert es jetzt. Es kommt nun 3 mal die Zahl an die eingestellt ist :)

Vielen Dank für die Hilfe.

Die Geschichte mit SendData probiere ich nochmal aus.

mfg Blamaster

Edit.

So ich habe jetzt auch nochmal den code von Hybrid666 getestet. Das ganze funktioniert soweit auch perfekt. (Man muss size nur ebend auf 1 setzen für 1 Byte)

Vielen Dank nochmal :)

Hybrid666 13. Mai 2009 23:21

Re: SerialNG Byte senden ?
 
Zitat:

Zitat von Chemiker

@Hybrid666: Size sollte in diesem Fall aber 1 sein (1Byte).

Man möge mir verzeihen, warum auch immer, aber ich war grade in der Bit einheit :nerd:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz