Delphi-PRAXiS
Seite 3 von 7     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Exception während RS232 Datenempfang (https://www.delphipraxis.net/203690-exception-waehrend-rs232-datenempfang.html)

Sinspin 17. Mär 2020 09:10

AW: Exception während RS232 Datenempfang
 
Hallo,

beim Empfang solltest Du kein CriticalSection verwenden, denn das kann das Annehmen von Daten blokieren.
Besser ist es wirklich einen ausreichend großen internen Puffer zu verwenden und einen anderen Thread die Verarbeitung machen zu lassen.
Für den Zugriff auf den Puffer musst Du dann sicherstellen das beim auslesen und reinschreiben andere Positionsmarken (Leseposition/Schreibposition) verwendet werden. Ansonsten ist wieder synchonisation nötig, was dann wieder Daten killen könnte.

akuk 17. Mär 2020 13:04

AW: Exception während RS232 Datenempfang
 
Hallo Sinspin
das verstehe ich nicht, warum sollen die Daten blockiert sein ,die CriticalSection wird ja auschliesslich durchgelaufen (ich habe nur eine CS).
Hab ich da etwas falsch verstanden ?

In der CS ist der Handshake RTS/CTS und danach der Datenempfang und wieder Rts/cts. Mit dem LA habe ich es angechaut und es scheint richtig zu laufen.

Aber im Hauptprogramm (wo die Daten aus rs232 verarbeitet werden) kommt immer wieder Exception (ungültige Zeigeroperation), habe bis jetzt nicht herausgefunden wo es passiert.

Gibt es eine Möglichkeit im RAD Delphi Rio das man feststellen kann was die Exception ausgelöst hat ? eine Art Tracen ?

akuk 18. Mär 2020 17:07

AW: Exception während RS232 Datenempfang
 
Hallo Zusammen
langsam bringt mich das ganze zu Verzweiflung.
Ich habe in allen relevanten Teilen CriticalSection eingefügt um Sicherzustellen das zwischen der RS232 Thread (Daten Empfang) und dem
Hauptprogramm (wo Die Daten analysiert werden und Angezeigt) Die DatenSynchronisation gewährleistet ist.

Ich darf wohl annehmen das der Codeteil der sich innerhalb der CritischeSectionen befindet ausschlisslich durchgelaufen wird.

Ich habe 3 kritischeSektionen(EmpfangCS).
1.) im RS232 Thread,
2.)im Hauptprogramm wo daten aus dem Thread analysiert werden und
3.) angezeigt werden.
Und es kommt kurz nach dem Programmstart immer eine
SystemException (ungültige Zeigeroperation).
Es werden geräde diese Teile mehrmals fehlerlos durchgelaufen, erst
nach mehreren Durchläufen kommt es zu Exception.

Leider kann ich nicht zurückverfolgen was es ausgelöst hat.
Hat jemand Erfahrung damit wie man aus der SystemException zurückverfolgan kann zum Ursprung was es ausgelöst hat.

Medium 18. Mär 2020 18:01

AW: Exception während RS232 Datenempfang
 
Doofe Frage am Rande: Nutzt du an all diesen Stellen wirklich die selbe Critical Section; also ein und dieselbe Instanz, oder heißt die einfach nur überall gleich?

Ansonsten fürchte ich, werden wir hier etwas mehr als den bereits gezeigten Code brauchen. Am besten alle Methoden, in denen die CS jetzt verwendet wird, mit möglichst wenigen Kürzungen. Auch die Klassendeklarationen die zu den Methoden gehören wären interessant. Ich muss nämlich gestehen: Ich habe aus den bisherigen Infos null Ahnung was hier wo, wann und mit wem genau passiert.

akuk 18. Mär 2020 20:18

AW: Exception während RS232 Datenempfang
 
Liste der Anhänge anzeigen (Anzahl: 5)
Hallo Medium
ist keine Doofe Frage, ist ja logisch.
Ja ich habe nur eine CriticalSection (EmpfangCS).Am Anfang war da gar keine.

Das Gesamte Programm ist sehr gross, und die jetztige Version stammt nicht von mir. Ich war 1991 Mit_Entwickler der DOS Version (MS Pascal).
Diese Version war der Ausgangpunkt für die jetztige OOP Version.
Die Firma die OOP Version Entwickelt hat ist leider liquidiert.

Ich teste zuerst nur das enfachste Menue (Manuel),in diesem Menue wird nur Empfangen (Istwert = M04).
Alle andere Meldungen von der CNC werden über rs232 zwahr empfangen
(im Thread) aber vom Hauptprogramm in diesem Menue nicht weiter verarbeitet.

Sende darum nur die 5 Units die meiner Meinung nach in diesem Menue relevant sind, im ganzem sind es 31 Units.
Die Exception tritt dann auf, nach dem das MAN_Menue(TForm11) aufgebaut wird
bevor die Istwerte (siehe NCTBUP12) angezeigt werden. Wenn man schrittweise duch den Programm
geht, braucht es mehrere Durchläufe bis die Exception auftritt.

Vielen Dank zum voraus
Anton

Rollo62 19. Mär 2020 06:23

AW: Exception während RS232 Datenempfang
 
Nur mal kurz drübergeschaut, ich würde versuchen das viel kleiner, modularer auseinander zu ziehen.

Hier ein paar Ideen:

in OptiNumericComm:
ich würde immer versuchen die Länge von dem eigentlichen Objekt (hier comport) zu bekommen, nicht von woanders.
Sonst könnte das schnell um die Ohren fliegen wenn Daten nicht vorhanden.
Delphi-Quellcode:
      for i:=1 to 8 do
         Result[i] := comport.GetByte; // was macht denn getByte wenn keine Daten mehr da sind ?
an zig anderen Stellen:
ich würde versuchen Enter - Leave in try - except -finally zu kapseln, um besser debuggen zu können
Delphi-Quellcode:
procedure
begin
  InitializeCriticalSection(EmpfangCS);
   try
      try
....
      except
        on E : Exception do
        begin
        // wenn hier ein Dummy-Code steht könnte man die Exception debuggen, und damit wissen wo die herkommt
        end;

    finally
        LeaveCriticalSection(EmpfangCS);
    end;
end;

akuk 19. Mär 2020 07:47

AW: Exception während RS232 Datenempfang
 
Hallo Rollo62
Ja da hast Du Recht, es is nicht immer konsequent, einmal mit recbyte andermal mit GetByte.Werde ich korrigieren.
Das die CNC Daten richtig sendet darauf kann man sich verlassen,es ist speziel ein Mikrokontroller in der CNC dafür da.

Das andere mit leave in try werde ich versuchen. Das muss ich in allen relevanten Methoden machen, oder ?
Vielen Dank für die Hilfe.
Anton

Klaus01 19. Mär 2020 08:20

AW: Exception während RS232 Datenempfang
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Anton,

habe mal angefangen das in kleinere Methoden zu packen.
Vielleicht magst Du es Dir mal anschauen.

Grüße
Klaus

akuk 19. Mär 2020 08:57

AW: Exception während RS232 Datenempfang
 
Hallo Klaus
Vielen Dank, das ist sehr lieb von Dir.
Ist der Grund für das Aufteilen
das man evt. Exception besser abfangen kann ?
Heute Nachmitag kann ich es schnell probieren.
Gruss
Anton

Klaus01 19. Mär 2020 09:09

AW: Exception während RS232 Datenempfang
 
Hallo Anton,

auch das - zusätzlich wird die receiveMessage Funktion lesbarer und übersichtlicher.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 Uhr.
Seite 3 von 7     123 45     Letzte »    

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