Tackt Modul

Begonnen von MadCat, 24 November 2014, 17:13:53

Vorheriges Thema - Nächstes Thema

MadCat

Guten Tag,

zur Steuerung meiner Solarpumpe Wünschte ich mir ein Tackt Steuerung.
Derzeit lasse ich die Solarpumpe über das Tresholdmodul laufen, das funktioniert auch soweit, aber durch die Hysteresesteuerung kommt es zu extremen Temperaturschwankungen und sehr langen Taktzyklen der Pumpe, was den Ertrag schmälert und zu Verwirbelungen im Schichtenspeicher führt.

Ich bräuchte eine Steuerung die abhängig von den Temperatursensoren (bei mir zwei) die Pumpe Taktet um einen voreingestellten Sollwert zu erreichen.

Also Istwert zu niedrig = Taktrate verringern
Istwert zu hoch = Taktrate erhöhen

Leider weiß ich nicht wie für fhem ein Modul erstellt wird und in Perl kenne ich mich noch nicht aus, sonnst würde ich das einmal versuchen auf die Beine zu stellen.

LG Ralph

fiedel

Hi Ralph,

eigentlich würde ich dir eher empfehlen, dafür einen autarken Solarregler zu nehmen. Mir wär das zu heiß, im Sommer bei voller Sonne ggf. keine Zirkulation zu haben.

Du brauchst dafür erst mal kein extra Modul. Such dir am Besten in etwa passende Codebeispiele im WIKI und setzte das Ganze in für dich angepasster Form in die "99_myUtils.pm". Wie das geht, steht auch im Wiki. Taste dich einfach ran, wie z.B.: "Wenn Sensor A größer X und Sensor B kleiner Y dann Pumpe ein..." Ensprechend auch wieder für aus. Dabei verstehst du den einfachen Perl- Kram und entwickelst das Ganze nach und nach dahin, wo du es hin haben möchtest.
Wenn das dann läuft aber ziemlich groß geworden ist, gibt es im WIKI eine Anleitung, wie man sowas in ein Modul packt.

Gruß

Frank
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Wuppi68

es gibt doch auch den PID Regler ... da kannst Du doch die Parameter selber tunen
FHEM unter Proxmox als VM

MadCat

@fiedel

Fehlende Zirkulation ist kein Problem, ich habe die Anlage sogar bewusst so ausgelegt das Ihr das nix ausmacht "Stemback" bei Bedarf kann ich den Solarkreislauf auch jeder Zeit vollständig entlehren, da ich ohne Glykol fahre.
Danke für den Hinweis, auf das 99_myUtils.pm bin ich Heute auch schon gestoßen und habe es bereits in Betracht gezogen, auch für andere Ideen.
Aber bis ich mich in Perl eingearbeitet habe und daraus ein Modul entstanden ist wird sicherlich ne ganze Weile dauern, wenn ich es denn schaffe.

@Wuppi68

Den PID Regler kann ich für das was ich bräuchte auch nicht verwenden, dabei geht man ja davon aus das bestimmte Regelgrößen bekannt sind und lediglich die Eingriffszeit manipuliert wird um schneller das gewünschte Ergebnis zu erreichen und da die Sonne bzw. Wolken unberechenbar bar sind, geht das mit einer PID Steuerung nicht.
Am Optimalsten wäre eine Packetwellen Steuerung, dazu bräuchte ich dann aber wieder ein extra Steuermodul.

Ich habe mir mal die Zeit genommen und über einen längeren Zeitraum die Pumpe Manuell ein und ausgeschaltet, so wie ich mir die Steuerung vorstelle, immer in etwas längeren oder kürzeren Intervallen,je nachdem in welche Richtung die Kollektortemperatur ging und das hat sehr gut funktioniert.

fiedel

