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

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

  1. #1

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

    Доброго времени суток, уважаемые разработчики!

    Помогите, пожалуйста, разобраться с работой вышеуказанных вещей.
    Как мне кажется, есть проблема в совместном использовании прерывания таймера и Modbus RTU Master`a.

    А именно:
    За фиксированный период цикла ПЛК, я вижу, что Modbus отсылает данные на модуль аналогового вывода с разным интервалом.

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

    Приращение пилы задаётся в теле обработчика прерывания, который вызывается с темпом в 100 мкс.
    При времени цикла в 4 мс, я рассчитываю получать приращение в 40 дискрет и всегда.

    Если я правильно понимаю работу циклов ПЛК, то я ожидаю от Modbus`a, что он мне будет выдавать данные на аналоговый модуль всегда строго в одно и тоже время. Тогда я должен видеть пилу со всегда равными по форме ступеньками. По факту - это не так.

    У Modbus`a я смотрю exception - он иногда показывает 255 - таймаут.
    Без прерываний такого нет.

    Отсюда у меня вопросы к вам:
    1. Верно ли утверждение, что по время Modbus`a, в какой-то его фазе, прерывание таймера нарушает работу Modbus`a и пакет данных передаётся либо будучи невалидным или связь просто обрывается(о чем и, возможно, говорит exception)?

    2. Можно ли как-то синхронизировать работу прерывания таймера и Modbus?

    3. Как точно узнать, что были приняты не те данные по Modbus`у аналоговым модулем? Не нашёл исключения связанного с некорректной контрольной суммой? Понимаю, что может быть причиной задержек во времени, т.к. нужны повторные посылки данных, а данные уже приросли из-за прерывания и следующая их отправка будет уже в следующем цикле ПЛК.

    В реальном проекте прерывания нужны для счёта быстрых входов - там энкодеры.

    Спасибо!

  2. #2
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Ну так вы сами ответили на свой вопрос.
    Прерывания они на то и прерывания.
    отправляйте модбас команды после прерывания через библиотеку
    и дайте время выполнить ее, до следующего прерывания.

  3. #3
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Цитата Сообщение от Daedal Посмотреть сообщение
    При времени цикла в 4 мс, я рассчитываю получать приращение в 40 дискрет и всегда.
    небольшое уточнение, 4мс это рассчитанное среднее время цикла или Вы о минВЦ и сразу напрашивается вопрос, Вы отправляете запросы каждый цикл?
    Цитата Сообщение от Daedal Посмотреть сообщение
    Если я правильно понимаю работу циклов ПЛК, то я ожидаю от Modbus`a, что он мне будет выдавать данные на аналоговый модуль всегда строго в одно и тоже время.
    знаете ли Вы что в плк не совершенны часы реального времени и одно и тоже время ни когда не будет, даже если сильно этого хотеть


    Цитата Сообщение от Daedal Посмотреть сообщение
    1. Верно ли утверждение, что по время Modbus`a, в какой-то его фазе, прерывание таймера нарушает работу Modbus`a и пакет данных передаётся либо будучи невалидным или связь просто обрывается(о чем и, возможно, говорит exception)?
    модбас передается через физический последовательный порт, который тоже работает по прерываниям, что не верно так то что это нарушает работу

    Цитата Сообщение от Daedal Посмотреть сообщение
    2. Можно ли как-то синхронизировать работу прерывания таймера и Modbus?
    какой в этом смысл


    Цитата Сообщение от Daedal Посмотреть сообщение
    3. Как точно узнать, что были приняты не те данные по Modbus`у аналоговым модулем? Не нашёл исключения связанного с некорректной контрольной суммой? Понимаю, что может быть причиной задержек во времени, т.к. нужны повторные посылки данных, а данные уже приросли из-за прерывания и следующая их отправка будет уже в следующем цикле ПЛК.
    то что Вы не нашли про контрольную сумму, прочтите спецификацию протокола, там описывается в каких случаях слейв отвечает ошибкой на запрос, а в каких случаях игнорирует запрос, вызывая таким образом таймаут в мастере
    в ексепшене ошибка 255 при использовании функций записи случается, так бибка реализована, например если попробуете делать тоже самое с ПК или другой библиотекой такого не будет
    Последний раз редактировалось capzap; 22.05.2016 в 07:53.
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  4. #4
    Пользователь
    Регистрация
    20.02.2008
    Адрес
    Тверь
    Сообщений
    501

    По умолчанию

    Цикл передачи информации по Модбус можно поделить на пять растянутых по времени этапов - подготовка мастера к передаче - передача запроса по проводам - обработка слейвом принятого запроса - передача слейвом ответа по проводам - обработка мастером ответа слейва и реакция на него. Вы ничего не сообщаете про задержки и продолжительность этих этапов, а именно от них зависит ответ на Ваш вопрос. Для того, чтобы уложиься в 4 мсек, надо работать на скорости 115 кбод с минимально допустимыми таймаутами, а лучше вообще без них. Если железо позволяет. Как у Вас с этим?

  5. #5

    По умолчанию

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

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    я опрашиваю обычно слейвы с периодом 50мс, максимально быстро это 20мс. ПИД регулятор я выставляю на работу каждые 100мс, поэтому чаще слать задание в модули аналоговых выходов смысла нет, ну ради подстраховки, те же 50мс. Запись (возвратный пакет того что я отправил) я не контролирую, потому что во первых в модуле остается последнее корректное значение, во вторых следующий запрос случиться не через такой существенно длительный промежуток времени, чтоб как то повлияло на работу исполнительного механизма, в конце концов инертность системы гораздо больше чем периодичность запросов и правильно подобранные коэффициенты сделают свою работу. Вот поэтому делиться впечатлениями о задержках и продолжительностях каких то там этапов не считаю нужным
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  7. #7

    По умолчанию

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

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

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

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

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

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

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

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

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

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

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

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

  8. #8
    Пользователь
    Регистрация
    11.01.2009
    Адрес
    Кострома
    Сообщений
    3,144

    По умолчанию

    Каждый цикл посылать данные в МВА зачем?
    у вас данные обратной связи не успевают обновляться.
    отправляйте по изменению или с интервалами в несколько сек.
    Время цикла сильно меняется.
    Поставьте в программу ФБ max и миn и посмотрите какое время покажут.
    разбег будет значительным.

  9. #9

    По умолчанию

    Обратная связь у меня - это энкодеры с частотой 10 кГц - это 100 мкс, т.е. данные успевают обновляться, другое дело, что мне так часто не надо регулировать, да.
    Интервал в несколько секунд - так редко не могу. Нож режет раз в секунду, а его скорость нужно успеть ещё скорректировать.

    ФБ max и min - это что, подскажите, пожалуйста.

  10. #10

    По умолчанию

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

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

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

Похожие темы

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

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

Ваши права

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