Перейти к содержанию
    

для любителей растяжек НИКОГДА не работавших с длинными реальными линиями.
А что такое длинная реальная линия? с линией в 1200 метров не работал..... но несколько сотен метров - был опыт. Ни чего в линию не дули, ни до ни после передачи... линия была на растяжках.

 

За такую "подтяжку" криворуким дизайнерам надо отрывать гениталии. Она КАТОСТРОФИЧЕСКИ гробит дальность передачи.
Так в даташитах на драйвера эти растяжки в схемах как ..... Typical Half-Duplex RS-485 Network.

 

zltigo, а вы как с 485-ым работаете? вообще без растяжек? Иногда разработчики забывали растяжку на линии сделать... так, когда линия свободна - все на линии непрерывно ловят мусор... непрерывно по уарту а процессор идёт мусор и связи толком нет.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zltigo, а вы как с 485-ым работаете? вообще без растяжек?

Разумеется без.

Предпочтение отдается, как уже писал, Failsafe приемникам (разумеется тем, которые True), но это для уменьшения помех, а не для того что бы мечтать, что помех не будет.

Растяжки опциональные в железе предусмотрены, но ТОЛЬКО на случай подключений чужого железа которое делали убогие программисты не поддерживающие активное состояние линии перед началом передачи. Увы, сие не редкость :( и Вы тому живое свидетельство. Для систем в котором используется гарантрованно свое оборудование на своем протоколе - нет и этой опции за полной ненадобностью.

Иногда разработчики забывали растяжку на линии сделать... так, когда линия свободна - все на линии непрерывно ловят мусор... непрерывно по уарту а процессор идёт мусор и связи толком нет.

Все это совершенно нормально БЕСПРОБЛЕМНО фильтруется. Для фильтрации, например, в случае MODBUS и заложены те самые 1,5 и 3,5 интервалы АКТИВНОГО состояния, но без передачи, и само собой обработка ошибок собственно UART.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все это совершенно нормально БЕСПРОБЛЕМНО фильтруется. Для фильтрации, например, в случае MODBUS и заложены те самые 1,5 и 3,5 интервалы АКТИВНОГО состояния, но без передачи, и само собой обработка ошибок собственно UART.
не ради холевара.... а ради прокачки скила.... как допустим, ПК БЕСПРОБЛЕМНО делает интервал активного состояния без передачи данных? как в покупных преобразователях усб-485 или 232-485 ПК делает активные паузы? это раз

 

2)но понятно.... что перед отправкой пакета сделать паузу, то вероятность ошибок будет меньше.... линяя будет "нешумная" и слейв получит пакет нормально. Но если линяя брошена... растяжек нет... то в УАРТ постоянно сыплет мусор. Понятно, что слейв считает црц и вероятность что получился из мусора годный пакет бесконечно мала.... Слейв в мусоре годного пакета не найдет. Но мусор то есть... и слейву нужно этот мусор обрабатывать... т.е. слейв непрерывно копается в мусоре и тратит свои ресурсы. Кто-то скажет - что эти ресурсы ничтожно малы.... но на каком нить АтТини не так уж и малы. с растяжками мусора нет.... может и могут быть помехи.... но они очень редки

 

в случае MODBUS и заложены те самые 1,5 и 3,5 интервалы АКТИВНОГО состояния
эээээ.... в MODBUS вроде нет ни каких интервалов активного состояния. там есть интервалы тишины.

 

 

ps я всегда в своих устройствах делаю счетчик пакетов с битыми црц, и счетчик пакетов адресованных "мне". всегда интересно.... на сколько качественная связь.... сколько пакетов потеряно? каковы помехи? Приятно увидеть через год, что счетчик битых либо не изменился, либо инкрементировался на 1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Увы, для 485 пауза есть неизбежное зло.

Величина паузы зависит от способа выделения фрейма и при MODBUS самый плохой вариант c точки зрения величины пауз -

1,5 байта в начале и 3,5 байта в конце.

Про 1,5 байта в начале не понял.

Там ведь и в начале и в конце 3,5 байта, а от 1,5 до 3,5 - это признак битого пакета.

 

 

ээээ.... в MODBUS вроде нет ни каких интервалов активного состояния. там есть интервалы тишины.
Да именно тишины, а как вы её должны добиться в стандарте ИМХО не сказано. Единственно возможный способ гарантированно этого добиться - включить шину в активное состояние.

А что касается настоящих usb преобразователей в MODBUS-RTU то такие, я думаю есть в природе и в них наверняка стоит контроллер.

 

Кстати про FAILSAFE - большая их часть нифига не FAILSAFE (т.е. без смещённого порога).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Единственно возможный способ гарантированно этого добиться - включить шину в активное состояние.
не единственный. Я уже писал выше про растяжки.

 

