-
- Подтяжки нужны, если штаны не держатся! - SciFi(08.10.2026 14:31)
- Подтяжки нужны тем, у кого прогрессирующая "зеркальная" болезнь. Для обычных людей и поясного ремня достаточно :-P - reZident(08.10.2026 14:33)
- А как это помогает обеспечить определенное состояние линии при
внешних помехах? - Anvar(08.10.2026 14:29)
- Включенный передатчик, передающий "определенное состояние линии"
сильнее погасит внешние помехи, чем какая-то растяжка, которую в
принципе нельзя сделать сильнее передатчика. - VLLV(08.10.2026 15:55)
- Беда в том, что в то время, когда передатчик выключен, приемник по
помехе может начать прием фрейма, и, соответственно, принимать
совсем не то, что передает передатчик. - 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)
- Включенный передатчик, передающий "определенное состояние линии"
сильнее погасит внешние помехи, чем какая-то растяжка, которую в
принципе нельзя сделать сильнее передатчика. - VLLV(08.10.2026 15:55)
- Как вы планируете обнаруживать начало/конец пакета? - AlexBi(08.10.2026 14:24)
- А в чем проблема? - VLLV(08.10.2026 15:57)
- Будет сплошной поток данных из мусора и полезной информации.
Выделение полезной информации в таком потоке это не так просто. - AlexBi(08.10.2026 20:55)
- А ты не выключай передатчик сразу, а подожди, чтобы приёмник успел
понять, что кадр принят. - Nikolay_Po(08.10.2026 22:09)
- А как приемник поймет, что кадр начат? - AlexBi(09.10.2026 08:37)
- В Modbus RTU оговаривается пауза между символами 1,5 символа это
(1+8+1)*1,5 ~ 15 бит . После чего любой приемник фиксирует ошибку и
начинает ожидать паузы 3,5 символа для начала приема следующего
пакета. Т.е. пауза 3,5 это сигнал для обработки пакета и начала
приема нового пакета Во время включенного передатчика помеха
ослабляется. Для других протоколов RS485 это не работает - Anvar(09.10.2026 09:43)
- Т.е. исходное сообщение про достаточность паузы перед передачей в 1байт+1бит все же слишком оптимистично. - AlexBi(09.10.2026 11:05)
- Достаточно подержать, перед началом кадра, паузу не менее 1.5
символа при включённом передатчике. - Nikolay_Po(09.10.2026 09:16)
- Какая при этом минимальная пауза между приемом последнего символа
шума и первого символа полезной информации может быть? AlexBi(135 знак., 09.10.2026 10:56, ссылка)
- Ну, ровно символ плюс один бит - будет слишком амбициозно и не очень надёжно - лучше, всё же, 1.5 символа - чтобы с учётом несовпадения скоростей, дискретности таймера и латентности прерываний, надёжно определять разрыв в непрерывной последовательности байт одного кадра. Nikolay_Po(314 знак., 09.10.2026 11:09)
- Какая при этом минимальная пауза между приемом последнего символа
шума и первого символа полезной информации может быть? AlexBi(135 знак., 09.10.2026 10:56, ссылка)
- В Modbus RTU оговаривается пауза между символами 1,5 символа это
(1+8+1)*1,5 ~ 15 бит . После чего любой приемник фиксирует ошибку и
начинает ожидать паузы 3,5 символа для начала приема следующего
пакета. Т.е. пауза 3,5 это сигнал для обработки пакета и начала
приема нового пакета Во время включенного передатчика помеха
ослабляется. Для других протоколов RS485 это не работает - Anvar(09.10.2026 09:43)
- А как приемник поймет, что кадр начат? - AlexBi(09.10.2026 08:37)
- А ты не выключай передатчик сразу, а подожди, чтобы приёмник успел
понять, что кадр принят. - Nikolay_Po(08.10.2026 22:09)
- Будет сплошной поток данных из мусора и полезной информации.
Выделение полезной информации в таком потоке это не так просто. - AlexBi(08.10.2026 20:55)
- в самом распространенном протоколе управления на АЗС начало пакета
- 0х7F. В конце пакета перед CRC идут два байта 0х03. В описании
протокола так и сказано, что 0х7F - для переключения направления
передачи - Лaгyнoв(08.10.2026 14:54)
- В составе пакета 0x7F быть не может? В CRC? Они там как-то
заменяются? - AlexBi(08.10.2026 14:57)
- Нет, не может быть. А CRC может идти только после двух 0х03 подряд. Которых в теле пакета нет, потому что в пакете только ASCII - Лaгyнoв(08.10.2026 16:39)
- Протокол обмена данными между системой управления и топливораздаточной колонкой: "Каждый байт пакета ответа между стартовым байтом и ETX дополняется комплиментарным байтом (поразрядное инвертирование), а CheckSum вычисляется как ИСКЛЮЧАЮЩЕЕ ИЛИ всех нормальных байт и одного ETX, без учета стартового байта, а также логическое ИЛИ с 0x40." reZident(2 знак., 08.10.2026 15:05, ссылка, картинка)
- В составе пакета 0x7F быть не может? В CRC? Они там как-то
заменяются? - AlexBi(08.10.2026 14:57)
- По желанию. Как приспичило передавать, подать питание на передатчик
и выдержать указанную аффтором паузу. - Kpoк(08.10.2026 14:32)
- Эк вас прихватило! Еще и передатчик на время пауз обесточивать? О.о - reZident(08.10.2026 14:34)
- Это не меня, это собеседников. Я всю жизнь работал на 9600 не
дальше 50 метров, слыхом не слыхивал о таких проблемах. - Kpoк(08.10.2026 17:02)
- А в сообщении выше под именем Крок кто написал: "Как приспичило передавать, подать питание на
передатчик"? - reZident(08.10.2026 17:08)
- Это он написал для собеседника, не знающего, когда байт в линию полетит. - Kpoк(09.10.2026 10:17)
- А в сообщении выше под именем Крок кто написал: "Как приспичило передавать, подать питание на
передатчик"? - reZident(08.10.2026 17:08)
- Это не меня, это собеседников. Я всю жизнь работал на 9600 не
дальше 50 метров, слыхом не слыхивал о таких проблемах. - Kpoк(08.10.2026 17:02)
- Эк вас прихватило! Еще и передатчик на время пауз обесточивать? О.о - reZident(08.10.2026 14:34)
- А в чем проблема? - VLLV(08.10.2026 15:57)
- Если строго по стандарту Modbus, то одного байта мало. Нужна пауза
от включения передатчика и до начала передачи фрейма в 3,5 символа. - reZident(08.10.2026 14:15)
- Мои устройства активно держат паузу перед передачей своего кадра
Модбас. То есть, как только устройство поняло, что обращение к нему
и оно требует ответа, то после обнаружения окончания кадра запроса,
устройство занимает линию и держит. Nikolay_Po(268 знак., 08.10.2026 18:20)
- Так и должно быть. Передача фрейма должна завершаться не немедленным отключением передатчика, а паузой, в течение которой передатчик ничего не передает, а просто удерживает линию. Для Modbus ASCII достаточно паузы длительностью 1,5 символа, для Modbus RTU не менее 3,5 символов. Однако эти заморочки обычно не востребованы на коротких линиях, в которых есть растяжка линии и нет отраженки. - reZident(08.10.2026 20:45)
- Мои устройства активно держат паузу перед передачей своего кадра
Модбас. То есть, как только устройство поняло, что обращение к нему
и оно требует ответа, то после обнаружения окончания кадра запроса,
устройство занимает линию и держит. Nikolay_Po(268 знак., 08.10.2026 18:20)
- в принципе да - Лaгyнoв(08.10.2026 14:10)
- Подтяжки нужны, если штаны не держатся! - SciFi(08.10.2026 14:31)