# Pulse throttle
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
| ID | Skrót | Nazwa | Typ | Domyślnie | Opis |
|---|---|---|---|---|---|
input | I | Wejście | BOOLEAN | false | Sygnał impulsowy. Tylko zbocza narastające poza okresem blokady są przekazywane. |
# Wyjścia
| ID | Skrót | Nazwa | Typ | Domyślnie | Opis |
|---|---|---|---|---|---|
output | O | Wyjście | BOOLEAN | false | Ograniczony impuls wyjściowy. Odwzorowuje kształt przekazanego impulsu. |
# Konfiguracja
| ID | Nazwa | Typ | Domyślnie | Jednostka | Opis |
|---|---|---|---|---|---|
discard_period | Okres blokady | NUMBER | 0 | s | Okno blokady w sekundach po przekazaniu impulsu. Impulsy przychodzące w tym oknie są odrzucane. Ustaw 0, aby wyłączyć ograniczanie. Szczegóły: ≥ 0 |
# Stan
| ID | Nazwa | Typ | Domyślnie | Jednostka | Opis |
|---|---|---|---|---|---|
prev_input | Poprzedni stan wejścia | BOOLEAN | false | Przechowuje poprzedni stan wejścia do wykrywania zboczy. | |
discarding | Blokowanie | BOOLEAN | false | Czy 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)
}
