# Variable Delayed Pulse

Przetwarzanie

Generuje opóźniony impuls na wyjściu po wyzwoleniu zboczem narastającym. Czas opóźnienia podawany przez wejście.

Variable Delayed Pulse
I
D
O

# Wejścia

IDSkrótNazwaTypDomyślnieOpis
inputIWejścieBOOLEANfalseSygnał wyzwalający. Zbocze narastające rozpoczyna sekwencję opóźnionego impulsu.
delayDOpóźnienieNUMBER0Czas opóźnienia w sekundach przed impulsem wyjściowym. 0 oznacza natychmiastowy impuls.

# Wyjścia

IDSkrótNazwaTypDomyślnieOpis
outputOWyjścieBOOLEANfalseSygnał impulsu. Aktywny po upływie opóźnienia przez skonfigurowany czas trwania impulsu.

# Konfiguracja

IDNazwaTypDomyślnieJednostkaOpis
pulseCzas trwania impulsuNUMBER0.1sCzas trwania impulsu wyjściowego generowanego po opóźnieniu.

Szczegóły:

≥ 0

# Stan

IDNazwaTypDomyślnieJednostkaOpis
last_input_stateOstatni stan wejściaBOOLEANfalsePrzechowuje poprzedni stan wejścia do wykrywania zbocza narastającego.

# Kod źródłowy

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

delay_ms = math::round(input::get("delay") * 1000)

extern fn onCallback(value) {
    if (value == 1) {
        pulse_ms = math::round(config::get("pulse") * 1000)
        output::set("output", true)
        if (pulse_ms > 0) {
            callback::set(pulse_ms, "onCallback", 2)
        } else {
            output::set("output", false)
        }
        return
    }

    if (value == 2) {
        output::set("output", false)
        return
    }
}

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

    if (value and !last_input_state) {
        state::set("last_input_state", true)

        callback::clear()
        output::set("output", false)

        if (delay_ms > 0) {
            callback::set(delay_ms, "onCallback", 1)
        } else {
            pulse_ms = math::round(config::get("pulse") * 1000)
            output::set("output", true)
            if (pulse_ms > 0) {
                callback::set(pulse_ms, "onCallback", 2)
            } else {
                output::set("output", false)
            }
        }
    }

    if (!value and last_input_state) {
        state::set("last_input_state", false)
    }
}
Generuje opóźniony impuls na wyjściu po wyzwoleniu zboczem narastającym. Czas opóźnienia podawany przez wejście.