Written on: 13. 12. 2011 [09:15]
|
andrelek
Андрей Полевой
Topic creator
registered since: 13.12.2008
Posts: 210
|
Задача получить по модбасу беззнаковое длинное целое.
Суффикс расширения <i4> в модуле ModBus выдает signed long.
Попытался через скрипт, но не вышло.
Подскажите как получить беззнаковое длинное целое из двух слов(2байта).
|
Written on: 13. 12. 2011 [09:24]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"andrelek" wrote:
Суффикс расширения <i4> в модуле ModBus выдает signed long.
Подскажите как получить беззнаковое длинное целое из двух слов(2байта).
Переводить в вещественное, а затем отбросить знак. Прямо никак поскольку тип "Целое" в OpenSCADA это int32_t.
Learn, learn and learn better than work, work and work.
|
Written on: 13. 12. 2011 [13:46]
|
yozhik
Алексей Николаев
registered since: 29.11.2010
Posts: 127
|
Я, к примеру, 64 битную величину представлял как две 32-х битные и делил вручную. Сначала старшие 32 бита, а потом с учетом остатка младшие. Неудобно, но работает.
|
Written on: 13. 12. 2011 [14:11]
|
andrelek
Андрей Полевой
Topic creator
registered since: 13.12.2008
Posts: 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:
Переводить в вещественное, а затем отбросить знак.
Таким образом как ни пытался не получилось... Если пришлете пример буду благодарен.
тему можно закрывать всем спасибо!
[This article was edited 2 times, at last 13.12.2011 at 14:20.]
|
Written on: 13. 12. 2011 [16:18]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"andrelek" wrote:
"roman" wrote:
Переводить в вещественное, а затем отбросить знак.
Таким образом как ни пытался не получилось... Если пришлете пример буду благодарен.
r0=0xffff;
r1=0xffff;
test = (r0*65536)+r1;
Learn, learn and learn better than work, work and work.
|
Written on: 13. 12. 2011 [16:54]
|
andrelek
Андрей Полевой
Topic creator
registered since: 13.12.2008
Posts: 210
|
Благодарю!
а я пытался сделать так:
rez = (r0<<16)+r2; //rez вещественное
не вышло.
[This article was edited 1 times, at last 13.12.2011 at 17:19.]
|