TapHome

Interpolácia a prahy

Lineárna interpolácia LINEAR a prahové spínanie HYSTERESIS na mapovanie hodnôt, stmievanie svetiel a riadenie kúrenia v skriptoch TapHome.

LINEAR prevedie hodnotu z jedného rozsahu do druhého po priamke. HYSTERESIS prepína medzi dvoma výstupnými hodnotami s pásmom necitlivosti, takže výstup okolo jedného prahu nepreskakuje sem a tam.

LINEAR

LINEAR mapuje hodnotu zo vstupného rozsahu do výstupného rozsahu po priamke prechádzajúcej dvoma bodmi, in1 → out1 a in2 → out2 — napríklad surovú hodnotu registra na percentá alebo denné svetlo na jas svietidla.

1
2
LINEAR(value, in1, out1, in2, out2)
LINEAR(value, in1, out1, in2, out2, LinearType)

Parametre

NázovTypPopis
valuečísloVstupná hodnota.
in1, out1čísloPrvý bod: vstup in1 dá výstup out1.
in2, out2čísloDruhý bod: vstup in2 dá výstup out2.
LinearTypeenum, voliteľnýČo sa stane, keď je value mimo rozsahu in1 – in2.
LinearTypeVýsledok mimo vstupného rozsahu
DEFAULT (alebo vynechaný)Rovnaké ako BOUNDS. Pri Core staršom ako 2022.2 extrapoluje ako INFINITE.
BOUNDSHodnota sa obmedzí na rozsah, takže výsledok ostane medzi out1 a out2.
STRICTNaN.
INFINITEPriamka pokračuje ďalej (extrapolácia).
Graf funkcie LINEAR

Návratová hodnota — double. Vstup NaN dá NaN. Keď sa in1 rovná in2, sklon sa nedá vypočítať a namiesto neho sa použije 1.

Príklad — prepočet surovej 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

Vplyv LinearType pre vstup 11 s bodmi 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: NaN

Príklad — stmievanie: mapovanie hodnoty na jas svietidla

Úroveň stmievača je v TapHome od 0 do 1 (0 – 100 %). Tento vzorec stmieva svetlo z plného jasu za tmy až po vypnutie pri 300 lx denného svetla; BOUNDS drží úroveň medzi 0 a 1 aj pri jasnejších či tmavších hodnotách senzora:

# 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 more

Krivka stmievania, ktorá nikdy neklesne pod 10 % — hodnota posuvníka x od 0 do 1 sa mapuje na rozsah 0,1 – 1:

LINEAR(x, 0, 0.1, 1, 1);

Rovnako to funguje pri vetraní: LINEAR(co2, 400, 0, 1200, 1) dá 0 pri 400 ppm, 0,5 (50 %) pri 800 ppm a 1 pri 1 200 ppm.

Pozrite aj — HYSTERESIS, Zaokrúhľovanie a náhodné čísla.

HYSTERESIS

HYSTERESIS vráti lowerState, keď hodnota klesne na lowerThreshold, upperState, keď stúpne na upperThreshold, a previousState, kým ostáva medzi nimi.

1
HYSTERESIS(value, upperThreshold, lowerThreshold, upperState, lowerState, previousState)

Hysteréza filtruje signál tak, aby výstup reagoval pomalšie ako vstup: termostat zapne kúrenie, keď teplota klesne pod jednu hodnotu, ale vypne ho až vtedy, keď stúpne nad inú.

Parametre

NázovTypPopis
valuečísloMeraná hodnota, napríklad teplota.
upperThresholdčísloHodnota, pri ktorej a nad ktorou sa vráti upperState. Musí byť vyššia ako lowerThreshold.
lowerThresholdčísloHodnota, pri ktorej a pod ktorou sa vráti lowerState.
upperState, lowerStatečísloVýsledky pre oba prahy — ľubovoľné čísla, nielen 0 a 1.
previousStatečísloVýsledok, kým je hodnota medzi prahmi, zvyčajne predchádzajúci výstup. Nesmie byť Null.

Návratová hodnota — double: upperState, lowerState alebo previousState. Hodnota, ktorá je od prahu vzdialená najviac 0,005, sa považuje za dosiahnutie prahu. Hodnota NaN vráti previousState.

Príklad — kúrenie

Miestnosť sa udržiava na 20 °C s hysterézou ±2 °C: kúrenie sa zapne, keď teplota klesne na 18 °C, a vypne, keď stúpne na 22 °C. V smart rule Skript sa spínač kúrenia číta aj zapisuje:

# Te is the room temperature, Sw the heater switch
Sw := HYSTERESIS(Te, 22, 18, 0, 1, Sw);

V smart rule Vzorec je predchádzajúcim výsledkom LastState, ktorý je Null pri prvom spustení a po chybe skriptu:

HYSTERESIS(Te, 22, 18, 0, 1, IF(ISNULL(LastState), 0, LastState));

Chyby

  • Upper threshold must be higher than lower threshold — pri uložení skriptu, ktorého prahy sú pevné čísla.
  • Upper threshold (X) must be higher than lower threshold (Y) — pri vykonávaní, keď prahy pochádzajú z premenných.

Pozrite aj — Skripty v smart rules, Riadenie plnenia nádrže s hysterézou.