Delphi-PRAXiS
Seite 5 von 7   « Erste     345 67      

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)

akuk 20. Mär 2020 16:39

AW: Exception während RS232 Datenempfang
 
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 ?

Klaus01 20. Mär 2020 18:46

AW: Exception während RS232 Datenempfang
 
Hallo Anton,

Delphi-Quellcode:
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

Klaus01 20. Mär 2020 19:11

AW: Exception während RS232 Datenempfang
 
.. 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

akuk 21. Mär 2020 11:16

AW: Exception während RS232 Datenempfang
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Klaus
Vielen Dank für Dein Vorschlag, leider ist immer noch eine System-Exception
da, aber eine andere. Siehe Beilage.
Gruss
Anton

Klaus01 21. Mär 2020 12:00

AW: Exception während RS232 Datenempfang
 
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

akuk 21. Mär 2020 13:54

AW: Exception während RS232 Datenempfang
 
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

Klaus01 21. Mär 2020 14:22

AW: Exception während RS232 Datenempfang
 
.. 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

Klaus01 21. Mär 2020 14:43

AW: Exception während RS232 Datenempfang
 
ersetze mal das move mit diesem:
Delphi-Quellcode:
    move(receivedMessage[0], NewDataRecord^.Data[0], NewDataRecord^.DataLength);
Grüße
Klaus

akuk 21. Mär 2020 14:56

AW: Exception während RS232 Datenempfang
 
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

akuk 21. Mär 2020 15:16

AW: Exception während RS232 Datenempfang
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 Uhr.
Seite 5 von 7   « Erste     345 67      

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