TapHome

Interpolacja i progi

Interpolacja liniowa LINEAR i przełączanie progowe HYSTERESIS do przeliczania wartości, ściemniania światła i sterowania ogrzewaniem w skryptach TapHome.

LINEAR przenosi wartość z jednego zakresu do drugiego wzdłuż linii prostej. HYSTERESIS przełącza między dwiema wartościami wyjściowymi ze strefą martwą, dzięki czemu wyjście nie przeskakuje tam i z powrotem wokół jednego progu.

LINEAR

LINEAR przenosi wartość z zakresu wejściowego do zakresu wyjściowego wzdłuż prostej przechodzącej przez dwa punkty, in1 → out1 i in2 → out2 — na przykład surową wartość rejestru na procenty albo światło dzienne na jasność światła.

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

Parametry

NazwaTypOpis
valueliczbaWartość wejściowa.
in1, out1liczbaPierwszy punkt: wejście in1 daje wyjście out1.
in2, out2liczbaDrugi punkt: wejście in2 daje wyjście out2.
LinearTypewyliczenie, opcjonalneCo się dzieje, gdy value jest poza zakresem in1 – in2.
LinearTypeWynik poza zakresem wejściowym
DEFAULT (lub pominięty)Tak samo jak BOUNDS. W jednostkach Core starszych niż 2022.2 ekstrapoluje jak INFINITE.
BOUNDSWartość jest ograniczana do zakresu, więc wynik pozostaje między out1 a out2.
STRICTNaN.
INFINITEProsta jest przedłużana (ekstrapolacja).
LINEAR function graph

Zwraca — double. Wejście NaN daje NaN. Gdy in1 jest równe in2, nachylenia nie da się obliczyć i zamiast niego używane jest 1.

Przykład — przeliczenie surowej wartości

# 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

Działanie LinearType dla wejścia 11 i punktów 0 → 400 oraz 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

Przykład — ściemnianie: przeliczenie wartości na jasność światła

Poziom ściemniacza w TapHome wynosi od 0 do 1 (0 – 100 %). Ta formuła ściemnia światło od pełnej jasności w ciemności do wyłączenia przy 300 lx światła dziennego; BOUNDS utrzymuje poziom między 0 a 1 przy jaśniejszych lub ciemniejszych odczytach:

# 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

Krzywa ściemniania, która nigdy nie schodzi poniżej 10 % — wartość suwaka x od 0 do 1 jest przenoszona na 0.1 – 1:

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

Tak samo działa to dla wentylacji: LINEAR(co2, 400, 0, 1200, 1) daje 0 przy 400 ppm, 0.5 (50 %) przy 800 ppm i 1 przy 1 200 ppm.

Zobacz też — HYSTERESIS, Zaokrąglanie i liczby losowe.

HYSTERESIS

HYSTERESIS zwraca lowerState, gdy wartość spadnie do lowerThreshold, upperState, gdy wzrośnie do upperThreshold, i previousState, dopóki pozostaje między nimi.

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

Histereza filtruje sygnał tak, aby wyjście reagowało wolniej niż wejście: termostat włącza grzejnik, gdy temperatura spadnie poniżej jednej wartości, ale wyłącza go dopiero wtedy, gdy wzrośnie powyżej innej.

Parametry

NazwaTypOpis
valueliczbaMierzona wartość, na przykład temperatura.
upperThresholdliczbaWartość, przy której lub powyżej której zwracane jest upperState. Musi być wyższa niż lowerThreshold.
lowerThresholdliczbaWartość, przy której lub poniżej której zwracane jest lowerState.
upperState, lowerStateliczbaWyniki dla obu progów — dowolne liczby, nie tylko 0 i 1.
previousStateliczbaWynik, dopóki wartość jest między progami, zwykle poprzednie wyjście. Nie może być Null.

Zwraca — double: upperState, lowerState lub previousState. Wartość odległa od progu najwyżej o 0.005 liczy się jako jego osiągnięcie. Wartość NaN zwraca previousState.

Przykład — ogrzewanie

Utrzymuj w pomieszczeniu 20 °C z histerezą ±2 °C: grzejnik włącza się, gdy temperatura spadnie do 18 °C, i wyłącza, gdy wzrośnie do 22 °C. W smart rule Skrypt przełącznik grzejnika jest jednocześnie odczytywany i zapisywany:

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

W smart rule Formuła poprzedni wynik to LastState, który przy pierwszym uruchomieniu i po błędzie skryptu jest Null:

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

Błędy

  • Upper threshold must be higher than lower threshold — przy zapisywaniu skryptu, którego progi są stałymi liczbami.
  • Upper threshold (X) must be higher than lower threshold (Y) — podczas wykonania, gdy progi pochodzą ze zmiennych.

Zobacz też — Skrypty w smart rules, Sterowanie napełnianiem zbiornika z histerezą.