#4
ZitatIch habe mir mal die Zeit genommen und über einen längeren Zeitraum die Pumpe Manuell ein und ausgeschaltet, so wie ich mir die Steuerung vorstelle, immer in etwas längeren oder kürzeren Intervallen,je nachdem in welche Richtung die Kollektortemperatur ging und das hat sehr gut funktioniert.

Versuche das mal in Worte (Pflichtenheft), oder ein Ablaufdiagramm zu fassen. Vielleicht kann ich dir dann den einen oder anderen Ansatz liefern. Meine Prog.- Kenntnisse sind allerdings auch noch auf Anfängerniveau.
Außerdem ist es vor so einem Projekt immer gut, wenn man sich erst mal so genau wie möglich klar macht, was man wie umsetzen möchte. Suche dir doch im Netz dazu vielleicht eine Funktionsbeschreibung eines kommerziellen Solarreglers.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

MadCat

Zitat von: fiedel am 25 November 2014, 21:52:16
Versuche das mal in Worte (Pflichtenheft), oder ein Ablaufdiagramm zu fassen. Vielleicht kann ich dir dann den einen oder anderen Ansatz liefern. Meine Prog.- Kenntnisse sind allerdings auch noch auf Anfängerniveau.
Außerdem ist es vor so einem Projekt immer gut, wenn man sich erst mal so genau wie möglich klar macht, was man wie umsetzen möchte. Suche dir doch im Netz dazu vielleicht eine Funktionsbeschreibung eines kommerziellen Solarreglers.

Was meinst Du mit Pflichtenheft?

Der Ablauf muss in einer Schleife erfolgen, in etwa so

Wenn die Ist Temperatur größer ist als Soll, dann die Schalt dauer erhöhen,
Ist die Ist Temperatur kleiner, die Schalt dauer verkürzen

Als Javascript würde ich das hinbekommen, aber noch habe ich Null Ahnung von Perl

Manche Kommerziellen Solar Regler arbeiten nach dem selben oder ähnlichen Prinzip.

fiedel

Hi,

mit "Pflichtenheft" meinte ich eine möglichst genaue Programmbeschreibung in Worten. Habs oben mal verlinkt.
Hier ist ein Beispielprojekt, wo das Prinzip beschrieben wird. Ich vermute du kennst das?  ;)

Wenn du es in JS schreibst und gut kommentierst, kann es dir vielleicht jemand in Perl übersetzen. Einige Leute können hier beides. Dann würde sich die Programmbeschreibung auch erübrigen.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

Prof. Dr. Peter Henning

Leute, bitte als Neuling etwas mehr lesen und nachdenken. Gesucht wird kein "Tackt"-Modul (auweia...), sondern nur eine Proportionalsteuerung Messwert -> Einschaltzeit.

Das ist aber trivial einfach und kann ohne eigenes Modul sogar mit FHEM-Bordmitteln umgesetzt werden: Je nach Temperatur wird ein "on-for-timer" Befehl abgesetzt - den verstehen verschiedene Module zur Ansteuerung von Schalt-Hardware.

Und drei Zeilen, um die gewünschte Zeit aus dem Messwert der Temperatur zu berechen, kann man innerhalb von 2 Stunden auch als Neuling "lernen".

pah

MadCat

Zitat von: Prof. Dr. Peter Henning am 26 November 2014, 09:23:36
Das ist aber trivial einfach

Und drei Zeilen, um die gewünschte Zeit aus dem Messwert der Temperatur zu berechen, kann man innerhalb von 2 Stunden auch als Neuling "lernen".

Na zum jetzigen Zeitpunkt sehe ich das noch nicht so einfach ::)

Als Neuling steht man mitten in einem Wust von Neuen Begriffen, Techniken, Möglichkeiten und sieht dann oft die Lösung vor den Augen nicht  das kommt dann halt alles mit der Zeit und der Erfahrung und der Hilfe durch ein Forum.
Ich lerne jeden Tag mehr und komme immer besser mit fhem und Linux klar, ist also alles nur eine Frage der Zeit, aber ab und ann braucht man auch schon mal einen kleinen schubs in die richtige Richtung um weiter zu kommen.

