PDA

Просмотр полной версии : Вывод на ЖКИ ПЛК73



Distemperrr
27.04.2012, 09:11
Здравствуйте!Написав программу, излазив весь форум, прочитав все мануалы все равно не смог разобраться,как же все таки вывести на экран необходимую информацию.
Программа написана на CFC(пока еще осваиваю программирование ПЛК). И есть небольшие трудности с языком ST, а все примеры работ с библиотекой Work_Mode только на нем. Может бть у кого-то завялолось что-то на FBD или CFC. Ну или хотя бы тот же ST но для ПЛК73.
Цель:Необходимо создать ЖКИ с несколькими экранами, куда будут выводиться параметры, уставки, расписание работы, и будет возможность все это изменять.
Спасибо за внимание.

lara197a
27.04.2012, 13:16
Ищите в примерах программ и полезностях.
Так же мой пример есть на диске навигаторе в комплекте ПЛК(можно скачать с сайта)

Distemperrr
27.04.2012, 15:37
Получилось вывести. Не могу побороть мерцание. НЕ получается реализовать это на FBD.

lara197a
27.04.2012, 15:54
ТАМ нужно вызывать функцию дисплея не чаще чем через 200мс, а не в каждом цикле.
К примеру так:
ton1(in:=NOT ton1.Q, pt:=t#200ms); (*цикл обновления индикации*)
IF ton1.Q THEN
indication();
END_IF

Distemperrr
27.04.2012, 16:16
http://i35.fastpic.ru/big/2012/0427/22/87f1ac3c8f886155e371eaa260af1422.png
Вот такую бороду наделал. Что еще не хватает? Вставленный TON не решил проблемы

kolyan
27.04.2012, 16:19
У Вас TON ничем не управляет и ни на что в программе не влияет.

Попробуйте сделать так:

У Вас имеется переменная с.

Нажмите правой клавишей на блоки show string, show real .

Выйдет меню, в нём найдите EN\ENO. Выберите этот пункт.
У ФБ show string, show real появятся входы EN (разрешение работы ФБ) и выходы ENO (подтверждение работы ФБ).

Подайте переменную с на входы EN этих ФБ. Теперь, когда с будет = TRUE, ФБ будут включаться.

Каждые 200 мс.
Что и требуется.)

Distemperrr
27.04.2012, 16:22
НУ а куда выход-то завести?)

lara197a
27.04.2012, 16:35
вы программу выложите, вам подправят.

Distemperrr
27.04.2012, 16:49
5967
вот как-то так

Distemperrr
27.04.2012, 17:10
Kolyan, сделал так, вообще все исчезло с дисплея.

kolyan
27.04.2012, 19:09
Kolyan, сделал так, вообще все исчезло с дисплея.

Я промучался с индикацией с организацией цикла на TON в ПЛК-73.
Миллисекунды отображались как секунды при работе ПЛК.
Как вариант, попробуйте вместо TON применить BLINK из Util.lib.
время нарастания и спада импульсов T#0.1s.

Окончательно, могу завтра подсказать - сейчас ПЛК рядом нет...

kolyan
27.04.2012, 19:21
И ещё.
У Вас в проекте нумерация ФБ как-то разбросана.
Если это сделано не умышленно, то:
попробуйте выбрать "Дополнения - Порядок - в соответствии с потоком данных" (вверху меню КОДЕСИС).

Александр Ч.
28.04.2012, 08:49
Блок ClearScreen для экрана № 0 обязательно хотите использовать в каждом цикле? Попробуйте без него

Distemperrr
28.04.2012, 09:46
Блок ClearScreen для экрана № 0 обязательно хотите использовать в каждом цикле? Попробуйте без него
Без него появляется много всяких лишних цифр в свободных местах.

Валенок
30.04.2012, 13:08
Дык его тоже через en/eno

kolyan
30.04.2012, 14:54
Без него появляется много всяких лишних цифр в свободных местах.

