-
- Задал ИИ написать программу для Modbus RTU так он UART с одним
стоп-битом без контроля чётности сконфигурировал. Ну раз так сам ИИ
решил, значит пусть так и будет. - Yft(31.03.2026 12:00)
- ИИ морду-то не набьют... LordN(3 знак., 31.03.2026 12:56)
- Пусть! Только если есть шанс, что придётся работать со сторонним оборудованием, сделай возможным выбор того, что "required" и "mandatory". Я в своём оборудовании сделал с чётностью, чтобы было 11 бит и один стоп, как в обязательных требованиях к поддержке. Nikolay_Po(177 знак., 31.03.2026 12:06, ссылка)
- А в документации на железку что? Я только один раз натыкался на необходимость аппаратного контроля четности: для каких-то китайских частотников. Вменяемые люди делают 8N1@9600, но позволяют задавать скорость повыше (потому как для тех же частотников 9600 - дикий ахтунг!). - Eddy_Em(31.03.2026 12:05)
- Модбасу интересно, чтоб контрольная сумма сошлась. Остальное не барское дело, что внизу и вверху происходит. - ucMike(30.03.2026 17:34)
- вот вариант с которым я работаю LordN(1 знак., 30.03.2026 17:15, картинка)
- Modbus бывает разный. Для случая Modbus-RTU всё именно так - 11
бит, но не всё строго соблюдают стандарт. Бывает полезно сделать
режим с двумя стопами на передачу и одним стопом на прием. - AlexG(30.03.2026 15:24)
- Это в нормальных МК и ПК само собой разумеется. Когда ты
настраиваешь UART на 2 стоп бита - это настройка ПЕРЕДАТЧИКА.
Приемник продолжает отслеживать 1 стоп бит. Так делают все ПК и
преобразователи USB-UART, с которыми я имел дело. Так делают МК
STM32. А вот МК GigaDevice (F103 и F303) используют настройку
стоп-бита и для приема тоже!!! il-2(270 знак., 30.03.2026 15:41)
- Вообще говоря, типично приемник UART использует те же самые параметры настройки, что и передатчик. Но приемник имеет возможность принимать только биты данных, игнорируя бит четности. При этом (в
случае нарушение четности или отсутствии второго стоп-бита) в
модуле UART обычно формируются признаки ошибки: ошибка четности
(ParityError) и ошибка приема символа (FrameError), но их
использовать в своей программе не обязательно. - reZident(30.03.2026 17:44)
- А вот для стоп-битов как раз это нетипично. Настройка стоп-битов -
только для передатчика. Для правильного приема достаточно 1 стоп
бита. Так реализовано в компьютерных UART и в STM32, и думаю что
много где еще. А вот китайцы в GD32 пошли своим путем и сделали не
как у нормальных людей. Лучше бы тупо скопировали - это у них
хорошо получается. Как только китайцы начинают выдумывать что-то
свое - получается хрень :-) - il-2(30.03.2026 18:20)
- Отнюдь! Состояние break в линии отслеживается приемником в т.ч. аккурат по оному стоп-биту. - reZident(30.03.2026 19:06)
- А вот для стоп-битов как раз это нетипично. Настройка стоп-битов -
только для передатчика. Для правильного приема достаточно 1 стоп
бита. Так реализовано в компьютерных UART и в STM32, и думаю что
много где еще. А вот китайцы в GD32 пошли своим путем и сделали не
как у нормальных людей. Лучше бы тупо скопировали - это у них
хорошо получается. Как только китайцы начинают выдумывать что-то
свое - получается хрень :-) - il-2(30.03.2026 18:20)
- Вообще говоря, типично приемник UART использует те же самые параметры настройки, что и передатчик. Но приемник имеет возможность принимать только биты данных, игнорируя бит четности. При этом (в
случае нарушение четности или отсутствии второго стоп-бита) в
модуле UART обычно формируются признаки ошибки: ошибка четности
(ParityError) и ошибка приема символа (FrameError), но их
использовать в своей программе не обязательно. - reZident(30.03.2026 17:44)
- Два стопа на передачу вообще полезно делать в любых устройствах на UART. - =AlexD=(30.03.2026 15:30)
- Да, RTU. Но чужого оборудования в системе вроде не предполагается. - Yft(30.03.2026 15:29)
- Это в нормальных МК и ПК само собой разумеется. Когда ты
настраиваешь UART на 2 стоп бита - это настройка ПЕРЕДАТЧИКА.
Приемник продолжает отслеживать 1 стоп бит. Так делают все ПК и
преобразователи USB-UART, с которыми я имел дело. Так делают МК
STM32. А вот МК GigaDevice (F103 и F303) используют настройку
стоп-бита и для приема тоже!!! il-2(270 знак., 30.03.2026 15:41)
- Рекомендация стандарта: 19200, 8N1/ т.е. без контроля четности,
один стоп бит. - Cкpипaч(30.03.2026 14:46)
- Я всегда 19200е1 делаю, если четности нет 2 стопа, чтоб тайминг фрейма сохранить. Там же время таймаута 1.75 кадра уже можно считать ошибкой. Но в последнее время всем плевать на это... - Balda(31.03.2026 12:30)
- я со всякими уровнемерами так и работаю - Лaгyнoв(30.03.2026 15:35)
- Два вопроса. 1) Какова погрешность уровнемера 2) каков
температурный коэффициент расширения бензина? - Kpoк(31.03.2026 12:42)
- Это вопросы к фирме Сенсор. Я с них готовые данные получаю. Там и
уровень в мм, и текущая температура, и плотность, и литры, и
килограммы и всё-всё-всё. В реестре как средство измерения. Лaгyнoв(1 знак., 31.03.2026 14:52, ссылка)
- Ага. Посмотрел. - Kpoк(31.03.2026 15:42)
- Это вопросы к фирме Сенсор. Я с них готовые данные получаю. Там и
уровень в мм, и текущая температура, и плотность, и литры, и
килограммы и всё-всё-всё. В реестре как средство измерения. Лaгyнoв(1 знак., 31.03.2026 14:52, ссылка)
- Два вопроса. 1) Какова погрешность уровнемера 2) каков
температурный коэффициент расширения бензина? - Kpoк(31.03.2026 12:42)
- Спасибо, значит мне неправильный документ попался. Yft(1 знак., 30.03.2026 15:22, картинка)
- Требование к длительности символа непременно в 11 бит (доп. стоп-бит при отсутствии бита четности) нужно лишь для обеспечения работы трансиверов RS485, которые работают без внешнего управления сигналом направления передачи. Такие, например, применяются в репитерах-"удлинителях линии" RS485 и/или в довольно старых устройствах. В подобных устройствах от любого перепада 1->0 (который по идее должен быть старт-битом и началом символа) на логическом входе DI трансивера reZident(395 знак., 30.03.2026 16:34)
- Я неправ. Привожу скриншот из Стандарта. NoParity - всего лишь
"допустимый". Только непонятно, схерали тратить дополнительный бит
в каждом байте на то, что вообще-то 16-битным CRC проверяется. Cкpипaч(1 знак., 30.03.2026 15:44, картинка)
- когда компьютеры были большими, а программы маленькими... Vit(1 знак., 31.03.2026 13:14, ссылка)
- Проверка на четность - желательно, но не обязательно. Чтобы не
сомневаться в интернет-домыслах, лучше прочитать спецификации Modbus Over Serial Line и Modbus Serial Line Protocol and Implementation Guide V1.02 непосредственно от "законодателя мод" по ссылке. reZident(2 знак., 30.03.2026 14:42, ссылка, картинка)
- Самое интересное осталось под катом :-) il-2(1 знак., 30.03.2026 15:29, картинка)
- По-моему, без разницы. Если не ошибаюсь, все эти контроли четности - канальный уровень (3-й модели OSI), а сам Modbus RTU или ASCII - прикладной уровень (7-й) - bodis(30.03.2026 14:31)
- Задал ИИ написать программу для Modbus RTU так он UART с одним
стоп-битом без контроля чётности сконфигурировал. Ну раз так сам ИИ
решил, значит пусть так и будет. - Yft(31.03.2026 12:00)