Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Übertragung von Buchstaben per RS232? (https://www.delphipraxis.net/91606-uebertragung-von-buchstaben-per-rs232.html)

Rainer1000 7. Mai 2007 16:45


Übertragung von Buchstaben per RS232?
 
Hallo Ihrs,

ich bin mal total neu hier, und komm direkt mit nem Problem an...
ich kann relativ gut Objekte Programmieren, aber mit der Ausgabe am seriellen Port habsch keine Ahnung. wär nett, wenn ihr mir da helfen könntet.

Ich mussn K8045 so mit Text füllen. das ist alles.

Nur wie bekomm ich Delphi dazu, mir wie ein RS232-Terminal die Daten zu schicken.

Was ich dem Teil schicken muss ist immer abwechselnd eine "0" und dann das zeichn was ich ausgeben will.
Um den Text wieder zu löschen muss ich sozusagen die "0" und dann die "Enter"-Taste schicken...

Kann mir da irgendwie einer helfen? das ganze Muss so aussehen, dass ich den anzuzeugenden text aus einem Edit lese, und dann eben so (ich glaub es ist byte-Weise) an das Ding sende.

Vielen Dank schon mal

Rainer :coder2:

Bernhard Geyer 7. Mai 2007 16:47

Re: Übertragung von Buchstaben per RS232?
 
0er als Füllzeichen? Das Gerät will wohl eher Unicode-Text!
Schon mal ein €-Zeichen gesendet?

Rainer1000 7. Mai 2007 16:57

Re: Übertragung von Buchstaben per RS232?
 
Mit dem €-Zeichen tut sich gar nichts...

wenn ich aber Sende "0T0e0s0t" dann zeigt der an "Test"...

:wall: :wiejetzt:

shmia 7. Mai 2007 18:32

Re: Übertragung von Buchstaben per RS232?
 
Zitat:

Zitat von Rainer1000
... aber mit der Ausgabe am seriellen Port habsch keine Ahnung.

Das ist eine Standardfrage; die kommt alle paar Wochen wieder.
Zum Lesen und Schreiben der seriellen Schnittstelle gibt es diverse Komponenten.
z.B.: SerialNG
und hier gibt's noch mehr: http://www.torry.net/pages.php?id=198

Man muss strikt trennen zwischen dem Inhalt der Daten (das ist dein Problem/Aufgabe)
und dem Transport über die serielle Schnittstelle (das übernimmt die Komponente).

Rainer1000 7. Mai 2007 20:31

Re: Übertragung von Buchstaben per RS232?
 
ja, das diese Frage immer wieder kommt hab ich mir schon gedacht, und ich hab auch die Suche gewühlt,a ber nichts passendes gefunden, bbzw nichts was ich hätte aufbereiten können.

Jetzt hab ihc mich schon geraume Zeit durch dieses SerialNG gewühlt,aber ich hab leider immernoch keinen blassen Schimmer...

Die "0" vor jeden buchstaben setzen ist ja kein Thema.
Auch aus nem String nen einzelnen CHAR ist ja kein PProblem.
Nur dann?
a) wie erkläre ich dem welcher COM, Baud, parity etcpp,
b) Wie wandel ich die chars um und krieg sie dann übertragen? (ein char müsste ja an sich einem Byte entsprechen...)

shmia 8. Mai 2007 09:44

Re: Übertragung von Buchstaben per RS232?
 
Zitat:

Zitat von Rainer1000
Jetzt hab ihc mich schon geraume Zeit durch dieses SerialNG gewühlt,aber ich hab leider immernoch keinen blassen Schimmer...

Die "0" vor jeden buchstaben setzen ist ja kein Thema.
Auch aus nem String nen einzelnen CHAR ist ja kein PProblem.
Nur dann?
a) wie erkläre ich dem welcher COM, Baud, parity etcpp,
b) Wie wandel ich die chars um und krieg sie dann übertragen? (ein char müsste ja an sich einem Byte entsprechen...)

Das Beispielprojekt SerialNGBasicDemo.dpr sollte doch Klarheit bringen.
Zitat:

Zitat von Rainer1000
a) wie erkläre ich dem welcher COM, Baud, parity etcpp,

Das lässt sich alles über Properties an der Komponente einstellen.

Zitat:

Zitat von Rainer1000
b) Wie wandel ich die chars um und krieg sie dann übertragen? (ein char müsste ja an sich einem Byte entsprechen...)