А Вы там, где свободное место и могут потом появиться ненужные символы, ставьте пробелы.

Например, предыдущая строка была 'авария', а следующая - 'норма'.
В этом случае, на экран выйдет 'нормая'.
Поэтому, во всех случаях, чтобы не возиться с CLEAR SCREEN, нужно дополнять каждое слово пробелами до полного заполнения строки.

Distemperrr
02.05.2012, 09:14
Сделал очистку экрана через единичный импульс, помогло.
Всем спасибо.
Можно еще вопрос? Возможно ли реализовать параллельную структуру меню? Или возможно только несколько последовательных экранов?

Валенок
02.05.2012, 10:49
???
Стандартное меню - дерево

Distemperrr
03.05.2012, 11:09
Все разобрался

Carter
21.02.2015, 10:02
Друзья, подскажите, а в режиме Single_Mode можно ли вывести значения типа REAL и INT? Пробую функцией ShowReal(SINGLE_MODE,12,0,'%4.1f', crnt1) и ничего не получается... Или же нужно возвращаться в Work_mode?

ASo
21.02.2015, 10:09
У Вас экран переключен в сингл-режим?

Carter
21.02.2015, 10:15
У Вас экран переключен в сингл-режим?
Да, конечно

ASo
21.02.2015, 10:56
Прошу прощения, эта функция не может работать в сингл-режиме.
Переведите число в текст самостоятельно и воспользуйтесь WriteDisplay.

Carter
21.02.2015, 10:58
Прошу прощения, эта функция не может работать в сингл-режиме.
Переведите число в текст самостоятельно и воспользуйтесь WriteDisplay.
Это я уже понял, к сожалению. Мне удалось перевести REAL в STRING(функцию нашел на форуме), осталось перевести INT...

вапросик
21.02.2015, 13:59
вот рабочий пример индикации для плк 63/73,проверено-работает как часики:
в глобалках объявляем: tc: TIME := T#250ms;
в PLC_PRG объявляем: tv : TON;
в самом цикле PLC_PRG:
tv(in:=NOT tv.Q,pt:=tc);
IF tv.Q THEN ClearScreen(0);
(*-----строчка-ВВЕРХ--------*)
ShowReal(0,0,0,sf,temp);
(*------строчка-ВНИЗ--------*)
ShowString(0,1,1,bus.stroka_low);
END_IF (*-------end_tv--------*)

ASo
21.02.2015, 15:16
Так посмотрите в отладке, что выдают *_TO_STRING и отформатируйте.

вапросик
21.02.2015, 15:21
я монопольный режим проверял-замучался,тот пример что в доке-НЕ рабочий
но есть обходной вариант-этот режим не использовать,а всю эргономику для опера
в алгоритмах по выводу инфы на ЖКИ плк63/73 делать через номер экрана
тогда таких проблем типа REAL_TO_STRING и т.п. -НЕбудет.

ASo
21.02.2015, 15:24
Абсолютно рабочий режим.
Вот часть кода для вывода, проверки - опущены.

ScrText:=INT_TO_STRING(ScrSetT);
IF LEN(ScrText) = 2 THEN
ScrTextT:=LEFT(ScrText, 1);
Write_Display(SINGLE_MODE, 11, 1, ' ');
Write_Display(SINGLE_MODE, 12, 1, ScrTextT);
ScrTextT:=RIGHT(ScrText, 1);
Write_Display(SINGLE_MODE, 14, 1, ScrTextT);
ELSE
ScrTextT:=LEFT(ScrText, 2);
Write_Display(SINGLE_MODE, 11, 1, ScrTextT);
ScrTextT:=RIGHT(ScrText, 1);
Write_Display(SINGLE_MODE, 14, 1, ScrTextT);
END_IF

Carter
06.04.2015, 11:18
Подскажите, пожалуйста, такой вопрос: выводить информацию нужно не чаще чем каждые 200мс, чтобы избежать мерцания, но я вывожу строки намного чаще и проблемы мерцания не замечал. Нужно ли обязательно ограничить вывод строк по времени, может ли сказаться на работе ПЛК в будущем частый вывод строк?

