STM32. Modbus Slave. Первое погружение в Modbus RTU. Пишем функции для пакетов Request/Responce. — АСУ ТП: сообщество инженеров

STM32. Modbus Slave. Первое погружение в Modbus RTU. Пишем функции для пакетов Request/Responce.

О чём видео

В ролике показано создание скелета библиотеки Modbus Slave на STM32 для протокола Modbus RTU. Разбирается структура кадров Request/Response, реализация приёма и передачи через UART, обработка запросов мастера и проверка контрольной суммы. Демонстрируется работа функций чтения дискретных входов, чтения регистров и записи нескольких регистров с проверкой через терминал.

Что разбирается
  1. 00:00 Структура кадров Modbus RTU для Request/Response
  2. 02:29 Реализация Modbus Slave на STM32 через UART
  3. 06:27 Настройка библиотеки Modbus и коды функций
  4. 08:06 Обработка запросов мастера и проверка CRC
  5. 14:41 Отправка кадров Request/Response через терминал Hercules
  6. 17:33 Чтение дискретных входов функцией 02
  7. 20:13 Запись нескольких регистров Modbus
Оборудование и ПО
  • STM32
  • Modbus
  • Modbus RTU

Кому полезно: Инженерам, изучающим реализацию Modbus RTU на микроконтроллерах STM32.

Описание составлено автоматически по расшифровке речи в ролике.

Расшифровка видео

0:00 Всем привет, сегодня мы поговорим немного про протокол. Мак Бас сразу для всевозможных критиков. Я скажу, что то, что будет сделано в рамках данного видеоролика, это неполноценная библиотека Мод Бас, которая соответствует всем. требованиям для данного протокола, поскольку требование там достаточно много и временные интервалы и обработка различных ошибок. То, что будет сделано, это скорее скелет основы для библиотеки. Будущее, которую вы можете допилить. Доделать, если кому интересно. В рамках данного ролика мы рассмотрим лишь структуру различных кадров для разных функций, которые используются в рамках протокола МОД баз. И вот и вот на данном сайте мы, он пост, точка ком здесь. Очень хорошо визуально описана структура кадров в рамках Реквестри Спонс для каждой из основных функций протокола МОД баз. Например, Рид Скрит импульс и полностью каждый Байт описан, что он, значит, его длина вот как Реквест, так?

1:16 Так и респонс, и вот каждая функция вот описана достаточно подробно. Рекомендую сюда все это внимательно посмотреть для того, чтобы понимать, что из чего должен состоять каждый кадр данного протокола.

1:42 Здесь также описано, как вычислять версии, но мы, правда, немножко по другому будем его вычислять об этом чуть позже и. Давайте попробуем реализовать библиотеку, которая будет. В режиме Слейв, то есть, допустим, некий гаджет компьютер по интерфейсу Яр будет нам отправлять некие запросы реку Эс, а мы должны в соответствии с этим ему, что то отвечать даже не что. То отвечать, а непосредственно то, что соответственно протоколом от баз, то есть придавательно свои респонсы. И чтобы он понимал, что все это эти кадры соответствуют протоколу мод баз рту.

2:29 Да, в данном виде ролика будем рассматривать мобаз и рту, поскольку есть 3 вида РТ Уайз, 2 и ти спи ти си пи. Так, в главном цикле у нас используется функция мой бас Лисмин, который постоянно прослушивает протокол на вас. И если мастер нам что то отправил, мы должны в соответствии с регрессом отправить ему тот или иной ответ респонс. Уже 3 видеоролика про интерфейс январь, насколько я помню, в моем блоге есть там. Я работал в Ватру Электростудию, использовались дыма, прерывания Фифо. Буфера, поэтому, собственно, ничего нового. Что касается интерфейса Юарт, здесь особо нету библиотеки. Я перевел в Кейл, сколько теперь я работаю в Кейле.

