TapHome

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.

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

Paraméterek

NévTípusLeírás
valueszámBemeneti érték.
in1, out1számElső pont: az in1 bemenet out1 kimenetet ad.
in2, out2számMásodik pont: az in2 bemenet out2 kimenetet ad.
LinearTypefelsorolt típus, nem kötelezőMi történik, ha a value az in1 – in2 tartományon kívül esik.
LinearTypeEredmé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.
BOUNDSAz érték a tartományra korlátozódik, így az eredmény az out1 és az out2 között marad.
STRICTNaN.
INFINITEAz egyenes folytatódik (extrapoláció).
LINEAR function graph

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: 25

A 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: NaN

Pé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 more

Fé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.

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

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évTípusLeírás
valueszámMért érték, például hőmérséklet.
upperThresholdszámAz az érték, amelyen vagy amely felett upperState a visszatérési érték. Nagyobbnak kell lennie a lowerThreshold értéknél.
lowerThresholdszámAz az érték, amelyen vagy amely alatt lowerState a visszatérési érték.
upperState, lowerStateszámAz eredmények a két küszöbértéknél — bármilyen számok, nem csak 0 és 1.
previousStateszámAz 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.