
Сообщение от
alexxx
Да, почитал, всё как у вас. И что мне делать то теперь? Есть ли способ перевести из real в string на плк 63??
С show_real совсем не хочется связываться...
Я делал сначала свою функцию
Код:
FUNCTION R_TO_ST : STRING
VAR_INPUT
varReal: REAL;
END_VAR
VAR
END_VAR
R_TO_ST:=INT_TO_STRING(TRUNC(varReal*10)/10);
R_TO_ST:=CONCAT(R_TO_ST, '.');
R_TO_ST:=CONCAT(R_TO_ST,INT_TO_STRING(TRUNC(varReal*10)MOD 10));
И в программе ее использовал примерно так
PROGRAM PLC_PRG
VAR
Str_test: STRING;
END_VAR
Str_test:=CONCAT('Tводы: ', R_TO_ST(Tvod)); (* Tvod-аналоговый вход ПЛК*)
Write_Display(SINGLE_MODE, 0, 0, Str_test);
Но в библиотеке 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;
Здесь и большой диапазон представления, и выбор кол. знаков после запятой и работает округление для отброшенных знаков.
Использовал аналогично
Код:
Str_test:=CONCAT('Tводы: ', REAL_TO_STRF(Tvod, 2));(* Tvod-аналоговый вход ПЛК*)
Write_Display(SINGLE_MODE, 0, 0, Str_test);