Autor Thema: PID-Modul: Vorschläge (gelöst)  (Gelesen 46823 mal)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17445
  • s/fhem\.cfg/configDB/g
Aw: PID-Modul: Vorschläge
« Antwort #105 am: 08 Oktober 2013, 23:25:59 »
kommt alles, aber wahrscheinlich erst am nächsten Wochenende.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1426
Aw: PID-Modul: Vorschläge
« Antwort #106 am: 09 Oktober 2013, 11:12:01 »
Hallo Udo,

sorry, wenn meine Kommentare im Forum mehr Stress als Hilfe für dich waren.

Ich habe dein letztes Skript nun bei mir eingespielt und einige Fixes/Anmerkungen eingetragen.
(#jjj als Marker)

Einige Fragmente konnte ich nicht nachvollziehen.

Anpassungen:

"pidReverseAction " invertierter Wirksinn;
geändertes Handling bei wind-up am unteren Stellbereich.
erstmalige Ausgabe Actuation sicherstellen

Vielleicht hilft es deine Einsatzzeit am Samstag zu verkürzen.

Noch eine Frage
PID startet nicht automatisch. Was ist hier der Plan ?

beste Grüße
John
CubieTruck CULV3 MAX HM  Logo  ESP8266 MQTT PID20 HourCounter MaxScanner KostalPiko

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17445
  • s/fhem\.cfg/configDB/g
Antw: PID-Modul: Vorschläge
« Antwort #107 am: 12 Oktober 2013, 19:00:04 »
Hallo John, danke für Deine Unterstützung.

Zitat
PID startet nicht automatisch. Was ist hier der Plan ?

Den Autostart hatte ich schon in meiner hiesigen Version (die noch nicht im Forum war) eingebaut.

Zitat
"pidReverseAction " invertierter Wirksinn;
geändertes Handling bei wind-up am unteren Stellbereich.
erstmalige Ausgabe Actuation sicherstellen

Habe ich jetzt erstmal so übernommen.

Zitat
Einige Fragmente konnte ich nicht nachvollziehen.

Das waren fast alles Dinge, die ich aus dem Originalmodul übernommen hatte.

Schau Dir bitte das angehängte Modul nochmal an, ich habe da auch noch ein paar Kommentare zu Deinen Fragen eingefügt. Wenn Du das so ok findest, werde ich noch die Doku dazu machen und ein paar unserer Kommentare entfernen, bevor ich es dann einchecke.

Übrigens - Du verwendest scheinbar einen sehr abstrusen Editor, von Sonderzeichen hat der irgendwie noch nie was gehört.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1426
Antw: PID-Modul: Vorschläge
« Antwort #108 am: 12 Oktober 2013, 20:21:51 »
Hallo Udo,
besten dank für das überarbeitete Modul.

Anti-Wind_Up-Strategie

Ich hab mir in den vergangenen Tagen nochmal die Anti-WindUp Strategie vorgenommen
und meine, diese muss geändert werden.

Folgendes konnte ich (wenn auch unter exotischen Bedingungen) produzieren.

Zitat
desired=0
2013-10-09_23:47:26 PID.BAD temperature: 21
2013-10-09_23:47:26 PID.BAD actuation: 0
2013-10-09_23:47:26 PID.BAD delta: -21.0
2013-10-09_23:47:26 PID.BAD p_i: 735
2013-10-09_23:47:26 PID.BAD p_p: -735

desired=20
2013-10-09_23:47:28 PID.BAD temperature: 21
2013-10-09_23:47:29 PID.BAD actuation: 100     <----
2013-10-09_23:47:29 PID.BAD delta: -1.0           <----
2013-10-09_23:47:29 PID.BAD p_i: 135
2013-10-09_23:47:29 PID.BAD p_p: -35

Das Ventil macht zu 100 % auf, obwohl wir unter dem Sollwert liegen.
Der Effekt ist auf die Anti-windup-Strategie zurückzuführen.

Ich bin auf die Suche gegangen und habe folgende mir plausibel erscheinende Realisierung gefunden,
die ich die letzten Tage mit meinem "alten" Modul getestet habe.

  my $isWindup =  ( $delta >0 && $actuationLast>$satMax) ||( $delta <0 && $actuationLast<$satMin);
  if (! $isWindup)  # nur weiter integrieren, wenn kein windUP
  {
    $i = $i + $delta * $pid->{iFactor};
    $pid->{windUP}=0;
  }
  else {
   $pid->{windUP}=1;
  }
  XPID_sv($pid, 'integrator', $i);


Den Vorschlag habe ich hier
http://www.mikrocontroller.net/topic/82685
gefunden und leicht abgeändert.

Idee:
1. actuation wird nicht begrenzt, nur die Ausgabe an das Stellglied wird begrenzt
2. wenn actuation die Stellgrenzen beim letzten Scan verletzt hat,
   wird das Integrieren des I-Anteils beim aktuellen Scan gestoppt. (isWindup=1)
   
Hat sich die letzten 2 Tage gut bewährt.
Gefällt mir auch vom Ansatz her gut.

Code-Fragment
Der Sinn diese Fragments leuchtet mir trotz deiner Erklärung nicht ein.
$a = (int($a) == int($i)) ? $hash->{helper}{satMin} : $a; #jjj unklar warum
# bt weil der Aktor sonst auf != 0 stehenbleiben kann.
                                                               
Der Fall tritt nur ein, wenn $d=0 und $p=0
oder
wenn $d=-$p
warum muss man dann $a auf satMin zwingen ?

D-Anteil


Ich verwende zwar den D-Anteil praktisch nicht,
aber ich glaube dass die derzeitige Umsetzung technisch falsch ist.

Gründe:
Das Modul war zuvor vom Sensor getrieben (wir wissen das hat Nachteile),
damit hatte der D-Anteil seine natürliche Zeitbasis, nämlich die der physischen Werteänderung.
Das ist mit dem Timer-gesteuerten Treiber nun anders.
Das Sende-Intervall des Sensors muss nicht mit der des Timers übereinstimmen.

Zitat
Sensor-Scan A
PID-Scan     Delta 1 
PID-Scan         Delta 2
PID-Scan      Delta 3  (muss 0 sein, da wir keinen neuen Istwert haben)
Sensor-Scan B

Delta 2 - Delta 1 ist immer 0  (Istwert hat sich nicht geändert)
Delta 3 - Delta 2 ist immer 0  (Istwert hat sich nicht geändert)

Damit liefert Delta 1 einen Peak, der sofort wieder verschwindet (Delta 2,3) ohne physische Berechtigung.
Ich denke man müsste Delta1 merken und bis zum nächsten SensorScan in der PID-Verrechnung verwenden.
Somit müssten wir für den D-Anteil ein eigenständiges Delta mitführen.
Vielleicht ist auch ein anderer Algorithmus möglich, aber der aktuelle scheint mir  nicht zu passen.

John
CubieTruck CULV3 MAX HM  Logo  ESP8266 MQTT PID20 HourCounter MaxScanner KostalPiko

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17445
  • s/fhem\.cfg/configDB/g
Antw: PID-Modul: Vorschläge
« Antwort #109 am: 12 Oktober 2013, 20:29:11 »
Zitat
Der Sinn diese Fragments leuchtet mir trotz deiner Erklärung nicht ein.
...
Der Fall tritt nur ein, wenn $d=0 und $p=0
oder
wenn $d=-$p
warum muss man dann $a auf satMin zwingen ?

Bei mir trat der Fall auf, dass der erste Fall auftrat und der $a auf 1 stehenblieb, was dazu führte, dass das Heizkörperventil auf 1% steheblieb anstatt komplett zu schließen. Und bei 1% machen meine Heizkörper schon ganz schön warm.

Zu Deinen anderen Vorschlägen:

Ich habe mich noch nicht mit dem technischen Hintergrund der PID-Berechnung selbst befasst. Wenn Du da tiefer drin bist, und  irgendwelche (funktionierenden) Verbesserungen hast, baue ich die gerne in das Modul ein. Im Moment habe ich etwas wenig Zeit, mich auch noch mit der Theroie des PID zu befassen :(

Viele Grüße
Udo
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1426
Antw: PID-Modul: Vorschläge
« Antwort #110 am: 12 Oktober 2013, 20:48:03 »
Hi Uli

Beispiel im Code
Log3 $pn, 2, $msg;
sollte es nicht besser so heissen ?
Log3 $hash, 2, $msg;
mit
sub
Log3($$$)
{
  my ($dev, $loglevel, $text) = @_;

  $dev = $dev->{NAME} if(defined($dev) && ref($dev) eq "HASH");

John
CubieTruck CULV3 MAX HM  Logo  ESP8266 MQTT PID20 HourCounter MaxScanner KostalPiko

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17445
  • s/fhem\.cfg/configDB/g
Antw: PID-Modul: Vorschläge
« Antwort #111 am: 12 Oktober 2013, 20:57:55 »
Log3 kann mit mit beidem korrekt umgehen (sowohl $name als auch $hash) aber was hat das mit dem PID zu tun? Und wo nimmst Du den Uli her?
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Hans Franz

  • Sr. Member
  • ****
  • Beiträge: 547
Antw: PID-Modul: Vorschläge
« Antwort #112 am: 13 Oktober 2013, 12:02:00 »
Moin,
Danke für die Optimierung des Moduls.

Ich habe mir erlaubt es zu testen und erhalte:
2013.10.13 11:51:41 3: set stellantrieb.02 valve 5.22458e-15 : Set valve needs a numeric parameter between 0 and 100
2013.10.13 11:51:41 2: PID heizung.02: response: Set valve needs a numeric parameter between 0 and 100

Muss ich vor dem Testen noch eine Säuberungsaktion ausführen?

Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1426
Antw: PID-Modul: Vorschläge
« Antwort #113 am: 13 Oktober 2013, 12:11:41 »
Hallo Hans
vesuchs mit

attr <pidName> pidRoundValveValue 1
Das sollte den Ausgabewert an das Stellglied auf eine Ganzzahl runden.

John
CubieTruck CULV3 MAX HM  Logo  ESP8266 MQTT PID20 HourCounter MaxScanner KostalPiko

Offline Hans Franz

  • Sr. Member
  • ****
  • Beiträge: 547
Antw: PID-Modul: Vorschläge
« Antwort #114 am: 13 Oktober 2013, 12:24:27 »
Hallo John,
Danke, das wars.
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Offline Hans Franz

  • Sr. Member
  • ****
  • Beiträge: 547
Antw: PID-Modul: Vorschläge
« Antwort #115 am: 15 Oktober 2013, 14:12:58 »
Moin,

Wenn ich den PID-Regler zur Heizungsteuerung einsetze (direktes Ansteuern von FHT8V), wie setze ich dann die Attribute möglichst sinnvoll?

Im Moment (keine Attribute außer pidRoundValveValue gesetzt), ergeben sich extreme Sprünge:

2013.10.15 13:42:51 3: PID heizung.02: set stellantrieb.02 valve 99
2013.10.15 13:42:51 3: FHT8V set stellantrieb.02 valve 99
2013.10.15 13:42:51 3: get stellantrieb.02 valve : 98
2013.10.15 13:42:51 3: PID heizung.02: set stellantrieb.02 valve 99
2013.10.15 13:42:51 3: FHT8V set stellantrieb.02 valve 99
2013.10.15 13:43:53 3: PID heizung.02: set stellantrieb.02 valve 0
2013.10.15 13:43:53 3: FHT8V set stellantrieb.02 valve 0
2013.10.15 13:43:54 3: PID heizung.02: set stellantrieb.02 valve 0
2013.10.15 13:43:54 3: FHT8V set stellantrieb.02 valve 0
2013.10.15 13:44:54 3: PID heizung.02: set stellantrieb.02 valve 0
2013.10.15 13:44:54 3: FHT8V set stellantrieb.02 valve 0
2013.10.15 13:44:55 3: PID heizung.02: set stellantrieb.02 valve 0
2013.10.15 13:44:55 3: FHT8V set stellantrieb.02 valve 0
2013.10.15 13:45:55 3: PID heizung.02: set stellantrieb.02 valve 0
2013.10.15 13:45:55 3: FHT8V set stellantrieb.02 valve 0
2013.10.15 13:45:56 3: PID heizung.02: set stellantrieb.02 valve 0
2013.10.15 13:45:56 3: FHT8V set stellantrieb.02 valve 0
2013.10.15 13:47:01 3: PID heizung.02: set stellantrieb.02 valve 0
2013.10.15 13:47:01 3: FHT8V set stellantrieb.02 valve 0
2013.10.15 13:47:01 3: PID heizung.02: set stellantrieb.02 valve 0
2013.10.15 13:47:01 3: FHT8V set stellantrieb.02 valve 0
2013.10.15 13:48:02 3: PID heizung.02: set stellantrieb.02 valve 95
2013.10.15 13:48:02 3: FHT8V set stellantrieb.02 valve 95
2013.10.15 13:48:02 3: get stellantrieb.02 valve : 94
2013.10.15 13:48:02 3: PID heizung.02: set stellantrieb.02 valve 95
2013.10.15 13:48:02 3: FHT8V set stellantrieb.02 valve 95
2013.10.15 13:49:03 3: PID heizung.02: set stellantrieb.02 valve 97
2013.10.15 13:49:03 3: FHT8V set stellantrieb.02 valve 97
2013.10.15 13:49:03 3: get stellantrieb.02 valve : 96

Gruss
Hans
« Letzte Änderung: 15 Oktober 2013, 14:15:13 von Hans Franz »
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

Offline John

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1426
Antw: PID-Modul: Vorschläge
« Antwort #116 am: 15 Oktober 2013, 14:29:32 »
Hallo Hans,
ich bin gerade dran die Innereien des Moduls neu zu organisieren.
Ich bitte dich daher noch um etwas Geduld.

John
CubieTruck CULV3 MAX HM  Logo  ESP8266 MQTT PID20 HourCounter MaxScanner KostalPiko

Offline fhainz

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1263
Antw: PID-Modul: Vorschläge
« Antwort #117 am: 15 Oktober 2013, 15:06:00 »
Das kann ich auch bestätigen. PID rechnet den Stellwert richtig, FHT8V stellt aber immer auf 100 bzw 0%.

Grüße

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 17445
  • s/fhem\.cfg/configDB/g
Antw: PID-Modul: Vorschläge
« Antwort #118 am: 15 Oktober 2013, 16:17:40 »
1. reden wir über die Modulversion, die am Wochenende hier im Thread angehängt wurde?

2. was steht in den Readings selbst?

-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Hans Franz

  • Sr. Member
  • ****
  • Beiträge: 547
Antw: PID-Modul: Vorschläge
« Antwort #119 am: 15 Oktober 2013, 17:36:46 »
1. reden wir über die Modulversion, die am Wochenende hier im Thread angehängt wurde?

2. was steht in den Readings selbst?

zu 1: ja klar :)
zu 2: ich habe gerade mal ein neues Log-File angelegt. Habe bisher nur desired,measured und actuation gelogt.
        Bericht folgt.

Gruss
Hans
         
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20