Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Benötige Hilfe für RS232 Schnittstelle (https://www.delphipraxis.net/109050-benoetige-hilfe-fuer-rs232-schnittstelle.html)

moby 23. Feb 2008 14:11


Benötige Hilfe für RS232 Schnittstelle
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,

ich benötige dringend eure Hilfe zu meinem RS232 Programm. Mit diesem Programm sollte ich eigentlich die Daten, die über die serielle Schnittstelle gesendet werden, einlesen können. Die Daten sollten im Edit1 Fenster erscheinen, während die ProgressBar ebenfalls die Daten grafisch anzeigt. Beim Compilieren erscheint folgende Fehlermeldung. Ich weiß nicht, was diese Fehlermeldung genau bedeutet bzw. wo der Fehler in meinem Programm liegt.

Vielen Dank für eure Hilfe schon mal im Voraus.

Gruß Moby

moby 23. Feb 2008 14:37

Re: Benötige Hilfe für RS232 Schnittstelle
 
Ich schreibe das erste Mal einen Beitrag mit Anhang ins Forum und wusste noch nicht genau, wie das mit den Quellcodes anzeigen funktioniert. Jetzt hab ich ihn. Ist vielleicht einfacher als der Download.

Die Fehlermeldung ist folgende:

Im Projekt RS232.exe ist eine Exception der Klasse EConverter aufgetreten. Meldung"OO"ist kein gültiger Integerwert'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.(00= stehen zwei Vierecke drin)

Delphi-Quellcode:
unit uRS232BAR;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Timer1: TTimer;
    Button1: TButton;
    ScrollBar1: TScrollBar;
    ProgressBar1: TProgressBar;
    Label1: TLabel;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  ch : integer;
  Fehler : integer;

implementation

{$R *.DFM}
procedure OPENCOM(S:PCHAR) ; stdcall; external 'PORT.DLL';
function READBYTE : Integer ; stdcall; external 'PORT.DLL';

procedure TForm1.FormCreate(Sender: TObject);
begin
  OpenCom (Pchar('COM1:4800,n,8,1'));
  ProgressBar1.Max := 255;
  Form1.Caption := 'RS232BAR';
  ScrollBar1.Min := 1; // 1ms
  ScrollBar1.Position := 10; // 10ms
  Timer1.Interval := ScrollBar1.Position;
  Button1.Caption := 'Clear';
  Label1.Caption := 'Samplerate: '+IntToStr(Timer1.Interval)+' ms';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Edit1.Clear;
  repeat ch := ReadByte until ch=13;
  repeat
    ch := ReadByte;
    Edit1.Text := Edit1.Text+chr(ch);
  until ch=13;
try
  ProgressBar1.Position := StrToInt(copy(Edit1.Text,7,3));
  //Edit2.Text := copy(Edit1.Text,7,3);
except
   inc (Fehler);
   Edit2.Text := 'Fehler: '+IntToStr(Fehler);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Edit1.Clear;
end;

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
  Timer1.Interval := ScrollBar1.Position;
  Label1.Caption := 'Samplerate: '+IntToStr(Timer1.Interval)+' ms';
end;

end.

christian.noeding 23. Feb 2008 14:55

Re: Benötige Hilfe für RS232 Schnittstelle
 
Hi :)


Du musst in dieser Zeile aufpassen, dass du wirklich nur Text umwandeln willst, welcher auch wirklich eine Ziffer beinhaltet:

ProgressBar1.Position := StrToInt(copy(Edit1.Text,7,3));

Du hast diese Sache ja schon mit einem Try-Except-End-Block abgefangen. Führst du dein Programm jedoch innerhalb von Delphi aus, dann meldet er dennoch diesen "Fehler". Das ist aber normal und auch gewünscht. Starte dein Programm mal ohne Delphi, dann sollte es ohne Probleme funktionieren :) Wenn du dies ohne Try-Except lösen möchtest, müsstest du die einzelnen Buchstaben checken, ob diese zwischen 0 und 9 liegen.


bis dann :)

moby 24. Feb 2008 09:00

Re: Benötige Hilfe für RS232 Schnittstelle
 
Hallo Christian,

ja super, es funktioniert tatsächlich so, wenn ich Delphi nicht starte. Ich habe mit ProgressBar´s noch nie gearbeitet und bin einfach mal davon ausgegangen, das ich es so richtig programmiert habe. Aber in der ProgressBar zeigt es nie etwas an und in meinem Edit2 Fenster ladet es die ganze Zeit die Fehlermeldung und wird mit 1 durch mein inc erhöht. Versteh gerade nicht ganz, was ich da falsch gemacht habe. Ich habe ein Pollin Evulationsboard und auf diesem ein Programm, mit welchem ich an einem Poti drehe und dann auf dem LCD die Werte von 0-255 ausgebe. Diese Daten werden auch über die serielle Schnnittstelle übertragen. Im Edit1 Fenster erscheinen die Werte von 0-255. Auch wenn ich diesen Code
Delphi-Quellcode:
try
  ProgressBar1.Position := StrToInt(copy(Edit1.Text,7,3));
  //Edit2.Text := copy(Edit1.Text,7,3);
