Главная   Downloads   Разное  
FAQ     Поиск   Регистрация   Вход 
Текущее время: Вт мар 19, 2024 12:23

Часовой пояс: UTC + 3 часа (Russia: MSK)




Начать новую тему Ответить на тему  [ 15 сообщений ] 
Автор Сообщение
 Заголовок сообщения: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Ср июн 06, 2018 19:52 
Не в сети

Регистрация: Ср май 16, 2018 22:44
Сообщения: 10
Пишу свою первую программу для CP1L-E.
В программе надо включать и выключать различные механизмы по разным условиям. Соответственно, у меня есть куча катушек, некоторые из которых - повторяются. Две странички с такими катушками приведены во вложении.
При попытке компиляции вываливается куча предупреждений:

ВНИМАНИЕ. Дублированный вывод - OUT 100.0x в цепи хх (х, х).

Порылся по форуму - нашёл одну тему с похожей ошибкой:
viewtopic.php?p=14876

Там посоветовали присмотреться к инструкции KEEP. Я посмотрел справку по этой инструкции, попробовал вставить её себе - но получил какую-то ошибку...

Уточните, пожалуйста, как правильно делать такие вещи? Неужели надо делать всё в одном rung'е, или как-то ещё?


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Ср июн 06, 2018 20:33 
Не в сети

Регистрация: Вт окт 26, 2010 21:55
Сообщения: 329
Откуда: Санкт-Петербург
Я для Вас скопировал свой же пост, который отправлял на форум еще два с половиной года назад...
"Любой битовый адрес, как в вашем примере, можно использовать в программе только 1 раз в команде OUT. Вы можете его сколько угодно раз использовать в командах SET или RSET, KEEP и им подобным. Но если вы данный адрес (меркер по вашему) указали в команде OUT, то советую про него забыть в данной программе. Один и только один раз. Для того, чтобы нормально пользоваться битовым адресом с командой OUT вам придется использовать промежуточные адреса. А потом собирать их по ИЛИ и уже указывать на выходе OUT с вашим адресом меркера."
А теперь ищите на разных форумах что-то подобное, я уже лет 5-7 эту оказию растолковываю начинающим автоматчикам...
Добавлю... программа в ПЛК выполняется последовательно, а выходы обновляются после окончания "скана" программы. То есть, выход будет иметь то состояние, которое было последним при роходе программы.
В одном рунге делать не надо, потом не разберетесь в том, что за паутина. Пользуйтесь свободной и специально для этого придуманной памятью.


В начало
 Профиль  
 
 Заголовок сообщения: Спасибо!
СообщениеДобавлено: Ср июн 06, 2018 22:03 
Не в сети

Регистрация: Ср май 16, 2018 22:44
Сообщения: 10
Спасибо за ответ!

Теперь понятно, в чём проблема и как себя вести дальше.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Чт июн 07, 2018 10:07 
Не в сети

Регистрация: Вт окт 26, 2010 21:55
Сообщения: 329
Откуда: Санкт-Петербург
Вообще не бойтесь создавать много "рунгов-нетворков" для отдельного выхода. Например, ваш выход должен по разному реагировать в разных ситуациях: автоматический режим (тут могут быть много источников команд и воздействий, которые тоже лучше описывать в разных сегментах), ручной режим, аварийные ситуации, внешнее управление, реакция на действия оператора из систем верхнего уровня, на сигналы третьих систем, реакция на ОПС и много еще чего.... Как бы там ни было, результат этих реакций в дальнейшем нужно тоже между собой увязывать. Так что работа с промежуточными битами Вам в дальнейшем еще и поможет.
И не забудьте все тщательно комментировать и имена переменным понятные давать, Даже подробные описания структуры и принципа работы каждого "рунга-нетворка" при нем же никогда не помешают. Напишете эти комментарии сейчас один раз, а похвалите себя потом сто раз. Иначе, уже через 2 месяца Вы в своей же программе не разберетесь.
Удачи в работе.