Hab Tante google mal gefragt was eine Proportionalsteuerung ist und es beschreibt das was ich suche.

Ich werde dann mal am Wochenende versuchen das hin zu bekommen, ob ich das in 2 Stunden schaffe?  :o

MadCat

Konnte bis zum Wochenende nicht warten und habe schon mal angefangen zu Coden, ich hoffe ich bin auf dem richtigen Weg, was ich derzeit nicht weiß ist wie ich die Taktung erstellen soll. Die Taktrate soll 1Sec. betragen.

Bis jetzt sieht das so aus.

Zitat
my $k1v = Kollektor1_VT.get;
my $k2v = Kollektor2_VT.get;
my $k1r = Kollektor1_RT.get;
my $k2r = Kollektor2_RT.get;
my $kr = Kollektor_RT.get;
my $st = 40 #Solltemperatur/Puffertemperatur
my $sp = Solarkreispumpe;
my $tr = Taktrate;

If ($k1v OR $k2v OR $k1r OR $k2r > $st) {
   $sp = ON;
   If ($Kr > $st) {
   $tr = +1;
   }
   if ($kr < $st) {
   $tr = -1;
   }
   } else {
   $tr = 0;
   }
} else {
   $sp = off;
}

Gruß Ralph

fiedel

Na ist doch schon mal was.  :) Wird wohl so nicht gehen, aber ich verstehe wohin du willst. Erkläre mal noch die Taktrate! Was soll die machen? Ggf. erkläre mal einen Programmzyklus, wie du ihn dir vorstellst.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

MadCat

Programmablauf sollte wie folgt aussehen.

Kollektortemperatur erreicht Pumpe an (Takt = 1s an, 1s aus)
Solltempereatur  Rücklauf überschritten Takt +1 (Takt solange erhöhen bis Solltemperatur erreicht)
Solltemperatur Rücklauf unterschritten Takt -1 (Taktrate verringern bis Solltemperatur erreicht)
Kollektortemperatur unterschritten Pumpe aus

Gruß Ralph

Prof. Dr. Peter Henning

Nicht in "Taktrate" denken. Sondern in Zeiten bis zum nächsten Schalten. Taktrate ist eine Größe, die über mehrere Zyklen bestimmt wird - die Schaltzeit hingegen ist eine zeitlokale Größe.

LG

pah

fiedel

Hm, ungewöhnlich was du da vor hast. Aber du hast es ja empirisch ermittelt - probiere es einfach aus und lerne ggf. daraus!
Noch eine Detailfrage: Was ist das für ein Aktor? versteht der "on-for-timer" (HM oder FS20)?
Dein Programm wird immer neu ausgeführt, wenn dein definiertes Event reinkommt. Oder ist das ein "at"? Ggf. kopiere das mal komplett aus der CFG heraus. Dann kann ich es besser umstricken und sehe gleich alles was nötig ist. Vielleicht auch die Def. der Sensoren und des Aktors.
FeatureLevel: 6.1 auf Wyse N03D ; Deb. 11 ; Perl: v5.14.2 ; IO: HM-MOD-RPI-PCB + VCCU|CUL 868 V 1.66|LinkUSBi |TEK603
HM: SEC-SCO|SCI-3-FM|LC-SW4-PCB|ES-PMSW1-PL|RC-4-2|SEN-MDIR-O|SEC-WDS-2
CUL: HMS100TF|FS20 S4A-2 ; OWDevice: DS18S20|DS2401|DS2406|DS2423

MadCat

Hallo fiedel

Das ganze läuft über NetIOs, die Temperaturen werden über Onewire eingelesen und die Pumpen über Relais gesteuert, läuft also alles über das ECMD Modul.

Gruß Ralph