Modbus RTU

Вопросы программирования в системе Ардуино
Solmik
Сообщения: 2
Зарегистрирован: 25 янв 2018, 19:54

Modbus RTU

Сообщение Solmik » 28 янв 2018, 22:02

Здравствуйте!
Подскажите, пожалуйста: Modbus RTU - в начале и конце кадра сообщения передаётся маркерный интервал с длительностью равной времени передачи 4-х символов. Как передать такой интервал? Если пин определён как последовательный порт, то его нельзя включить на заданный промежуток времени? или через диоды (монтажное ИЛИ) можно вместе 2 пина включить?


Эдуард
Администратор
Сообщения: 398
Зарегистрирован: 30 окт 2016, 20:53

Re: Modbus RTU

Сообщение Эдуард » 28 янв 2018, 23:35

Здравствуйте!
Эти интервалы передаются неактивным состоянием. Попросту говоря это паузы в передаче. Когда UART заканчивает передачу, его выход переходит в состояние лог. 1. Т.е. в начале и в конце кадра необходимо сделать задержку в передаче данных длительностью не менее времени, необходимого на передачу 3,5 символов.

Solmik
Сообщения: 2
Зарегистрирован: 25 янв 2018, 19:54

Re: Modbus RTU

Сообщение Solmik » 29 янв 2018, 20:43

вот я и спрашивал КАК эту задержку сделать?

Эдуард
Администратор
Сообщения: 398
Зарегистрирован: 30 окт 2016, 20:53

Re: Modbus RTU

Сообщение Эдуард » 29 янв 2018, 21:17

Здравствуйте!
Задержку перед передачей пакета реализовать достаточно просто. В библиотеке Tiny_MODBUS_RTU_Slave я формирую задержку, отсчитывая вызовы прерывания по таймеру. Но эта библиотеке работает параллельным процессом. Если вас устроит зависание программы при передаче или приеме, то можете использовать другие стандартные функции задержки.
С реализацией задержки в конце кадра несколько сложнее. Передача данных происходит с помощью стандартного класса Serial. А в этом классе передача данных происходит из буфера по прерыванию, и нет функции проверки окончания передачи. Поэтому я проверяю бит UART, который говорит о том, что все данные из аппаратного UART переданы.

Код: Выделить всё

    // ожидание окончания передачи
    if( (UCSR0A & 64) != 0 ) {
      // передача закончена
   }   


Вернуться в «Программирование Ардуино»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость