PDA

Просмотр полной версии : ПЛК63, проблема с отображением данных на панели.



alexxx
23.03.2013, 10:52
Здравствуйте. Написал программу для управление холодильным компрессором. В визуализации всё отображается правильно, а вот с отображением на экране ПЛК проблемы, а именно - часть переменных просто не отображается, в частности текущее состояние и аварии. Зайти в меню можно, но значений не видно.
Помогите понять, что я делаю не так. Проект во вложении.

lara197a
23.03.2013, 12:03
Для вывода на экран ПЛК 63-73 используются специальные библиотеки.
В этих ПЛК нет флеш, поэтому визуализация КДС и ОРС не поддержаны.
Посмотрите примеры для ПЛК 63-73.

alexxx
23.03.2013, 13:40
Да чтото не нашел нигде подходящих примеров... Поделитесь ссылкой плз!

lara197a
23.03.2013, 13:52
http://www.owen.ru/forum/showthread.php?t=13573

alexxx
28.03.2013, 13:34
Вроде всё сделал как положено, прописал меню, все дела, формирую 2 строковых переменных по 15 символов, пытаюсь вывести на экран ПЛК. Не работает.. :(
Пожалуйста посмотрите что не так. В визуализации дублирую экран плк, там всё как надо отображается.
Помогите.

kgsh82
28.03.2013, 15:04
Чёрт ногу сломит....Всё в куче - очень нечитабельно.
Попробуйте разбить на несколько ФБ: один для работы с компрессором, второй для индикации на ЖКИ.
И ещё - проверьте состояние строк str1 и str2 перед выводом.

Я делал вывод как в документации к биб-ке - всё арбайтен

alexxx
28.03.2013, 15:56
Чёрт ногу сломит....Всё в куче - очень нечитабельно.
Попробуйте разбить на несколько ФБ: один для работы с компрессором, второй для индикации на ЖКИ.

Я делал вывод как в документации к биб-ке - всё арбайтен
Да там не обязательно со всей программой разбираться.. Смысл в том, что формируются две переменные str1 и str2, и в конце я пытаюсь их вывести на экран:

IF NOT starting THEN
Switch_To_Single_Mode();
SetWorkScreenCount(1);
ClearScreen(0);
starting:=TRUE;
END_IF;

ton3(in:=TRUE,pt:=t#200ms);
IF ton3.Q THEN
ton3(in:=FALSE,pt:=t#200ms);
str1 := LEFT (str1,15); str2 := LEFT (str2,15);
ShowString (0, 0, 0, str1);
ShowString (0, 0, 1, str2);
END_IF;

Вот так делаю... На экране ПЛК ничего не высвечивается...


И ещё - проверьте состояние строк str1 и str2 перед выводом.
С ними всё в порядке, в визуализациии они отображаются как надо.

kgsh82
28.03.2013, 19:16
Это вообще откуда?

IF NOT starting THEN
Switch_To_Single_Mode();
SetWorkScreenCount(1);
ClearScreen(0);
starting:=TRUE;
END_IF;


Откройте описание к биб-ке на стр 22. Вставляем и проверяем. Потом берем его за основу.

alexxx
28.03.2013, 20:42
Это вообще откуда?

IF NOT starting THEN
Switch_To_Single_Mode();
SetWorkScreenCount(1);
ClearScreen(0);
starting:=TRUE;
END_IF;


Откройте описание к биб-ке на стр 22. Вставляем и проверяем. Потом берем его за основу.
Это та часть программы, которая выполняется один раз при старте. И Вы наверно удивитесь - взята эта часть именно с 22-й страницы. :rolleyes:
Могли бы просто сказать - что в режиме сингл-моде команда для вывода на экран другая.
Спасибо, разобрался.

alexxx
28.03.2013, 20:46
В итоге реализовал вывод на экран без таймера. При изменении переменных str1 или str2 они автоматически выводятся на экран.

IF NOT starting THEN
Switch_To_Single_Mode();
starting:=1; Clear_Display(SINGLE_MODE);
ELSE
prstr1:=ReadDisplay(SINGLE_MODE, 0, 0, 15);
prstr2:=ReadDisplay(SINGLE_MODE, 0, 1, 15);
IF str1<>prstr1 OR str2<>prstr2 THEN
Write_Display(SINGLE_MODE, 0, 0, str1);
Write_Display(SINGLE_MODE, 0, 0, str2);
END_IF;
END_IF;

Правда, на работающем ПЛК еще не проверял.

melky
29.03.2013, 21:54
Вот же.... Думал поразбираться с выводом на экран на ПЛК63 и.....

"Внимание! У программных компонентов библиотек (речь идет о Work_Mode.lib) режим симуляции не предусмотрен. Отладка программы проводится при подключенном контроллере, - программные компоненты при этом работают только в самом контроллере"

Выходит пока не купишь ПЛК, то и программу толком написать не можешь ?

lara197a
29.03.2013, 23:35
Полная эмуляция в контроллерах поддержана, за исключением визуализации экранов.
Большинство производителей вообще поддерживает эмуляцию только на железе.
Я знаю только одного производителя, который свел программу ПЛК и визуализацию в 1 среду программирования. Но у него только lader и эмуляция то же только на железе.

melky
30.03.2013, 01:00
я пробовал в CFC, ставлю функцию SetWorkScreenCount на входе 5 на выходе дает 0
и тут же GetWorkScreen, при эмуляции выдает -1 то есть ошибка.

То есть проверить и отадить только с физическим устройством ? или я что-то сделал не так просто ?

Просто в догонку вопрос, есть возможность купить ПЛК63 с выходами РРРРУУ-L, У 0-10В, к ним можно подключить твердотельное реле с параметрами 3...32В порог срабатывания 5В отключения 1В или не получится ?

petera
30.03.2013, 05:31
Полная эмуляция в контроллерах поддержана, за исключением визуализации экранов.
Большинство производителей вообще поддерживает эмуляцию только на железе.
Я знаю только одного производителя, который свел программу ПЛК и визуализацию в 1 среду программирования. Но у него только lader и эмуляция то же только на железе.
На железе это не эмуляция, а отладка программы.
Если это Unitronics, то у него даже скомпилировать проект нельзя, если к среде разработки не подключен реальный ПЛК. Жесть!!!
А мне приходилось использовать продукты четырех производителей, у которых для ПЛК/ПР со встроенными дисплеями есть полноценная эмуляция. В том числе и экранов.

kgsh82
30.03.2013, 08:31
Просто в догонку вопрос, есть возможность купить ПЛК63 с выходами РРРРУУ-L, У 0-10В, к ним можно подключить твердотельное реле с параметрами 3...32В порог срабатывания 5В отключения 1В или не получится ?

Подцепляйте к аналоговому выходу - будет работать.

К релейному тоже можно, но ИМХО долго не проработает. (Всё зависит от периода и скважности) Да и с регулированием около нуля будут проблемы

lara197a
30.03.2013, 09:35
На железе это не эмуляция, а отладка программы.
Если это Unitronics, то у него даже скомпилировать проект нельзя, если к среде разработки не подключен реальный ПЛК. Жесть!!!
А мне приходилось использовать продукты четырех производителей, у которых для ПЛК/ПР со встроенными дисплеями есть полноценная эмуляция. В том числе и экранов.

Про него.
Согласен.

melky
30.03.2013, 10:00
kgsh82, на счет твердотельных реле интересуюсь из-за того, что есть по наличию с выходами РРРРУУ, а мне надо для проекта все релейные выходы.
Я уже честно говоря в раздумьях, а есть ли смысл вообще для моей задачи ПЛК63 ?
Долбаться с экраном на две строки ради ввода параметра температуры непосредственно с прибора ? или вводить период временной уставки ?
Проще ПЛК100 +Mx110 на 8 аналоговых входов взять и не заморачиваться....

ASo
30.03.2013, 10:27
Подцепляйте к аналоговому выходу - будет работать.Может не хватить тока. Подключите транзистор по схеме с ОЭ.

lara197a
30.03.2013, 10:47
Может не хватить тока. Подключите транзистор по схеме с ОЭ.

хватает.
проверено.
не первый год работает.
(если стандартный вход управления подключать. сварочный аппарат конечно не потянет. тока не хватит.)

kgsh82
30.03.2013, 11:52
kgsh82, на счет твердотельных реле интересуюсь из-за того, что есть по наличию с выходами РРРРУУ, а мне надо для проекта все релейные выходы.
Я уже честно говоря в раздумьях, а есть ли смысл вообще для моей задачи ПЛК63 ?
Долбаться с экраном на две строки ради ввода параметра температуры непосредственно с прибора ? или вводить период временной уставки ?
Проще ПЛК100 +Mx110 на 8 аналоговых входов взять и не заморачиваться....

Вы задачу опишите - здесь подскажут

melky
31.03.2013, 11:58
kgsh82, я уже купил за свои ПЛК100, 63-й пусть контора покупает для экспериментов.

Задача простая, есть 3 кондиционера, у них сухой контакт удаленного запуска (режим стендбай так называемый), когда контакт замкнут, он будет работать, когда разомкнут, то отдыхает. Соответственно нужен ПЛК с постыми релейными выходами, а по наличию есть только РРРРУУ или РРРРИИ, вот и думал такой купить, а потом при необходимости просто на два выхода УУ прикрутить твердотельные реле самые слабые. Тоже по наличию есть на 10А.
Но уже, как написал выше, взял себе ПЛК100 с 6-ю Р выходами, а необходимые аналоговые входы буду использовать на Мх110-8А.

Всего необходимо 6 выходов для проекта. 3 кондиционера, сигнал по утечке фриона 2шт, сигнал по аварии любого из кондиционеров 1шт.
63-го как раз бы по входам-выходам хватало, но так как без прибора нет возможности работать с экраном, то и ну его нафик :)

capzap
31.03.2013, 12:42
kgsh82, я уже купил за свои ПЛК100, 63-й пусть контора покупает для экспериментов.

Задача простая, есть 3 кондиционера, у них сухой контакт удаленного запуска (режим стендбай так называемый), когда контакт замкнут, он будет работать, когда разомкнут, то отдыхает. Соответственно нужен ПЛК с постыми релейными выходами, а по наличию есть только РРРРУУ или РРРРИИ, вот и думал такой купить, а потом при необходимости просто на два выхода УУ прикрутить твердотельные реле самые слабые. Тоже по наличию есть на 10А.
Но уже, как написал выше, взял себе ПЛК100 с 6-ю Р выходами, а необходимые аналоговые входы буду использовать на Мх110-8А.

Всего необходимо 6 выходов для проекта. 3 кондиционера, сигнал по утечке фриона 2шт, сигнал по аварии любого из кондиционеров 1шт.
63-го как раз бы по входам-выходам хватало, но так как без прибора нет возможности работать с экраном, то и ну его нафик :)возьмите себе еще трм202, к плк100 добавятся два аналоговых универсальных входа, два выхода в зависимости от модификации, и можно задавать две уставки

melky
31.03.2013, 16:49
capzap ТРМ-ки мало, потому что - 4 датчика температуры Pt1000 овеновских + 4 датчика для фриона по два для 407с и 134а на утечку для двух помещений.
Смысл покупать ТРМ в таком случае ? проще модуль на 8 универсальных входов, а выходов на ПЛК 100 мне хватает.
Но скорее всего для объекта я напрягу купить плк63 и вообще все обойдется одним контроллером.
а для экспериментов мне и 100-ки хватит, жаль что в 63-м нет Ethernet, так бы не маялся, что купить для игр.

kgsh82
31.03.2013, 19:46
Кондюки наверное будут включатся в зависимости от температуры в помещении? А если уставку вздумается заказчику поменять, то как? Какой-нибудь HMI нужен в любом случае. Не надо переживать за экран ПЛК63. Там всё просто. Разрабатывайте остальные ФБ проекта, а за экран можно взяться по прибытию ПЛК63

capzap
31.03.2013, 20:09
capzap ТРМ-ки мало, потому что - 4 датчика температуры Pt1000 овеновских + 4 датчика для фриона по два для 407с и 134а на утечку для двух помещений.
Смысл покупать ТРМ в таком случае ? проще модуль на 8 универсальных входов, а выходов на ПЛК 100 мне хватает.
Но скорее всего для объекта я напрягу купить плк63 и вообще все обойдется одним контроллером.
а для экспериментов мне и 100-ки хватит, жаль что в 63-м нет Ethernet, так бы не маялся, что купить для игр.

я как бы предлагал как раз из-за дешевого по себестоимости экрана, а не из-за входов/выходов

melky
31.03.2013, 20:52
kgsh82 в принципе кондюки сами по себе т держат, 4 датчика в роли 2-й ступени просто.

ну так через Modbus можно и поменять, чего переживать в общем-то ?

kgsh82
31.03.2013, 21:20
kgsh82 в принципе кондюки сами по себе т держат, 4 датчика в роли 2-й ступени просто.

ну так через Modbus можно и поменять, чего переживать в общем-то ?

Заказчик готов на это? Ведь нужен ПК или другой контроллер. Или пусть останется приятным сюрпризом? :)

melky
01.04.2013, 09:58
kgsh82 думаю заказчику поставится в конечном итоге плк63, просто меня жаба задушила покупать его себе ради того, чтобы разобраться с экраном. Для остального изучения потому и взял себе плк100.
из-за наличия Ethernet по большей части.
И даже если его же и поставим заказчику, все равно они требуют обычно диспетчеризацию и контроль чаще всего по Modbus, так что не так страшно.

alexxx
02.04.2013, 13:37
Вы представляете, при прошивке в ПЛК - проект не работает!
Вообще очень странно всё.
В программе формируются 2 строковые переменыые, потом выводятся на экран. В кодесисе в визуализации есть дублер кнопок и экрана ПЛК. При запуске в режиме эмуляции всё работает отлично, на эмуляторе экрана информация отображается.
Когда запускаю проект в плк - на экране видны слова, но не видны цифры! В место них какието закорюки!
Самое удивительное, что и на эмуляторе экрана в визуализации тоже закорюки начинают отображаться!
Как такое может быть????
У кого есть плк63 - запустите мой проект! Может у меня плк бракованный, а у вас заработает?
Проект во вложении.

alexxx
03.04.2013, 10:26
Люди, ну неужели никто не скажет в чем проблема? Мне уже перед заказчиком стыдно, никак не сдам работу. Помогите!

Александр Ч.
03.04.2013, 10:43
На мой взгляд, надо в определенное время(в определенном месте программы) использовать "очистку экрана". Ибо мне показалось, что длина разных строк у вас разная, т.е. от длинной строки остаются фрагменты. Автоматически экран не зачищается

Александр Ч.
03.04.2013, 10:47
Или можно просто пробелами "выровнять" длины строк

kgsh82
03.04.2013, 11:18
Где-то на форуме читал, что для вывода REAL, необходимо использовать функцию ShowReal из библиотеки - иначе может неправильно работать. В ПЛК73 как раз так и делаю

petera
03.04.2013, 11:57
Люди, ну неужели никто не скажет в чем проблема? Мне уже перед заказчиком стыдно, никак не сдам работу. Помогите!
Посмотрите про мою ситуацию, правда давно это было и с тех пор с ПЛК73 я не работал. http://www.owen.ru/forum/showthread.php?t=11396&highlight=%CF%CB%CA73

alexxx
03.04.2013, 13:27
Или можно просто пробелами "выровнять" длины строк

У меня всё выравнивается как надо, на выходе 2 переменные ровно по 15 символов.


Где-то на форуме читал, что для вывода REAL, необходимо использовать функцию ShowReal из библиотеки - иначе может неправильно работать. В ПЛК73 как раз так и делаю

