Da ich leider in die Lage gekommen bin, das ich gewisse Komponenten (zB. Blockserial) in Nahezu jedem Programm brauche und diese IMMER nach dem Selben Weg erzeugt werden. plane ich diese in einer eigenen Unit in Form einer Neuen Class erzeugen und zu nutzen.
Jedoch schein ich da wohl irgend etwas zu vergessen.
Genauer?!
Es handelt sich hierbei um folgenden Programmauszug.
Code: Alles auswählen
Port := 'dev/ttyUSB';
USB := TBlockSerial.Create;
try
try
USB.Config(9600, 8, 'N', SB1, false, false);
for a := 0 to 20 do begin
USB.Connect(Port + IntToStr(a));
if USB.LastError = 0 then Break;
end;
Sleep(1000);
if USB.LastError = 0 then begin
_USB.Connect := True;
_USB.Error := False;
end;
except
Status := IntToStr(USB.LastError);
USB.Free;
end;
finally
Status := USB.LastErrorDesc + ' ' + Port + IntToStr(a);
end;
Projekt Spielwiese hat Execption-Klasse >RunError(2)< ausgelöst.
In Datei 'synaser.pas" in Zeile
hierbei handelt es sich um die Zeile writeln(f, s); in der procedure TBlockSerial.CreateLockfile(PidNr: integer);
Die hard_def ist wie nachfolgend geschrieben, ergo 1:1 aus einem funktionierenden Programm kopiert, welches ich vor 4 Jahren geschrieben habe und bis heute noch Astrein läuft.
Code: Alles auswählen
unit hard_def;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Controls, Graphics, Dialogs, StdCtrls,
//Hardware Units
synaser;
Type
T_USB = record
Connect, Error : boolean;
RXD, Port : AnsiString;
end;
THard_USB = class
// Type def
_USB : T_USB;
// class def
USB : TBlockSerial;
// var def
Port, Status : AnsiString;
private
public
constructor Create;
destructor Done;
end;
implementation
{ Klasse T_USB }
constructor THard_USB.Create;
var
a : byte;
begin
inherited;
Port := 'dev/ttyUSB';
USB := TBlockSerial.Create;
try
try
USB.Config(9600, 8, 'N', SB1, false, false);
for a := 0 to 20 do begin
USB.Connect(Port + IntToStr(a));
if USB.LastError = 0 then Break;
end;
Sleep(1000);
if USB.LastError = 0 then begin
_USB.Connect := True;
_USB.Error := False;
end;
except
Status := IntToStr(USB.LastError);
USB.Free;
end;
finally
Status := USB.LastErrorDesc + ' ' + Port + IntToStr(a);
end;
end;
destructor THard_USB.Done;
begin
inherited;
USB.Free;
end;
end.
Die Optimierung sollte am WE erfolgen, sofern dies Tool laufen würde.
Grüße und angenehmen Feierabend.
Maik