3:27 И практически никаких изменений здесь нет, кроме того, что мы ставим переменную аду рейде. Аду Рейде это, собственно, когда мы принимаем пакет мод Баста, и он готов для приема. Переменная становится равной тру, а? А также эту библиотеку Юарт я перевел на СПВ. То есть теперь она не напрямую, не напрямую, с регистрами работает, а через библиотеку СП? Передача Тейкс может осуществляться как просто так и с помощью прерывания, и также с помощью дома по выбору мы будем использовать прерывание.

4:23 Вот инициализация ЮАР то с помощью библиотеки Спэль осуществляется таким образом. Включаем прерывание ПТ ИКС и Пэрикс. Запускаем Юсарт КМД. Так что так? Йорд Эндшпио Инит инициализируем порты и пины, которые используют Юарт. Дальше передача, передача сигналов т. Икс тоже 2 способами либо без прерывания, либо с прерываниями, это уже на выбор пользователя. Эр Икс, конечно, всегда использует проживание, поскольку мы прослушиваем. Каждую строчку нет смысла описывать все это согласно даташиту, точнее референс Менулу.

5:35 И вот. Обработчик прорывания если у нас произошел прием данных, то мы эти данные записываем в Йоркер Икс Буфер. Инкрементируемый индекс индекс таким образом постепенно. Заполняем наш буфер приема, и соответственно, если мы что то передаем, то мы из буфера передачи и арты, и буфер. Мы все передаем в переменную в регистре Юсарт д. р.

6:06 Здесь можно разными способами, можно кольцевой буфер сделать. Я кольцевой буфер отключил, пока что нам здесь не понадобится. Когда у нас переполнение происходит, то мы. Просто все обнуляем и дальше работаем. Далее функция ДМА, но сейчас речь принципе не про Юарт, поэтому мы не будем подробно этим останавливаться. Речь в данном видеоролике идет про мод бас, который. Этот Юарт использует и вот как раз уже в библиотеке Кей Мобаз Ашки Мобаз Точка. 7 Мы прописываем вот все необходимые дефайны, это вот как раз наша функция.

6:54 Функции самого Модбасса, да то есть мобаз Рид холдинг Реджес Тера Рид и вот Реджистор прописываем коды всех этих функций. Будем использовать вот эти функции с. 0 1 По 0 10 Вот пластисип я тоже здесь постепенно буду реализовывать. Дальше вот. Прописываем вот эти все массивы, в котором будем заполнять данными. Да, это Холден Редуктор Дайд Ин Гуд Редчестер. Вот и непосредственно сами функции, сами. Сами функции для работы с над басом тут мы баслизны. Основная функция и дальше идут функции, там Рид Холден, Реджестер, Ред, Колс и так далее, функции, касающиеся непосредственно каждую.

8:06 Того или, но той или иной функции мод Бас. То есть, что нам непосредственно нужно сделать в рамках этого протокола, какие регистры прочесть или какие регистры записать? Итак, давайте рассмотрим более подробную функцию Мак Басс Лисне, если у нас что, то принято. То в соответствии с кодом. Ну, собственно, от нас что, то просит мастер, да? Прочить или что то записать и все это. Согласно документациям от баз, все это прописано в определенном коде. Фанкшн, который находится в определенном байте, и мы его считываем и определяем, что от нас требует мастер и.

8:57 Если он, например, от нас требует прочесть входящие регистры, мы переходим с помощью конструкции свитч кейс на функцию ритма. 3 Джи Стор, и в этой функции мы уже дальше прочитываем. Что нам нужно, какая длина данных старта на адрес Хая стартен Андрес Слоун Клоун Клоунти? Тело Френч, количество регистров все мы это прописываем, все это время считываем, определяем, что от нас вообще мастер хочет далее.

