Речь ведь зашла о неправильном получении реала по модбас,т.е число пришло очень близкое к нулю,но вещественное, dword его обязан просто округлить и получится ноль,а из нуля хоть запереворачивайся истинное значение уже неполучится
Вид для печати
Речь ведь зашла о неправильном получении реала по модбас,т.е число пришло очень близкое к нулю,но вещественное, dword его обязан просто округлить и получится ноль,а из нуля хоть запереворачивайся истинное значение уже неполучится
не ожидал что такая активность будет теме. Покапался сам и вот такой код будет работать?Код:FUNCTION_BLOCK POU_perenos
VAR_INPUT
input_real: REAL;
END_VAR
VAR_OUTPUT
output_real: REAL;
END_VAR
VAR
input_real_p: POINTER TO ARRAY [0..1] OF WORD;
output_real_p: POINTER TO ARRAY [0..1] OF WORD;
END_VAR
input_real_p:=ADR(input_real);
output_real_P:=ADR(output_real);
output_real_p^[0]:=input_real_p^[1];
output_real_p^[1]:=input_real_p^[0];
Обычно 1-2х знаков после запятой достаточно в 99.9% случаев удобнее получать и передавать данные в int с фиксированным положением запятой.
Модули овен это позволяют.
А конструкции такие городить нет смысла.
Указатели все равно работают только с DWORD.
И как верно замечено capzar малые значения в любом случае будут округлены.
Что по поводу кода? И каким образом модули позволяют передавать значения в int?
На чем тогда мне остановиться?
У модулей по каждому входу можно задать значение dP-смещение десятичной точки. Если к примеру задать 1, то при чтении целого значения определенного регистра модуля, вместо 25 гр.С, к примеру, получим целое же значение 256, где 6 это значение после запятой, как если бы читали вещественное 25.6
А почему мв отдают неправильный real? Что им мешает сделат его правильным?
real - правильный. Представление - другое. Как привести к нужному именно в ПЛК - обсосано до нельзя. Если и дальше что-то мешает, то есть хирурги.