AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Temperatur steuerung ????????

Ein Thema von melssner · begonnen am 20. Aug 2009 · letzter Beitrag vom 21. Aug 2009
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
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
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Temperatur steuerung ????????

  Alt 20. Aug 2009, 09:02
Dazu müsstest Du wissen, ob die Temperatur fällt oder steigt, und das geht sehr einfach, indem Du dir die zuletzt gemessene Temperatur merkst.
Durch einen Vergleich zwischen aktueller und vorheriger Temperatur kannst du dann einfach herausbekommen, ob die Temperatur fällt oder sinkt. Und das widerum erleichtert die Steuerung.

Allerdings würde ich nicht nur die letzte Temperatur, sondern die letzten Temperaturen merken, es könnten ja kleine Schwankungen auftreten. Über die gemerkten Temperaturen (über die Zeit) kannst du dann eine Ausgleichsgerade legen und dann weisst Du zuverlässig, ob die Temperatur steigt oder sinkt. Bei einem Anschalten der Lampe würde ich diesen Verlauf löschen bzw. eine Verzögerung einbauen, um dem System Zeit zu geben, auf die Steuerung zu reagieren.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Temperatur steuerung ????????

  Alt 20. Aug 2009, 09:07
Evtl so:

Delphi-Quellcode:
//Startzeit 1 schalten
      if (tmpTime > Start1) and (tmpTime < Ende1) and (OFF1 = '') and (aktTemp <= 26) 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;
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Temperatur steuerung ????????

  Alt 20. Aug 2009, 09:15
Hallo,

Das ist ein klassischer Zweipunktregler
Dabei ist ein Verlauf nicht mal so interessant, wenn die zwei Schwellen nur weit genug auseinander liegen.


Während der Zeiten wo die Lampen an sein dürfen:

Delphi-Quellcode:
if Temperatur > 28 then
begin
  Lampe := false;
end else if Temperatur < 26 then
begin
  Lampe := true;
else begin
  // Lampe bleibt an oder aus
end;
mfg DerDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Temperatur steuerung ????????

  Alt 20. Aug 2009, 09:18
Ich habe eine ähnliche Steuerung geschrieben. Aber nicht für Fischsuppe, sondern für einen Hobbybierbrauer
Da müssen im Maischkessel über bestimmte Zeiträume bestimmte Temperaturen gehalten werden. Das Geräte hat einen Analoge Eingang für die Temperatur und schaltet ein Rührwerk und eine Heizung.

Meine Erfahrung, die Dir hoffentlich helfen: Die Temperaturen fallen nicht linear ab. Es kann sein, dass der Fühler immer zwischen zwei Temperaturen schwankt. Wenn das gerade die Schwellentemperatur ist, dann geht die Heizung ständig an und aus. Du musst also eine kleine Verzögerung einbauen. So, dass Du bei abfallender Temperatur nur dann heizt, wenn die Temperatur für einen bestimmten Zeitraum unter dem Soll bleibt. Und dann beim Heizen nicht bei Punkt 28° Grad abschalten, sondern etwas weiter heizen. Bei meiner Anwendung kam noch dazu, dass das Gerät leicht nachheizt, wenn man es ausgeschaltet hat. Wir haben also eine Funktion eingebaut, dass sich das Gerät an die Solltemperatur rantastet. Dazu kommt auch noch, dass wir nicht sofort heizen, wenn die Temperatur abfällt, sondern erst mal versuchen, ob es nicht reicht, das Rührwerk einzuschalten. Und wenn die Temperatur zu hoch ist, dann wirk immer gerührt, bis die Temperatur wieder im Sollrahmen ist.

Mach von Anfang an wirklich alles parametrierbar. Alle Zeiten, Verzögerungen und Toleranzen, nichts hartcodieren. Du sparst damit hinterher eine Menge Zeit. Als wir unsere ersten Versuche mit Wasser gemacht haben, waren die Ergebnisse nicht wirklich gut. Aber durch rumspielen mit den ganzen Parametern (Temperaturen, Toleranzen, Tastschritte, etc...) ist das Ergebnis jetzt wirklich gut. Und die Maische selbst verhält sich noch wieder etwas anders, als das Wasser. Sie reagiert träger. Also mussten hier die Parameter wieder etwas geändert werden.

HTH!
Jens

Edit: Dein Code sieht so aus, als würdest Du die selbe USB-Karte wie wir verwenden: K8055D von Vellemann?
Jens
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#6

Re: Temperatur steuerung ????????

  Alt 20. Aug 2009, 09:20
Ich wollt noch erwähnen,

dass man nicht alles in eine große funktion packen sollte.

Refaktorierung wäre hier schon angebracht.

Bei deinem Code sieht man den Wald vor lauter Bäumen nicht.

mfg
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Temperatur steuerung ????????

  Alt 20. Aug 2009, 09:20
Zitat von DerDan:
Das ist ein klassischer Zweipunktregler
Das Leben kann sooo einfach sein.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#8

Re: Temperatur steuerung ????????

  Alt 20. Aug 2009, 09:29
Hallo,

Ich denk das mit dem Wasser oder der Maische ist schon anderst.
Er heizt ja nur die Luft.

größere Totzeiten sind da nicht zu erwarten.

Ansonsten gilt immer sich zunächst den zeilichen Verlauf der Regelstrecke anzuschauen
ohne aktive Regelung.

Ein kleiner Basis Kurs in Regelungstechnik könnt da helfen.


mfg DerDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
melssner

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

Re: Temperatur steuerung ????????

  Alt 20. Aug 2009, 09:41
ja ich benutz das Interface K8055D von Vellemann.

Ich kann doch aber ni davon ausgehen das ich immer bei 28grad auschalte und bei 26 wieder an.
Die 28grad sind variabel kann auch anders sein da dies je nach einstellung anders ist.
Der wert der angegeben wird ist der Maximalwert wo es aus geht und der Wert -2 wenigstens wo es wieder an geht.

Ich steh echt irgendwie auf dem schlauch.

@DerDan: bei der Schleife schaltet das doch auch nur hin und her.

Lg Mario
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#10

Re: Temperatur steuerung ????????

  Alt 20. Aug 2009, 09:52
Hallo

mein Quelltext war auch mehr als Schema gemeint.
Natürlich muss man das alles verfeineren.

durch deine neuen Anforderung, dass die Lampen nicht angehen dürfen, wenn eine gewisse Temperatur bereits vorliegt,
ist aus einer reinen Steuerung eine Regelung geworden.

Und Regelungstechnik ist nicht ganz einfach.
Deshalb wirst du dein Program wahrscheinlich noch einige male abändern.

Deshalb würde ich Dir vorschlagen den Quelltext im sinne von Lesbarem Code zu vereinfachen und wie oben schon zu lesen war die
Schwellen und ähnliches variabel zu gestalten.



mfg

DerDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz