PDA

Просмотр полной версии : Подскажите пример: Вызова подпрограммы и ее останов по требованию.



Parxs
30.04.2011, 18:11
ПЛК 100, СМИ1.
Задача:
На СМИ1 выбирается номер программы, нажимается кнопка старт, и начинает выполняется соответсвующая программа. По нажатию кнопки СТОП выполнение программы приостанавливается, при нажатии и удержании кнопки стоп больше 3 секунд программа сбрасывается.

Дайте простейший пример, например если на СМИ1 выбрана 1 то на ПЛК100 поочередно срабатывают входы 1, 2, 3 и тд.
А если на СМИ1 2 то 6,5,4, и тд.

Заранее спасибо!

Николаев Андрей
30.04.2011, 20:32
Смотря на чем пишете (какой язык)
Логика простая:
Если "значение с панели"=1 то
"промежуточная переменная"=1
взводим таймер1 задержки включения (запускает таймер "промежуточная переменная"
взводим таймер2 задержки включения,
выход1:=true;
выход2:=выход таймер1
Выход3:=выход таймер2
закончили проверку
закончили проверку

Так же для других значений.

Parxs
30.04.2011, 22:54
Это в принципе понятно, а как применить стоп? как оборвать выполнение программы? каогда я сбрасываю например меняю на панели значение на 2, наченает выполнятся вторая программка, при этом не останавливается первая, так они и работают обе паралельно.

Николаев Андрей
01.05.2011, 01:09
А вот для этого надо понять принцип работу ПЛК.
Программу в контроллере остановить НЕЛЬЗЯ.
Программа в контроллере выполняется постоянно по жесткому алгоритму, циклически: опрос входов (области памяти входов), выполнение программы с верху в низ с лева на право, запись выходов (в область памяти выходов). Возвращаемся к пункту 1. И так постоянно.
Это надо почитать, усвоить и попробовать. Сложнее всего это дается классическим программистам:
введите в программе a:=a+1;
Что бы это дало в СИ, и что это дает в CoDeSys...
Принцип с подпрограммой тот же. Из основной программы попадаем в подпрограмму, выполняем её одним проходом с верху вниз (без зацикливаний и ожиданий - мы не остаемся в подпрограмме дольше, чем требуется для выполнения) и выходим из неё, передавая управление основной.

По этому в одной подпрограмме и организуйте работу. Если состояние такое - выхода так то так то, а если другое, то выхода так то и так то, а если состояние остановится (а мы помним что не останавливаемся никогда), то все выхода перевести в 0. Ну и соответственно проверка аварий и останова выполняется в самом низу подпрограммы. Почему? Да по тому что в выхода запишутся значения переменных в конце подпрограммы. То есть если даже в начале программы считается, что надо выход 1 включить, но далее по программе выход 1 выключается, то в итоге в область памяти выходов передастся только последнее значение.

Основы работы ПЛК. Очень рекомендую почитать базовые вещи, например книгу Петрова Игоря.
Ну или хотя бы глоссарий нашего руководства.
А уж в идеале РЭ или РП к ПЛК :)

Pointer
02.05.2011, 15:02
введите в программе a:=a+1;
Что бы это дало в СИ, и что это дает в CoDeSys...
В СИ не прокатит...только в Паскале...;-)

Николаев Андрей
02.05.2011, 16:35
Вот что за люди - лишь бы к словам докопаться;)

Pointer
02.05.2011, 22:04
:)))) не надо вводить людей в заблуждение...
Но принцип вы описали правильно, а это важнее...