Вход

Просмотр полной версии : Крокозяблы в результате REAL_TO_STRING();



Sergey666
22.06.2020, 17:11
Всем привет.Вопрос по ПЛК73.
В чем причина, что в результате преобразования REAL_TO_STRING крокозяблы. При этом в режиме симуляции преобразование возвращает нормальный результат.
Число отформованное-подрезанное (например 1.41).

petera
23.06.2020, 13:17
Это фича ПЛК63/73
Берите Oscat функцию REAL_TO_STRF


FUNCTION REAL_TO_STRF : STRING(20)
VAR_INPUT
IN : REAL;
N : INT; (*нужное кол. цифр после запятой*)
END_VAR
VAR
O: REAL;
i: INT;
END_VAR

(* LIMIT N to 0 .. 7 *)
N := LIMIT(0,N,7);
(* round the input to N digits and convert to string *)
O := ABS(in) * EXP(N* 2.30258509299405);
REAL_TO_STRF := DINT_TO_STRING(REAL_TO_DINT(O));
(* add zeroes in front to make sure sting is at least 8 digits long *)
FOR i := LEN(REAL_TO_STRF) TO N DO REAL_TO_STRF := CONCAT('0', REAL_TO_STRF); END_FOR;
(* add a dot if n > 0 *)
IF n > 0 THEN REAL_TO_STRF := INSERT(REAL_TO_STRF, '.', LEN(REAL_TO_STRF) - N); END_IF;
(* add a minus sign if in is negative *)
IF in < 0 THEN REAL_TO_STRF := CONCAT('-', REAL_TO_STRF); END_IF;

получите сразу и String и нужное кол. цифр после запятой, работает округление для отброшенных знаков.

Sergey666
23.06.2020, 13:29
Это фича ПЛК63/73
Правильнее сказать Косяк ПЛК63/73

Спасибо, я уже нашел ваш старый-старый пост и притащил в проект Real_to_Strf.