Mischersteuerung: Unterschied zwischen den Versionen

Aus FHEMWiki
(Fehler bei Beschreibung Rechtslauf / Wechsel korrigiert (1,1 anstelle 0,1 in der Tabelle))
 
(16 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{SEITENTITEL:Mischerregelung }}
{{Infobox Modul
{{Infobox Modul
|ModPurpose=Dieses Modul ist noch Entwicklung
|ModPurpose=Stellmotor Zeitsteuerung mit Zeitabweichungskorrektur
|ModType=x
<!-- |ModCategory= (noch?) nicht verwendet -->
<!-- |ModCategory= (noch?) nicht verwendet -->
|ModCmdRef= ---- noch nicht Teil von FHEM ----
<!-- |ModCmdRef= ---- noch nicht Teil von FHEM -->
|ModTechName=98_STELLMOTOR.pm
|ModForumArea=Codeschnipsel
|ModOwner=epsrw1}}
|ModTechName=39_STELLMOTOR.pm
Das Fhem-[[:Kategorie:Hilfsmodul|Hilfsmodul]] [[STELLMOTOR]] bietet eine einfache Möglichkeit, mit zwei Relais den Rechts-/Linkslauf eines (Mischer)motors zu steuern.  
|ModOwner=epsrw1,cwagner}}
Das FHEM-[[:Kategorie:Hilfsmodul|Hilfsmodul]] [[STELLMOTOR]] bietet eine einfache Möglichkeit, mit zwei Relais den Rechts-/Linkslauf eines (Mischer)motors zu steuern.  


== Features ==
== Features ==


<u>Modul und diese Bearbeitung sind noch in Entwicklung</u>
<u>Diese Wiki-Seite beschreibt die Version 2.1 des STELLMOTOR Moduls.</u>


----
----
Zeile 18: Zeile 19:
* Vermeiden von Blockade des FHEM während der Laufzeit des Motors
* Vermeiden von Blockade des FHEM während der Laufzeit des Motors


