Einzelnen Beitrag anzeigen

melssner

Registriert seit: 14. Jul 2009
18 Beiträge
 
Delphi 7 Enterprise
 
#1

Temperatur steuerung ????????

  Alt 20. Aug 2009, 08: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
  Mit Zitat antworten Zitat