PDA

Просмотр полной версии : Требуется помощь по CoDeSys. Разобраться с вызовом программы по входу для ПЛК110.



Валерий Бурик
20.06.2011, 11:25
Никак не могу разобраться, как в CoDeSys, вызвать подпрограмму по прерыванию. Точнее без внешнего воздействия подпрограмма сама вызывается, хотя в Конфигураторе задач ставлю галку по событию, и указываю событие, воздействие на вход контроллера.
И еще вопрос, может ли CoDeSys управлять двумя программами одновременно, т.е. параллельно? Тогда и прерывание не нужно.
Задача такая. Нужно управлять одним механизмом. Здесь все понятно. Порядок действий этого механизма ясен. Одно действие идет за другим, по кругу. Но нужно еще, управлять небольшим механизмом, имеющим два датчика, и мотор. Пришел сигнал с датчика, включился мотор в одну сторону. Сигнал пропал, контроллер выключил мотор. Так и с другим датчиком, если тот сработал, то тот же мотор включился в другую сторону, сигнал с другого датчика пропал, мотор снова выключился. Так и работает от датчика к датчику.
Перепробовал все. Написал простую программу, выставил приоритеты по прерыванию. Никак не могу понять логику. Может надо пробовать на живом контроллере, а то я использую режим эмуляции.
Посмотрите что не так в программе. Имена задавал, как рука легла. Плохо то, что негде прочитать, кроме как в "сухом" "Руководстве по CoDeSys"

Александр Приходько
20.06.2011, 12:13
Вопрос: Зачем прерывания и приоритеты? Вам необходима скорость свыше чем время цикла контроллера?

Думаю вашу задачу можно реализовать обычным алгоритмом управления.
Что касается параллельных процессов, то принципиально-можно! Но выполняются они все равно в режиме разделения времени центрального процессора. Поэтому можно все сделать в одном процессе с тем же успехом.

Валерий Бурик
21.06.2011, 00:02
Спасибо за ответ! Дело в том, что у меня семь датчиков в основной программе, плюс два на стороне. Опрашиваются они последовательно. В этом случае программу удобней писать на языке SFC. Шаги будут идти от датчика к датчику. А те два могут включиться в любой момент, и есть комбинация, когда они оба выключены. Когда писал ответ, подумал, да, можно опрашивать состояние трех датчиков, и обойтись без прерывания. То – же получится, но с прерыванием проще организовать работу. Меньше ветвлений.
Кстати прерывания заработали. Не могу однозначно ответить, что было, но здесь есть одно правило. PLK_PRG, нужно убрать, и создать программу с другим именем. В конфигураторе создать новую задачу, добавить имя созданной программы, и указать в конфигураторе, что она свободная, т.е. если она закончит свою работу, то начнет все сначала. Приоритет ставим 1. PLK_PRG в этом случае будет не активна, думаю, из-за ее специфических свойств. А дальше пишем нужную программу (подпрограмму). В конфигураторе создаем задачу, вставляем нашу подпрограмму. Ставим приоритет 2 и указываем, что она работает по событию. Указываем событие, имя входа ПЛК. И все заработало. Создавал для проверки две программы. Одна работала, другая сразу же вызывалась. Помогло, когда удалил старую, и по новой ее создал. И все - таки, есть неоднозначности. Мне кажется, что дело в режиме эмуляции. Нужно такие вещи пробовать на "живом" контроллере. Спасибо за ответы, помогли, в особенности с присвоением в конфигураторе имени, автоматически получаем глобальную переменную. Непонятно мне что делать с вложением TASKPRIMER.EXP, если не затруднит, объясните. С уважением!

Валерий Бурик
21.06.2011, 14:03
Если я правильно понял, этот файл необходимо поместить в дирректорию где находится проект? В этом я не очень силен!

Валерий Бурик
21.06.2011, 15:00
Получается CoDeSys по умолчанию просматривает дирректорию где находится проект, и если видит файл с расширением EXP, то загружает в себя конфигурацию?

Валерий Бурик
21.06.2011, 23:24
Получилось, но не совсем. Не смогло открыть конфигурацию ПЛК, не хватает библиотек. Отсюда не видит входа, и дает ошибки "push", "flag". Все равно огромное Вам спасибо! Приобрел опыт.

Николаев Андрей
22.06.2011, 00:49
exp - файл, содержащий часть проекта. Какую часть - определяет человек, который делает импорт из своего проекта. При желании импортирована может быть и конфигурация.
Все что Вам остается - в своем открытом проекте вызвать команду экспорт из меню "проект".

Библиотеки, если их не хватает, надо уже как раз самостоятельно добавить в директорию, где они по умолчанию храняться. После этого на ошибку библиотеки ругаться перестанет.

Валерий Бурик
22.06.2011, 20:01
Скорее всего у вас не установленны таргеты для плк100 поэтому и конфигурация не открывается, я кромсал старый проект поэтому он не "заточен" под 110 и с библиотеками тоже, вполне возможно что то от старого осталось

Я так и понял. Спасибо!

Валерий Бурик
28.06.2011, 11:43
Возвращаюсь к поднятому вопросу! Нашел статью, в которой поднятая мной тема рассматривается в полной мере. Она в вложении. В микроконтроллерах это называется прерывание, в ПЛК многозадачность. Используя этот метод можно реализовать управление несколькими несвязанными механизмами легче чем на микропроцессоре. Спасибо авторам статьи за ряд публикаций! Не плохо-бы включить эти статьи в документацию к контроллерам. Всем успехов!

Николаев Андрей
29.06.2011, 10:25
Конечно надо. Только кто бы её читал...
http://www.owen.ru/uploads/rp_plk110.160.pdf