Überhaupt kein Problem; du kannst den String am Stück verschicken:
Delphi-Quellcode:
SendStr := '0T0e0s0t';
SerialPortNG1.SendString(SendStr);

Rainer1000 8. Mai 2007 10:00

Re: Übertragung von Buchstaben per RS232?
 
ja, kann ich, will ich aber nicht.

Der Grund ist einfach, der soll so ne Art Laufschrift bilden bei Stringlängen länger als 16 Chars, und da Modul schiebt die die nicht mehr drauf passen vorne wieder raus...deswgen muss ich einzeln senden mit Zeitverzögerun g...

Ich bastel erstmal, danke für eure Hilfe...

Rainer1000 8. Mai 2007 14:14

Re: Übertragung von Buchstaben per RS232?
 
Es tut mir ja leid, aber ich komm damit leider nicht weiter...

Ich wär euch sehr dankbar, wenn mir irgendeiner im Spaghetti-Code Verfahrenoder so malne

class kurz aufschreibt und ne Procedure, die mir bei 2400Baud, 8 DB, keine Parity, 1 SB, no handshaking einfach nen string an den Com2 schicken kann...


Verdammt, Sysadmin isn harter Job... :wall: :wall: :wall: :coder2:

inherited 8. Mai 2007 14:43

Re: Übertragung von Buchstaben per RS232?
 
Woran haperts denn? Ein einzelnes Zeichen (Char) eines Strings bekommst du mit Stringname[Index], wobei das erste Zeichen Stringname[1] ist.

Rainer1000 8. Mai 2007 15:47

Re: Übertragung von Buchstaben per RS232?
 
ja des weiß ich.

Das roblem liegt in der Übertragen, ich weiß nicht, wie ich das serialNG dazu bekomme was zu übertragen, bzw. wie ich die Serial-Port-Einstellungen mach.. ich blick da nciht durch, die Übertragung ist mein Problem, alles andere ist sozusagen Kinderspiel

shmia 8. Mai 2007 15:59

Re: Übertragung von Buchstaben per RS232?
 
Zitat:

Zitat von Rainer1000
ich weiß nicht, wie ich das serialNG dazu bekomme was zu übertragen, bzw. wie ich die Serial-Port-Einstellungen mach..

Jede Wette, du hast das Beispielprojekt SerialNGBasicDemo.dpr nicht angeschaut. :warn: :warn: :warn:
Sonst hättest du gesehen, dass auf dem Formular ein Button "Settings" liegt.
Geht man da dem Code nach kommt man zu:
Delphi-Quellcode:
procedure TSerialNGBasicDLG.GetDLGData(SerialPortNG : TSerialPortNG);
begin
  SerialPortNG.CommPort := CBPort.Items[CBPort.ItemIndex]; // z.B. 'COM1'
  SerialPortNG.BaudRate := StrToIntDef(CBBaud.Items[CBBaud.ItemIndex],9600); // z.B. 2400
  SerialPortNG.DataBits := StrToIntDef(Copy(CBData.Items[CBData.ItemIndex],1,1),8); // z.B. 8
  SerialPortNG.StopBits := CBStop.ItemIndex; // 0 = 1 Stopbit
  SerialPortNG.ParityType := CBParity.ItemIndex;
  SerialPortNG.FlowControl := BasicFlowModes[CBFlow.ItemIndex];
  SerialPortNG.Active := True;
end;
Also für mich sieht das ganz Glasklar und direkt aus.
Man muss natürlich den Willen haben, die Komponente zu installieren und das Beispielprojekt anzuschauen...
Die ganzen Properties lassen sich auch direkt im Objektinspektor einstellen.

Rainer1000 8. Mai 2007 16:42

Re: Übertragung von Buchstaben per RS232?
 
Soweit war ich auch schon (habs im OI eingestellt).

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, SerialNG, StdCtrls {serialng};

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    serial: TSerialPortNG;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var text:string;
begin

    serial.sendString('0t0e0s0t');
 
end;

end.

Das hab ich jetzt versucht, sollte auf dem Teil "Test" ausgeben.

jetzt schlagt mich ruhig wegen plödster Fehler, aber ich hab echt kein Peil wie ich das hinbekomme. DAS funzt jedenfalls nciht, wie gesagt, Baud etcpp im OI eingestellt.

shmia 8. Mai 2007 16:56

Re: Übertragung von Buchstaben per RS232?
 
Zitat:

