Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Sende String an comport (https://www.delphipraxis.net/181027-sende-string-comport.html)

Natcree 9. Jul 2014 11:20

Sende String an comport
 
Hallo ich habe ein externes Display. Dieses ist am Comport5 angeschlossen. ich möchte nun einen Text an dieses externe Display schicken. Jedoch passiert nichts mit meinem Code. habe die rs232 in uses eingebunden und auch die com.dll. Hier der code


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
text:String;
begin
OPENCOM('COM5: baud=19200, data=8, parity=N, stop=1');
text:='Hallo';
for i:=0 to length(text)-1 do
begin
  SendByte(ord(text[i]));
end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  closeCOM;
end;
ich hoffe ihr könnt mir weiterhelfen. wenn ich eine druckausgabe an diesen comport über canvas mache dann zeigt er nur Hyroglyphen.

Der schöne Günther 9. Jul 2014 11:26

AW: Sende String an comport
 
Habe ich eine Bildungslücke oder ist die "Unit rs232" eine wohlbekannte Unit die standardmäßig dabei ist?

p80286 9. Jul 2014 11:44

AW: Sende String an comport
 
Zitat:

Zitat von Natcree (Beitrag 1264914)
wenn ich eine druckausgabe an diesen comport über canvas mache dann zeigt er nur Hyroglyphen.

Was auch immer die Canvas mit dem COM-Port und einem Monitor/Terminal zu tun hat.

Ich vermute, daß Du da ein Terminal angeschlossen hast, das über ein bestimmtes Protokoll mit dem Rechner kommuniziert. Da reicht es nicht dem COM-Port die richtigen Parameter zu verpassen, da muß auch das Protokoll stimmen.

Du solltes mal ganz genau beschreiben was Du da eigentlich treibst.

Gruß
K-H

Natcree 9. Jul 2014 11:47

AW: Sende String an comport
 
Also ich habe ein LED Display was einen Werbetext anzeigen soll. dieses wird über den Comport an meinem Rechner angeschlossen nunmehr will ich dem display diesen Werbetext schicken. Im Prinzip ähnlich wie ein Display bei verkaufskassen. Wo der Preis drauf steht.

mkinzler 9. Jul 2014 11:49

AW: Sende String an comport
 
Versuch es mal als AnsiString

Natcree 9. Jul 2014 11:59

AW: Sende String an comport
 
gibt es da ein code beispiel für?

mkinzler 9. Jul 2014 12:05

AW: Sende String an comport
 
Delphi-Quellcode:
text:AnsiString;
Den string ist ab D2009 ja UnicodeString

Ohne das Gerät zu kennen wird es aber schwer zu Helfen. Gibt es eine Dokumentation für das Display?

himitsu 9. Jul 2014 12:10

AW: Sende String an comport
 
Nja, so wie das aussieht, kannst du problemlos auf die alten Pascalfunktionen umsteigen oder gar auf FileStreams.

Delphi-Quellcode:
var F: TextFile;

AssignFile(F, 'COM5: baud=19200, data=8, parity=N, stop=1');
Rewrite(F);
Write(F, 'Hallo');
Ansonsten empfehle ich dir eher mal nach einer "aktuelleren" ComPort-Komponente ausschau zu halten.

Zitat:

data=8
Falls aktuelleres UnicodeDelphi, dann wäre es natürlich besser auch AnsiStrings zu verwenden.



DLL?

Wenn du diese DLL meinst
http://www.b-kainka.de/referenz.txt
Das Ding ist eh Schrott und funktioniert in aktuelleren Windowsen nicht mehr.
Die Pascal-Header sind ebenfalls mistig geschrieben und funktionieren in D2009+ nicht mehr. (Char statt AnsiChar usw.)

Ich hatte vor Kurzem die Header-PAS dieser DLL umgeschrieben, so daß sie mit neueren Delphis funktioniert und dazu auch gleich die DLL entsorgt.
Den nötigen Code direkt in der PAS implementiert und diesen auf neuere APIs umgeleitet. Der Code ist aber noch nicht komplett getestet und einige Funktionen (vorallem vom Sound) sind rausgeflogen.

baumina 9. Jul 2014 12:14

AW: Sende String an comport
 
Erwartet das OpenCOM wirklich einen String und keinen PChar?

himitsu 9. Jul 2014 12:22

AW: Sende String an comport
 
(vermutlich) siehe verlinkte Deklaration, in meinem letzten Post.

Ja, ist PChar, aber Delphi konvertiert String-Konstanten automatisch in PChar, wenn man sie direkt an den Parameter übergibt.

himitsu 9. Jul 2014 12:26

AW: Sende String an comport
 
Ich seh grade was. :wall:

Zitat:

Delphi-Quellcode:
for i:=0 to length(text)-1 do
begin
  SendByte(ord(text[i]));
end;

Du solltest unbedingt mal die Bereichsprüfung in deinem Delphi aktivieren, wenn du ständig solchen Mist verbockst.

String-Indize beginnen bei 1 :!: (außer in den neuen iOS/Android-Plattformen)

Natcree 19. Jul 2014 21:58

AW: Sende String an comport
 
das heisst wenn ich es so mache klappt es ?

Delphi-Quellcode:
for i:=1 to length(text)-1 do
begin
  SendByte(ord(text[i]));
end;

EWeiss 19. Jul 2014 23:05

AW: Sende String an comport
 
Zitat:

Zitat von Natcree (Beitrag 1266060)
das heisst wenn ich es so mache klappt es ?

Delphi-Quellcode:
for i:=1 to length(text)-1 do
begin
  SendByte(ord(text[i]));
end;

Hmmm... Testen ?
Dann siehst du doch ob es klappt. ;)

