# Binary limiter

Przetwarzanie

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

IDSkrótNazwaTypDomyślnieOpis
inputIWejścieBOOLEANfalseWejście logiczne określające, czy system aktywnie próbuje wykonać akcję (np. sygnał włączenia lub stan operacyjny).
valueVPorównywana wartośćNUMBER0Wejście numeryczne dostarczające zmierzoną lub obliczoną wartość do porównania ze skonfigurowanym limitem.

# Wyjścia

IDSkrótNazwaTypDomyślnieOpis
outputOWyjścieBOOLEANfalseWyjś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_exceededLLimit przekroczonyBOOLEANfalseWyjście logiczne, które jest prawdziwe tylko wtedy, gdy wartość przekracza ustawiony limit (z uwzględnieniem histerezy).

# Konfiguracja

IDNazwaTypDomyślnieJednostkaOpis
limitLimit wartościNUMBER0.0Wartość, 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.
hysteresisZakres histerezyNUMBER0.5Margines 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)
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.