Задать вопрос
  • Modbus RTU как отправить и обработать запрос?

    Ocelot
    @Ocelot
    Мастер посылает пакеты. Слейв слушает линию, и когда видит пакет, обрабатывает его и отвечает. slave.poll() как раз отвечает за приём, обработку пакета и отправку ответного. Этот метод нужно периодически дёргать в основном цикле, по таймеру или просто так. Если мастер ничего не прислал, slave.poll() просто завершается. Все модбасные регистры отображаются в память слейва (массив au16data[]), можно их читать/писать в любой момент. Точнее, не совсем в любой, а когда не вызывается slave.poll().

    Блок
    if (master.getState() == COM_IDLE) {
          u8state = 0;
          u32wait = millis() + 100;       
        }
    даёт задержку 100мс перед следующим опросом модбаса. В коде мастера реализован простейший конечный автомат с тремя состояниями.
    1) u8state == 1 Отправка запроса
    2) u8state == 2 Приём ответа
    3) u8state == 0 Задержка
    Ответ написан
    6 комментариев