УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

Unsigned long


Автор Сообщение
Сообщение создано: 13. 12. 2011 [09:15]
andrelek
Андрей Полевой
Создатель темы
Зарегистрирован(а) с: 13.12.2008
Сообщения: 210
Задача получить по модбасу беззнаковое длинное целое.
Суффикс расширения <i4> в модуле ModBus выдает signed long.
Попытался через скрипт, но не вышло.
Подскажите как получить беззнаковое длинное целое из двух слов(2байта).
Сообщение создано: 13. 12. 2011 [09:24]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"andrelek" wrote:

Суффикс расширения <i4> в модуле ModBus выдает signed long.
Подскажите как получить беззнаковое длинное целое из двух слов(2байта).

Переводить в вещественное, а затем отбросить знак. Прямо никак поскольку тип "Целое" в OpenSCADA это int32_t.

Learn, learn and learn better than work, work and work.
Сообщение создано: 13. 12. 2011 [13:46]
yozhik
Алексей Николаев
Зарегистрирован(а) с: 29.11.2010
Сообщения: 127
Я, к примеру, 64 битную величину представлял как две 32-х битные и делил вручную. Сначала старшие 32 бита, а потом с учетом остатка младшие. Неудобно, но работает.
Сообщение создано: 13. 12. 2011 [14:11]
andrelek
Андрей Полевой
Создатель темы
Зарегистрирован(а) с: 13.12.2008
Сообщения: 210
Вот есть несколько вариантов, оба работают.
----------------------------------------------------------------------------------
//вариант 1
str="10011101101111110010000110011010";
p=31;
rez=0;
SYS.message("f_test2:r: ",10,r);
for (i=0;i<str.length;i++)
{
bit=(str.charAt(i)).toInt(10);
//SYS.message("f_test2:bit("+i+")^2: ",10,pow((bit)?2:0,p));
rez+=pow((bit)?2:0,p); //rez вещественное
p--;
} //писал на быструю руку, можно привести в более "красивый" вид ))
-------------------------------------------------------------------------------------
//вариант 2
r0=0xffff;
r2=0xffff;
//r0 и r2 целые
r=("0x"+r0.toString(16)+r2.toString(16)).toReal(); //r типа вещественное
---------------------------------------------------------------------------------------
"roman" wrote:

Переводить в вещественное, а затем отбросить знак.

Таким образом как ни пытался не получилось... Если пришлете пример буду благодарен.


тему можно закрывать всем спасибо!

[Сообщение редактировалось 2 раз(а), в последний раз 13.12.2011 в 14:20.]
Сообщение создано: 13. 12. 2011 [16:18]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"andrelek" wrote:

"roman" wrote:

Переводить в вещественное, а затем отбросить знак.

Таким образом как ни пытался не получилось... Если пришлете пример буду благодарен.

JAVASCRIPT
r0=0xffff;
r1=0xffff;
test = (r0*65536)+r1;


Learn, learn and learn better than work, work and work.
Сообщение создано: 13. 12. 2011 [16:54]
andrelek
Андрей Полевой
Создатель темы
Зарегистрирован(а) с: 13.12.2008
Сообщения: 210
Благодарю!
а я пытался сделать так:
rez = (r0<<16)+r2; //rez вещественное
не вышло.

[Сообщение редактировалось 1 раз(а), в последний раз 13.12.2011 в 17:19.]



8117