# Binary limiter
Binary limiter
I
V
O
L
# 入力
| ID | 略称 | 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|---|---|
input | I | input | BOOLEAN | false | |
value | V | value | NUMBER | 0 |
# 出力
| ID | 略称 | 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|---|---|
output | O | output | BOOLEAN | false | |
limit_exceeded | L | limit_exceeded | BOOLEAN | false |
# 設定
| ID | 名前 | 型 | デフォルト | 単位 | 説明 |
|---|---|---|---|---|---|
limit | limit | NUMBER | 0.0 | ||
hysteresis | hysteresis | NUMBER | 0.5 |
# ソースコード
Volang ソースを表示
in = input::get("input")
value = input::get("value")
limit_exceeded = output::get("limit_exceeded")
limit = config::get("limit")
hysteresis = config::get("hysteresis")
new_limit_exceeded = false
if (limit >= 0) {
// Positive limit: exceeded when value is too high
if (value <= (limit - hysteresis)) {
new_limit_exceeded = false
} else if ((value > (limit - hysteresis)) and (value < (limit + hysteresis))) {
new_limit_exceeded = limit_exceeded
} else if (value >= (limit + hysteresis)) {
new_limit_exceeded = true
}
} else {
// Negative limit: exceeded when value is too low (more negative)
if (value >= (limit + hysteresis)) {
new_limit_exceeded = false
} else if ((value > (limit - hysteresis)) and (value < (limit + hysteresis))) {
new_limit_exceeded = limit_exceeded
} else if (value <= (limit - hysteresis)) {
new_limit_exceeded = true
}
}
output::set("limit_exceeded", new_limit_exceeded)
output::set("output", in and !new_limit_exceeded)
