Я писал программу, которая считывает значения реактивной мощности от мощности, проанализированной по 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 отличны от нуля. Может кто-нибудь сказать мне
Где я совершил ошибку?
Спасибо.
Я проверил вашу кодовую строку, и преобразование работало хорошо, используя TwinCat3 –