В начало
 Профиль  
 
 Заголовок сообщения: Всё равно не работает :-(
СообщениеДобавлено: Чт июн 07, 2018 22:19 
Не в сети

Регистрация: Ср май 16, 2018 22:44
Сообщения: 10
По совету более опытных коллег, попробовал заменить бит в области памяти вывода на бит в рабочей области. В изначальном сообщении вложен pdf-файл с распечаткой лестничной диаграммы, там в конце первой и в начале второй страницы дважды используется бит P11_on_DO, адрес 101.06. Компилятор ругается.
Я создал символ в рабочей области с похожим именем, P11_on_DO_W (адрес W100.01), и заменил катушку (команда OUT) на команду SET. Замену сделал в двух случаях. Компилятор всё равно пишет "Дублирующийся ввод или номер" и указывает две заменённые команды с этим битом.
Правильно ли я понимаю, что мне нужно выделять в памяти РАЗНЫЕ биты для каждой ситуации, когда выход должен среагировать, а потом где-то писать длинный перечень этих всех битов в режиме "ИЛИ" отдельным rung'ом?


В начало
 Профиль  
 
 Заголовок сообщения: Re: Всё равно не работает :-(
СообщениеДобавлено: Пт июн 08, 2018 00:18 
Не в сети

Регистрация: Чт май 30, 2013 08:20
Сообщения: 76
Откуда: г. Нелидово
themaster писал(а):
...Правильно ли я понимаю, что мне нужно выделять в памяти РАЗНЫЕ биты для каждой ситуации, когда выход должен среагировать, а потом где-то писать длинный перечень этих всех битов в режиме "ИЛИ" отдельным rung'ом?

Я в основном так и делаю если программа большая. Если маленькая - можно пойти от обратного, т.е. к выходу слева привязывать все условия включения.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Пт июн 08, 2018 08:41 
Не в сети

Регистрация: Вт окт 26, 2010 21:55
Сообщения: 329
Откуда: Санкт-Петербург
Вы в общем правильно все поняли. Сначала вы описываете разные условия выполнения какой-либо функции для одного выхода. В конце каждой ветви присваиваете отдельные биты. И потом в конце программы по ИЛИ все эти биты объединяете на общих выход. Заодно в этом объединении промежуточных битов (если необходимо) описываете особенности взаимодействия между условиями: режимами или прочими штуками.
Если говорить про Омрон, то я уже давно для таких вещей заранее выделяю слово, которое побитово дублирует конкретный выход. Переменную объявляю как массив. Потом в программе использую ее на концах условий с квадратными скобками, в которых указывается номер бита в этом массиве.
Например, есть выход 100.5 с именем переменной do_Nasos1_KM1_Strt? управляющий запуском и работой насоса №1. Для описания реакций внутри программы завожу переменную betOut_Nasos1_KM1_Strt типа BOOL на адрес W11.0 (как пример), которая в дополнительных параметрах символа имеет галку "символ массива" и длину в 16 бит. При использовании в программе она выглядит как betOut_Nasos1_KM1_Strt[1]. В скобках могут быть номера от 0 до 15. Таким образом мне легче контролировать использование этого бита, и потом перечислять его при объединении выходов тоже проще. Если при объединении для физического выхода особых требований по логике нет, то можно не перечислять все адреса в массиве, а просто проверять условие, что слово W11 больше ноля.
Но все описанное выше не панацея. Способов большое количество. В целом совет один: выработайте для себя правила и придерживайтесь этих правил. Правила регулярно развивайте и дополняйте, совершенствуйтесь.
И да прибудет с Вами сила автоматчика. :D


В начало
 Профиль  
 
 Заголовок сообщения: Re: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Пт июн 08, 2018 09:14 
Не в сети

Регистрация: Пт май 04, 2007 08:42
Сообщения: 255
Цитата:
Например, есть выход 100.5 с именем переменной do_Nasos1_KM1_Strt? управляющий запуском и работой насоса №1. Для описания реакций внутри программы завожу переменную betOut_Nasos1_KM1_Strt типа BOOL на адрес W11.0 (как пример), которая в дополнительных параметрах символа имеет галку "символ массива" и длину в 16 бит. При использовании в программе она выглядит как betOut_Nasos1_KM1_Strt[1]. В скобках могут быть номера от 0 до 15.

Для чего использование массива в вашем случае?
Если выход 100.5 соответствует W11.0, то 100.6 W11.1?
Понятно было бы если например массиву выходов с адреса 100.0 соответствовал массив битов W11 начиная c W11.0. Тогда в конце программы можно было бы просто копировать слово 100 в W11.Или вы просто сравниваете W11 с 0 и по условию > срабатывает выход?
Я обычно делаю объединение условий срабатывания выхода по ИЛИ
Вложение:
_6.PNG


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Опять дублированный вывод - как правильно делать?
СообщениеДобавлено: Пт июн 08, 2018 18:29 
Не в сети

Регистрация: Ср май 16, 2018 22:44
Сообщения: 10
Добрый день ещё раз!
С предыдущей проблемой справился, но сообщение про дублированный вывод опять появляется. Может, и правильно...
У меня задача в следующем: есть три агрегата, два из них должны быть в работе, один - в резерве. Если один работающий вышел из строя (автомат выбило) - надо запустить резервный. Ну и так далее.
Я пока плохо понимаю, как рисовать лестничную диаграмму для реализации этого алгоритма, но начал с подсчёта количества работающих и аварийных агрегатов.
Собственно, pdf с программой - во вложении. Шесть строчек, если вход работа/останов равен один - увеличить счётчик на единицу. Если вход "авария" равен один - увеличить на единицу другой счётчик.
Потом, соответственно, напишу условие, если аварий больше одной - ошибка, если работает меньше двух агрегатов - запустить ещё один...
И вот на эти строчки с приращениями компилятор и ругается. Правильно ли я понимаю, что я делаю что-то не то и такая задача решается как-то по-другому? Или придётся смириться с этими предупреждениями?


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Пт июн 08, 2018 21:52 
Не в сети

Регистрация: Вт окт 26, 2010 21:55
Сообщения: 329
Откуда: Санкт-Петербург
Сначала отвечу Электрику.
На вашем скрине вообще нет ни одного адреса. Почему Вы "придрались" к адресам? Не злитесь, это юмор. Массив для удобства. И только.
Я предлагаю мой пример поправить - пусть на выход 100.5 определим адреса "промежутков" W72.0... или 324.0 из области CIO, которые не используются аппаратной частью. То ест ьдля выхода 100.06 я назначу группу "промежутков" W521.0 или H27.0 в зависимости от "важности" и хитростей. Адрес вообще не имеет значения. Вы его один раз присвоили, "отЪели" из памяти и забыли. Далее работаете с именами переменными, понятными не только контроллеру, но и Вам и вашим последователям. Смысл моего посыла в том, что вы не создаете "десяток" переменных, по типу как на вашем скрине. Вы создаете одну длиной в слово, но с типом в бит... Поначалу я тоже каждому биту присваивал отдельные имена с номером за нижним подчеркиванием. А "потом попробовал и мне понравилось" :D Таблица символов короче, запоминать и контролировать использование и перечисление легче.... и вообще, пальцами по клаве меньше тыкать.
А к чему я тут?.. Да в общем Вы сами определяете, как Вам "жить" с вашим контроллером и системой в общем. Я лишь поделился... Считаете, что мои костыли не самые удобные? Соглашусь с Вами... 16 лет ищу идеал, пока не нашел.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Пт июн 08, 2018 22:12 
Не в сети

Регистрация: Вт окт 26, 2010 21:55
Сообщения: 329
Откуда: Санкт-Петербург
Попробую ответить ЗыМастеру.
Честно, программу Вашу не смотрел.... Лень... Не обижайтесь. Просто у меня такой принцЫп: не пою песни Цоя и Шевчука, не сую нос в чужие программы и не оцениваю их ценность.... Как-то так.
По вашим замечаниям позволю себе сказать, что направление у Вас точно правильное. как один из десятка вариантов решения вашей задачи вполне подойдет. Постарайтесь побольше и подольше погонять программу в симуляторе, а лучше - на реальном объекте с реальным процессом. Вот там и проникнетесь проблемой дублирования выходов, таймеров и последовательностями выполнения разного рода функций.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Сб июн 09, 2018 08:07 
Не в сети

Регистрация: Пт май 04, 2007 08:42
Сообщения: 255
Спасибо Aeroplan за ответ.
Идею понял.
Для топик стартера.
Ваша выложенная программа работать не будет как минимум по причине неправильного использования команды ++. Инкрементирование W102и W101 будет происходить каждый скан программы при активном условии выполнения. Такие команды используются с префиксом @ либо с выделением условия срабатывания по фронту.
Логично также использовать одну команду и объединять условие инкрементирования по ИЛИ.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Сб июн 09, 2018 08:39 
Не в сети

Регистрация: Ср май 16, 2018 22:44
Сообщения: 10
Electric писал(а):
Логично также использовать одну команду и объединять условие инкрементирования по ИЛИ.

Спасибо за ответ!
Я, на самом деле, понимаю, что просить (а тем более - рассчитывать), что мои программы кто-то будет изучать и даже комментировать (не за деньги) - это немного наглость... но - "так получилось" (с): издержки "слегка корявой" организации процесса, когда программу пишет не программист, а "ты_ж_автоматчик".
Надеюсь, что и у меня - "всё получится" :-)


В начало
 Профиль  
 
 Заголовок сообщения: Re: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Сб июн 09, 2018 08:56 
Не в сети

Регистрация: Чт сен 26, 2013 18:49
Сообщения: 140
themaster

Как-то вы усложняете со счетчиками, мне кажется.


У вас нет необходимых прав для просмотра вложений в этом сообщении.


В начало
 Профиль  
 
 Заголовок сообщения: Re: Дублированные выводы - как правильно делать?
СообщениеДобавлено: Сб июн 09, 2018 10:15 
Не в сети

Регистрация: Ср май 16, 2018 22:44
Сообщения: 10
Спасибо, я примерно так и подумывал переделать.
Правда, туда надо ещё прикрутить, чтобы раз в сутки оно выключало один из рабочих агрегатов и выводило его в резерв, а вместо него запускало резервный. Это (в моём понимании) сильно усложняет схему, но я, вроде как, примерно предполагаю, как его сделать. Не буду загромождать тему, спрошу, только если возникнет совсем уж затык.


В начало
 Профиль  
 
Показать сообщения за:  Сортировка  
Начать новую тему Ответить на тему  [ 15 сообщений ] 

Часовой пояс: UTC + 3 часа (Russia: MSK)


Кто сейчас на конференции

Сейчас этот форум просматривают: в настоящее время на конференции нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Переход:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская документация по phpBB 3