# Hysteresis
Przełącznik progowy z histerezą, który analizuje analogową wartość wejściową i odpowiednio przełącza wyjście cyfrowe.
Hysteresis
V
O
# Wejścia
| ID | Skrót | Nazwa | Typ | Domyślnie | Opis |
|---|---|---|---|---|---|
value | V | Wartość | NUMBER | 0 | Wejście numeryczne do porównania ze skonfigurowanymi progami. |
# Wyjścia
| ID | Skrót | Nazwa | Typ | Domyślnie | Opis |
|---|---|---|---|---|---|
output | O | Wyjście | BOOLEAN | false | Wyjście logiczne przełączające się w oparciu o wartość wejściową i progi z histerezą. |
# Konfiguracja
| ID | Nazwa | Typ | Domyślnie | Jednostka | Opis |
|---|---|---|---|---|---|
mode | Tryb histerezy | ENUM | 0 | Określa sposób konfiguracji histerezy. Szczegóły: Wartości: Midpoint + Hysteresis, Threshold (On/Off) | |
midpoint | Wartość środkowa | NUMBER | 50.0 | Punkt centralny zakresu histerezy. Szczegóły: Widoczne gdy mode = Midpoint + Hysteresis | |
hysteresis | Zakres histerezy | NUMBER | 5.0 | Zakres wokół punktu środkowego tworzący efekt histerezy. Szczegóły: Widoczne gdy mode = Midpoint + Hysteresis> 0 | |
value_on | Wartość włączenia | NUMBER | 55.0 | Wartość progowa przy której wyjście się włącza. Szczegóły: Widoczne gdy mode = Threshold (On/Off)neq value_off | |
value_off | Wartość wyłączenia | NUMBER | 45.0 | Wartość progowa przy której wyjście się wyłącza. Szczegóły: Widoczne gdy mode = Threshold (On/Off)neq value_on |
# Kod źródłowy
Pokaż kod Volang
value = input::get("value")
output = output::get("output")
mode = config::get("mode") // 0=midpoint+hysteresis, 1=threshold
new_output = false
if (mode == 0) { // Midpoint + Hysteresis
midpoint = config::get("midpoint")
hysteresis = config::get("hysteresis")
threshold_on = midpoint + hysteresis
threshold_off = midpoint - hysteresis
if (value >= threshold_on) {
new_output = true
} else if (value <= threshold_off) {
new_output = false
} else {
// In hysteresis range, maintain current state
new_output = output
}
} else if (mode == 1) { // Threshold (On/Off)
value_on = config::get("value_on")
value_off = config::get("value_off")
if (value_on > value_off) {
// Standard hysteresis: on when high, off when low
if (value >= value_on) {
new_output = true
} else if (value <= value_off) {
new_output = false
} else {
// In hysteresis range, maintain current state
new_output = output
}
} else {
// Inverted hysteresis: on when low, off when high (value_off > value_on)
if (value <= value_on) {
new_output = true
} else if (value >= value_off) {
new_output = false
} else {
// In hysteresis range, maintain current state
new_output = output
}
}
}
output::set("output", new_output)