Кстати, про загрузку процессора - если фильтровать по адресу слейва и коду функции то CRC считать для мусора и "не твоих запросов" фактически и не придётся.
Я сначала принимаю весь пакет, потом проверяю црц, только потом принимаю решение что пакет без ошибок и обрабатываю его. Проверять адрес без принятия всего пакета не совсем правильно.... но хотя кому как удобнее.... но тем не менее... допустим считаем црц после каждого приема байта....

 

1)пришел байт мусора

2)посчитал црц для 1 байта (табличным способом)

3)goto 1

сработал таймер 3,5, если црц == 0, то пакет годный, смотрим адрес.

 

в таком алгоритме придётся для мусора считать црц.... если не считать црц, а фильтровать по адресу...

1)пришел байт мусора

2)проверили адрес

3)goto 1

 

где профит? 2-ой шаг - или фильтрация, или подсчет црц всеравно тратить время, все равно вход в прерывание, выход из прерывания....

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не ради холевара.... а ради прокачки скила.... как допустим, ПК БЕСПРОБЛЕМНО делает интервал активного состояния без передачи данных? как в покупных преобразователях усб-485 или 232-485 ПК делает активные паузы? это раз

Мне безразлично кто и что НЕ делает и по какой причине. Я говорю о том, как НАДО делать и как делаю сам.

но понятно.... что перед отправкой пакета сделать паузу, то вероятность ошибок будет меньше.... линяя будет "нешумная" и слейв получит пакет нормально. Но если линяя брошена... растяжек нет... то в УАРТ постоянно сыплет мусор.

Ну и пусть сыпет. Всегда возможна, пусть даже и нештатая ситуация, когда посыпется мусор и с такой ситуацией надо уметь БЕСПРОБЛЕМНО справляться.

Понятно, что слейв считает црц и вероятность что получился из мусора годный пакет бесконечно мала.... Слейв в мусоре годного пакета не найдет. Но мусор то есть... и слейву нужно этот мусор обрабатывать... т.е. слейв непрерывно копается в мусоре и тратит свои ресурсы. Кто-то скажет - что эти ресурсы ничтожно малы.... но на каком нить АтТини не так уж и малы. с растяжками мусора нет.... может и могут быть помехи.... но они очень редки

Тем не менее тот же MODBUS начинался тогда, когда помянутая Вами тини была-бы более, чем крута на фоне чего либо типа 8080 мегагерцового. Тратить ресурсы на самом деле не приходится особо, поскольку первоначальный отсев мусора идет уже по ошибкам фиксируемым UART, потом по тем тому самому 1,5 интервалу. В случае MODBUS контроль адреса и так далее....

эээээ.... в MODBUS вроде нет ни каких интервалов активного состояния. там есть интервалы тишины.

Которые гарантированно обеспечиваются активизацией передатчика а не навешиванием сопливых растяжек.

 

 

Про 1,5 байта в начале не понял.

Там ведь и в начале и в конце 3,5 байта, а от 1,5 до 3,5 - это признак битого пакета.

Вот в начале и делается 1,5 байтовая пауза, кторая

1) Обепечивает признак битого пакета для любого мусора возможно идущего из линии.

2) Обеспечивает гарантрованный стоп бит и соответственно захват байтовой синхронизации UART-ом.

Для других протоколов может быть достаточно однобайтовой паузы только для синхронизации.

Кстати про FAILSAFE - большая их часть нифига не FAILSAFE (т.е. без смещённого порога).

Ну не большая, но много именно с хлипенькими "растяжками" внутри.

Причем это в основном левая китайская перемаркировка. Отличаются от настоящих легко по поведению при замыкании линии - растяжки сразу идут лесом в вылезает истинное личико :).

По этой причине я и писал ранее TRUE Falsafe.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не единственный. Я уже писал выше про растяжки.
Спорить с вами бесполезно.

Вы зациклились на своём решении и не видите его недостатков.

Поверьте что никогда не поздно учиться.

Если не доверяете мне с непрерывным опытом разработки КИПиА и интеграции чуть более 16 лет - я не в обиде.

Но не прислушиваться к корифеям типа zltigo по меньшей мере самонадеянно.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не единственный. Я уже писал выше про растяжки.

Гарантированный - единственный. Он же, в отличие от растяжек, работающий ВСЕГДА, а не только на короткой линии и при низком уровне помех.

Проверять адрес без принятия всего пакета не совсем правильно....

Это абсолютно правильно, ибо если адрес не ваш, то уже пофиг и пакет и его целостность - пакет уже игнорируется и становимся в ожидание следующего фрейма без лишних разбирательств.

1)пришел байт мусора

2)посчитал црц для 1 байта (табличным способом)

3)goto 1

сработал таймер 3,5, если црц == 0, то пакет годный, смотрим адрес.

