AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Exception während RS232 Datenempfang
Thema durchsuchen
Ansicht
Themen-Optionen

Exception während RS232 Datenempfang

Ein Thema von akuk · begonnen am 12. Mär 2020 · letzter Beitrag vom 26. Mär 2020
Antwort Antwort
akuk

Registriert seit: 8. Mär 2020
Ort: Wald, Zürich Oberland
51 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Exception während RS232 Datenempfang

  Alt 16. Mär 2020, 16:24
Hallo
Nach dem ich mich durch div. Tutorials durchgekämpft habe versuchte ich
mein Problem mit der Exception zu lösen.
Nun tritt eine andere Exception. Was ich gemacht habe :

In der Unit für RS232 Empfang (OptiNumericCom.Pas) die im Thread läuft
habe ich CriticalSction definiert ab Empfang der Daten bis Empfang beendet

var
.
EmpfangCS : TRTLCriticalSection;
.
.
function TOptiNumericComm.receiveMessage : TMeldung;
.
.
.
EnterCriticalSection(EmpfangCS);
id := recByte; //Empfang von 1.Byte (Meldungstyp) ****** Hier Exception *****

case (id AND $0F)
$01:
// usw
else //Meldung-In (16 Byte) einlesen
begin
SetLength(Result, 17);
Result[0] := id;
for i:=1 to 16
do Result[i] := comport.GetByte;
end;
end; //ende Case
LeaveCriticalSection(EmpfangCS);
======================
Im Hauptprogramm ist keine CriticalSection definiert,is auch nicht nötig,
ich will nur erreichen, dass der Empfang im Thread ohne Unterbruch
durchläuft.

Die Exception tritt auf bereits beim Empfang von 1. Byte. (id := recByte
Recbyte befindet sich in eine andere Unit,ist natürlich mit uses deklariert.
Wo ist das Problem ?
Der Datenempfang hat vorher ohne CriticalSection für erste paar Meldungen funktioniert bis Exception auftratt wg. Synchronisation.
Anton Kurka
  Mit Zitat antworten Zitat
akuk

Registriert seit: 8. Mär 2020
Ort: Wald, Zürich Oberland
51 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Exception während RS232 Datenempfang

  Alt 16. Mär 2020, 19:05
Hallo
Ich habe vergessen die CS Initialisieren.
Jetzt läuft es durch,Meldungen werden Empfangen aber
der Empfang wird irgendwie gestört, es kommen wirre Werte über RS232.
Verlangsamt CS den Empfang ?
Und es kommt die alte Exception wieder, wie wenn das CS nicht wäre.
Ich muss es mit dem LA morgen genau anschauen was da passiert.
Anton Kurka
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.174 Beiträge
 
Delphi 12 Athens
 
#3

AW: Exception während RS232 Datenempfang

  Alt 16. Mär 2020, 19:59
Versuch im Rs232 Empfang nur die Daten z.B. in einem Fifo od. Ringbuffer zu speichern, und dann schnell wieder raus.
Die Verarbeitung dann an einer separaten Stelle Durchführen.
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
717 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Exception während RS232 Datenempfang

  Alt 17. Mär 2020, 09:10
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.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
akuk

Registriert seit: 8. Mär 2020
Ort: Wald, Zürich Oberland
51 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Exception während RS232 Datenempfang

  Alt 17. Mär 2020, 13:04
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 ?
Anton Kurka
  Mit Zitat antworten Zitat
akuk

Registriert seit: 8. Mär 2020
Ort: Wald, Zürich Oberland
51 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Exception während RS232 Datenempfang

  Alt 18. Mär 2020, 17:07
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.
Anton Kurka
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Exception während RS232 Datenempfang

  Alt 18. Mär 2020, 18:01
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  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 21:00 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