Преобразование числа типа Word на биты

Считываю 16bit регистр по Modbus, далее хочу разложить его на биты, и каждый бит присвоить переменной типа BOOL, ну а дальше использовать на дашбоарде. Вариант в конфигурации шаблона создавать таблицу каналов у-ва и считывать бит с регистра не нравится.

Добрый день.
В чем нужна поддержка?

Банальная маска, накладываемая по “битовому И” (если есть тут такое)?

Как будет выглядить текст программы в правилах, чтобы у меня на дашборде появились 16 контролов типа switch, статус которых я возьму из 16бит регистра, который у меня создан в шаблонах у-в Modbus.

defineRule
({
whenChanged: “hd0904/word”,
then: function ()
{
dev[“buzzer/enabled”] = dev[“hd0904/word”] & 1;
}
});
Вот так пытаюсь включить девайс, но почему-то не работает, мне кажется я неверно синтаксис записал, суть извлечь значение bit0 из word и присвоить либо false либо true.

А вот и ошибка:

01-05-2025 12:35:03.203 [wb-rules] ERROR: control buzzer/enabled SetValue() error: can’t convert control value ‘0’ (type float64) to datatype ‘1’
01-05-2025 12:35:02.825 [wb-rules] ERROR: control buzzer/enabled SetValue() error: can’t convert control value ‘1’ (type float64) to datatype ‘1’
Вообщем что-то я не правильно присваиваю типы данных.

defineRule
({
whenChanged: “hd0904/word”,
then: function ()
{
dev[“buzzer/enabled”] = Boolean(dev[“hd0904/word”] & 1);
}
});
А вот так заработало!)

1 лайк

Ну да.
Так как в документации тип для switch булев.
Ну а вообще можно использовать стандартные для JS преобразования, например ```
yourNumber.toString(16)

Или 

yourNumber.toString(2)