Таймер 1,5 как видно из этого супер алгоритма, Вам оказался не по уму :(

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне безразлично кто и что НЕ делает и по какой причине. Я говорю о том, как НАДО делать и как делаю сам.
К словам цепляетесь... перефразирую вопрос: Как ВЫ делаете активную паузу, если мастер ПК?

 

Спорить с вами бесполезно.

Вы зациклились на своём решении и не видите его недостатков.

Поверьте что никогда не поздно учиться.

я не пытаюсь вам доказать свою правду.... я хочу учиться... у меня тоже не малый опыт... (с 2000 года, теже 16+, наверно мы ровесники ))) )

Я просто первый раз слышу об активных паузах. всегда линия 485го растягивалась. без растяжек даже на столе могло не работать. я не работал на линиях 1000 метров.... может вы и корифей типа zltigo речь ведёте о 2-3 км.... или десятки км.... тут я пасс.

Но если это до 500м.... тут у меня есть опыт теже, 16 лет.... и растяжки работают на ура. приимущества: 1. не надо заморачиваться с активными паузами, 2 не надо переваривать мусор из-за его отсутствия (а что его нет... на практике проверенно, а не теоретические выводы).

 

Наверно я начну со следующей разработки делать активные паузы... просто я хочу понять - ради чего? научите меня правильно готовить 485? Пока я преимуществ в активной паузе не вижу.

 

ps, да, кстате.... 2demiurg_spb У вас не было задачи с десктопного ПК под виндой или линуксом по MODBUS-у работать? Или промышленная ЭВМ должна быть мастером в MODBUS-е? Как вы добиваетесь в таких случаях активной паузы? (опять же, я не хочу вам навязывать своё решение. я своё мнение высказал, вам решать. я хочу узнать как вы технически решаете подобные задачи? Ну чтоб научиться... ведь ни когда не позно ;) )

 

Это абсолютно правильно, ибо если адрес не ваш, то уже пофиг и пакет и его целостность - пакет уже игнорируется и становимся в ожидание следующего фрейма без лишних разбирательств.
я считаю пакет с битым црц. поэтому мне не пофиг.

 

Таймер 1,5 как видно из этого супер алгоритма
я таймера упустил для краткости.... да там в пошаговом алгоритме и 3.5 нет перезапуска. много писать.... я просто хотел показать суть.... что и там и там нужно "работать". В одном случае считать црц, в другом проверять адрес. ..... и там и там будет вход-выход из прерывания и будет перезапуск таймеров.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К словам цепляетесь... перефразирую вопрос: Как ВЫ делаете активную паузу, если мастер ПК?

Если под ПК Вы очевидно понимаете Windows/Linuх и иже с ними, то ни мастеров ни слейвов MODBUS под такой "ПК" не бывает. Вот такая печальная правда. Под голый ПК, ака DOS - без проблем. Так же без проблем не уродливый MODBUS-RTU, а протоколы, например, на байтстаффинге. В этом случае достаточно 9-10 битовой паузы для захвата байтовой синхронизации и для этого годится посылка 0xFF.

То, что пытаются делать на "ПК" без аппаратной поддержки, это что-то похожее на MODBUS и только в некоторых условиях и с не всяким оборудованием работоспособное. Да, типичный способ ЗАСТАВИТЬ хоть в каких-то условиях работать - прицепить растяжки. Цену такого "решения", если не понимаете, поймете решив задачку в конце поста.

Соответственно при работе с "ПК" я использую свои конверторы протоколов на Ethernet.

Они отрабатывают все паузы и протокольные таймауты, включая таймауты неответа слейвов.

Но если это до 500м.... тут у меня есть опыт теже, 16 лет.... и растяжки работают на ура.

Займемся арифметикой.

Имеем витую пару 100 Ом волнового и соответственно 100 омный терминатор.

Вопрос первый, какое сопротивление должны иметь волшебные растяжки, дабы обеспечить гарантированную паузу, ну, например, при 3.3V питании и стандартных 200mV порогах срабатывания приемника?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

когда нет драйвера на линии там лог "1". Линяя RS485 должна быть подтянута (А к +V, B k GND).

...

Забудьте про всякие продувки..... слейв как только принял пакет и обработал без всяких пауз и продувок может отвечать.

Вы не правы. Никто не должен там ничего никому держать.

Пример хорошего протокола для RS485- тот же Модбас: пауза в Модбасе РТУ не просто так сделана в начале пакета, и тайминг там не просто так был придуман.

Случаи- они разные бывают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2juvf:

Я стараюсь на комп не заводить MODBUS-RTU - он используется в основном для связи модулей расширения с ПЛК.

Если и завожу по необходимости, то никак не формирую активное состояние в паузе - и говорю клиенту, что так, мол, и так, работать как-то будет...

Если хотите чтобы было совсем хорошо надо раскошелится. Многие не хотят...

 