9:36 Вычисляем версии. Проверяем, насколько корректно приняты данные с помощью Серсии, вот используем функцию Серси Мобасар, ту, которую не сложно найти в интернете. И кстати, вот на этом сайте Серси Калка Точка, ком мы также можем проверить. Наши данные на Серси и так если Наш проверенный сертификат должен быть равен, 0 если нет, то обрабатываем ошибку. После того как мы данные приняли и определили, что от нас хочет мастер, мы должны ему уже соответственно, что то отправить отправляем ему наши данные. Которые он хочет от нас получить и также вычисляем уже Серси для наших данных, которые мы ему будем отправлять также с помощью этой функции Серсии.

10:51 Так что так? И, собственно говоря, мы. Сбрасываем в 0 индекс нашего тейкс буфера и производим непосредственно с помощью функции ЮАР Сэмбуфер непосредственно передачу. Нашего пакета для мастера. И дальше флаг о дуреде. Сбрасываем ФОС для того, чтобы принимать следующие наши пакеты от мастера. Ну и и Артер, и Эксбуфер тоже обязательно в 0 и сбрасываем, чтобы нам не принимать эти пакеты повторно в. общем, такая система происходит, мы что то принимаем от мастера, обрабатываем. Это сверяем адреса, адрес слоев, сверяем функции, сверяем различные данные и то, что требует от нас. Мастер, мы ему отправляем, то есть либо он хочет у нас. Что то прочесть какие то регистры, либо он хочет наш регистр и наоборот записать. Вот по такой системе все это работает. И с помощью этого протокола Мадбас, как правило, производится обмен между микроконтроллером и компьютером.

12:04 Это достаточно распространенный и удобный протокол связи между компьютером и устройством на микроконтроллере.

12:24 На 1 взгляд, тут все достаточно сложно и неочевидно. Но если все это внимательно разобрать, прочесть документацию на Мульбас, то все становится более менее понятно. Здесь, конечно, тоже много различных неудачных моментов в. принципе, всю обработку принимаемых данных лучше перевести в прерывание, чтобы она быстро успевала. Программа быстро все успевала все это обработать, то есть у меня все это сделано в отдельных функциях, но люди часто делают. Я видел, как бы все это в прерывание. Засовывают и в прерывании по Юарт уже непосредственно весь мото бас. Как бы и обрабатывается, и поэтому если есть необходимость, то лучше нам сделать все таки так.

13:21 Способов достаточно много и. Каждый сам для себя выбирает как наиболее удачный способ. В данной библиотеке просто вот описана как бы основа работы с протоколом от баз. Такой скелет библиотеки. Да, вижу, студию я тоже написал такую небольшую программку для вычисления Серсии. Албас. Хотя все это можно и онлайн проверить, вот, например, вводим некие данные. У нас Серсии вычисляется, а 31. Но это не некие данные, а те данные, которые мы будем сейчас скоро уже.

14:16 С нашим компьютером вот 1 4 0 0 1 у нас ЦА 31 и вот наша программа. Вижу, студию тоже выдают такой же результат. Текст этой программы я тоже скину в описании к видеоролику, кому интересно.

14:41 Здесь, в этой библиотеке, я написал примеры экземпл, сообщений, которые можно отправлять. С терминала на микроконтроллер и проверять. То, что наш микроконтроллер будет отвечать нашему терминалу, давайте откроем терминал. Теперь я использую терминал Геркулес, который мне кажется. Наиболее удобным открываем сериал Комфорт 5 и будем пробовать отправлять сообщения. Вот здесь уже рассчитаны, Серси, все как бы полноценные кадры.

15:22 Будем отправлять кадры в МОД баз с терминала Геркулес к нашему микро. Микроконтроллеру вот здесь вот здесь. Этот терминал отображает как принятые данные, так и отправлены, то есть все подряд данные, и вот самую 1 функцию Ридкоилс будем использовать то. Есть, отправим с компьютера Реквест и наш микроконтроллер должен ответить пакетом респонс. Это то, что мы отправили микроконтроллеру, а дальше (010)101-55-91 бассейн. Это то, что наш микроконтроллер отвечает нашему компьютеру.

