Interpoláció és küszöbértékek
A LINEAR lineáris interpoláció és a HYSTERESIS küszöbérték-kapcsolás értékek leképezésére, világítás fényerő-szabályozására és fűtés vezérlésére a TapHome szkriptekben.
A LINEAR egy értéket egyenes mentén alakít át az egyik tartományból a másikba. A HYSTERESIS holtsávval vált két kimeneti érték között, így a kimenet nem billeg ide-oda egyetlen küszöbérték körül.
LINEAR
A LINEAR egy értéket a bemeneti tartományból a kimeneti tartományba képez le a két ponton, az in1 → out1 és az in2 → out2 ponton átmenő egyenes mentén — például egy nyers regiszterértéket százalékra, vagy a nappali fényt a világítás fényerejére.
| |
Paraméterek
| Név | Típus | Leírás |
|---|---|---|
value | szám | Bemeneti érték. |
in1, out1 | szám | Első pont: az in1 bemenet out1 kimenetet ad. |
in2, out2 | szám | Második pont: az in2 bemenet out2 kimenetet ad. |
LinearType | felsorolt típus, nem kötelező | Mi történik, ha a value az in1 – in2 tartományon kívül esik. |
LinearType | Eredmény a bemeneti tartományon kívül |
|---|---|
DEFAULT (vagy elhagyva) | Ugyanaz, mint a BOUNDS. A 2022.2-nél régebbi Core verziókon az INFINITE módhoz hasonlóan extrapolál. |
BOUNDS | Az érték a tartományra korlátozódik, így az eredmény az out1 és az out2 között marad. |
STRICT | NaN. |
INFINITE | Az egyenes folytatódik (extrapoláció). |
Visszatérési érték — double. A NaN bemenet NaN eredményt ad. Ha az in1 egyenlő az in2 értékkel, a meredekség nem számítható ki, és helyette 1 kerül felhasználásra.
Példa — nyers érték átalakítása
# raw register 0 ... 1000 -> 0 ... 100 %
LINEAR(MODBUSR(H, 10, Uint16), 0, 0, 1000, 100);
VAR raw := 250;
LINEAR(raw, 0, 0, 500, 50);
# Result: 25A LinearType hatása a 11-es bemenetre a 0 → 400 és a 10 → 2000 pontokkal:
LINEAR(11, 0, 400, 10, 2000, BOUNDS);
# Result: 2000
LINEAR(11, 0, 400, 10, 2000, INFINITE);
# Result: 2160
LINEAR(11, 0, 400, 10, 2000, STRICT);
# Result: NaNPélda — fényerő-szabályozás: egy érték leképezése a világítás fényerejére
A TapHome-ban a dimmer szintje 0-tól 1-ig terjed (0 – 100 %). Ez a képlet a világítást sötétben teljes fényerőről 300 lx nappali fénynél kikapcsolt állapotig szabályozza; a BOUNDS világosabb vagy sötétebb mérésnél is 0 és 1 között tartja a szintet:
# Va is the daylight sensor in lx, the result is the dimmer level
LINEAR(Va, 0, 1, 300, 0, BOUNDS);
# Result: 0.5 at 150 lx, 0 at 300 lx and moreFényerő-szabályozási görbe, amely soha nem megy 10 % alá — a 0 és 1 közötti x csúszkaértéket a 0.1 – 1 tartományra képezi le:
LINEAR(x, 0, 0.1, 1, 1);Ugyanez működik a szellőztetésnél is: a LINEAR(co2, 400, 0, 1200, 1) 400 ppm-nél 0, 800 ppm-nél 0.5 (50 %), 1 200 ppm-nél pedig 1 értéket ad.
Lásd még — HYSTERESIS, Kerekítés és véletlenszámok.
HYSTERESIS
A HYSTERESIS a lowerState értéket adja vissza, ha az érték a lowerThreshold szintre csökken, az upperState értéket, ha az upperThreshold szintre emelkedik, és a previousState értéket, amíg a kettő között marad.
| |
A hiszterézis úgy szűri a jelet, hogy a kimenet lassabban reagál, mint a bemenet: a termosztát akkor kapcsolja be a fűtést, ha a hőmérséklet egy érték alá csökken, de csak akkor kapcsolja ki, ha egy másik érték fölé emelkedik.
Paraméterek
| Név | Típus | Leírás |
|---|---|---|
value | szám | Mért érték, például hőmérséklet. |
upperThreshold | szám | Az az érték, amelyen vagy amely felett upperState a visszatérési érték. Nagyobbnak kell lennie a lowerThreshold értéknél. |
lowerThreshold | szám | Az az érték, amelyen vagy amely alatt lowerState a visszatérési érték. |
upperState, lowerState | szám | Az eredmények a két küszöbértéknél — bármilyen számok, nem csak 0 és 1. |
previousState | szám | Az eredmény, amíg az érték a küszöbértékek között van, általában az előző kimenet. Nem lehet Null. |
Visszatérési érték — double: upperState, lowerState vagy previousState. A küszöbértéktől legfeljebb 0.005-tel eltérő érték a küszöbérték elérésének számít. A NaN érték a previousState értéket adja vissza.
Példa — fűtés
A helyiség 20 °C-on tartása ±2 °C hiszterézissel: a fűtés bekapcsol, ha a hőmérséklet 18 °C-ra csökken, és kikapcsol, ha 22 °C-ra emelkedik. A Szkript smart rule-ban a fűtés kapcsolóját olvasod és írod is:
# Te is the room temperature, Sw the heater switch
Sw := HYSTERESIS(Te, 22, 18, 0, 1, Sw);A Képlet smart rule-ban az előző eredmény a LastState, amely az első futáskor és szkripthiba után Null:
HYSTERESIS(Te, 22, 18, 0, 1, IF(ISNULL(LastState), 0, LastState));Hibák
- Upper threshold must be higher than lower threshold — ha olyan szkriptet mentesz, amelynek küszöbértékei rögzített számok.
- Upper threshold (X) must be higher than lower threshold (Y) — futás közben, ha a küszöbértékek változókból származnak.
Lásd még — Szkriptek a smart rule-okban, Tartály hiszterézis alapú töltésvezérlése.