# Binary limiter
Blok przyjmujący wejście binarne i numeryczne, który zwraca prawdę tylko wtedy, gdy wejście binarne jest prawdziwe, a wartość numeryczna nie przekracza skonfigurowanego limitu.
Binary limiter
I
V
O
L
# Wejścia
| ID | Skrót | Nazwa | Typ | Domyślnie | Opis |
|---|---|---|---|---|---|
input | I | Wejście | BOOLEAN | false | Wejście logiczne określające, czy system aktywnie próbuje wykonać akcję (np. sygnał włączenia lub stan operacyjny). |
value | V | Porównywana wartość | NUMBER | 0 | Wejście numeryczne dostarczające zmierzoną lub obliczoną wartość do porównania ze skonfigurowanym limitem. |
# Wyjścia
| ID | Skrót | Nazwa | Typ | Domyślnie | Opis |
|---|---|---|---|---|---|
output | O | Wyjście | BOOLEAN | false | Wyjście logiczne, które jest prawdziwe tylko wtedy, gdy wejście binarne jest prawdziwe, a wartość numeryczna nie przekracza skonfigurowanego limitu. W przeciwnym razie zwraca fałsz. |
limit_exceeded | L | Limit przekroczony | BOOLEAN | false | Wyjście logiczne, które jest prawdziwe tylko wtedy, gdy wartość przekracza ustawiony limit (z uwzględnieniem histerezy). |
# Konfiguracja
| ID | Nazwa | Typ | Domyślnie | Jednostka | Opis |
|---|---|---|---|---|---|
limit | Limit wartości | NUMBER | 0.0 | Wartość, z którą porównywane jest wejście numeryczne. Jest to wstępnie zdefiniowane ustawienie określające maksymalną dopuszczalną wartość. Jeśli wejście numeryczne przekroczy ten limit, wyjście zostanie ustawione na fałsz. | |
hysteresis | Zakres histerezy | NUMBER | 0.5 | Margines wokół limitu wartości, który zapobiega wyzwalaniu zmian, dopóki wartość wejściowa nie wyjdzie poza zdefiniowany zakres. |
# Kod źródłowy
Pokaż kod Volang
in = input::get("input")
value = input::get("value")
limit_exceeded = output::get("limit_exceeded")
limit = config::get("limit")
hysteresis = config::get("hysteresis")
new_limit_exceeded = false
if (limit >= 0) {
// Positive limit: exceeded when value is too high
if (value <= (limit - hysteresis)) {
new_limit_exceeded = false
} else if ((value > (limit - hysteresis)) and (value < (limit + hysteresis))) {
new_limit_exceeded = limit_exceeded
} else if (value >= (limit + hysteresis)) {
new_limit_exceeded = true
}
} else {
// Negative limit: exceeded when value is too low (more negative)
if (value >= (limit + hysteresis)) {
new_limit_exceeded = false
} else if ((value > (limit - hysteresis)) and (value < (limit + hysteresis))) {
new_limit_exceeded = limit_exceeded
} else if (value <= (limit - hysteresis)) {
new_limit_exceeded = true
}
}
output::set("limit_exceeded", new_limit_exceeded)
output::set("output", in and !new_limit_exceeded)
