Nyt uudesta säädöstä on kertynyt muutama päivä kokemusta ja se tuntuu toimivan erinomaisesti. Se on tarkka, ei säätele venttiiliä turhaan ja reagoi nopeasti. Kuvassa näkyy miten asiat etenivät kun kattilaan tehtiin tulet vähän aikaa sen jälkeen kun suntti oli jo täysin auennut.
Alla vielä säätimen koodi kiinnostuneiden ihmeteltäväksi:
Alla vielä säätimen koodi kiinnostuneiden ihmeteltäväksi:
Koodi:
const meno = msg.payload.meno;
const paluu = msg.payload.paluu;
const kuuma = msg.payload.kuuma;
const asetus = msg.payload.setpoint
//Säädöt
const ei_saatoa_raja = 0.5;
const karkea_raja = 5;
const karkea_saato = 0.02;
const hieno_saato = 0.005;
//Haetaan vanha korjaustermi ja asento
var korjaus = flow.get("korjaus");
var vanha_asento = flow.get("asento");
//Lasketaan perusasento lämpötilojen suhteena
var asento = (asetus-paluu)/(kuuma-paluu);
//Lasketaan eroarvo
const ero = asetus - meno;
//Säädetään korjaustermiä, kunhan venttiilin asento ei ole 0 tai 1 eikä virhe ole hyvin pieni
if (vanha_asento != 1 && vanha_asento != 0 && Math.abs(ero) > ei_saatoa_raja) {
//Jos asetus on paljon menoa suurempi, säädetään karkeasti
if (ero > karkea_raja){
korjaus = korjaus + karkea_saato;
}
//Jos asetus on hieman menoa suurempi, säädetään hienosti
else if (ero <= karkea_raja && asetus > meno){
korjaus = korjaus + hieno_saato;
}
//Jos asetus on hieman menoa pienempi, säädetään hienosti
else if (Math.abs(ero) <= karkea_raja && asetus < meno){
korjaus = korjaus - hieno_saato;
}
//Jos asetus on paljon menoa suurempi, säädetään karkeasti
else if (Math.abs(ero) > karkea_raja && asetus < meno){
korjaus = korjaus - karkea_saato;
}
}
//Summataan perusasento ja korjaustermi
asento = asento + korjaus;
//Rajoitetaan asento välille 0-1
if (asento < 0){
asento = 0;
}
if (asento > 1){
asento = 1;
}
//Tallennetaan nykyinen korjaustermi ja asento
flow.set("korjaus", korjaus);
flow.set("asento", asento);
//Lähetetään asento eteenpäin
var newMsg = { payload: asento, topic: "teho" };
return newMsg;