Українська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.]



7335