Zitat von Rainer1000
jetzt schlagt mich ruhig wegen plödster Fehler

Ich bin gleich soweit. :zwinker:
Du musst natürlich deine Tests mit dem Projekt SerialNGBasicDemo.dpr beginnen !!!!!!
Diese einfache Programm kann einen String an die ser. Schnittstelle senden und zeigt die Antwort an.
SerialNGBasicDemo.exe funktioniert 1000% - tig.
Und wenn nicht, dann liegt ein Hardwareproblem oder eine falsche Konfiguration der Parameter vor.
Erst wenn SerialNGBasicDemo funktioniert hat, darf man daran denken die Komponente in ein eigenes Programm einzubauen.

Man ganz grundsätzlich, um die serielle Schnittstelle anzusprechen ist folgende Reihenfolge einzuhalten:

1.) Hardware anschliesen
2.) mit Terminalprogramm (z.B. Hyperterminal) testen. Nur wenn alles OK, weiter zu 3.)
3.) mit SerialNGBasicDemo testen. Nur wenn alles OK, weiter zu 4.)
4.) Komponente in eigenes Programm einbauen. Bei Problemen zurück zu 3.)

Rainer1000 8. Mai 2007 17:02

Re: Übertragung von Buchstaben per RS232?
 
Also vorgehen wie du sagst:

1) OK!
2) OK! (SimpleTermSE, scho immer mit gearbeitet, schickt "0t0e0s0t", zeigt korrekt an "Test".
3) Einstellungen gemacht, "T0e0s0t" geschickt, ausgabe aber nur "t".

Sorry wenn ich euch alle ein bissl nerve,a ber ich weiß net weiter

//Edit:

Einzeln geschickt "0t" "0e" usw klappt dann, könnte evt an so ner art Flashtime hängen?

//Edit2:

Weiß jetzt auch, wieso die Nullen immer vorher geschickt werden, das ist die ID des Empfangsterminals

TurboMartin 8. Mai 2007 18:00

Re: Übertragung von Buchstaben per RS232?
 
[equote="Auszug aus http://www.velleman.be/downloads/0/manual_k8045.pdf (Seite 15)"]
Baudrate: 2400
Parity: None
Databits: 8
Stopbits: 1
No handshaking
[/equote]
Also von einem Stopbit hast du bisher aber nichts gesagt ;)

Rainer1000 8. Mai 2007 18:30

Re: Übertragung von Buchstaben per RS232?
 
Zitat:

Zitat von Rainer1000
Es tut mir ja leid, aber ich komm damit leider nicht weiter...

Ich wär euch sehr dankbar, wenn mir irgendeiner im Spaghetti-Code Verfahrenoder so malne

class kurz aufschreibt und ne Procedure, die mir bei 2400Baud, 8 DB, keine Parity, 1 SB, no handshaking einfach nen string an den Com2 schicken kann...


Verdammt, Sysadmin isn harter Job... :wall: :wall: :wall: :coder2:



Doch...


Aber komm trotzdem leider immernoch nciht weiter... und ich brauchs am Fr. fuck...

bit4bit 8. Mai 2007 19:31

Re: Übertragung von Buchstaben per RS232?
 
Zitat:

2) OK! (SimpleTermSE, scho immer mit gearbeitet, schickt "0t0e0s0t", zeigt korrekt an "Test".
3) Einstellungen gemacht, "T0e0s0t" geschickt, ausgabe aber nur "t".
... da fehlt doch die erste "0" , oder ?

bit4bit

Rainer1000 8. Mai 2007 19:33

Re: Übertragung von Buchstaben per RS232?
 
Habs zur Sicherheit noch mal getestet, aber selbes Ergebnis...

Kann mir denn keiner helfen?

DGL-luke 8. Mai 2007 20:05

Re: Übertragung von Buchstaben per RS232?
 
Hallo,

bist du sicher, dass du nicht stattdessen

Delphi-Quellcode:
#0'T'#0'e'#0's'#0't'
schicken solltest?

ansonsten sehe ich im Moment keine Ansatzpunkt, um dir bei deinem Problem zu helfen. Hast du ein Datenblatt für das Gerät? FUnktionierts per Hyperterminal?

Rainer1000 8. Mai 2007 20:16

Re: Übertragung von Buchstaben per RS232?
 
Also wenn ich diesen string schicke, dann zeigt der mir "''" an... also immer das Symbol nach der "0".

ich glaub, ich muss das mal auseinandernehmen und nkomplett neu zusammenpuzzlen...

