Dies ist bei deinem Code gut möglich, du hast sehr viele Create und Assigned in dem Code für den Com-Port.
Ein Free vergessen, und der Speicher füllt sich langsam.
Du weißt schon das Assigned nur prüft ob, die Klasse erstellt wurde oder nicht? Bevor ich auf eine Variable die eine Klasse ist zugreife habe ich mir angewöhnt immer zu prüfen ob die auch da ist.
Mit dieser kleine Schaltung ist das Problem gelöst.
Wieder eine Extra Komponente. Sowas habe ich sogar schon, aber noch nie ausprobiert.....
Mir ist noch was aufgefallen in den Log.... was ein Eventuellen Speicherüberlauf klären könnte.
[code=laz]
procedure TPAC.onSensorData(ArduinoSensor: TPLArduinoSensor);
var
i,temp:Integer;
str,str2,StrValue:string;
begin
try
for i:=0 to ArduinoSensor.Parameters.Count-1 do begin
str2:='';
if ArduinoSensor.Parameters[i].Value = 'E' then Continue;
StrValue:=ArduinoSensor.Parameters[i].Value + ' ' + ArduinoSensor.Parameters[i].Unity;
if (Assigned(ArduinoSensor.Location)) then begin
if (ArduinoSensor.Parameters.Count-1 = ArduinoSensor.Location.Count-1) and (ArduinoSensor.Location[i].Value <> '') then
str2:=ArduinoSensor.Location[i].Value+'/'
else begin
Temp:=strToInt(Trim(StrValue))-1;
if Temp > -1 then begin
StrValue:=ArduinoSensor.Location[Temp].Value;
end;
end;
end;
str:='/'+ArduinoSensor.Pfad + ArduinoSensor.Name+'/' +str2+ArduinoSensor.Parameters[i].Title +'/' +
ArduinoSensor.ID+IntToStr(i)+'/';
Temp:=InfoList.FindItem(str);
str:=str+StrValue;
if (Temp = -1) or ((Temp > -1) and (InfoList[Temp].Value <> StrValue)) then begin
PLClient.SendAMessage(str+#10);
sleep(30);
end;
end; // for i
except
PLArduino.LogFile.WriteInLogFile('TPAC.onSensorData');
end;
end; // TPAC.onSensorData