Interpolace a prahy
Lineární interpolace LINEAR a spínání podle prahů HYSTERESIS pro převod hodnot, stmívání světel a řízení vytápění ve skriptech TapHome.
LINEAR převede hodnotu z jednoho rozsahu do jiného po přímce. HYSTERESIS přepíná mezi dvěma výstupními hodnotami s pásmem necitlivosti, takže výstup nepřeskakuje sem a tam kolem jediného prahu.
LINEAR
LINEAR převede hodnotu ze vstupního rozsahu do výstupního rozsahu po přímce procházející dvěma body, in1 → out1 a in2 → out2 — například surovou hodnotu registru na procenta nebo denní světlo na jas světla.
| |
Parametry
| Název | Typ | Popis |
|---|---|---|
value | number | Vstupní hodnota. |
in1, out1 | number | První bod: vstup in1 dá výstup out1. |
in2, out2 | number | Druhý bod: vstup in2 dá výstup out2. |
LinearType | enum, nepovinný | Co se stane, když je value mimo rozsah in1 – in2. |
LinearType | Výsledek mimo vstupní rozsah |
|---|---|
DEFAULT (nebo vynechán) | Stejně jako BOUNDS. Na Core starších než 2022.2 extrapoluje jako INFINITE. |
BOUNDS | Hodnota se omezí na rozsah, takže výsledek zůstane mezi out1 a out2. |
STRICT | NaN. |
INFINITE | Přímka pokračuje (extrapolace). |
Vrací — double. Vstup NaN dá NaN. Když se in1 rovná in2, sklon nelze spočítat a místo něj se použije 1.
Příklad — převod surové hodnoty
# 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: 25Účinek LinearType pro vstup 11 s body 0 → 400 a 10 → 2000:
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říklad — stmívání: převod hodnoty na jas světla
Úroveň stmívače je v TapHome od 0 do 1 (0 – 100 %). Tento vzorec stmívá světlo z plného jasu za tmy až po vypnutí při 300 lx denního světla; BOUNDS udrží úroveň mezi 0 a 1 i při jasnějších nebo tmavších hodnotách:
# 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 moreKřivka stmívání, která nikdy neklesne pod 10 % — hodnota posuvníku x od 0 do 1 se převede na 0.1 – 1:
LINEAR(x, 0, 0.1, 1, 1);Stejně to funguje u větrání: LINEAR(co2, 400, 0, 1200, 1) dá 0 při 400 ppm, 0.5 (50 %) při 800 ppm a 1 při 1 200 ppm.
Viz také — HYSTERESIS, Zaokrouhlení a náhodná čísla.
HYSTERESIS
HYSTERESIS vrátí lowerState, když hodnota klesne na lowerThreshold, upperState, když stoupne na upperThreshold, a previousState, dokud zůstává mezi nimi.
| |
Hystereze filtruje signál tak, aby výstup reagoval pomaleji než vstup: termostat zapne topení, když teplota klesne pod jednu hodnotu, ale vypne ho, až když stoupne nad jinou.
Parametry
| Název | Typ | Popis |
|---|---|---|
value | number | Měřená hodnota, například teplota. |
upperThreshold | number | Hodnota, od které (včetně) se vrací upperState. Musí být vyšší než lowerThreshold. |
lowerThreshold | number | Hodnota, do které (včetně) se vrací lowerState. |
upperState, lowerState | number | Výsledky pro oba prahy — libovolná čísla, nejen 0 a 1. |
previousState | number | Výsledek, dokud je hodnota mezi prahy, obvykle předchozí výstup. Nesmí být Null. |
Vrací — double: upperState, lowerState nebo previousState. Hodnota, která je od prahu vzdálena nejvýše 0.005, se počítá jako jeho dosažení. Hodnota NaN vrátí previousState.
Příklad — vytápění
Udržujte místnost na 20 °C s hysterezí ±2 °C: topení se zapne, když teplota klesne na 18 °C, a vypne, když stoupne na 22 °C. Ve smart rule Skript se spínač topení čte i zapisuje:
# Te is the room temperature, Sw the heater switch
Sw := HYSTERESIS(Te, 22, 18, 0, 1, Sw);Ve smart rule Vzorec je předchozím výsledkem LastState, který je při prvním běhu a po chybě skriptu Null:
HYSTERESIS(Te, 22, 18, 0, 1, IF(ISNULL(LastState), 0, LastState));Chyby
- Upper threshold must be higher than lower threshold — když ukládáte skript, jehož prahy jsou pevná čísla.
- Upper threshold (X) must be higher than lower threshold (Y) — za běhu, když prahy pocházejí z proměnných.
Viz také — Skripty ve smart rules, Řízení plnění nádrže pomocí hystereze.