2016-04-14 23 views
-1

Я писал программу, которая считывает значения реактивной мощности от мощности, проанализированной по Modbus RTU.Преобразование DWORD в REAL

Реактивная мощность представлена ​​32 битами, в то время как MSb определяет знак. Программа не читает целых 32 бита, а не читает два 16-битных слова.

После чтения 32 бит мне нужно преобразовать значение в тип REAL . Поэтому я написал следующий код преобразования в структурированном тексте:

rQs: REAL := 0.0; 
rQs := DINT_TO_REAL(DWORD_TO_DINT((SHL(WORD_TO_DWORD(stLovato_power.iQ_HW),16) + WORD_TO_DWORD(stLovato_power.iQ_LW))))/100.0; 

(структура stLovato_power содержит в своих элементах 16 бит слово, который формирует 32 бит представление реактивной мощности).

Кажется, что чтение в порядке, но что-то в преобразовании неверно. Я все равно получаю 0, несмотря на значения в iQ_HW, а iQ_LW отличны от нуля. Может кто-нибудь сказать мне

Где я совершил ошибку?

Спасибо.

+0

Я проверил вашу кодовую строку, и преобразование работало хорошо, используя TwinCat3 –

ответ

0

Я только что решил проблему. Код был верным, но программный модуль не обрабатывался процессором. Большинство переменных модуля получили некоторые значения (эти значения были фактически вычислены в разных модулях), и из-за того, что я имел в виду, что модуль был обработан. Извините.