energvk
06.04.2015, 11:21
Подскажите, пожалуйста, такой вопрос: выводить информацию нужно не чаще чем каждые 200мс, чтобы избежать мерцания, но я вывожу строки намного чаще и проблемы мерцания не замечал. Нужно ли обязательно ограничить вывод строк по времени, может ли сказаться на работе ПЛК в будущем частый вывод строк?

Если мерцания нет, то не заморачивайтесь

Carter
06.04.2015, 11:23
Понял, спасибо!

Spawn
22.10.2015, 11:04
Товарищи, подскажите пожалуйста, как мне вывести, например текст и в этой же строке, после текста,значение переменной, например, тоже текстовой?
Вариант
my_str:= 'привет';
ShowString(0,0,0,'Эй, '+my_str);
не работает.

melky
22.10.2015, 11:25
Spawn, вы следующий параметр тоже начните с ShowString но укажите там другую позицию.
Посмотрите примеры.

Spawn
22.10.2015, 11:37
Spawn, вы следующий параметр тоже начните с ShowString но укажите там другую позицию.
Посмотрите примеры.

Да, вот сижу над этим раздумываю после прочтения этой темы: http://www.owen.ru/forum/showthread.php?t=11984&highlight=ShowString
Не знаю даже почему, но мне этот вариант кажется некультурным чтоли...
На Object Pascal кодил, там такой вариант работает (ShowMessage, например).
Вот и думаю, может и на ST можно как-нибудь в таком же духе написать...
Ну или записать все в одну строковую переменную а потом ее вывести...
my_str1:= 'Эй, ';
my_str2:= 'привет';
my_str:= my_str1+my_str2;
ShowString(0,0,0,my_str);

Spawn
23.10.2015, 01:35
Отвечу сам на свой вопрос :)
По первому посту, c использованием функции CONCAT из библиотеки STANDART.LIB
my_str:= 'привет';
ShowString(0,0,0,CONCAT('Эй, ',my_str));

Grampus
25.04.2017, 14:24
Подскажите как вывести цифру на экран ЖКИ ПЛК 73 измеряемую аналоговым датчиком 4...20 мА
с помощью библиотеки Work_Mode.lib
и другими способами!

Grampus
26.04.2017, 14:47
а можно увеличить размер шрифта ? на ЖКИ???

aRRma99
12.04.2018, 16:53
а можно увеличить размер шрифта ? на ЖКИ???

либо в нижнем регистре пишите фразы, ЛИБО В ВЕРХНЕМ. Больше не получиться. Экран то символьный....

Eugene Vavilov
04.09.2019, 11:14
Подскажите как вывести цифру на экран ЖКИ ПЛК 73 измеряемую аналоговым датчиком 4...20 мА
с помощью библиотеки Work_Mode.lib
и другими способами!

Актуально и мне.
вот пробовал вывести значение переменной REAL после преобразования в STRING (REAL_TO_STRING) - не пишет цифру, только крокозябры какие-то длинные
Нашёл частично ответ здесь - https://owen.ru/forum/showthread.php?t=11396

Spawn
10.09.2019, 06:57
Актуально и мне.
вот пробовал вывести значение переменной REAL после преобразования в STRING (REAL_TO_STRING) - не пишет цифру, только крокозябры какие-то длинные
Нашёл частично ответ здесь - https://owen.ru/forum/showthread.php?t=11396

Пример:
ShowReal(0, 1, 2, 'Зн. пер: %3.2f', Real);

0 - Номер экрана (я работаю всегда с одним, меняя его содержимое)
1 - Номер "столбца"
2 - Номер строки
'Зн. пер: %3.2f' - текст с указанием формата значения (3 - количество символов до запятой, 2 - количество символов после запятой)
Real - переменная, значение которой требуется вывести на ЖКИ ПЛК.