# Pulse throttle

Przetwarzanie

Blokuje powtarzające się impulsy w konfigurowalnym okresie blokady. Pierwszy impuls przechodzi i rozpoczyna okno blokady, podczas którego kolejne impulsy są odrzucane. Przydatny do eliminacji drgań sygnałów lub ograniczania częstotliwości impulsów.

Pulse throttle
I
O

# Wejścia

IDSkrótNazwaTypDomyślnieOpis
inputIWejścieBOOLEANfalseSygnał impulsowy. Tylko zbocza narastające poza okresem blokady są przekazywane.

# Wyjścia

IDSkrótNazwaTypDomyślnieOpis
outputOWyjścieBOOLEANfalseOgraniczony impuls wyjściowy. Odwzorowuje kształt przekazanego impulsu.

# Konfiguracja

IDNazwaTypDomyślnieJednostkaOpis
discard_periodOkres blokadyNUMBER0sOkno blokady w sekundach po przekazaniu impulsu. Impulsy przychodzące w tym oknie są odrzucane. Ustaw 0, aby wyłączyć ograniczanie.

Szczegóły:

≥ 0

# Stan

IDNazwaTypDomyślnieJednostkaOpis
prev_inputPoprzedni stan wejściaBOOLEANfalsePrzechowuje poprzedni stan wejścia do wykrywania zboczy.
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)
}

if (channel == "input") {
    prev_input = state::get("prev_input")

    if (value and !prev_input) {
        discarding = state::get("discarding")
        if (!discarding) {
            output::set("output", true)

            discard_ms = math::round(config::get("discard_period") * 1000)
            if (discard_ms > 0) {
                state::set("discarding", true)
                callback::set(discard_ms, "onCallback", 0)
            }
        }
    }

    if (!value and prev_input) {
        output::set("output", false)
    }

    state::set("prev_input", value)
}
Blokuje powtarzające się impulsy w konfigurowalnym okresie blokady. Pierwszy impuls przechodzi i rozpoczyna okno blokady, podczas którego kolejne impulsy są odrzucane. Przydatny do eliminacji drgań sygnałów lub ograniczania częstotliwości impulsów.