DGL-luke 8. Mai 2007 21:29

Re: Übertragung von Buchstaben per RS232?
 
Ich hab das nicht umsonst in Delphi-tags gesetzt...

Pseudocode:
Delphi-Quellcode:
msg := #0'T'#0'e'#0's'#0't';
SendeAnRS232(msg);

Rainer1000 8. Mai 2007 21:46

Re: Übertragung von Buchstaben per RS232?
 
ich hab das auhc nicht umsonst so getestet!

plöd bin ich ja auch nicht

Muetze1 9. Mai 2007 14:11

Re: Übertragung von Buchstaben per RS232?
 
Zitat:

Zitat von Rainer1000
plöd bin ich ja auch nicht

Ok, dann verrate uns doch mal wie dein LCD auf die Hochkomma's kommt, wo doch in seinem String keine solche enthalten sind?

TurboMartin 9. Mai 2007 15:03

Re: Übertragung von Buchstaben per RS232?
 
Und ich erwähne es noch einmal, dass in SerialNG 0 Stopbits eingetragen ist, aber 1 verlangt wird... :stupid:

inherited 9. Mai 2007 15:24

Re: Übertragung von Buchstaben per RS232?
 
Das weiß er und hat es eingetragen :roll:
Erst lesen, dann posten.


Zitat:

Zitat von Rainer1000
Es tut mir ja leid, aber ich komm damit leider nicht weiter...

Ich wär euch sehr dankbar, wenn mir irgendeiner im Spaghetti-Code Verfahrenoder so malne

class kurz aufschreibt und ne Procedure, die mir bei 2400Baud, 8 DB, keine Parity, 1 SB, no handshaking einfach nen string an den Com2 schicken kann...


Verdammt, Sysadmin isn harter Job... :wall: :wall: :wall: :coder2:


MrOuzo 9. Mai 2007 15:53

Re: Übertragung von Buchstaben per RS232?
 
Hi,

also ich verwende CPort, aber bevor du was schicken kannst musst du das Port öffnen, genauso wird es wohl bei serialng sein. Active setzen oder so, sonst geht da nix mit senden

Gruß
MrOuzo

Rainer1000 9. Mai 2007 17:18

Re: Übertragung von Buchstaben per RS232?
 
Also, zum einen: wenn ich diesen komischen String so sende, wie du das da geschrieben hast, zeigt der mir 2 ' an.

zum anderen: der Port ist active gesetzt, hat bei parity 0 eingetragen, was keiner entsprich, bei den DB 8 bei den SB 1 und Baud2400 //Edit: mit Terminal und dem SerialNGBasicDemo getestet

MrOuzo 10. Mai 2007 07:29

Re: Übertragung von Buchstaben per RS232?
 
Hallo Rainer1000

benutz doch die Procedure SendData (Data : Pointer; Size : DWord); //Send binary Data

lege ein Array ob Byte an, schreibe dann die Daten rein und schicke es ab

kannst natürlich auch ein Array mit nur 2 Byte anlegen, im array[0] steht dann die ID und im array[1] der code für dein Zeichen und dann sendest du immer nur die 2 Bytes was ja 1 Zeichen auf dem Display ergibt.

Das kann doch nicht so schwer sein, nur musst du warscheinlich die ausgerichtete Recordfelder im Delphi abschalten, sonst schickt er irgendwas


Delphi-Quellcode:
Procedure TForm1.Sende(ID: Char; Str: String);
Var
  i: Integer;
  S: String;
Begin
  For i := 1 To length(Str) Do
  Begin
    S := ID + str[i];
    SerialPortNG1.SendString(S);
    repeat
      Application.ProcessMessages;
    until not SerialPortNG1.SendInProgress;
  End;
End;


procedure TForm1.Button1Click(Sender: TObject);
begin
  SerialPortNG1.Active := True;
  Sende('0','Test');
end;
so gehts aber auch :cheers:


Gruß
MrOuzo

frank-wob 10. Mai 2007 08:38

Re: Übertragung von Buchstaben per RS232?
 
Guck mal in deine PN. Ein Auszug aus dem Code für unsere eigenen Produkte.

Gruß Frank

Rainer1000 10. Mai 2007 15:27

Re: Übertragung von Buchstaben per RS232?
 
Problem dank Franks Hilfe endlich gelöst!

Danke an Alle die es versucht haben, besonders an Frank ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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-2025 by Thomas Breitkreuz