except
   inc (Fehler);
   Edit2.Text := 'Fehler: '+IntToStr(Fehler);
end;
weglasse und nur
Delphi-Quellcode:
ProgressBar1.Position := StrToInt(Edit1.Text)
schreibe, geht nichts. Oder geht das kann man diese nicht so programmieren?
Gruß moby

christian.noeding 24. Feb 2008 09:59

Re: Benötige Hilfe für RS232 Schnittstelle
 
Hi moby,

dein Vorgehen ist an sich richtig. Die Daten kommen von der RS232 Schnittstelle als String und so ist deine Umwandlungsmethode richtig. Allerdings scheint dein Pollin-Board noch andere Daten (bzw. andere Zeichen) mit den Kanalwertinformationen zu senden.

Beispiel:

statt "67" sendet dein Board z.B. "Wert=67"

da kann der Befehl strtoint() natürlich nicht funktionieren. Selbst wenn nur ein Leerzeichen nach der 67 steht, funktioniert deine Funktion nicht mehr.


Poste doch mal hier die Ausgabe, die du ohne Konvertierung vom Pollin-Board bekommst (also wirklich nur die Strings). Dein Ansatz:

ProgressBar1.Position := StrToInt(copy(Edit1.Text,7,3));

ist somit Goldrichtig, allerdings ist die Positionsangabe 7,3 eventuell noch nicht ganz Richtig.


bis dann,
Christian :)

moby 24. Feb 2008 18:15

Re: Benötige Hilfe für RS232 Schnittstelle
 
Hallo Christian,

bekomme meine ProgressBar immer noch nicht zum laufen und in meinem Edit2 Fenster laufen immer noch die Fehler ständig hoch. Ich habe jetzt den Quelltextausschnitt
Delphi-Quellcode:
  repeat
    ch := ReadByte;
    Edit1.Text := Edit1.Text+chr(ch);
  until ch=13;
umgeschrieben in
Delphi-Quellcode:
  repeat
    ch := ReadByte;
    Edit1.Text :=Edit1.Text+IntToStr(ch);
  until ch=13;
Hast du es so gemeint? Wenn ich die Daten der seriellen Schnittstelle einlese, erscheint bei Vollausschlag des Poti in meinem Edit1 Fenster 255. Ändere ich den Quelltext wie beschrieben, zeigt es im Edit1 Fenster bei Vollausschlag des Poti folgenden Zahlen-String
Delphi-Quellcode:
5049541013
. Hilft das weiter?
Gruß moby.

moby 25. Feb 2008 19:47

Re: Benötige Hilfe für RS232 Schnittstelle
 
Hallo,
wenn ich mein Programm starte, beginnt es ja sofort an, die Daten auszulesen. Wie kann ich mit einem "Start"-Button das ganze Programm starten und mit einem "Stop"-Button das ganze Programm wieder beenden? Wie muß ich da den Quelltext ändern bzw. wo einen Startbefehl einfügen? Vielen Dank schon mal.
Gruß moby.

moby 25. Feb 2008 22:31

Re: Benötige Hilfe für RS232 Schnittstelle
 
:wall: ja, jetzt ist es mir auch klar. Ich hab lediglich die Positionsangabe von 7,3 auf 1,3 geändert und schon zeigt meine ProgressBar synchron zu meinen Werten im Edit1 Fenster die Werte grafisch dar. Ich weiß zwar, dass ich mit close(); die komplette Form schließen kann, aber wie kann ich das Erfassen der Daten stoppen und starten ohne mein Fenster zu schließen bzw. ohne das die Daten beim öffnen gleich eingelesen werden?

marabu 26. Feb 2008 05:48

Re: Benötige Hilfe für RS232 Schnittstelle
 
Moin,

du hast das Einlesen der Daten an einen Timer gebunden. Wenn du Timer.Enabled zur Entwurfszeit auf False setzt und die Umschaltung dieser Eigenschaft mit einer Benutzeraktion (Menüeintrag, Button, ...) verknüpfst, dann kannst du den Empfang steuern und auch noch notwendige Vorkehrungen (Puffer initialisieren, Cache leeren, ...) treffen. Eventuell möchtest du auch die Schnittstelle erst dann belegen (OpenCom, CloseCom).

Grüße vom marabu

moby 26. Feb 2008 11:35

Re: Benötige Hilfe für RS232 Schnittstelle
 
Hallo marabu,

vielen Dank für deine Hilfe. Es geht nun so, wie ich es mir vorgestellt habe. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 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