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.
| |
Parametry
| Nazwa | Typ | Opis |
|---|---|---|
value | liczba | Wartość wejściowa. |
in1, out1 | liczba | Pierwszy punkt: wejście in1 daje wyjście out1. |
in2, out2 | liczba | Drugi punkt: wejście in2 daje wyjście out2. |
LinearType | wyliczenie, opcjonalne | Co się dzieje, gdy value jest poza zakresem in1 – in2. |
LinearType | Wynik poza zakresem wejściowym |
|---|---|
DEFAULT (lub pominięty) | Tak samo jak BOUNDS. W jednostkach Core starszych niż 2022.2 ekstrapoluje jak INFINITE. |
BOUNDS | Wartość jest ograniczana do zakresu, więc wynik pozostaje między out1 a out2. |
STRICT | NaN. |
INFINITE | Prosta jest przedłużana (ekstrapolacja). |
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: 25Dział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: NaNPrzykł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 moreKrzywa ś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.
| |
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
| Nazwa | Typ | Opis |
|---|---|---|
value | liczba | Mierzona wartość, na przykład temperatura. |
upperThreshold | liczba | Wartość, przy której lub powyżej której zwracane jest upperState. Musi być wyższa niż lowerThreshold. |
lowerThreshold | liczba | Wartość, przy której lub poniżej której zwracane jest lowerState. |
upperState, lowerState | liczba | Wyniki dla obu progów — dowolne liczby, nie tylko 0 i 1. |
previousState | liczba | Wynik, 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ą.