На мой взгляд, надо в определенное время(в определенном месте программы) использовать "очистку экрана". Ибо мне показалось, что длина разных строк у вас разная, т.е. от длинной строки остаются фрагменты. Автоматически экран не зачищается
На мой взгляд, надо в определенное время(в определенном месте программы) использовать "очистку экрана". Ибо мне показалось, что длина разных строк у вас разная, т.е. от длинной строки остаются фрагменты. Автоматически экран не зачищается
Или можно просто пробелами "выровнять" длины строк
Где-то на форуме читал, что для вывода REAL, необходимо использовать функцию ShowReal из библиотеки - иначе может неправильно работать. В ПЛК73 как раз так и делаю
Посмотрите про мою ситуацию, правда давно это было и с тех пор с ПЛК73 я не работал. http://www.owen.ru/forum/showthread....ht=%CF%CB%CA73
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
У меня всё выравнивается как надо, на выходе 2 переменные ровно по 15 символов.
Я вывожу на экран не REAL, а STRING. К томуже BYTE тоже не видно.Где-то на форуме читал, что для вывода REAL, необходимо использовать функцию ShowReal из библиотеки - иначе может неправильно работать. В ПЛК73 как раз так и делаю
Думаю, тут дело в том, что контроллер не корректно выполняет операцию REAL_TO_STRING, и другие операции перевода. Других причин тут просто быть не может, так как при работе с ПЛК в визуализации на компьютере перевод числовых в строковые значения тоже происходит неверно.
Последний раз редактировалось alexxx; 03.04.2013 в 13:29.
A INT_TO_STRING на ПЛК63 будет работать?
Я делал сначала свою функцию
И в программе ее использовал примерно такКод: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));
Но в библиотеке OSCAT есть функция REAL_TO_STRFPROGRAM 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);
Здесь и большой диапазон представления, и выбор кол. знаков после запятой и работает округление для отброшенных знаков.Код: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);
Последний раз редактировалось petera; 03.04.2013 в 15:23.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg