Ка разобрать 2 байта на биты

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
Greymand
Сообщения: 2
Зарегистрирован: Пт июн 07, 2019 8:00 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Ка разобрать 2 байта на биты

Сообщение Greymand » Пт июн 07, 2019 8:13 pm

Добрый день!
Есть модбасс устройство, состояние 16 выходов опрашивается через 1 регистр. Модуль модбасс мажордомо приходит число и что бы узнать состояние каждого из выходов необходимо выделить биты и раскидать их по 16 объектам. Пробовал конструкции вроде:
$value=getGlobal('rx.status_up');
$bit_0=($value & (1<<0));
if (getGtobal('rx0.status') != $bit_0)
{setGlobal('rx0.status',$bit_0);}

и

$value=getGlobal('rx.status_up');
$bit=decbin($value);
if(getGtobal('rx0.status') !=$bit[0])
{setGlobal'rx0.status',$bit[0];}

Но в статусе объекта rx0 ничего не изменяется. Подскажите, куда копать.
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Ка разобрать 2 байта на биты

Сообщение xor » Пт июн 07, 2019 8:57 pm

Greymand писал(а):
Пт июн 07, 2019 8:13 pm
Добрый день!
Есть модбасс устройство, состояние 16 выходов опрашивается через 1 регистр. Модуль модбасс мажордомо приходит число и что бы узнать состояние каждого из выходов необходимо выделить биты и раскидать их по 16 объектам. Пробовал конструкции вроде:
$value=getGlobal('rx.status_up');
$bit_0=($value & (1<<0));
if (getGtobal('rx0.status') != $bit_0)
{setGlobal('rx0.status',$bit_0);}

и

$value=getGlobal('rx.status_up');
$bit=decbin($value);
if(getGtobal('rx0.status') !=$bit[0])
{setGlobal'rx0.status',$bit[0];}

Но в статусе объекта rx0 ничего не изменяется. Подскажите, куда копать.
если использовать decbin, то, может, лучше так?
(но разбор идет со старших разрядов)

Код: Выделить всё

$value=26;
$bit=sprintf( "%016d", decbin( $value ));
0000000000011010
, чтобы старшие нули не терялись...
и

Код: Выделить всё

if($bit[0]=='0'){sg('rx15.status',0);}else{sg('rx15.status',1);}
if($bit[1]=='0'){sg('rx14.status',0);}else{sg('rx14.status',1);}
...
не знаю, как ваши объекты называются, может, это в цикле можно делать

зы. в последней строчке скобки забыли setGlobal('rx0.status',$bit[0]);
JackOfShadows
Сообщения: 108
Зарегистрирован: Ср янв 09, 2019 8:37 pm
Благодарил (а): 27 раз
Поблагодарили: 28 раз

Re: Ка разобрать 2 байта на биты

Сообщение JackOfShadows » Пт июн 07, 2019 9:26 pm

getGtobal - в коде правильно?
За это сообщение автора JackOfShadows поблагодарил:
Greymand (Пт июн 07, 2019 9:43 pm)
Рейтинг: 1.16%
Greymand
Сообщения: 2
Зарегистрирован: Пт июн 07, 2019 8:00 pm
Благодарил (а): 1 раз
Поблагодарили: 0

Re: Ка разобрать 2 байта на биты

Сообщение Greymand » Пт июн 07, 2019 9:43 pm

Вот жешь блин,пятница). Спасибо, стока проблем из-за какой-то очепятки. Спасибо)
Ответить