РЕШЕНО Работаю с modbus

Тема в разделе "Проводная и беспроводная связь", создана пользователем ИгорьК, 29 сен 2021.

Метки:
  1. ИгорьК

    ИгорьК Гуру

    Помощь зала.
    Вот такое modsbus реле:
    upload_2021-9-29_9-10-37.png

    Управляю. Управляется. Все норм.
    Команда "узнать состояние" - ответ 6 байт.
    Команда "установить состояние" - ответ 8 байт.
    Команда "установить адрес железки" - ответ 11 байт.

    Я организовал обработку ответа от железки так.
    1. отправляю команду на железку.
    2. запускаю таймер
    3. побайтно принимаю ответ и добавляю его в переменную (var = var + newbyte)
    4. через 125 мс таймер запускает функцию обработки переменной var.

    За это время успевает "прилететь" и 6 и 8 и 11 байт.

    Вопрос вот в чем. Какова логика приема данных у вас, коллеги? Можно, ведь, пытаться считать принятые байты. Установка адреса - вещь разовая, а вот установка и опрос - операции с разными длинами ответов.

    Ситуация несколько усложняется и тем, что на эту же шину хочу повесить PZEM-16 и там своя длина ответа модуля.

    У кого какой опыт? Кто как делает?

    ПС. Без таймера, вроде, все равно не обойтись. Если ответа по какой-то причине не будет, устройство станет ждать его бесконечно, если его чем-то не "остановить".

    ППС. Решено. Оставил таймер, но стал считать байты. Набрал нужное количество - остановил таймер и обработал ответ. Что-то не так с ответом - таймер сработает и все порешает.
     
    Последнее редактирование: 29 сен 2021
    Andrey12 и SergeiL нравится это.
  2. shabronov

    shabronov Нерд

    Добрый день ИгорьК По модбасу работал через удобную програму(тест)
    modlook.zip (бесплатная,там есть реквизиты автора) оборудование такое Мое резюме - модбас приборы каждый делает под себя. Получалось иногда у этого поставщика по его оборудованию проще самому быстрый опрос написать, чем брать их скаду и устанавливать по адресам опс-сервер. Ну и далее делать проект под заказчика.
     

    Вложения:

    • modlook.zip
      Размер файла:
      266,3 КБ
      Просмотров:
      17
    ИгорьК нравится это.
  3. SergeiL

    SergeiL Оракул Модератор

    Так же делал. Только таймер взводил после получения каждого байта.
    А обработку полученного пакета начинал либо по достижению нужного кол-ва байт либо по флагу ошибки приема, взведенного по таймеру.
     
    Daniil, Andrey12 и ИгорьК нравится это.
  4. ИгорьК

    ИгорьК Гуру

    Оставил таймеру 125 мс, посчитал байты - остановил.
    Команды не отправляю напрямую, а складываю в таблицу.
    Изымаю из таблицы по одной и отправляю в модуль.
    Пока в таблице есть строки - идет взаимодействие с модулем.
    Выглядит прикольно... 48 команд подряд из таблицы. Доставляет звук :)

     
    Andrey12 нравится это.