16:16 То есть нам важно соблюсти вот это как бы весь алгоритм, что мы отправляем Реквест? И согласно правилам наш контрконтроллер должен отправить респонс в соответствии со структурой пакетом от вас вот. Вот эти данные у нас. 55 66 Это Ридкоилс, у нас компьютер хочет считать, и мы эти данные должны передать как раз таки.

16:59 Так у нас было 55 66 7 7 давать 3 Байта ему. Попросим, чтобы нам микроконтролем передал 3 Байта и вот микроконтроллер как раз передает сначала служебная информация, а затем полезные. Данные вот как раз таки 55 66 7 7 и затем результат вычисления Серсии. То есть компьютер получил в рамках протокола Баста те данные, которые он запросил у микроконтроллера?

17:33 Дальше используем следующую функцию 0 2. И также микроконтроллер отправляет данные. Это дискрет импульс, то есть компьютер хочет прочесть. У нас некоторые диск дискретные входы, дискрет импульс, так у нас они будут равны 0 11 0 22. Давайте 3 Байта сделаем 0 11 0 22 и 0 23 и посмотрим. Как они будут передаваться на компьютер? Вот. Такое сообщение будем использовать, чтобы прочесть 3 Байта. Вот мы видим до 11:22 23 вот это полезные данные, которые компьютер от нас получает.

18:55 Все функции мы, конечно, не успеем сегодня протестировать. Давайте вот ритм, тот резус текущий, попробуем как раз тот набор данных, для которого мы считали чуть ранее наш Серсии.

19:33 Итак, мы видим, что микроконтроллер нам отправил некоторые данные. 2 Регистра и 4 Байта, да надо не путать количество регистров и количество байт, количество байт, всегда в 2 раза больше. Это 0 а, а и б б, да вот д и д, и п, трижестр нулевой. Это 0 а, а 1 это б б, то есть как раз вот этот массив. Эти 2 элемента мы и передали для нашего мастера, то есть для компьютера. Давайте еще 1 функцию протестируем, Райт, Малциплай Рейджистерс. То есть теперь наш компьютер будет записывать данные?

20:24 Причем не в 1 регистр, а сразу в несколько вот. Вот эти данные, а ПБ ЦЦ ДД это те полезные данные, которые компьютер у нас хочет записать в регистры нашего микроконтроллера. Давайте с помощью отладчика проверим, насколько хорошо эти данные записались.

20:53 Так еще раз передаем Реквест. Вот, а Абвццддд это дейт райт Реджистер. То есть мы видим, что эти данные записались в наш массив Дэйд Райт Рейнджер, запись произошла успешно. Это необходимо, когда, например, с помощью компьютера мы хотим, что то изменить в работе нашего микроконтроллера. Поменять какой то режим или какие то данные передать. Теперь передадим 6 Байт ФФ ее ДД ЦЦ ББ А. А. Т. 1 другое количество. Байт уже не 4, а 6 и проверим, насколько хорошо они передадутся, запишутся, точнее, в наш микроконтроллер.

22:07 Ну, примерно как то, так все это работает на данный момент, хотя здесь много чего можно улучшить. И опять же подчеркну, что это не. Готовое до конца библиотека для протокола Мабаста как бы некий скелет основы для дальнейшего улучшения этой библиотеки. Поэтому строго не судите здесь, мы просто рассмотрели структуру пакетов Макбаз. Прием передачи Реквестри Спонс и на данный момент пока что все работает. Если вам понравилось видео, ставьте лайк, подписывайтесь на канал и всего вам доброго пока пока.

Расшифровка сделана автоматически (Yandex SpeechKit) и может содержать ошибки в терминах.

🔗 STM32. Modbus Slave. Первое погружение в Modbus RTU. Пишем функции для пакетов Request/Responce.

Оставьте комментарий

Войти

Зарегистрироваться

Сбросить пароль

Пожалуйста, введите ваше имя пользователя или эл. адрес, вы получите письмо со ссылкой для сброса пароля.

Прокрутить вверх