Я вывожу на экран не REAL, а STRING. К томуже BYTE тоже не видно.
Думаю, тут дело в том, что контроллер не корректно выполняет операцию REAL_TO_STRING, и другие операции перевода. Других причин тут просто быть не может, так как при работе с ПЛК в визуализации на компьютере перевод числовых в строковые значения тоже происходит неверно.

alexxx
03.04.2013, 13:33
Посмотрите про мою ситуацию, правда давно это было и с тех пор с ПЛК73 я не работал. http://www.owen.ru/forum/showthread.php?t=11396&highlight=%CF%CB%CA73

Да, почитал, всё как у вас. И что мне делать то теперь? Есть ли способ перевести из real в string на плк 63??
С show_real совсем не хочется связываться...

alexxx
03.04.2013, 14:28
A INT_TO_STRING на ПЛК63 будет работать?

ASo
03.04.2013, 14:57
Да, почитал, всё как у вас. И что мне делать то теперь? Есть ли способ перевести из real в string на плк 63??Есть.
Умножаем на 10^число знаков после запятой, переводим в INT и форматируем.

alexxx
03.04.2013, 14:59
Есть.
Умножаем на 10^число знаков после запятой, переводим в INT и форматируем.
Это я понял! Но будет ли корректно переводить из INT в STRING??

