AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ich bleib im Case hängen

Ein Thema von Daniel B · begonnen am 2. Mär 2003 · letzter Beitrag vom 7. Mär 2003
Antwort Antwort
Seite 1 von 2  1 2      
Daniel B
(Gast)

n/a Beiträge
 
#1

Ich bleib im Case hängen

  Alt 2. Mär 2003, 10:03
Hallo,

Delphi-Quellcode:
var
  sCom, sByte: String;
  iFor: Integer;
begin
 { ComPort1.ReadStr(sCom, 2);
  sByte := '';
  Delay;
  sByte := IntToStr(Byte(sCom[2]));
  ShowMessage('Daten: ' + sByte); }

  for iFor := 1 to ComPort1.InputCount do
  begin
    ComPort1.ReadStr(sCom, 1);
    sByte := '';
    begin
      case sCom[1] of
                  #0 : begin
                         ShowMessage(IntToStr(Ord(sCom[1]))); ***
                         ShowMessage(IntToStr(Ord(sCom[2])));
                       end;
                  #1 : begin
// ShowMessage(IntToStr(Ord(sByte)));
// ShowMessage(IntToStr(Ord(sByte])));
                       end;
      end; //case
    end; //begin
  end; //for
end;
Mit folgendem Code, lese ich Daten von der Seriellen. Geht auch im Prinzip. Als erstes kommt auch #0, d.h., ich komme auch in die Zeile mit den drei Sternchen, diese wird jedoch nicht mehr ausgeführt. Irgendwie bleibe ich total in der Schleife hängen, mehr passiert nicht, ich kann nur noch das Programm schliessen. Es sieht so aus als wenn ich gar keine Daten erhalten würde. Wenn ich aber Debuge und der Cursor in der Zeile mit *** ist, dann steht in sCom auch #0 drin.

Grüsse, Daniel
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Ich bleib im Case hängen

  Alt 2. Mär 2003, 10:35
Zitat von Daniel B:
Wenn ich aber Debuge und der Cursor in der Zeile mit *** ist, dann steht in sCom auch #0 drin.
Kommt nachdem du dann [F8] gedrückt hast die MessageBox?
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#3
  Alt 2. Mär 2003, 10:39
Nein, es passiert einfach nichts, egal ob F7 oder F8. Es passiert einfach nichts. Ich kann aber schon noch das Programm normal beenden.

Grüsse, Daniel
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4
  Alt 2. Mär 2003, 10:47
Was hast du eigentlich mit sCom[2] vor? Du liest doch nur 1 Zeichen ein, der muss man das ComPort1.ReadStr(sCom, 1); anders verstehen?
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#5
  Alt 2. Mär 2003, 10:53
Zitat von jbg:
Du liest doch nur 1 Zeichen ein, der muss man das ComPort1.ReadStr(sCom, 1); anders verstehen?
So ist es zu verstehen. Ich habe es auch mal mit 2 versucht, da ich eigentlich zwei Bytes lesen will, das erste Byte ist #0 oder #1 und das zweite ist dann wirklich das was ich brauche., muss es aber anhand vom ersten unterscheiden können.
Wenn #0#32 oder #1#32, dann hat #32 in beiden Fällen andere Bedeutungen für mich. Es ist immer abhängg vom ersten.

Grüsse, Daniel
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6
  Alt 2. Mär 2003, 10:55
Ersetze mal ComPort1.InputCount und ComPort1.ReadStr() durch 1 bzw. sCom := #0#32.
Wird die Zeile dann ausgeführt? Wenn ja, dann einzeln die original-Funktionsaufrüfe ausprobieren.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#7
  Alt 2. Mär 2003, 11:00
Zitat von jbg:
Ersetze mal ComPort1.InputCount und ComPort1.ReadStr() durch 1 bzw. sCom := #0#32.
Das würde mir nichts bringen, den #32 ist nicht fest, ist ja nur ein Beispiel. Byte1 kann nur #0 oder #1 sein, aber der Wert des zweten Bytes kann zwischen 0 und 255 liegen.

Aber ich kann Dir sagen das der auskommentierte Teil am anfang der Prozedur wunderbar klappt.

Grüsse, Daniel
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#8
  Alt 2. Mär 2003, 11:11
Zitat von Daniel B:
Das würde mir nichts bringen, den #32 ist nicht fest, ist ja nur ein Beispiel.
Und das Ersetzen soll dabei helfen, den Fehler zu finden. Das das Programm dann nichts von der seriellen Schnittstelle liest ist mir klar. Aber zum eingrenzen des Fehlers dient es allemale.


Zitat:
Aber ich kann Dir sagen das der auskommentierte Teil am anfang der Prozedur wunderbar klappt.
In dem rufst du kein ComPort1.InputCount auf. Könnte der Fehler vielleicht dort liegen.
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#9
  Alt 2. Mär 2003, 11:19
Hatte es missverstanden.
Also, das scheint nichts zu bringen. Wenn ich das Programm aus Delphi heraus starte und ausprobiere, dann erhalt ich immer eine Access Violation at Adress...
Wenn ich aber nur die exe normal starte, passiert dies nicht, es tut sich aber auch nichts wenn ich die Daten anfordere. Ich kann so oft auf den Empfangen Button klicken wie ich will, es tut sich einfach nichts.

Grüsse, Daniel
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10
  Alt 2. Mär 2003, 11:25
Zitat:
for iFor := 1 to ComPort1.InputCount do
Ändert sich der Wert von ComPort1.InputCount? Wenn ja, was ich annehme, dann solltest du das ganze in eine while-Schleife umwandeln, da bei einer for-Schleife der Ziel-Wert nur einmal ausgewertet wird. Also bei einer Änderung von InputCount iteriert die for-Schleife immernoch bis zum alten Wert, der beim Eintritt in die Schleife von InputCount zurückgeliefert wurde.

Hast du auch das sCom[2] auskommentiert, oder zumindest auch 2 Zeichen eingelesen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:20 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