MODBUS Преобразование слов - PullRequest
0 голосов
/ 10 сентября 2018

Я получаю данные от метра Карло Гаваззи.Данные MODBUS имеют длину 2 слова, это 32-разрядное целое число со знаком.Как мне преобразовать это в реальное число в C #.Я получаю целое число, например, 16002. Я хочу иметь возможность преобразовать его в значение, отображаемое на передней панели устройства.

В итоге: преобразовать 32-разрядное 32-разрядное целое число со знаком вего реальная стоимость.

1 Ответ

0 голосов
/ 11 сентября 2018

Преобразование 2 16-разрядных беззнаковых регистров в 32-разрядное значение со знаком можно выполнить, как показано ниже. Это можно сделать одним утверждением, но я сделаю это поэтапно для ясности. Предполагая, что у вас есть верхнее и нижнее слова (16 бит) в верхнем 16 и нижнем 16 соответственно:

UInt32 uint32 = upper16;
uint32 <<= 16;
uint32 |= lower16;
Int32 sint32 = (Int32)uint32;

На основании этого утверждения в документации:

For all the formats the byte order (inside the single word) is MSB->LSB. 
In INT32, UINT32 and UINT64 formats, the word order is LSW-> MSW."

Похоже,

lower16 = address 30053
upper16 = address 30054

Вы упомянули в комментарии, что он имеет шкалу 10. Обычно это делается для того, чтобы вы могли придать значению некоторую точность (значение с плавающей запятой). Так что вы, вероятно, сделали бы:

double value = sint32 / 10.0;

OR

double kW = sint32 / 10.0; // In your case
...