Показано с 1 по 7 из 7

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

  1. #1

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

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

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

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

  2. #2

    По умолчанию

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

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

  3. #3

    По умолчанию

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

  4. #4

    По умолчанию

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

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

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

  5. #5
    Пользователь
    Регистрация
    11.03.2010
    Адрес
    Петрозаводск Карелия
    Сообщений
    242

    По умолчанию

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

  6. #6

    По умолчанию

    Вот что за люди - лишь бы к словам докопаться

  7. #7
    Пользователь
    Регистрация
    11.03.2010
    Адрес
    Петрозаводск Карелия
    Сообщений
    242

    По умолчанию

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

Ваши права

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