Thread im Forum:[http://forum.fhem.de/index.php/topic,23933.0.html]
Thread im Forum:{{Link2Forum|Topic=23933}}


== Beschreibung ==
== Beschreibung ==
[[Datei:dok39_STELLMOTOR.jpg|mini|Funktionsweise]]
Typischerweise werden im Heizkreislauf Mischer eingesetzt, um einen Heizkreis mit unabhängig vom Kesselbrenner geregelten Vorlauf zu erreichen. Auch kann man so in einer Heizanlage, die mit für Fußbodenheizung zu hohen Vorläufen arbeiten muss, einen Kreis mit begrenztem Vorlauf abzuzweigen.
Mit Hilfe des hier beschriebenen Moduls VALVES [[Raumbedarfsabh%C3%A4ngige Heizungssteuerung]] kann ein geschlossener Regelkreislauf hergestellt werden, der sich am Bedarf der Wohnräume orientiert.


Vorrangig ist dieses Modul für zwei Relais an GPIO- oder an PIFace-Pins eines Rasberrys gedacht; es bietet aber auch die Option, zwei Schaltaktoren per Funk (aus Timinggründen nicht empfohlen) oder 1-Wire anzusteuern.  
Vorrangig ist dieses Modul für zwei Relais an GPIO- oder an PIFace-Pins eines Rasberrys gedacht; es bietet aber auch die Option, zwei Schaltaktoren per Funk (aus Timinggründen nicht empfohlen) oder 1-Wire anzusteuern.  


Die Set-Befehle für die Mischerstellung kommen idealerweise aus der Bewertung der Vorlauftemperatur durch ein Modul wie PID20 [http://www.fhemwiki.de/wiki/PID20_-_Der_PID-Regler]. Dieser berücksichtigt auch den zeitlichen Verlauf der Temperaturänderungen im Vorlauf und ist vielfältig anpassbar.
Die Set-Befehle für die Mischerstellung kommen idealerweise aus der Bewertung der Vorlauftemperatur durch ein Modul wie PID20 [[PID20 - Der PID-Regler]]. Dieser berücksichtigt auch den zeitlichen Verlauf der Temperaturänderungen im Vorlauf und ist vielfältig anpassbar.


Aus den Werten MaxTics (Default=100, für Prozentanzeige) und MaxDriveSeconds (Laufzeit des Motors von 0 bis 100%) wird die Zeit berechnet, die der Motor nach rechts oder links laufen muss, um die mit set gewünschte Ventilstellung zu erreichen.
Aus den Werten MaxTics (Default=100, für Prozentanzeige) und MaxDriveSeconds (Laufzeit des Motors von 0 bis 100%) wird die Zeit berechnet, die der Motor nach rechts oder links laufen muss, um die mit set gewünschte Ventilstellung zu erreichen.
Zeile 31: Zeile 37:


Zum Kalibrieren (set calibrate) fährt der Motor einfach volle Zeit nach links/null. Hier wird der in Mischermotoren wie dem Honeywell Centra VMK eingebauten Entschaltetr genutzt, um den "Null-Punkt" sicher zu finden. Falls ein angeschlossener Motor solche Endschalter nicht hat, müssen die für diese Schaltungsweise unbedingt vorgesehen werden.
Zum Kalibrieren (set calibrate) fährt der Motor einfach volle Zeit nach links/null. Hier wird der in Mischermotoren wie dem Honeywell Centra VMK eingebauten Entschaltetr genutzt, um den "Null-Punkt" sicher zu finden. Falls ein angeschlossener Motor solche Endschalter nicht hat, müssen die für diese Schaltungsweise unbedingt vorgesehen werden.




== Define ==
== Define ==
<code>
<code>
   define <name> STELLMOTOR <PiFace|Gpio|FhemDev>   
   define <name> STELLMOTOR <PiFace|Gpio|FhemDev|SysCmd>   
</code>
</code>
* attrRLPORT und attrSTARTPORT sind workarounds um fhemDev mit leerzeichen definieren zu können (z: keller ''port2'' ...0|1). der eigentliche port wird dann aus dem attr wert (attrRLPORT attrSTARTPORT) gelesen
Je nach Device Typ sind verschiedene Attribute zur erforderlich, damit STELLMOTOR weiß wie die beiden Relais angeschlossen sind.
* '''PiFace''' und '''Gpio''' benötigen STMgpioPortRL und STMgpioPortSTART
* '''FhemDev''' benötigt STMfhemDevRL und STMfhemDevSTART
* '''SysCmd''' benötigt STMsysCmdRL und STMsysCmdSTART
 
Für den Schaltvorgang "baut" STELLMOTOR einen set-Befehl zusammen. Beispielsweise bei FhemDev
Für den Schaltvorgang "baut" STELLMOTOR einen set-Befehl zusammen. Beispielsweise bei FhemDev
<code>
<code>
   set <RL-OUT-Port> 0    sowie      set <RL-OUT-Port> 1      zum Einschalten links   
   set <**..PortRL> 0    sowie      set <**..PortSTART> 1      zum Einschalten links   
   set <RL-OUT-Port> 0    sowie      set <RL-OUT-Port> 0      zum Ausschalten links 
   set <**..PortRL> 1    sowie      set <**..PortSTART> 0      zum Einschalten rechts (bei Type "einzel", sonst 1,1)
  set <**..PortRL> 0    sowie      set <**..PortSTART> 0      zum Ausschalten
</code>
</code>
* Die Schaltbefehle 0 und 1 können mit Attributen invertiert und/oder gemapped werden (zB.: On/Off)


Um die Wirkung auszuprobieren, ohne jedes Mal zum Mischer rennen zu müssen, bietet sich an zwei '''Dummys''' zu verwenden:
Um die Wirkung auszuprobieren, ohne jedes Mal zum Mischer rennen zu müssen, bietet sich an zwei '''Dummys''' zu verwenden:
Zeile 60: Zeile 72:


Diese beiden Bilder zeigen die elektrische Verdrahtung von zwei Relais, die von je einem Aktor gesteuert werden:
Diese beiden Bilder zeigen die elektrische Verdrahtung von zwei Relais, die von je einem Aktor gesteuert werden:
[[Datei:Relais-Schaltung FBH-Mischer attr einzel.jpg]]      [[Datei:Relais-Schaltung FBH-Mischer attribut Wechsel.jpg]]   
[[Datei:Relais-Schaltung FBH-Mischer attr einzel.jpg|mini|Schaltplan einzel]]      [[Datei:Relais-Schaltung FBH-Mischer attribut Wechsel.jpg|mini|Schaltplan wechsel]]   


Typische Mischermotoren wie der Honeywell VMK haben eingebaute Endschalter, die beim Erreichen der 0%- oder 100%-Position die Stromversorgung unterbrechen. Das Modul Stellmotor nutzt dies aus, um eine Kalibrierung zwischen rechnerischem und tatsächlichen Mischerstand herzustellen.  
Typische Mischermotoren wie der Honeywell VMK haben eingebaute Endschalter, die beim Erreichen der 0%- oder 100%-Position die Stromversorgung unterbrechen. Das Modul Stellmotor nutzt dies aus, um eine Kalibrierung zwischen rechnerischem und tatsächlichen Mischerstand herzustellen.  
Zeile 66: Zeile 78:
----
----


=== Attribute ===
== Attribute ==


Stellmotor wird noch einmal erheblich verbessert - dabei werden zahlreiche Attribute hinzugefügt. Diese Tabelle ist nicht mehr aktuell.
 
Alle Attributes sind auch in FHEM durch das kommando get attrHelp <varname> erklärt, für's "schnelle Nachschauen zwischendurch".
 
 
=== Global gültige Attribute ===


{| class="wikitable sortable"
{| class="wikitable sortable"
Zeile 74: Zeile 90:
! Parameter !! Wertebereich !! Default !! Beschreibung
! Parameter !! Wertebereich !! Default !! Beschreibung
|-
|-
|MaxDriveSeconds||[0...n]||muss angepasst werden||gestoppte Zeit in Sekunden, die der Motor für die Fahrt von 0 bis 100 Prozent braucht
| STMrlType|| String || einzel || je nach Schaltplan, Wechsel=start+RL-relais, einzel=R-Relais+L-Relais werden geschaltet
|-
<b>'''ACHTUNG:'''</b> falsche Einstellung kann zu Kurzschluß am Motor führen, bitte Einstellung genau überdenken oder mit dummy testen
|MaxTics ||[0...100]||100||Mischerstellung - bei Prozentangaben (PID20) 100, bei Winkelangaben anzupassen
|-
|pollInterval ||||0.1||Zeitintervall nach dem FHEM prüft, ob die interne Stoppzeit erreicht wurde. Hier sollte mit einem möglichst kleinen Wert gestartet werden, der vorsichtig erhöht werden kann, falls FHEM zu langsam läuft wegen des Mischermotors.
|-
 
|resetOtherDeviceAtCalibrate || string ||||Fhem Device das am Ende des Kalibriervorganges zusätzlich resettet wird. (command: set <resetOtherDeviceAtCalibrate> reset" wird abgesetzt)
|-
 
|attrRLPORT|| || || wert ersetzt "RL-Out-Port" aus define. wird benötigt für schaltaktoren befehle mit blankspace bie zb "set keller portB 1"
|-
|attrSTARTPORT|| || || wert ersetzt "start-Out-Port" aus define. wird benötigt für schaltaktoren befehle mit blankspace bie zb "set keller portC 1"
|-
 
|resetOtherDeviceAtCalibrate || string ||||Fhem Device das am Ende des Kalibriervorganges zusätzlich resettet wird. (command: set <resetOtherDeviceAtCalibrate> reset" wird abgesetzt)
|-
 
 
 
 
<b>ACHTUNG:</b> falsche Einstellung kann zu Kurzschluß am Motor führen, bitte Einstellung genau überdenken oder mit dummy testen


bei einzel:  
bei einzel:  
Zeile 103: Zeile 99:


bei wechsel:  
bei wechsel:  
Rechtslauf start=0 rl=1  
Rechtslauf start=1 rl=1  
Linkslauf: L start=1 rl=0  
Linkslauf: L start=1 rl=0  
Ruhe: start=0 rl=0
Ruhe: start=0 rl=0
|-
|STMmaxDriveSeconds ||[0...n]||muss angepasst werden||gestoppte Zeit in Sekunden, die der Motor für die Fahrt von 0 bis 100 Prozent braucht
|-
|STMmaxTics ||[0...100]||100||Mischerstellung - bei Prozentangaben (PID20) 100, bei Winkelangaben anzupassen
|-
|STMpollInterval || Float ||0.1||Zeitintervall nach dem FHEM prüft, ob die interne Stoppzeit erreicht wurde. Hier sollte mit einem möglichst kleinen Wert gestartet werden, der vorsichtig erhöht werden kann, falls FHEM zu langsam läuft wegen des Mischermotors. Darf nicht größer STMlastDiffMax sein, sonst beginnt der Motor zu Schwingen.
|-
|-
|readingFnAttributes||||||readingFnAttributes
|}
== AttributesN ==
Alle Attributes sind auch in fhem durch das kommando get attrHelp <varname> erklärt, für's "schnelle Nachschauen zwischendurch".


{| class="wikitable sortable"  
| STMresetOtherDeviceAtCalibrate|| String || 0 || FHEM Device das am Ende des Kalibriervorganges zusätzlich resettet wird. (command: set <STMresetOtherDeviceAtCalibrate> reset" wird abgesetzt), zB für eigenes Logging oder Rotary Encoder
|-  
|-  
! Attribute !! (Typ) Default !! Beschreibung
| STMinvertOut|| Zahl || 0 || setzen für Devices die 0 für Start und 1 für Stop erwarten
|-  
|-  
| STMgpioPortRL|| (int) 5 || piface port oder gpio port für RL oder R relais (bei RL ist 1=R)
| STMmapOffCmd|| String || 0 || string der im device-command anstelle '0' verwendet wird für stop
|-  
|-  
| STMrlType|| (string) einzel || je nach Schaltplan, Wechsel=start+RL-relais, einzel=R-Relais+L-Relais werden geschaltet
| STMmapOnCmd|| String || 0 || string der im device-command anstelle '1' verwendet wird für start  
|-  
|-  
| STMresetOtherDeviceAtCalibrate|| (string) 0 || zusätzliches Fhem-Device das am Ende der Ealibrierung 'set ** reset' gesendet bekommt
| STMcalibrateDirection|| String || L || auf R wird die Ralibrierung nach rechts gefahren, default= L (links)  
|-  
|-  
| STMmapOffCmd|| (string) 0 || string der im device-command anstelle '0' verwendet wird für stop
 
| STMlastDiffMax|| Zahl || 1|| ist die Stoppzeit weiter als dieser wert vom Soll entfernt, wird sofort ein neuer drive gestartet. Wert muss immer größer als STMpollInterval sein, sonst beginnt der Motor zu Schwingen
|-  
|-  
| STMmapOnCmd|| (string) 0 || string der im device-command anstelle '1' verwendet wird für start
| STMtimeTolerance|| Float || 0.001 || Stop-Time Differenzen kleiner als dieser Wert werden bei der Berechnung vollständig ignoriert (wird eventuell in Zukunft entfallen)
|-  
|-  
| STMcalibrateDirection|| (string) L || auf R wird die Ralibrierung nach rechts gefahren, default= L (links)
 
|-  
|-
| STMinvertOut|| (int) 0 || setzen für Devices die 0 für Start und 1 für Stop erwarten
|readingFnAttributes||||||readingFnAttributes
|-
|}
| STMmaxTics|| (int) 100 || Mischerstellung - bei Prozentangaben (PID20) 100, bei Winkelangaben anzupassen
 
|-
=== Device Type abhängige Attribute ===
| STMsysCmdSTART|| (string) 0 || freies Command das für START an die Shell übergeben wird
 
|-
Je nach Device Type sind verschiedene Attribute vorgesehen, um STELLMOTOR mitzuteilen, wie die beiden Relais angesprochen werden. Man kann so zB während der Aufbauphase der Installation neben den Gpio devices noch 2 dummy devices im Attr vorhalten um zwischendurch zu testen. Hierzu muss dann nur noch die DEF des STELLMOTOR Devices vorübergehend auf FhemDev geändert werden.
| STMsysCmdRL|| (string) 0 || freies Command das für RL an die Shell übergeben wird
 
Alle Attributes sind auch in FHEM durch das kommando get attrHelp <varname> erklärt, für's "schnelle Nachschauen zwischendurch".
 
{| class="wikitable sortable"
|-  
|-  
| STMmaxDriveSeconds|| (int) 107 || gestoppte Zeit in Sekunden, die der Motor für die Fahrt von 0 bis 100 Prozent braucht
! Device Type !! Parameter !! Typ !! Default !! Beschreibung
|-  
|-  
| STMpollInterval|| (float) 0.1 || Zeitintervall nach dem FHEM prüft, ob die interne Stoppzeit erreicht wurde. Hier sollte möglichst kleiner Wert aein, nur erhöhen falls FHEM zu langsam läuft
| PiFace / Gpio || STMgpioPortRL || Zahl || 5 || PiFace Digital port oder Gpio-Port für RL oder R Relais
|-  
|-  
| STMgpioPortSTART|| (int) 4 || Piface-Port oder gpio-Port für START (oder L relais bei 'einzel')  
| PiFace / Gpio || STMgpioPortSTART || Zahl || 4 || PiFace Digital Port oder Gpio-Port für START (oder L Relais bei 'einzel')  
|-  
|-  
| STMtimeTolerance|| (float) 0.01 || Stop-Time Differenzen kleiner als dieser Wert werden ignoriert
| FhemDev || STMfhemDevRL|| String || RelaisRL || FHEM-Device name für RL (oder R) Aktor (zB.: 'keller portB' oder 'dummyRLrelais')
|-  
|-  
| STMfhemDevSTART|| (string) RelaisSTART || Fhem-Device name für START (oder L) Aktor  
| FhemDev || STMfhemDevSTART|| String || RelaisSTART || FHEM-Device name für START (oder L) Aktor (zB.: 'keller portC' oder 'dummySTARTrelais')
|-  
|-  
| STMfhemDevRL|| (string) RelaisRL || Fhem-Device name für RL (oder R) Aktor
| SysCmd || STMsysCmdRL|| String || 0 || freies Command das für RL an die Shell übergeben wird (zB: '/Usr/local/bin/gpio write 4', STELLMOTOR fügt 0 oder 1 arg. dazu)
|-  
|-  
| STMlastDiffMax|| (int) 1|| ist die stoppzeit weiter als dieser wert vom Soll entfernt, wird sofort neuer drive gestartet
| SysCmd || STMsysCmdSTART|| String || 0 || freies Command das für START an die Shell übergeben wird (zB: '/Usr/local/bin/gpio write 5', STELLMOTOR fügt 0 oder 1 arg. am Ende dazu)
|-  
|-  
|}  
|}  




 
== Settings ==
=== Settings ===


{| class="wikitable sortable"
{| class="wikitable sortable"
Zeile 163: Zeile 164:
|set <name> N||[1...100]||stellt den Mischer auf N % Öffnung
|set <name> N||[1...100]||stellt den Mischer auf N % Öffnung
|-
|-
|set <name> calibrate||||stellt den Mischer auf 0 %; maximaler Linkslauf bis zur Endschalterpostion links
|set <name> stop|| - ||stoppt die laufende bewegung sofort und berechnet den aktuellen positionswert neu
|-
|set <name> calibrate|| - ||stellt den Mischer auf Min. oder Max (in FHEM 1% oder 100%); default: maximaler Linkslauf bis zur Endschalterpostion, kann über Attr in Rechtslauf geändert werden.
|-
|-
|set <name> reset||||Setzt die Position und die Werte im Cache auf Null. Verwendung ist intern (am Ende von calibrate) oder nach mechanischem Neueinbau des Motors (da reicht aber auch ein Calibrate)
|set <name> reset|| - ||Setzt die Position und die Werte im Cache auf Null. Verwendung ist intern (am Ende von calibrate) oder nach mechanischem Neueinbau des Motors (da reicht aber auch ein Calibrate)
|}
|}




=== Readings ===
== Readings ==
 
Alle Readings sind auch in FHEM durch das kommando get readingsHelp <varname> erklärt, für's "schnelle nachschauen zwischendurch".
 
{| class="wikitable sortable"
{| class="wikitable sortable"
|-
|-
Zeile 178: Zeile 184:
|state||active,error,position||Position wird beim Stopp der Motorbewegung gesetzt
|state||active,error,position||Position wird beim Stopp der Motorbewegung gesetzt
|-
|-
|lastStart||||Zeitstempel der letzten Motorbewegung
|lastStart|| Float ||Zeitstempel der letzten Motorbewegung
|-
|-
|locked||[0 1]||Steht auf 1 während der Motor gerade läuft (Calibrate oder gewünsche Position per set).  
|locked||[0 1]||Steht auf 1 während der Motor gerade läuft (Calibrate oder gewünsche Position per set).  


Neue Kommandos werden während lock nur in eine Warteschleife genommen.
Neue Kommandos werden während lock nur in eine Warteschleife (reading: command_queue) genommen.


Zeigt im im Frontend, dass der Motor gerade läuft.
Zeigt im im Frontend, dass der Motor gerade läuft.
|-
|-
|queue_lastdiff||||abhängig von der FHEM-Last oder anderen blockierenden Kommandos wird das Stopp-Kommando nur nahe an der kalkulierten Stoppzeit ausgeführt, vermutlich nie exakt. STELLMOTOR merkt sich die Zeitdifferenz, zu der der Motor wirklich gestoppt wurde und addiert bei der nächsten Bewegung des Motors die Differenz, um möglichst präzise die wirkliche Motorstellung zu erreichen.
|queue_lastdiff||||abhängig von der FHEM-Last oder anderen blockierenden Kommandos wird das Stopp-Kommando nur nahe an der kalkulierten Stoppzeit ausgeführt, vermutlich nie exakt. STELLMOTOR merkt sich die Zeitdifferenz, zu der der Motor wirklich gestoppt wurde und addiert bei der nächsten Bewegung des Motors die Differenz, um möglichst präzise die wirkliche Motorstellung zu erreichen.
|-
|rlport||||Pin-Nr, gpio/piface oder fhem device name bei typ FhemDev
|-
|startport||||Pin-Nr. gpio/piface oder fhem device name bei typ FhemDev
|-
|-
|stopTime||||Null oder die errechnete Zeit zum Stopp der Motorbewegung
|stopTime||||Null oder die errechnete Zeit zum Stopp der Motorbewegung
Zeile 196: Zeile 198:
|command_queue||||Position einer anstehenden neuen Motorposition, die angefordert wurde als die letzte Motorbewegung noch ausgeführt oder das Modul disabled war
|command_queue||||Position einer anstehenden neuen Motorposition, die angefordert wurde als die letzte Motorbewegung noch ausgeführt oder das Modul disabled war
|-
|-
|OutType||||Bei der Defintion gewählte Arbeitsart: PiFace,Gpio,FhemDev
|OutType||||Bei der Defintion gewählte Arbeitsart: PiFace,Gpio,FhemDev,SysCmd
|-
|-
|DoResetAtStop||||Zeitstempel des Ende der letzten Kalibrierfahrt
|DoResetAtStop||||Zeitstempel des Ende der letzten Kalibrierfahrt
|}
|}


== ReadingsN ==
Alle Readings sind auch in fhem durch das kommando get readingsHelp <varname> erkl�rt, f�r's "schnelle nachschauen zwischendurch".
{| class="wikitable sortable"
|-
! Reading !! (Typ) Default !! Beschreibung
|-
| queue_lastdiff|| (float) 0 || abhängig von der FHEM-Last oder anderen blockierenden Kommandos wird das Stopp-Kommando nur nahe an der kalkulierten Stoppzeit ausgeführt, vermutlich nie exakt. STELLMOTOR merkt sich die Zeitdifferenz, zu der der Motor wirklich gestoppt wurde und addiert bei der nächsten Bewegung des Motors die Differenz, um möglichst präzise die wirkliche Motorstellung zu erreichen.
|-
| locked|| (int) 0 || 1 w�hrend motor gerade l�uft
|-
| position|| (int) 1 || aktuelle desired position
|-
| DoResetAtStop|| (string) afterCalibrate || tempor�rwert nur w�hrend kalibrierungsphase
|-
| state|| (string) active || aktuelle position oder fehlermeldung
|-
| lastStart|| (float) 0 || zeitstempel letzter start des motors
|-
| command_queue|| (int) 0 || befehl in der warteschleife
|-
| stopTime|| (float) 0 || zeitstempel n�chster stop des motors
|-
| OutType|| (string) PiFace || in der device definition festgelegter OutType
|-
|}


== Weblinks ==
== Weblinks ==
Zeile 233: Zeile 208:
* to be continued
* to be continued


[[Kategorie:Glossary]]
[[Kategorie:Regelungstechnik]]
[[Kategorie:Regelungstechnik]]
[[Kategorie:Code Snippets]]
[[Kategorie:Examples]]
[[Kategorie:Heizungssteuerung]]

Aktuelle Version vom 5. Januar 2019, 11:46 Uhr

Mischersteuerung
Zweck / Funktion
Stellmotor Zeitsteuerung mit Zeitabweichungskorrektur
Allgemein
Typ Inoffiziell
Details
Dokumentation siehe Forum
Support (Forum) Codeschnipsel
Modulname 39_STELLMOTOR.pm
Ersteller epsrw1,cwagner
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!

Das FHEM-Hilfsmodul STELLMOTOR bietet eine einfache Möglichkeit, mit zwei Relais den Rechts-/Linkslauf eines (Mischer)motors zu steuern.

Features

Diese Wiki-Seite beschreibt die Version 2.1 des STELLMOTOR Moduls.


  • Wiedereintrittsfähig nach einem Neustart
  • Wiederholungsgenauigkeit durch Ausgleich von Rundungs- und Laufzeitabweichungen
  • Vermeiden von Blockade des FHEM während der Laufzeit des Motors

Thread im Forum:Thema

Beschreibung

Funktionsweise

Typischerweise werden im Heizkreislauf Mischer eingesetzt, um einen Heizkreis mit unabhängig vom Kesselbrenner geregelten Vorlauf zu erreichen. Auch kann man so in einer Heizanlage, die mit für Fußbodenheizung zu hohen Vorläufen arbeiten muss, einen Kreis mit begrenztem Vorlauf abzuzweigen.

Mit Hilfe des hier beschriebenen Moduls VALVES Raumbedarfsabhängige Heizungssteuerung kann ein geschlossener Regelkreislauf hergestellt werden, der sich am Bedarf der Wohnräume orientiert.

Vorrangig ist dieses Modul für zwei Relais an GPIO- oder an PIFace-Pins eines Rasberrys gedacht; es bietet aber auch die Option, zwei Schaltaktoren per Funk (aus Timinggründen nicht empfohlen) oder 1-Wire anzusteuern.

Die Set-Befehle für die Mischerstellung kommen idealerweise aus der Bewertung der Vorlauftemperatur durch ein Modul wie PID20 PID20 - Der PID-Regler. Dieser berücksichtigt auch den zeitlichen Verlauf der Temperaturänderungen im Vorlauf und ist vielfältig anpassbar.

Aus den Werten MaxTics (Default=100, für Prozentanzeige) und MaxDriveSeconds (Laufzeit des Motors von 0 bis 100%) wird die Zeit berechnet, die der Motor nach rechts oder links laufen muss, um die mit set gewünschte Ventilstellung zu erreichen.

FHEM läuft dann weiter ohne einzufrieren, und prüft im Loop nur noch ob, die Stoppzeit im Cache erreicht ist. Da der Stopp nie exakt zur geplanten Zeit ausgeführt wird, liegt im Cache ein weiterer Wert der die Differenz zwischen geplanter und tatsächlicher Stoppzeit dem nächsten Kommando hinzurechnet. So werden sich addierende kleine Zeitdifferenzen vermieden.

Zum Kalibrieren (set calibrate) fährt der Motor einfach volle Zeit nach links/null. Hier wird der in Mischermotoren wie dem Honeywell Centra VMK eingebauten Entschaltetr genutzt, um den "Null-Punkt" sicher zu finden. Falls ein angeschlossener Motor solche Endschalter nicht hat, müssen die für diese Schaltungsweise unbedingt vorgesehen werden.


Define

 define <name> STELLMOTOR <PiFace|Gpio|FhemDev|SysCmd>  

Je nach Device Typ sind verschiedene Attribute zur erforderlich, damit STELLMOTOR weiß wie die beiden Relais angeschlossen sind.

  • PiFace und Gpio benötigen STMgpioPortRL und STMgpioPortSTART
  • FhemDev benötigt STMfhemDevRL und STMfhemDevSTART
  • SysCmd benötigt STMsysCmdRL und STMsysCmdSTART

Für den Schaltvorgang "baut" STELLMOTOR einen set-Befehl zusammen. Beispielsweise bei FhemDev

 set <**..PortRL> 0     sowie      set <**..PortSTART> 1      zum Einschalten links  
 set <**..PortRL> 1     sowie      set <**..PortSTART> 0      zum Einschalten rechts (bei Type "einzel", sonst 1,1)
 set <**..PortRL> 0     sowie      set <**..PortSTART> 0      zum Ausschalten

  • Die Schaltbefehle 0 und 1 können mit Attributen invertiert und/oder gemapped werden (zB.: On/Off)

Um die Wirkung auszuprobieren, ohne jedes Mal zum Mischer rennen zu müssen, bietet sich an zwei Dummys zu verwenden:

define Stellmotor2rl dummy

define Stellmotor2start dummy

set <name> 45

stellt den Mischer nun auf 45%. Angenommen, stand er bei 10%, wird er nun (45-10)*MaxDriveSeconds/MaxTics Sekunden lang nach rechts laufen und dann von STELLMOTOR gestoppt.

Diese beiden Bilder zeigen die elektrische Verdrahtung von zwei Relais, die von je einem Aktor gesteuert werden:

Schaltplan einzel
Schaltplan wechsel

Typische Mischermotoren wie der Honeywell VMK haben eingebaute Endschalter, die beim Erreichen der 0%- oder 100%-Position die Stromversorgung unterbrechen. Das Modul Stellmotor nutzt dies aus, um eine Kalibrierung zwischen rechnerischem und tatsächlichen Mischerstand herzustellen.


Attribute

Alle Attributes sind auch in FHEM durch das kommando get attrHelp <varname> erklärt, für's "schnelle Nachschauen zwischendurch".


Global gültige Attribute

Parameter Wertebereich Default Beschreibung
STMrlType String einzel je nach Schaltplan, Wechsel=start+RL-relais, einzel=R-Relais+L-Relais werden geschaltet

ACHTUNG: falsche Einstellung kann zu Kurzschluß am Motor führen, bitte Einstellung genau überdenken oder mit dummy testen

bei einzel: Rechtslauf: start=0 rl=1 Linkslauf: start=1 rl=0 Ruhe: start=0 rl=0

bei wechsel: Rechtslauf start=1 rl=1 Linkslauf: L start=1 rl=0 Ruhe: start=0 rl=0

STMmaxDriveSeconds [0...n] muss angepasst werden gestoppte Zeit in Sekunden, die der Motor für die Fahrt von 0 bis 100 Prozent braucht
STMmaxTics [0...100] 100 Mischerstellung - bei Prozentangaben (PID20) 100, bei Winkelangaben anzupassen
STMpollInterval Float 0.1 Zeitintervall nach dem FHEM prüft, ob die interne Stoppzeit erreicht wurde. Hier sollte mit einem möglichst kleinen Wert gestartet werden, der vorsichtig erhöht werden kann, falls FHEM zu langsam läuft wegen des Mischermotors. Darf nicht größer STMlastDiffMax sein, sonst beginnt der Motor zu Schwingen.
STMresetOtherDeviceAtCalibrate String 0 FHEM Device das am Ende des Kalibriervorganges zusätzlich resettet wird. (command: set <STMresetOtherDeviceAtCalibrate> reset" wird abgesetzt), zB für eigenes Logging oder Rotary Encoder
STMinvertOut Zahl 0 setzen für Devices die 0 für Start und 1 für Stop erwarten
STMmapOffCmd String 0 string der im device-command anstelle '0' verwendet wird für stop
STMmapOnCmd String 0 string der im device-command anstelle '1' verwendet wird für start
STMcalibrateDirection String L auf R wird die Ralibrierung nach rechts gefahren, default= L (links)
STMlastDiffMax Zahl 1 ist die Stoppzeit weiter als dieser wert vom Soll entfernt, wird sofort ein neuer drive gestartet. Wert muss immer größer als STMpollInterval sein, sonst beginnt der Motor zu Schwingen
STMtimeTolerance Float 0.001 Stop-Time Differenzen kleiner als dieser Wert werden bei der Berechnung vollständig ignoriert (wird eventuell in Zukunft entfallen)
readingFnAttributes readingFnAttributes

Device Type abhängige Attribute

Je nach Device Type sind verschiedene Attribute vorgesehen, um STELLMOTOR mitzuteilen, wie die beiden Relais angesprochen werden. Man kann so zB während der Aufbauphase der Installation neben den Gpio devices noch 2 dummy devices im Attr vorhalten um zwischendurch zu testen. Hierzu muss dann nur noch die DEF des STELLMOTOR Devices vorübergehend auf FhemDev geändert werden.

Alle Attributes sind auch in FHEM durch das kommando get attrHelp <varname> erklärt, für's "schnelle Nachschauen zwischendurch".

Device Type Parameter Typ Default Beschreibung
PiFace / Gpio STMgpioPortRL Zahl 5 PiFace Digital port oder Gpio-Port für RL oder R Relais
PiFace / Gpio STMgpioPortSTART Zahl 4 PiFace Digital Port oder Gpio-Port für START (oder L Relais bei 'einzel')
FhemDev STMfhemDevRL String RelaisRL FHEM-Device name für RL (oder R) Aktor (zB.: 'keller portB' oder 'dummyRLrelais')
FhemDev STMfhemDevSTART String RelaisSTART FHEM-Device name für START (oder L) Aktor (zB.: 'keller portC' oder 'dummySTARTrelais')
SysCmd STMsysCmdRL String 0 freies Command das für RL an die Shell übergeben wird (zB: '/Usr/local/bin/gpio write 4', STELLMOTOR fügt 0 oder 1 arg. dazu)
SysCmd STMsysCmdSTART String 0 freies Command das für START an die Shell übergeben wird (zB: '/Usr/local/bin/gpio write 5', STELLMOTOR fügt 0 oder 1 arg. am Ende dazu)


Settings

SET Wertebereich Beschreibung
set <name> N [1...100] stellt den Mischer auf N % Öffnung
set <name> stop - stoppt die laufende bewegung sofort und berechnet den aktuellen positionswert neu
set <name> calibrate - stellt den Mischer auf Min. oder Max (in FHEM 1% oder 100%); default: maximaler Linkslauf bis zur Endschalterpostion, kann über Attr in Rechtslauf geändert werden.
set <name> reset - Setzt die Position und die Werte im Cache auf Null. Verwendung ist intern (am Ende von calibrate) oder nach mechanischem Neueinbau des Motors (da reicht aber auch ein Calibrate)


Readings

Alle Readings sind auch in FHEM durch das kommando get readingsHelp <varname> erklärt, für's "schnelle nachschauen zwischendurch".

readings Wertebereich Beschreibung
position [1..100%] der Wert wird gesetzt am Beginn einer Mischerbewegung (anderer Wertebereich, wenn MaxTics nicht 100)
state active,error,position Position wird beim Stopp der Motorbewegung gesetzt
lastStart Float Zeitstempel der letzten Motorbewegung
locked [0 1] Steht auf 1 während der Motor gerade läuft (Calibrate oder gewünsche Position per set).

Neue Kommandos werden während lock nur in eine Warteschleife (reading: command_queue) genommen.

Zeigt im im Frontend, dass der Motor gerade läuft.

queue_lastdiff abhängig von der FHEM-Last oder anderen blockierenden Kommandos wird das Stopp-Kommando nur nahe an der kalkulierten Stoppzeit ausgeführt, vermutlich nie exakt. STELLMOTOR merkt sich die Zeitdifferenz, zu der der Motor wirklich gestoppt wurde und addiert bei der nächsten Bewegung des Motors die Differenz, um möglichst präzise die wirkliche Motorstellung zu erreichen.
stopTime Null oder die errechnete Zeit zum Stopp der Motorbewegung
command_queue Position einer anstehenden neuen Motorposition, die angefordert wurde als die letzte Motorbewegung noch ausgeführt oder das Modul disabled war
OutType Bei der Defintion gewählte Arbeitsart: PiFace,Gpio,FhemDev,SysCmd
DoResetAtStop Zeitstempel des Ende der letzten Kalibrierfahrt


Weblinks