-
- Беда в том, что в то время, когда передатчик выключен, приемник по
помехе может начать прием фрейма, и, соответственно, принимать
совсем не то, что передает передатчик. - Andrew_Q(08.10.2026 16:29)
- Перечитайте то, что я написал выше, про заблаговременное включение
передатчика. Да, приемник может начать прием, но он закончит прием до истечения интервала, до передачи первого байта
пакета, и потом первый штатный байт пакета примется правильно. Ну а
победить байты помехи помогут современные протоколы с
байт-стаффингом. - VLLV(08.10.2026 18:19)
- У вас просто ограниченный опыт. RS485 != Modbus RTU. Даже если
Modbus, это может быть Modbus ASCII. Есть и другие варианты.
Программисты, которые умеют программировать, программируют
поддержку разных вариантов - Anvar(08.10.2026 18:58)
- Наш товаришь чык-чырык не о том - он говорит должна быть пауза
такова чтобы УАРТ зацепился за реальный стоп-бит после шума в
момент переключения направления - через время байт+1бит. Это
гарантирует что не будет пропуска первого байта, и протокол тут не
при чем. - POV(08.10.2026 19:08)
- Я же говорю, ограниченный опыт мешает отвязать уровень физический -
RS485 от прикладного - Modbus. В Modbus ASCII нет жесткого
ограничения по времени между символами пакета. Если он принял хрень
от помехи он ваш пакет будет принимать как продолжение. И если у
вас помеха генерирует символ ":" то вы никогда ничего не сможете
передать. А у нас такое было в лаборатории в В.Салде где куча печек
с нагревателями управляемыми ШИМ. - Anvar(09.10.2026 07:11)
- Я в самом деле мало работал с Модбасом, но это мало что меняет. "И если у вас помеха генерирует символ ":" то
..." то может программисту стоит подумать о том, чтобы сбросить
счетчик байтов после приема очередного, правильного символа ":" в
начале пакета ? Вот с rtu да, действительно не просто. Но даже там
есть возможности извратиться - например, складывать все принятые
байты в циклический буфер заведомо большего размера и, скользя по
нему окном длиной VLLV(116 знак., 09.10.2026 10:03)
- Длина пакета в модбасе заранее не известна, поэтому надо перебирать все варианты длины пакета (от 6 до 255 байт, вроде бы), и делать это по случаю приема каждого байта. Так возникает потребность в сотнях МГц тактовой ядра в ситуации, когда мог бы справиться чип с долями МГц тактовой. - AlexBi(09.10.2026 11:01)
- Я еще вам наброшу. В Модбас ASCCII используется более простая 8-битная КС. Но даже CRC16 при плохой "физике" дает пропуски. Поэтому "лечить" плохой Layer1 (RS 485) Layer-ом7 (Модбас) это опасный путь - Anvar(09.10.2026 10:17)
- Я в самом деле мало работал с Модбасом, но это мало что меняет. "И если у вас помеха генерирует символ ":" то
..." то может программисту стоит подумать о том, чтобы сбросить
счетчик байтов после приема очередного, правильного символа ":" в
начале пакета ? Вот с rtu да, действительно не просто. Но даже там
есть возможности извратиться - например, складывать все принятые
байты в циклический буфер заведомо большего размера и, скользя по
нему окном длиной VLLV(116 знак., 09.10.2026 10:03)
- Для Modbus ASCII этот прием может сработать, а вот Modbus RTU этого
не простит. Потому, что помеха, (возможно) возникшая при включении
передатчика и вызвавшая старт-бит, будет началом приема символа,
который в свою очередь означает начало передачи фрейма. А пауза
длиной в следующий байт будет лишь его (фрейма) продолжением.
Реальное начало передачи будет вновь продолжением фрейма, вплоть до
его окончания и паузы в передаче определенной протоколом как
конец/начало фрейма reZident(429 знак., 08.10.2026 20:39)
- ПМСМ, 3.5 символа интервал между кадрами нужен, чтобы приёмники
успевали принимать и обрабатывать. Ну и да, по стандарту, только
кадр, после которого фиксируется пауза 3.5 символа, считается
действительным. Nikolay_Po(258 знак., 09.10.2026 09:20)
- При межсимвольной паузе 1,5 символа - да, пакет должен считаться
"битым", но это же не конец фрейма - окончание-то фрейма считается
по паузе 3,5 символа! Так что нифига это не 100% решение - держать
линию перед началом передачи длительностью лишь 1 или 1,5 символа.
Подходит для некоторых, но не для всех протоколов связи. P.S. см.
граф состояний из стандарта Modbus. reZident(1 знак., 09.10.2026 09:57, картинка)
- Как я любил такие картинки, когда занимался протоколами! Только эти
картинки не учитывают современные возможности контроллеров - сейчас
за 2 бакса можно организовать прием некрофильного rtu с помощью
ADC, DMA, и CortexM4 без подтяжек вообще, абсолютно без привязки к
подобным картинкам. - VLLV(09.10.2026 10:13)
- Вопрос не в возможностях, а в реализации конкретного протокола связи. Даже, если ваш конкретный прибор умеет извлекать полезную информацию из шумоподобных сигналов, то другой прибор (другого производителя) работает сугубо по стандарту и ему пофиг на супервозможности вашего прибора. ;-) Вспоминается случай. reZident(1126 знак., 09.10.2026 10:36)
- Вообще странно сегодня рассуждать про уровни RS 485. Я уже лет 20
назад не встречал приемопередатчиков RS 485 без встроенного сдвига.
Это актуально только когда используют что-то нестандартное, типа
оптопар или древних цифровых дифференциальных приемников и
передатчиков. А пара резисторов совершенно не мешает - Anvar(09.10.2026 10:21)
- Речь не о том, мешает она или не мешает, а о том, что 1)сложно
выбрать резисторы для всех условий применения и 2) они все равно не
решают задачу подавления помех, т.к. заведомо слабее включенного
передатчика. - VLLV(09.10.2026 10:35)
- А они, ИМХО, не подавляют помеху, а сдвигают ее в область
определенного состояния - Anvar(09.10.2026 11:10)
- Ухудшая при этом противоположное состояние. - VLLV(09.10.2026 12:58)
- По-моему, роль подтяжки (если уж догадались включать передатчик заранее и держать достаточную паузу с чистой линией перед передачей) - снизить количество шума в линии - чтобы не отвлекать контроллеры устройств на попытки приёма шума. В остальном, подтяжки не нужны и в моих проектах не использовались. - Nikolay_Po(09.10.2026 11:14)
- А они, ИМХО, не подавляют помеху, а сдвигают ее в область
определенного состояния - Anvar(09.10.2026 11:10)
- Речь не о том, мешает она или не мешает, а о том, что 1)сложно
выбрать резисторы для всех условий применения и 2) они все равно не
решают задачу подавления помех, т.к. заведомо слабее включенного
передатчика. - VLLV(09.10.2026 10:35)
- Типа оптимального SDR-приёмника? - Nikolay_Po(09.10.2026 10:15)
- Ну да. Используем PLC по такому принципу, а уж там помех больше, чем того сигнала. - VLLV(09.10.2026 10:27, +1)
- Как я любил такие картинки, когда занимался протоколами! Только эти
картинки не учитывают современные возможности контроллеров - сейчас
за 2 бакса можно организовать прием некрофильного rtu с помощью
ADC, DMA, и CortexM4 без подтяжек вообще, абсолютно без привязки к
подобным картинкам. - VLLV(09.10.2026 10:13)
- При межсимвольной паузе 1,5 символа - да, пакет должен считаться
"битым", но это же не конец фрейма - окончание-то фрейма считается
по паузе 3,5 символа! Так что нифига это не 100% решение - держать
линию перед началом передачи длительностью лишь 1 или 1,5 символа.
Подходит для некоторых, но не для всех протоколов связи. P.S. см.
граф состояний из стандарта Modbus. reZident(1 знак., 09.10.2026 09:57, картинка)
- Какие вы все умные, прям тащусь. А у меня так: чёт такое надо сделать, чтобы работало (это вариант №1). "У нас строгие требования, и вам не стоит с ними спорить" вариант №2. По варианту нумер два платят стабильно, но скучно. По варианту нумбер один есть варианты. Бapбoc(55 знак., 08.10.2026 22:21)
- ПМСМ, 3.5 символа интервал между кадрами нужен, чтобы приёмники
успевали принимать и обрабатывать. Ну и да, по стандарту, только
кадр, после которого фиксируется пауза 3.5 символа, считается
действительным. Nikolay_Po(258 знак., 09.10.2026 09:20)
- Я же говорю, ограниченный опыт мешает отвязать уровень физический -
RS485 от прикладного - Modbus. В Modbus ASCII нет жесткого
ограничения по времени между символами пакета. Если он принял хрень
от помехи он ваш пакет будет принимать как продолжение. И если у
вас помеха генерирует символ ":" то вы никогда ничего не сможете
передать. А у нас такое было в лаборатории в В.Салде где куча печек
с нагревателями управляемыми ШИМ. - Anvar(09.10.2026 07:11)
- Наш товаришь чык-чырык не о том - он говорит должна быть пауза
такова чтобы УАРТ зацепился за реальный стоп-бит после шума в
момент переключения направления - через время байт+1бит. Это
гарантирует что не будет пропуска первого байта, и протокол тут не
при чем. - POV(08.10.2026 19:08)
- У вас просто ограниченный опыт. RS485 != Modbus RTU. Даже если
Modbus, это может быть Modbus ASCII. Есть и другие варианты.
Программисты, которые умеют программировать, программируют
поддержку разных вариантов - Anvar(08.10.2026 18:58)
- Перечитайте то, что я написал выше, про заблаговременное включение
передатчика. Да, приемник может начать прием, но он закончит прием до истечения интервала, до передачи первого байта
пакета, и потом первый штатный байт пакета примется правильно. Ну а
победить байты помехи помогут современные протоколы с
байт-стаффингом. - VLLV(08.10.2026 18:19)
- Беда в том, что в то время, когда передатчик выключен, приемник по
помехе может начать прием фрейма, и, соответственно, принимать
совсем не то, что передает передатчик. - Andrew_Q(08.10.2026 16:29)