gruss

Sir Rufo 20. Jul 2014 10:20

AW: Sende String an comport
 
Wenn man durch alle Elemente iterieren möchte, dann geht das immer nach folgendem Schema:
Code:
Für Index
  von <kleinster Index>
  bis <größter Index>
Ist nur kleinster Index und die Anzahl der Elemente bekannt, so kann man durch eine simple Rechnung den Wert von größter Index ermitteln:
Code:
Für Index
  von <kleinster Index>
  bis <kleinster Index> + <Anzahl der Elemente> - 1
Wenn man sich gar sehr unsicher ist und sich diese komplizierte Berechnung nicht zutraut und zudem ein Array vor sich hat, dann doch bitte so und der Drops ist gelutscht:
Delphi-Quellcode:
for LIdx := low( text ) to high( text ) do
  begin
    WhateverWith( text[LIdx] );
  end;
Schon kümmert es den Code nicht mehr, ob der Compiler 1-basierende, 0-basierende oder n-basierende Strings verwaltet.

hathor 20. Jul 2014 12:04

AW: Sende String an comport
 
Warum nicht so?

Delphi-Quellcode:
procedure SENDSTRING (Buffer: String);
var BytesWritten: DWord;
begin
  WriteFile(PortHandle,(Pchar(Buffer))^,Length(Buffer),BytesWritten,NIL);
END;

procedure TForm1.Button1Click(Sender: TObject);
var TextString : String;
begin
   TextString := 'Hallo';
   SendString (TextString+ #13);
end;

himitsu 20. Jul 2014 12:16

AW: Sende String an comport
 
Weil der Code seit 5 Jahren (Unicode) so nicht mehr richtig funktionieren könnte?

hathor 20. Jul 2014 12:22

AW: Sende String an comport
 
Er hat doch nur Delphi 7 Enterprise...

himitsu 20. Jul 2014 13:10

AW: Sende String an comport
 
Dennoch wäre es besser den Code ordentlich zu schreiben, denn genau durch solche Codes gab es die meisten Probleme bei der Unicodeumstellung.

In diesem Fall wird AnsiString verwendet, also gehört der Code auch so geschrieben.
> AnsiString und PAnsiChar


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr.

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