Registriert seit: 14. Jul 2009
18 Beiträge
Delphi 7 Enterprise
|
Temperatur steuerung ????????
20. Aug 2009, 09:53
Hallöle mal wieder,
Ich habe nen Anliegen und komme mal wieder nicht weiter.
Ich habe ne USB-Steuerung mit angeschlossenem Thermometer am Analogen eingang.
Die Usb-Steuerung steuert eine Relaiskarte, jedes Relais steuert ein seperaten Stromkreis/Steckdose für meine Terrarien.
Das Thermometer soll ebenfalls jedes Relais steuern.
Das Programm ist soweit geschrieben das es verschiedene Schaltzeiten (Schaltzeituhr) gibt für jedes Relais wenn dieses zum Beispiel das Licht an schalten soll. Das Thermometer soll parallel dazu laufen. Zum Beispiel, das Thermometer misst eine aktuelle Temp von 28grad da soll trotz aktiven Zeitschaltuhr das Licht bei überschreiten der Temp ausschalten. Anhand meiner untenstehenden prozedur funktioniert das auch nur wenn die Temperatur wieder sinkt habe ich nen unschönen nebeneffekt (an, aus, an, aus). Wie kann ich denn das realisieren einen Schwellwert einzufügen wo es wirklich erst wieder an geht wie z.b. bei 28grad soll es aus gehen aber erst bei 26grad wieder an.
Hier mal der Code
Delphi-Quellcode:
procedure TForm1.AutoTimer1Timer(Sender: TObject);
var
Start1, Start2, Start3, Ende1, Ende2, Ende3, tmpTime: TDateTime;
h,CardAddr,data1,data2:longint;
Ini: TIniFile;
Thermometer, Temperatur, AktTemp, OFF1: String;
i: Single;
begin
Button12.Enabled:=true;
Button13.Enabled:=false;
Button14.Enabled:=false;
Button15.Enabled:=false;
AutoTimer1.Enabled:=true;
//Config Programm
Ini:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'PowerControl.ini');
try
Start1 :=Ini.ReadTime('Kanal1', 'StartZeit1', StrToTime('00:00:00'));
Start2 :=Ini.ReadTime('Kanal1', 'StartZeit2', StrToTime('00:00:00'));
Start3 :=Ini.ReadTime('Kanal1', 'StartZeit3', StrToTime('00:00:00'));
Ende1 :=Ini.ReadTime('Kanal1', 'EndZeit1', StrToTime('00:00:00'));
Ende2 :=Ini.ReadTime('Kanal1', 'EndZeit2', StrToTime('00:00:00'));
Ende3 :=Ini.ReadTime('Kanal1', 'EndZeit3', StrToTime('00:00:00'));
Ini.WriteString('Kanal1', 'Auto', '1');
Temperatur :=Ini.ReadString('Kanal1', 'Temperatur', '');
Thermometer :=Ini.ReadString('Kanal1', 'Thermometer', '');
//Temperatur1 auslesen
h:= OpenDevice(Ini.ReadInteger('Config_System', 'CardAdress', 0));
data1 := ReadAnalogChannel(1);
CloseDevice;
i := StrToInt('101')*data1/256-23;
AktTemp := format('%2.0f',[i]);
finally
Ini.Free;
end;
//Startzeit 1 schalten
// nehmen wir mal an, Start = '12:00' und Ende = '14:00'
tmpTime := Time();
if (tmpTime > Start1) and (tmpTime < Ende1) or
(tmpTime > Start2) and (tmpTime < Ende2) or
(tmpTime > Start3) and (tmpTime < Ende3) then
begin
OFF1:= '';
//Thermometer1 ausschalten
if (Thermometer = 'OFF') and (AktTemp >= Temperatur) then
begin
h:= OpenDevice(0);
ClearDigitalChannel(1);
CloseDevice;
Image1.Picture:=nil;
OFF1:= '1';
Imagelist1.GetBitmap(1,Image1.Picture.Bitmap); //0=Disable, 1=OFF, 2=ON, 3=Notschalter
Label11.Font.Color:= clSilver;
Label12.Font.Color:= clSilver;
Label13.Font.Color:= clSilver;
end;
//Startzeit 1 schalten
if (tmpTime > Start1) and (tmpTime < Ende1) and (OFF1 = '') then
begin
h:= OpenDevice(0);
SetDigitalChannel(1);
CloseDevice;
Image1.Picture:=nil;
Imagelist1.GetBitmap(2,Image1.Picture.Bitmap); //0=Disable, 1=OFF, 2=ON, 3=Notschalter
Label11.Font.Color:= clGreen;
end;
//Startzeit 2 schalten
if (tmpTime > Start2) and (tmpTime < Ende2) and (OFF1 = '') then
begin
h:= OpenDevice(0);
SetDigitalChannel(1);
CloseDevice;
Image1.Picture:=nil;
Imagelist1.GetBitmap(2,Image1.Picture.Bitmap); //0=Disable, 1=OFF, 2=ON, 3=Notschalter
Label12.Font.Color:= clGreen;
end;
//Startzeit 3 schalten
if (tmpTime > Start3) and (tmpTime < Ende3) and (OFF1 = '') then
begin
h:= OpenDevice(0);
SetDigitalChannel(1);
CloseDevice;
Image1.Picture:=nil;
Imagelist1.GetBitmap(2,Image1.Picture.Bitmap); //0=Disable, 1=OFF, 2=ON, 3=Notschalter
Label13.Font.Color:= clGreen;
end;
end
else
begin
//nach Ablauf abschalten
h:= OpenDevice(0);
ClearDigitalChannel(1);
CloseDevice;
Image1.Picture:=nil;
Imagelist1.GetBitmap(1,Image1.Picture.Bitmap); //0=Disable, 1=OFF, 2=ON, 3=Notschalter
Label11.Font.Color:= clSilver;
Label12.Font.Color:= clSilver;
Label13.Font.Color:= clSilver;
end;
end;
ich hoffe ihr könnt mir helfen da ich zu diesem thema mix gefunden habe.
Lg Mario
|