Речь ведь зашла о неправильном получении реала по модбас,т.е число пришло очень близкое к нулю,но вещественное, 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 малые значения в любом случае будут округлены.
Последний раз редактировалось lara197a; 15.08.2014 в 08:41.
Что по поводу кода? И каким образом модули позволяют передавать значения в int?
На чем тогда мне остановиться?
У модулей по каждому входу можно задать значение dP-смещение десятичной точки. Если к примеру задать 1, то при чтении целого значения определенного регистра модуля, вместо 25 гр.С, к примеру, получим целое же значение 256, где 6 это значение после запятой, как если бы читали вещественное 25.6
А почему мв отдают неправильный real? Что им мешает сделат его правильным?
real - правильный. Представление - другое. Как привести к нужному именно в ПЛК - обсосано до нельзя. Если и дальше что-то мешает, то есть хирурги.