Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 33

Тема: Вопросы по поиску правильной архитектуры приложения.

  1. #1

    Question Вопросы по поиску правильной архитектуры приложения.

    День добрый.
    Только начинаю свое знакомство с ПЛК, поэтому появляются вопросы, связанные с архитектурой программ.

    Что хотелось бы реализовать.
    Давайте представим себе станок у которого несколько режимов работы, для простоты, предположим их 2: автоматический и ручной. Автоматический режим - простой конечный автомат, ручной режим - простой вызов отдельных модулей.

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

    Как мне видится решение данной проблемы.
    1. Перед каждым шагом в условии if проверяем функцию. Функция проверяет вход, а если требуется остановка выполняет определенные действия (отключает какое-то оборудование) в зависимости от шага автомата.
    Все просто, но минус если шагов сотни, то каждый раз прописывать if, ужасно не удобно.

    Есть ли какие-то другие варианты реализации и если есть, то какие (интересует не код, а направление в какую сторону копать ).

    Среда CoDeSys 2, контролер ПЛК110-24.60.К-М, языки ST или CFC.

    И еще пару вопросов.
    2. Можно ли загружать/сохранять какие-то переменные из USB?
    Это требуется для настройки станка, для конкретного изделия.
    3. Какие клавиатуры можно подключить к ПЛК110-24.60.К-М?

    Заранее благодарен.
    Последний раз редактировалось Alex19; 28.09.2016 в 16:55. Причина: Дополнение.

  2. #2

    По умолчанию

    Пример работы с USB - http://www.owen.ru/uploads/primer_ra...plk110-m02.pdf.

    С клавиатурой, как я понял есть вариант использования матричной - http://www.owen.ru/forum/showthread.php?t=22233. Второй вариант кнопка вход, благо выходы можно расширять.

  3. #3
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,062

    По умолчанию

    По-моему, проще весь CASE со всеми шагами разместить внутри IF с проверкой условия, а в ELSE - еще один CASE c действиями, которые надо сделать при остановке в зависимости от текущего шага.

  4. #4

    По умолчанию

    Спасибо за ответ.

    Представим if, мы прошли данный if, потом пошли в case на конкретный пункт, а этот момент на входе образовался 0. Программа не должна будет выполнить содержания case, а выполнить в else действия которые надо сделать при остановке в зависимости от тек. шага. Есть риск выполнения case и остановке на следующем цикле, если я не прав, поправьте меня.

  5. #5

    По умолчанию

    Цитата Сообщение от Alex19 Посмотреть сообщение
    потом пошли в case на конкретный пункт, а этот момент на входе образовался 0
    Смотрите: значения входов меняются только _до_ начала работы программы, но никак не во время её работы.
    Т.е. программа из if/case пишется из того расчёта, что значения входов НЕ меняются во время её работы.

    Вопрос снят?

  6. #6
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    12,062

    По умолчанию

    пошли в case на конкретный пункт, а в этот момент на входе образовался 0.
    Между проверкой IF и выполнением шага CASE нет операции чтения входов - так что мы не увидим этот 0 до следующего цикла ПЛК в любом случае, в моем понимании.

  7. #7

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Смотрите: значения входов меняются только _до_ начала работы программы, но никак не во время её работы.
    Т.е. программа из if/case пишется из того расчёта, что значения входов НЕ меняются во время её работы.

    Вопрос снят?
    Спасибо за ответ.

    Становится немного понятно принцип работы.
    Нашел причину такого странного поведения ПЛК.
    while(1)
    {
    ReadInputs();
    PLC_PRG();
    WriteOutputs();
    }
    Вопрос увы не снят, а изменился.
    Мы не можем получить новое значение, пока цикл не завершиться, но реальное значение может быть другим.
    Как быть?

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

  8. #8

    По умолчанию

    Цитата Сообщение от Евгений Кислов Посмотреть сообщение
    Между проверкой IF и выполнением шага CASE нет операции чтения входов - так что мы не увидим этот 0 до следующего цикла ПЛК в любом случае, в моем понимании.
    Спасибо, Вы правы.

    Сейчас буду думать, как обойти эту не справедливость.

  9. #9

    По умолчанию

    Цитата Сообщение от Alex19 Посмотреть сообщение
    Как быть?
    Правильный вопрос.

    Быть так, чтобы "в самой программе" выполнялось минимум кода.
    Грубо, говоря, если зарядить вычисление 10000 цифр в числе pi, то, да, провороним как изменился вход.

    Если основная программа только пару проверок сделает и всего делов, то следующий цикл наступит во время, и ПЛК опросит входы/выходы.

    Цитата Сообщение от Alex19 Посмотреть сообщение
    И тут нужно разбираться с прерываниями, как происходит передача управления между основной программой и обработчиком прерывания.
    99%, что не надо.

    Просто не выполняйте лишнего (закрывайте IFами лишнюю логику, или выводите её в отдельные более редкие программы) в программе и будет счастье.

  10. #10

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Правильный вопрос.
    Быть так, чтобы "в самой программе" выполнялось минимум кода.
    Грубо, говоря, если зарядить вычисление 10000 цифр в числе pi, то, да, провороним как изменился вход.
    Если основная программа только пару проверок сделает и всего делов, то следующий цикл наступит во время, и ПЛК опросит входы/выходы.
    Другими словами Вы предлагаете разбить код, таким образом, чтобы выполнение кода было максимально эффективным, логично. Тут может не получиться, у меня еще минимум 4 модуля расширения, панель оператора и клавиатура, надеюсь такое кол-во периферии не подвесят программу.

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    99%, что не надо.

    Просто не выполняйте лишнего (закрывайте IFами лишнюю логику, или выводите её в отдельные более редкие программы) в программе и будет счастье.
    Идея была в том, чтобы свалиться в прерывание и перейти в начало программы.
    Ради интереса потом гляну возможно ли это.

    Сейчас надо переварить выше сказанное и разобраться с доп. защитами.
    Спасибо всем за пояснение.
    Последний раз редактировалось Alex19; 28.09.2016 в 21:39. Причина: Дополнение.

Страница 1 из 4 123 ... ПоследняяПоследняя

Похожие темы

  1. Выбор правильной конфигурации
    от maxsus в разделе Подбор Оборудования
    Ответов: 3
    Последнее сообщение: 07.09.2015, 16:39
  2. Друзья , нужна помощь в подключении и правильной работе МПР51
    от Виктор Иванов в разделе Эксплуатация
    Ответов: 11
    Последнее сообщение: 24.07.2015, 14:47
  3. ПЛК 304 автозапуск приложения
    от Шевцов Игорь в разделе ПЛК3хх
    Ответов: 24
    Последнее сообщение: 06.03.2015, 12:07
  4. Поделитесь опытом по поиску Заказчиков
    от dmm в разделе Трёп (Курилка)
    Ответов: 16
    Последнее сообщение: 11.12.2011, 23:21
  5. вопрос по выбору архитектуры
    от Kraft в разделе Помощь Разработчикам
    Ответов: 1
    Последнее сообщение: 09.02.2010, 07:11

Ваши права

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