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
Seite 5 von 7   « Erste     345 67      
akuk

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

AW: Exception während RS232 Datenempfang

  Alt 20. Mär 2020, 16:39
Hallo Zusammen
In der Unit F_MainWindows, Zeile 100 ist die Typendeklaration :
type
//Record for new files, will occur when LParam = TH_NEWFILE, WParam will be PNewFileRecord
PNewDataRecord = ^TNewDataRecord;
TNewDataRecord = record
ThreadID : Cardinal;
Data : OptiNumericComm.TMeldung;
DataLength : integer;
end;

Nur finde ich
auf der Zeile 145: NewDataRecord^.DataLength := Length(receivedMessage);
dann gibst Zeile 140: receivedMessage := commTest.receiveMessage;
aber das CommTest ist nicht auffindbar.Was ist das ?
Wo wird dem DAtaLength Wert zugewiesen ?


Ich kenne mich zu wenig gut im Delphi, aber könnte das die Ursache sein
für die Exception ?
Anton Kurka
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#42

AW: Exception während RS232 Datenempfang

  Alt 20. Mär 2020, 18:46
Hallo Anton,

receivedMessage := commTest.receiveMessage; Hier wird receivedMessage ein Array bzw. dessen Adresse zugewiesen.
Die Größe des Array wird in recieveMessage festgelegt.

Daher muss bei receiveMessage keine Arraylänge gesetzt werden.
Ich denke nicht das der Fehler hier liegt.

Wo werden denn die erzeugten records wieder freigegeben?
Werden die eventuell an verschiedenen Stellen freigegeben?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#43

AW: Exception während RS232 Datenempfang

  Alt 20. Mär 2020, 19:11
.. was möglich wäre..

receivedMessage ist eine lokale Variable.
Hier wird dem NewDataRecord^.Data die Adresse, nicht der Inhalt, der receivedMessage zugewiesen.
Am Ende der Methode wird die lokale Variable aufgeräumt.
Die Adresse auf die NewDataRecord^.Data zeigt ist möglicherweise
nicht mehr gültig bzw. überschrieben worden.

Versuche mal ob es so besser wird:
Delphi-Quellcode:
function ReciveDataCom( data : Pointer) : Integer;
var NewDataRecord : PNewDataRecord;
    SendDataRecord : PNewDataRecord;
    Done : Boolean;
    receivedMessage : OptiNumericComm.TMeldung;
    msg : tagMSG;

begin
  if not commTest.initOptiNumericComm(COMPORT) then
  begin
    PostMessage( Form1.Handle, TH_MESSAGE, TH_ERROR, GetCurrentThreadID );
  end;
  while not commTest.checkCommActive do
  begin

  end;
  PostMessage( Form1.Handle, TH_MESSAGE, TH_CONNECTED, GetCurrentThreadID );

  Result := 0;
  Done := False;
  while not Done do
  begin
    Result := Result + 1;
    receivedMessage := commTest.receiveMessage;

    New(NewDataRecord);
    NewDataRecord^.ThreadID := GetCurrentThreadID;
    NewDataRecord^.DataLength := Length(receivedMessage);
    SetLenght(NewDataRecord^.Data, Length(receivedMessage));
    move(receivedMessage, NewDataRecord^.Data, NewDataRecord^.DataLength);
    PostMessage( Form1.Handle, TH_MESSAGE, TH_DATAM, Integer(NewDataRecord));

    //Done := True;

    if (receivedMessage[0] and $0F) = $06 then
    begin
      if PeekMessage(&msg, 0, 0, 0, PM_REMOVE) then
      begin
        case msg.wParam of
          TTH_SEND: begin
            SendDataRecord := PNewDataRecord(msg.lParam);
            commTest.transmitMessage(SendDataRecord.Data);
          end;
        end;
      end;
    end;

  end;
  //All done inform MainForm of ending
  PostMessage( Form1.Handle, TH_MESSAGE, TH_CLOSE, GetCurrentThreadID );
