Einzelnen Beitrag anzeigen

lilmnm

Registriert seit: 2. Feb 2025
1 Beiträge
 
#1

Projekt hat exception-klasse external:sigsev ausgelöst

  Alt 2. Feb 2025, 12:39
Hallo liebe Community,

Ich bin gerade dabei ein Programm zu schreiben, welches einen Text an einen Ardunio über einen Com-Port weiterleitet. Jedoch bin ich auf den bereits in diesem Forum thematisierten SIGSEV-Fehler gestoßen (Zeile 65). Ich komme nicht weiter und würde mich über eine Antwort freuen. Hier der Code:
Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, Spin, synaser;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    ButtonConnect: TButton;
    ButtonSend: TButton;
    ComboBox1: TComboBox;
    ComboBoxPorts: TComboBox;
    Edit1: TEdit;
    EditTextToSend: TEdit;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBoxConnection: TGroupBox;
    GroupBoxSend: TGroupBox;
    LabelTextToSend: TLabel;
    Memo1: TMemo;
    MemoLog: TMemo;
    procedure ButtonConnectClick(Sender: TObject);
    procedure ButtonSendClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  connection1: TBlockSerial; // Globale Variable für die serielle Verbindung
  connected: boolean; // Verbindungsstatus
  port: string; // Gewählter Port

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
  portNames: string;
  i: integer;
begin
  // Liste der verfügbaren seriellen Ports abrufen
  portNames := getSerialPortNames;
  port := '';
  for i := 1 to Length(portNames) do
  begin
    if portNames[i] = ',then
    begin
      ComboBoxPorts.Items.Add(port); // :!::!::!: [COLOR="Lime"]hier sitzt das Problem[/COLOR]
      port := '';
    end
    else
      port := port + portNames[i];
  end;
  ComboBoxPorts.Items.Add(port);
  ComboBoxPorts.Text := 'Wähle Port';
  connected := False;
end;

procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
  if connected then
  begin
    // Verbindung trennen
    connection1.CloseSocket;
    connection1.Free;
    connected := False;
    MemoLog.Lines.Add('Verbindung mit ' + port + ' getrennt.');
    ButtonConnect.Caption := 'Verbinden';
    ComboBoxPorts.Enabled := True;
  end
  else
  begin
    if ComboBoxPorts.ItemIndex <> -1 then
    begin
      port := ComboBoxPorts.Text;
      // Verbindung erstellen
      connection1 := TBlockSerial.Create;
      connection1.Connect(port);
      connection1.Config(9600, 8, 'N', SB1, False, False);
      MemoLog.Lines.Add('Verbunden mit Port: ' + port);
      connected := True;
      ButtonConnect.Caption := 'Trennen';
      ComboBoxPorts.Enabled := False;
    end
    else
      ShowMessage('Bitte wählen Sie einen Port aus.');
  end;
end;

procedure TForm1.ButtonSendClick(Sender: TObject);
var
  textToSend: string;
begin
  if connected then
  begin
    textToSend := edit1.text;
    if textToSend <> 'then
    begin
      // Text senden
      connection1.SendString(textToSend + #13#10); // Senden mit Zeilenumbruch
      MemoLog.Lines.Add('Gesendeter Text: ' + textToSend);
    end
    else
      ShowMessage('Bitte geben Sie einen Text ein, der gesendet werden soll.');
  end
  else
    ShowMessage('Es besteht keine Verbindung.');
end;

end.
end; ;

procedure TForm1.ButtonConnectClick(Sender: TObject);
begin
  if connected then
  begin
    // Verbindung trennen
    connection1.CloseSocket;
    connection1.Free;
    connected := False;
    MemoLog.Lines.Add('Verbindung mit ' + port + ' getrennt.');
    ButtonConnect.Caption := 'Verbinden';
    ComboBoxPorts.Enabled := True;
  end
  else
  begin
    if ComboBoxPorts.ItemIndex <> -1 then
    begin
      port := ComboBoxPorts.Text;
      // Verbindung erstellen
      connection1 := TBlockSerial.Create;
      connection1.Connect(port);
      connection1.Config(9600, 8, 'N', SB1, False, False);
      MemoLog.Lines.Add('Verbunden mit Port: ' + port);
      connected := True;
      ButtonConnect.Caption := 'Trennen';
      ComboBoxPorts.Enabled := False;
    end
    else
      ShowMessage('Bitte wählen Sie einen Port aus.');
  end;
end;

procedure TForm1.ButtonSendClick(Sender: TObject);
var
  textToSend: string;
begin
  if connected then
  begin
    textToSend := edit1.text;
    if textToSend <> 'then
    begin
      // Text senden
      connection1.SendString(textToSend + #13#10); // Senden mit Zeilenumbruch
      MemoLog.Lines.Add('Gesendeter Text: ' + textToSend);
    end
    else
      ShowMessage('Bitte geben Sie einen Text ein, der gesendet werden soll.');
  end
  else
    ShowMessage('Es besteht keine Verbindung.');
end;

end.
end;

Geändert von TBx ( 3. Feb 2025 um 09:13 Uhr) Grund: Delphi-Tags eingegügt
  Mit Zitat antworten Zitat