petera
03.04.2013, 15:10
Да, почитал, всё как у вас. И что мне делать то теперь? Есть ли способ перевести из 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(varRea l*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);

alexxx
03.04.2013, 15:28
petera, мне тут написали из службы поддержки, что INT_TO_STRING на этих контроллерах тоже не работает!
Вы эти варианты сами тестировали на реальном ПЛК?

petera
03.04.2013, 15:47
petera, мне тут написали из службы поддержки, что INT_TO_STRING на этих контроллерах тоже не работает!
Вы эти варианты сами тестировали на реальном ПЛК?
Загрузил в ПЛК то, что написал выше.
Работает.
Функция от OSCAT.

ASo
03.04.2013, 16:27
Вот кусок работающего примера для вывода на экран в монопольном режиме.

ScrSetT:= REAL_TO_INT(SP*10);
IF ScrSet <> ScrSetT THEN
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

alexxx
03.04.2013, 16:36
Очень странно... Дмитрий Кореньков из службы поддержки только что написал мне, что ни INT_TO_STRING, ни REAL_TO_STRF тоже не будут работать на ПЛК63... Не знаю чему и кому верить.....

petera
03.04.2013, 16:40
Загрузил в ПЛК то, что написал выше.
Работает.
Функция от OSCAT.
ЗЫ. Самопальная функция из поста #40 тоже работает, но OSCAT-овсая удобнее.
Давно не работал с ПЛК73.
Мои маленькие примеры из поста #40 работают только в ПЛК???
Странно но у меня вроде не работает в эмуляции оператор CONCAT:confused:

petera
03.04.2013, 16:41
Очень странно... Дмитрий Кореньков из службы поддержки только что написал мне, что ни INT_TO_STRING, ни REAL_TO_STRF тоже не будут работать на ПЛК63... Не знаю чему и кому верить.....
Я говорил про ПЛК73, про 63 не знаю. Но в 73 точно работает, вот он на столе лежит.
ЗЫ. Если у Вас под рукой 63, то просто загрузите простую программу из нескольких строчек да проверьте INT_TO_STRING.

alexxx
03.04.2013, 17:16
ЗЫ. Если у Вас под рукой 63, то просто загрузите простую программу из нескольких строчек да проверьте INT_TO_STRING.
Да в том то и дело, что нету его под рукой. Контроллер у заказчиков, на оборудовании установлен, а я как школьник до сих пор экранчик показывать не могу заставить..

alexxx
03.04.2013, 20:13
petera, огромное спасибо за помощь, вы сделали то, что не смогла сделать служба поддержки.
INT_TO_STRING работает!

petera
03.04.2013, 20:47
petera, огромное спасибо за помощь, вы сделали то, что не смогла сделать служба поддержки.
INT_TO_STRING работает!
Посмотрите мое последнее сообщение в личке.
У Вас есть проблемы в отображении меню из за разной длины строк.
Ваш проект я проверял на ПЛК73, а насколько он эквивалентен 63 не знаю.

alexxx
03.04.2013, 21:12
Это мелочи. Главное - циферки переводятся в строку! Еще раз респект!