Ruslan1 17 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба Я начинающий электронщик. И поскольку опыта нет, стараюсь максимально придерживаться рекомендациям DS-тов. Есть производители мс которые советуют ставить эти самые растяжки? Вам сначала следует определиться, с какой целью Вы их ставите. От этого зависят номиналы и сама необходимость установки: 1. Повышение помехоустойчивости передачи данных - ставить бесполезно 2. Отсутствие ложных переключений драйвера приемника при отсутствии активного передатчика на линии - полезно. 3. предопределение состояние линии при выключенном передатчике для удобства обслуживания - полезно. Хорошие драйверы типа SN65LBC184 уже имеют функциональный аналог этих подтяжек для случая (2) A unique receiver design provides a fail-safe output of a high level when the inputs are left floating (open circuit). Хорошим протоколам по барабану, есть подтяжки или нет. Они просто сначала включают передатчик, а потом начинают передавать (когда линия перешла в детерминированное состояние из "плавающей веревки"). Это позволяет обходится даже без низкоомных терминаторов. Что, в свою очередь, очень важно когда расстояния велики (линия имеет большое сопротивление) а скорости малы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба Ваш, видимо, единственный серьезный практический опыт - с китайским портовым краном, Был еще один случай, когда я непосредственно столкнулся с недоумками, которые в RS-485 надеялись только на растяжки. Это была совместная разработка, их компания писала большую часть софта, в том числе - софт для связи по RS-485 центрального устройства домашней автоматизации и панели управления у входной двери, через которую взводилась и сбрасывалась секьюрити. Когда систему стали поставлять пользователям, пошли жалобы, что посреди ночи эти панели иногда начинали потихоньку пищать, что действовало на нервы. Как выяснилось, писк в них был заложен сознательно, они пищали в случае потери связи с центральным устройством. А весь самопальный протокол связи был построен только и исключительно в надежде на растяжки. Эти невежды никогда не слышали слова "Modbus", а мои объяснения отскакивали от этих придурков как от стенки горох. Однако пальчики тоже растопыривали веером. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба Хорошим протоколам по барабану, есть подтяжки или нет. Понятно. ...сначала включают передатчик, а потом начинают передавать... Неужели можно делать иначе ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба Неужели можно делать иначе ? Ув.Ruslan1 еще говорил о том, что "начинают передавать, когда линия перешла в детерминированное состояние из "плавающей веревки"". Вот в этом соль. В Модбас RTU после включения передатчика выдерживается довольно большая пауза, во время которой ничего не передается. Согласно протоколу, при приеме паузы больше определенной величины все приемники обязаны очистить свои приемные буфера и приготовиться к тому, что сейчас пойдет пакет. Соответственно, во время передачи пакета паузы между байтами обязаны быть маленькими. В предложенном мной протоколе дважды передается байт специальный символ 0xF0. Первый байт синхронизирует UART, второй очищает приемные буфера. После этого передатчик может гнать весь пакет, при этом паузы между байтами могут быть произвольными. В обоих случаях ни в коем случае нельзя выключать передатчик до тех пор, пока весь пакет не будет передан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба ...которые в RS-485 надеялись только на растяжки... Можно поинтересоваться, а это как вообще? Чего можно ждать от растяжек? Ну держат линию в "единице", но как на этом можно протокол строить? Неужели можно делать иначе ? Вероятно, имелось ввиду, что делают это не одновременно, а сначала включают передатчик, ждут немного (например, чуть больше байтового интервала), потом только начинают передавать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба Можно поинтересоваться, а это как вообще? Чего можно ждать от растяжек? Ну держат линию в "единице", но как на этом можно протокол строить? В первом из описанных мною случаев программист переводил приемопередатчик в режим приема после каждого переданного байта. Ему "так было удобнее". Во втором случае не выдерживалась пауза между моментом включения передатчика и началом пакета и не производилась очистка буферов приема. Программисты были уверены, что при наличии растяжек на линии гарантируется пассивное состояние, поэтому можно сразу же гнать весь пакет. Мысль, что помеха незадолго до начала пакета может быть принята за ложное начало пакета, после чего весь пакет будет испорчен, казалась им дикой и сумасбродной и никак не укладывалась в их тупые головы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 17 октября, 2012 Опубликовано 17 октября, 2012 (изменено) · Жалоба Еще раз повторяю критерий оценки: наводим на линию белый шум, замеряем его мощность и смотрим, при каком уровне шума начнутся потери информации при обмене, или когда случится прием ложной информации (для альтернативно одаренных: измерения проводим при нормальной работе интерфейса, что, ессно, включает в себя все состояния линии). При использовании приличного CRC и пр. методов контроля целостности, о приеме ложной информации можно не сильно беспокоиться, настолько это маловероятное событие. А вот потери при обмене намного более вероятны и при определенном уровне помех начнут наблюдаться регулярно. Eще раз подтвердили, что не разделяете понятия помехоустойчивости линии и протокола обмена. Одно компенсируете другим... А кроме Modbus, других протоколов, видимо, не знаете и не используете. Более того, при его использовании вам приходится "в ручную" управлять передатчиком, чтобы обеспечивать необходимые паузы в своем "потоке мусора"... ...А весь самопальный протокол связи был построен только и исключительно в надежде на растяжки. Эти невежды никогда не слышали слова "Modbus"... Всё "в одну кучу" в вашей голове - "протокол, линия, растяжки..." Начните свое образование хотя бы с википедии. Почитайте, что такое помехоустойчивость линии и помехоустойчивое кодирование: http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%...%BD%D0%B8%D0%B8 http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%...%BD%D0%B8%D0%B5 Желаю успеха в повышении квалификации. Всего хорошего. Изменено 17 октября, 2012 пользователем @Ark Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба В предложенном мной протоколе дважды передается байт специальный символ 0xF0. Первый байт синхронизирует UART, второй очищает приемные буфера. Я бы хотел уточнить: всё это делается после паузы со включённым передатчиком длительностью более байта. Иначе никакой 0xF0 не поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 18 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба Я бы хотел уточнить: всё это делается после паузы со включённым передатчиком длительностью более байта. Иначе никакой 0xF0 не поможет. Нет, в данном случае пауза не нужна. Неважно какой мусор уже принят UARTом к моменту начала передачи первого символа 0xF0, к моменту окончания его передачи все UARTы закончат прием байта, правильного или неправильного, и будут готовы к приему следующего байта. Поэтому второй байт 0xF0 будет гарантированно принят правильно и прочистит буфера всех приемников. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба Нет, в данном случае пауза не нужна. Неважно какой мусор уже принят UARTом к моменту начала передачи первого символа 0xF0, к моменту окончания его передачи все UARTы закончат прием байта, правильного или неправильного, и будут готовы к приему следующего байта. Поэтому второй байт 0xF0 будет гарантированно принят правильно и прочистит буфера всех приемников. Ну почему же. Если принят ложный старт-бит, скажем, за 5 битов до стартового от байта 0xF0, то примется что-то другое: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shamil 2 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба Ну почему же. Если принят ложный старт-бит, скажем, за 5 битов до стартового от байта 0xF0, то примется что-то другое: В UART младший бит передается первым, а на Ваших диаграммах первыми передаются старшие биты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба Неужели можно делать иначе ? Ага. Например, когда пауза между моментом включения передатчика и моментом начала передачи стартового бита равно нулю. Или вообще есть системы, где передатчик тянет линию только в активное состояние линии, а пассивное состояние во время передачи байта и между байтами внутри пакета обеспечивается подтяжками (логика типа "открытый коллектор"). Вот в таких системах можно диссертацию написать про значение и особенности выбора подтягивающих резисторов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба В UART младший бит передается первым, а на Ваших диаграммах первыми передаются старшие биты. А, точно! Тогда всё нормально, да. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 17 октября, 2012 Опубликовано 17 октября, 2012 (изменено) · Жалоба И вообще, о каких протоколах Вы говорите? Вот я например использую MODBUS-RTU, он заточен под грязные линии. Что такого Вы нашли, что менее емко по ресурсам? MODBUS-ASCII ! :) Что до совершенно непонятной мифологической полемики, которая тут происходит, поддержу Вас насчет RTU, который при включенном parity check сокращает проблему глотания мусора до пренебрежительно малого уровня. И всё из-за двух "мелочей" :) 1. не забывать, что при приеме любого ошибочного байта надо сбрасывать число принятых байт в ноль. 2. не забывать, что станция, начинающая передачу, ответственна за Т35 - включил передатчик, продул линию(бывает), передал пакет, подождал Т35, выключил передатчик. Вуаля. Изменено 17 октября, 2012 пользователем _Pasha Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 17 октября, 2012 Опубликовано 17 октября, 2012 · Жалоба Нет, в данном случае пауза не нужна. Неважно какой мусор уже принят UARTом к моменту начала передачи первого символа 0xF0, к моменту окончания его передачи все UARTы закончат прием байта, правильного или неправильного, и будут готовы к приему следующего байта. Поэтому второй байт 0xF0 будет гарантированно принят правильно и прочистит буфера всех приемников. А зачем два байта 0хF0? Почему нельзя сделать так: 1.Включаем передатчик. 2.Ждём пока линия устаканится... (согласно DS). 3.Пауза длительностью 1 байт (что бы все приёмники закончили принимать (если начали) возможный мусор). 4.Передаём пакет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться