Prof Creative Commons License 2020.03.27 0 0 3638

Hali,

 

Tegnap megírtam rá a választ, de… Mindegy.

 

Matek: 

if ((second - idopont) > 30) { // 30 másodpercenként vizsgálja, hogy a hőmérséklet hogyan alakul

Ha a kilépési időpontot előre meghatározod, akkor csak a millis aktuális visszatérő értékével kell összehasonlítani bármiféle matek nélkül. Nyilván "kényelmetlen" három nagyságrenddel eltérő számokkal számolni és van benne kis hibázási lehetőség is, de szoftver optimalizálás tekintetében nem mindegy. Ráadásul jóval áttekinthetőbb.

 

Ami a "hiba" jelenséget illeti. Képzelj el egy extrém szélsőértéket, a belső épp 28 fok felett egy tizeddel, a külső épp 26 felett egy tizeddel. Ha valamelyik eléri az aktiválási feltételt, akkor a külső 1,3 óránként 1 fokkal kezd el nőni, vagyis 1 óra 20 perc elteltével 27, 2 óra 40 perc elteltével 28 fok lesz, de vajon ez idő alatt mennyire hűl vissza a mag? 26,5? 27,5? 28,5?

 

Amit LyPapa írt, pont erre ad egy lehetséges, a PID-nél  egyszerűbb megoldást. Csak ehhez kellenek elég jó historikus adatsorok, hogy optimalizálni lehessen, különben vaktába lövöldözöl.

 

Állapotgépként ezt a rendszert nem lehet egyszerűen leírni, mert több analóg érték nem feltétlenül direkt összefüggéséből áll és csak egy ideális egyensúlyi pontja van, mégpedig az, amikor minden, a mag, a tartály és a külső levegő is 28 fokos. Ezt úgy szokták megoldani, hogy nem az állapotot és a határt figyelik, hanem a határtól való távolságot és az azt befolyásoló értékek változási irányát és sebességét (ez a PID szabályozás). Ha cseppet egyszerűsítünk rajta, akkor historikus adatsorok alapján lehet csinálni egy olyan mátrixot, amely a külső és a belső hőmérséklet arányai alapján kiadja, hogy ha kell, akkor mennyi időre kell bekapcsolni a fűtőelemet, hogy a mag viszonylag stabilan (mondjuk +/- 0,5 fok) 28 fokon maradjon.

 

 

Kitartást!

Előzmény: granov (3636)