AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Benötige Hilfe für RS232 Schnittstelle
Thema durchsuchen
Ansicht
Themen-Optionen

Benötige Hilfe für RS232 Schnittstelle

Ein Thema von moby · begonnen am 23. Feb 2008 · letzter Beitrag vom 26. Feb 2008
Antwort Antwort
moby

Registriert seit: 6. Okt 2007
Ort: Heilbronn
12 Beiträge
 
Delphi 5 Standard
 
#1

Benötige Hilfe für RS232 Schnittstelle

  Alt 23. Feb 2008, 15:11
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
Miniaturansicht angehängter Grafiken
form_216.jpg   fehler_rs_188.jpg  
Angehängte Dateien
Dateityp: doc quellcode_153.doc (67,0 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
moby

Registriert seit: 6. Okt 2007
Ort: Heilbronn
12 Beiträge
 
Delphi 5 Standard
 
#2

Re: Benötige Hilfe für RS232 Schnittstelle

  Alt 23. Feb 2008, 15:37
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.
  Mit Zitat antworten Zitat
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Benötige Hilfe für RS232 Schnittstelle

  Alt 23. Feb 2008, 15:55
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
Christian Nöding
  Mit Zitat antworten Zitat
moby

Registriert seit: 6. Okt 2007
Ort: Heilbronn
12 Beiträge
 
Delphi 5 Standard
 
#4

Re: Benötige Hilfe für RS232 Schnittstelle

  Alt 24. Feb 2008, 10:00
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 ProgressBar1.Position := StrToInt(Edit1.Text) schreibe, geht nichts. Oder geht das kann man diese nicht so programmieren?
Gruß moby
  Mit Zitat antworten Zitat
Benutzerbild von christian.noeding
christian.noeding

Registriert seit: 26. Mai 2005
Ort: Knw.-Remsfeld
119 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Benötige Hilfe für RS232 Schnittstelle

  Alt 24. Feb 2008, 10:59
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
Christian Nöding
  Mit Zitat antworten Zitat
moby

Registriert seit: 6. Okt 2007
Ort: Heilbronn
12 Beiträge
 
Delphi 5 Standard
 
#6

Re: Benötige Hilfe für RS232 Schnittstelle

  Alt 24. Feb 2008, 19:15
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 5049541013 . Hilft das weiter?
Gruß moby.
  Mit Zitat antworten Zitat
moby

Registriert seit: 6. Okt 2007
Ort: Heilbronn
12 Beiträge
 
Delphi 5 Standard
 
#7

Re: Benötige Hilfe für RS232 Schnittstelle

  Alt 25. Feb 2008, 20:47
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.
  Mit Zitat antworten Zitat
moby

Registriert seit: 6. Okt 2007
Ort: Heilbronn
12 Beiträge
 
Delphi 5 Standard
 
#8

Re: Benötige Hilfe für RS232 Schnittstelle

  Alt 25. Feb 2008, 23:31
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Benötige Hilfe für RS232 Schnittstelle

  Alt 26. Feb 2008, 06:48
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
  Mit Zitat antworten Zitat
moby

Registriert seit: 6. Okt 2007
Ort: Heilbronn
12 Beiträge
 
Delphi 5 Standard
 
#10

Re: Benötige Hilfe für RS232 Schnittstelle

  Alt 26. Feb 2008, 12:35
Hallo marabu,

vielen Dank für deine Hilfe. Es geht nun so, wie ich es mir vorgestellt habe.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 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