end;
Grüße
Klaus
Klaus

Geändert von Klaus01 (20. Mär 2020 um 19:21 Uhr)
  Mit Zitat antworten Zitat
akuk

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

AW: Exception während RS232 Datenempfang

  Alt 21. Mär 2020, 11:16
Hallo Klaus
Vielen Dank für Dein Vorschlag, leider ist immer noch eine System-Exception
da, aber eine andere. Siehe Beilage.
Gruss
Anton
Angehängte Dateien
Dateityp: pdf NeueException2020-03-21_095232.pdf (184,1 KB, 4x aufgerufen)
Anton Kurka
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#45

AW: Exception während RS232 Datenempfang

  Alt 21. Mär 2020, 12:00
Hallo Anton,

tritt die "neue" Exception immer auf oder auch wieder nur sporadisch?
Wenn immer stehen die Chancen zu debuggen nicht so schlecht.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
akuk

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

AW: Exception während RS232 Datenempfang

  Alt 21. Mär 2020, 13:54
Hallo Klaus
Ja die trifft immer, aber wie kann ich es Debuggen, mit BP und Schrittweise ?
oder gibt es andere Möglichkeit ?
Mit BP und Schrittweise ist natürlich sehr mühsam, die CNC Verhängt sich dann
da muss ich immer beides abschalten und dann neu starten.
Gruss
Anton
Anton Kurka
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#47

AW: Exception während RS232 Datenempfang

  Alt 21. Mär 2020, 14:22
.. im Aufruf Stack ist zu sehen, dass etwas beim System.Move
im Argen liegt.

Was ich bisher bei SO gefunden habe:
https://stackoverflow.com/questions/...lass-c00000005
bringt mich zurzeit noch nicht so richtig weiter.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.754 Beiträge
 
Delphi 10.4 Sydney
 
#48

AW: Exception während RS232 Datenempfang

  Alt 21. Mär 2020, 14:43
ersetze mal das move mit diesem:
    move(receivedMessage[0], NewDataRecord^.Data[0], NewDataRecord^.DataLength); Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
akuk

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

AW: Exception während RS232 Datenempfang

  Alt 21. Mär 2020, 14:56
Hallo Klaus
Ich habe schrittweise Probiert Letzte BP1 wo noch kein Exc auftritt,
beim BP 2 kommt EXc. bereits:


Bp1> EditorForm := TForm2.Create(self);
with EditorForm do begin
BorderIcons := [];
BorderStyle := bsNone;
parent := TabSheet1;
Align := alClient;
Visible := true;
end;

BP2 RefAnfForm := TForm5.Create(self);
with RefAnfForm do begin
BorderIcons := [];
BorderStyle := bsNone;
parent := TabSheet9;
Align := alClient;
Visible := true;
end;

Ich verstehe sowieso nicht warum wird Form1 create, es ist jetzt
Betriebswahl(BW)auf Manuell d.h es musste nur die Form11 kreiert werden.
Die Information über BW stellung ist in der
Status Meldung M6: Byte1, ZBETR., Manuelstellung ZBETR =08, aber es sind auch Stellungen 07,06,05,04 möglich ebenfalls für Form11.
Gruss
Anton
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
 
#50

AW: Exception während RS232 Datenempfang

  Alt 21. Mär 2020, 15:16
Hallo Klaus
die move zeile habe ich geändert, exzeption kommt, aber wenn ich fortsetzen
drücke, kommt kurzzeitig das menu MAN jedoch verschwindet es wieder , vermutlich wenn ein Status oder Istwert Meldung kommt. dabei erscheint im MAN Menue die Meldung mit "ungültige Zeigeroperation"
Die CNC sendet ja andauernd weitere Meldungen:
CNCstatus, AchsenStatus, Istwerte.
Könnte das sein, das die Meldungen von der CNC gar nicht so schnell verarbeitet werden können ?
Gruss
Anton
Anton Kurka
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 7   « Erste     345 67      


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 08:27 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