А сейчас парсер реализован так (сначала проверка адреса, а уже потом CRC):

static void modbus_serial_pdu_parser(modbus_handle_t* mb)
{
modbus_buffer_goto_idx(mb, 0);

mb->pdu.current.len      = rs485_get_rx_qty(mb->rs);
mb->pdu.current.address  = modbus_buffer_get_byte(mb);  // address = buffer[0]
mb->pdu.current.function = modbus_buffer_get_byte(mb);  // function = buffer[1]

dbg_printf("qlen:%d\taddress:%d\n", (int)mb->pdu.current.len, (int)mb->pdu.current.address);

if (    (mb->pdu.current.address==MB_BROADCAST_ADDRESS)
     || (mb->pdu.current.address==mb->pdu.wanted.address) )
{
	if (modbus_buffer_check_crc(mb))
	{
		if (modbus_serial_is_master(mb))
			modbus_serial_stop(mb),
			modbus_master_ack_parser(mb);
		else
			modbus_slave_function_parser(mb);
	}
	else
	{
		dbg_printf("bad_crc\n");

		#if MB_SLAVE_STATISTICS_ENABLE
			mb->stat.comm_errors++;
		#endif

		modbus_serial_default_state(mb); // idle or stop
	}
}
else
	modbus_serial_default_state(mb); // idle or stop

#if MB_SLAVE_STATISTICS_ENABLE
	mb->stat.total_messages++;
#endif
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Под голый ПК, ака DOS - без проблем.
Поделитесь опытом.

Цену такого "решения", если не понимаете, поймете решив задачку в конце поста.
И какова? На практике это работает. Об этом пишут в даташитах. Погуглил инет на эту тему - кругом рекомендации про растяжки.

Имеем витую пару 100 Ом волнового и соответственно 100 омный терминатор.

Вопрос первый, какое сопротивление должны иметь волшебные растяжки, дабы обеспечить гарантированную паузу

какую паузу? растяжки не обеспечат вам гарантированной паузы. растяжки обеспечат вам тишину в линии без дайвера (ну или шум сведут к минимуму).

 

и говорю клиенту, что так, мол, и так, работать как-то будет...
А мы делаем. И работает, не хоть как-то, а работает.

 

Пример хорошего протокола для RS485- тот же Модбас: пауза в Модбасе РТУ не просто так сделана в начале пакета
нет там пауз в НАЧАЛЕ пакета. там пакеты разделены 3.5 символьными паузами тишины. Чтоб тишину обеспечить, достаточно всем помолчать. А если в линии шум... так нужно бороться с шумом. У нас в линиях нет шума. Зачем туда что-то дуть активно?

 

 

ps Я могу усомниться в своих знаниях (а я и усомнился... и погуглил... да нет... ставят растяжки), я могу не знать как в ДОС врубить активную паузу, я могу встать осцыолом на линию и посмотреть там шумы... и если их сейчас нет, не значит что их вообще нет.... Я могу во что-то поверить, например в ЛММ. Но верить в то, что растяжки не обеспечат тишину - не получается. У меня на каждом устройстве, и на слейве и на мастере стоит счетчик битых пакетов. если пройдет шум.... и хоть какой-то уарт примет хотя бы 1 байт ложный в тишины - счетчик битых пакетов увеличиться. если ложный байт будет перед нормальным пакетом или сразу после него - счетчик битых пакетов увеличиться. По этим счетчикам можно судить о шумах на линии... и вообще о работе всего модбаса на линии. годами в режиме 7/24 работают устройства... и эти счетчики единично инкриминируются. Т.е. эти "сопливые" растяжки не такие уж и сопливые. Тишину в линии они обеспечивают. А что ещё от них нужно? Зато нет гемора с активными паузами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделитесь опытом.

Решите задачу о котрой писал, вот и будет Вам первый шаг к пониманию и опыту. Если будете как заведенный попугай долдонить про каке-то "даташиты из гугла с растяжками", то так и останетесь попугаем повторяющим то, что не понимаете.

Выбор за Вами.

Т.е. эти "сопливые" растяжки не такие уж и сопливые.

Если не сопливые, то тогда это вызывает проблему с дальностью работы в полный рост.

годами в режиме 7/24 работают устройства...

Забыли добавить "у меня". Типичное радиолюбительство описывается одной фразой - "ничего не знаю у меня все работает" :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

juvf , Вы хотели что-то спросить, или просто еще раз подтвердить самому себе верность своего курса?

Вы очень уверены в том что делаете, в чем тогда вообще смысл дискуссии, что Вы ждете от оппонентов?

 

Ваш путь ошибочен. Лично Вам он годится, только и всего.

 

Как говорил один классик "Езжайте! Да, когда свернете налево, ну вы-то направо, там проезд запрещен, обрыв. Но вам туда можно."

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...