# Numeric throttle

Przetwarzanie

Ogranicza częstotliwość zmian wartości numerycznej za pomocą progu minimalnej zmiany (martwa strefa) oraz okresu blokady (cooldown). Istotne zmiany, które nadejdą podczas blokady, są przekazywane na wyjście po jej zakończeniu.

Numeric throttle
V
V

# Wejścia

IDSkrótNazwaTypDomyślnieOpis
valueVWartośćNUMBER0Surowa wartość numeryczna, np. z czujnika.

# Wyjścia

IDSkrótNazwaTypDomyślnieOpis
valueVWartośćNUMBER0Wartość wyjściowa po ograniczeniu. Aktualizowana tylko gdy zmiana przekracza próg minimalny i okres blokady upłynął.

# Konfiguracja

IDNazwaTypDomyślnieJednostkaOpis
min_changeMinimalna zmianaNUMBER0Minimalna bezwzględna różnica od ostatniej wartości wyjściowej wymagana do przepuszczenia nowej wartości. Ustaw 0, aby wyłączyć filtrowanie martwej strefy.

Szczegóły:

≥ 0
discard_periodOkres blokadyNUMBER0sOkno blokady w sekundach po każdym wyjściu, podczas którego nowe wartości są pomijane. Ustaw 0, aby wyłączyć ograniczanie czasowe.

Szczegóły:

≥ 0

# Stan

IDNazwaTypDomyślnieJednostkaOpis
discardingBlokowanieBOOLEANfalseCzy blok jest obecnie w oknie blokady.

# Kod źródłowy

Pokaż kod Volang
channel = input::channel()
value = input::value()

extern fn onCallback(v) {
    state::set("discarding", false)

    min_change = config::get("min_change")
    discard_ms = math::round(config::get("discard_period") * 1000)
    current_input = input::get("value")
    current_output = output::get("value")

    diff = math::abs(current_input - current_output)
    if (diff > 0 and diff >= min_change) {
        output::set("value", current_input)

        if (discard_ms > 0) {
            state::set("discarding", true)
            callback::set(discard_ms, "onCallback", 0)
        }
    }
}

if (channel == "value") {
    discarding = state::get("discarding")
    if (discarding) {
        return
    }

    min_change = config::get("min_change")
    discard_ms = math::round(config::get("discard_period") * 1000)
    current_output = output::get("value")

    diff = math::abs(value - current_output)
    if (diff >= min_change) {
        output::set("value", value)

        if (discard_ms > 0) {
            state::set("discarding", true)
            callback::clear()
            callback::set(discard_ms, "onCallback", 0)
        }
    }
}
Ogranicza częstotliwość zmian wartości numerycznej za pomocą progu minimalnej zmiany (martwa strefa) oraz okresu blokady (cooldown). Istotne zmiany, które nadejdą podczas blokady, są przekazywane na wyjście po jej zakończeniu.