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

Problem view negative numbers when using modbus/TCP protocol.


Автор Повідомлення
Повідомлення створено: 19. 02. 2013 [22:25]
lennart
Lennart Carlsten
Автор теми
Зареєстрован(а) с: 19.02.2013
Повідомлення: 2
I want to scale -200 to 1372 degrees.
The device manual say this.
Temperature A 16-bit signed integer value with resolution of 0.1°C/lsb.
For example, a value of 12059 is equivalent to 1205.9°C,
a value of –187 equals –18.7°C. The maximum possible
temperature range is –3276.8°C to +3276.7°C.

As soon as I go under 0. I have the crazy numbers. 65354

Anyone who nows how to solve this problem.


Повідомлення створено: 20. 02. 2013 [07:00]
almaz
Almaz Karimov
Contributor
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
JAVASCRIPT
if (in > 32767) out = (in-65536)/10; else out = in/10;

(65354-65536)/10 = -18.2°C

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Повідомлення створено: 20. 02. 2013 [08:31]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
"lennart" wrote:

Temperature A 16-bit signed integer value with resolution of 0.1°C/lsb.

But ModBus register is 16-bit unsigned. For 16-bit signed use suffix "_i2": http://wiki.oscada.org/HomePageEn/Doc/ModBus#h871-16

Learn, learn and learn better than work, work and work.
Повідомлення створено: 20. 02. 2013 [21:52]
lennart
Lennart Carlsten
Автор теми
Зареєстрован(а) с: 19.02.2013
Повідомлення: 2
"roman" wrote:

"lennart" wrote:

Temperature A 16-bit signed integer value with resolution of 0.1°C/lsb.

But ModBus register is 16-bit unsigned. For 16-bit signed use suffix "_i2": http://wiki.oscada.org/HomePageEn/Doc/ModBus#h871-16

Thanks, that solved my problem! Great program but much to learn!

[Повідомлення редагувалось 1 раз(ів), останній раз 20.02.2013 в 21:53.]



7564