Показано с 1 по 10 из 33

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

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

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

  2. #2

    По умолчанию

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

    Вопрос снят?

  3. #3

    По умолчанию

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

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

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

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

  4. #4

    По умолчанию

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

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

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

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

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

  5. #5

    По умолчанию

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

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

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

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

  6. #6

    По умолчанию

    Цитата Сообщение от Alex19 Посмотреть сообщение
    Идея была в том, чтобы свалиться в прерывание и перейти в начало программы.
    Ради интереса потом гляну возможно ли это.
    Так не работает.
    Дело, например, в том, что помимо вашей программы, ПЛК выполняет обработку сети (ethernet, 485 и т.п.).
    Если вы собрались занимать вообще всё процессорное время, то кто будет отвечать по сети?

    Поэтому, цикл "1мс" существует специально для того, чтобы ПЛК мог выполнять свои задачи.
    Например, пользовательская программа "вычислить 10 if'ов" занимает 0.1мс, а всё остальное время 0.9мс прошивка ПЛК использует для своих нужд (сеть экран вот это всё).

    В общем "тут принято", без прерываний, и у всех работает (если правильно помню, то обрабатывают более 30 модулей, и цикл не превышает 2мс)

  7. #7

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Так не работает.
    Дело, например, в том, что помимо вашей программы, ПЛК выполняет обработку сети (ethernet, 485 и т.п.).
    Если вы собрались занимать вообще всё процессорное время, то кто будет отвечать по сети?

    Поэтому, цикл "1мс" существует специально для того, чтобы ПЛК мог выполнять свои задачи.
    Например, пользовательская программа "вычислить 10 if'ов" занимает 0.1мс, а всё остальное время 0.9мс прошивка ПЛК использует для своих нужд (сеть экран вот это всё).
    Да и сама моя идея, была не правильная, погорячился.

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

    Разумеется, есть код, который выполняется за кулисами моей программы, который требует ресурсы.
    Мне еще нужно понять, какой объем этих ресурсов требуется. Пока когда читаю документацию, удивляюсь скорости переключения выходов и т.д., правда там написано не более.

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    В общем "тут принято", без прерываний, и у всех работает (если правильно помню, то обрабатывают более 30 модулей, и цикл не превышает 2мс)
    Вы зародили сомнения, в моем решении.

    У Вас больше опыта с ПЛК, но мой предыдущий опыт (с обычными микроконтроллерами), говорит, что решить такую задачу в ПЛК без прерываний не возможно. Попробую разобраться с прерываниями, тогда все станет на свои места.

Похожие темы

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

Ваши права

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