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

Тема: Прерывание таймера + ModbusRTU = Медленный Modbus?

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

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

    По умолчанию

    Спасибо всем большое за оперативные ответы!

    отправляйте модбас команды после прерывания через библиотеку
    и дайте время выполнить ее, до следующего прерывания.
    Программа написана на ST, работаю через библиотеку.
    Что значит дать время?
    Сейчас сделано так, что прерывания не могу сделать реже, чем 100 мкс.
    Если смогу проредить энкодеры внешним устройством, то будет не более 500 мкс.

    Т.е. прерывание всё равно будет наступать быстрее,чем закончится модбас. Отключать прерывание нельзя.

    небольшое уточнение, 4мс это рассчитанное среднее время цикла или Вы о минВЦ и сразу напрашивается вопрос, Вы отправляете запросы каждый цикл?
    Это минВЦ. Запрос отправляю каждый цикл.

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

    модбас передается через физический последовательный порт, который тоже работает по прерываниям, что не верно так то что это нарушает работу
    Т.е. когда модбас "стартовал" и произошло прерывание таймера, то находясь в прерывании по таймеру, модбас корректно уйдёт в своё внутреннее прерывание, когда это будет нужно и данные передадутся, верно?

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

    Вы ничего не сообщаете про задержки и продолжительность этих этапов, а именно от них зависит ответ на Ваш вопрос. Для того, чтобы уложиься в 4 мсек, надо работать на скорости 115 кбод с минимально допустимыми таймаутами, а лучше вообще без них. Если железо позволяет. Как у Вас с этим?
    Я, к сожалению, не знаю, как их определить.
    Скорость 115200 кБод, таймаут в аналоговом модуле выставлен в 0, задержка ответа тоже в 0.

    Если скорость обмена по Modbus не критична, то ее надо уменьшить (до 9600 или 19200) и связь нормализуется.
    Попробую, но ответ кажется слишком простым, если сравнивать с другими ответами тут.

    ..в конце концов инертность системы гораздо больше чем периодичность запросов и правильно подобранные коэффициенты сделают свою работу. Вот поэтому делиться впечатлениями о задержках и продолжительностях каких то там этапов не считаю нужным
    Про инертность тоже подумал, жаль, что не сразу. Это не успел учесть в программе.
    Я регулирую скорость вращающегося ножа. Вал ножа весит не мало.
    Получается, не надо так часто пытаться слать коррекцию на аналоговый модуль, 4 мс не имеет смысла.

    Длина хода ножа 800мм, точность требуется до 1мм.
    Я пока не могу оценить качество работы ПИД регулятора - не испытывал его ещё - это будет послезавтра, поэтому хочу иметь как можно больше итераций для коррекции в аналоговом модуле. Отсюда и такое малое МВЦ и большая скорость модбас.

    Но всё же остался вопрос:
    Почему ступеньки пилы отличаются по длительности так сильно - на десятки мс? Это не объяснить неточностью часов ПЛК.
    Если модбас не успевает завершить обмен за время цикла, а ему уже пора обмениваться в новом цикле, то он игнорирует новую отсылку, пока не отправит данные из предыдущего цикла?
    Если так, то нужно МВЦ ставить в 0 или вычисли время, за которое модбас успеет все передать?
    В документации пишут, что если выставить в 0, то время цикла будет плавать,т.к. внутренние процедуры ПЛК от цикла к циклу могут иметь разное время.
    Тогда начало очередного обмена по модбасу тоже будет плавать. Насколько внутренние процедуры могут плавать? мкс или мс?

  2. #2

    По умолчанию

    Цитата Сообщение от Daedal Посмотреть сообщение
    Если скорость обмена по Modbus не критична, то ее надо уменьшить (до 9600 или 19200) и связь нормализуется.

    Попробую, но ответ кажется слишком простым, если сравнивать с другими ответами тут.
    Все гениальное просто.

  3. #3

    По умолчанию

    Цитата Сообщение от Newcomer Посмотреть сообщение
    Все гениальное просто.
    Завтра проверю, конечно, но..

    МВЦ увеличивать надо точно и отсылать в модбас не каждый раз.
    А тогда, может, и не надо скорость снижать.
    Другое дело, что на объекте такую скорость, возможно, не получится обеспечить - там в шкафу и DC приводы и частотники стоят, помеха на помехе.

Похожие темы

  1. Ответов: 7
    Последнее сообщение: 19.06.2014, 09:35
  2. Прерывание таймера
    от zendo057 в разделе ПЛК1хх
    Ответов: 12
    Последнее сообщение: 02.02.2014, 15:28
  3. Медленный обмен между ПЛК100 и МДВВ
    от ddsandro в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 02.09.2013, 13:28
  4. Ооооочень медленный МВ110-8А
    от Туман в разделе Мх110
    Ответов: 20
    Последнее сообщение: 13.08.2013, 08:00
  5. Прерывание акта соития ПЛК и PC
    от Montigo в разделе ПЛК1хх
    Ответов: 26
    Последнее сообщение: 24.03.2009, 09:34

Метки этой темы

Ваши права

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