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

Я начинающий электронщик.

И поскольку опыта нет, стараюсь максимально придерживаться рекомендациям 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).

 

Хорошим протоколам по барабану, есть подтяжки или нет. Они просто сначала включают передатчик, а потом начинают передавать (когда линия перешла в детерминированное состояние из "плавающей веревки"). Это позволяет обходится даже без низкоомных терминаторов. Что, в свою очередь, очень важно когда расстояния велики (линия имеет большое сопротивление) а скорости малы.

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


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

Ваш, видимо, единственный серьезный практический опыт - с китайским портовым краном,

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

 

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

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


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

Хорошим протоколам по барабану, есть подтяжки или нет.

Понятно.

...сначала включают передатчик, а потом начинают передавать...

Неужели можно делать иначе ?

 

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


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

Неужели можно делать иначе ?

 

Ув.Ruslan1 еще говорил о том, что "начинают передавать, когда линия перешла в детерминированное состояние из "плавающей веревки"". Вот в этом соль.

 

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

 

В предложенном мной протоколе дважды передается байт специальный символ 0xF0. Первый байт синхронизирует UART, второй очищает приемные буфера. После этого передатчик может гнать весь пакет, при этом паузы между байтами могут быть произвольными.

 

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

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


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

...которые в RS-485 надеялись только на растяжки...

Можно поинтересоваться, а это как вообще? Чего можно ждать от растяжек? Ну держат линию в "единице", но как на этом можно протокол строить?

 

Неужели можно делать иначе ?

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

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


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

Можно поинтересоваться, а это как вообще? Чего можно ждать от растяжек? Ну держат линию в "единице", но как на этом можно протокол строить?

В первом из описанных мною случаев программист переводил приемопередатчик в режим приема после каждого переданного байта. Ему "так было удобнее".

 

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

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


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

Гость @Ark
Еще раз повторяю критерий оценки: наводим на линию белый шум, замеряем его мощность и смотрим, при каком уровне шума начнутся потери информации при обмене, или когда случится прием ложной информации (для альтернативно одаренных: измерения проводим при нормальной работе интерфейса, что, ессно, включает в себя все состояния линии). При использовании приличного 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

Желаю успеха в повышении квалификации.

Всего хорошего.

Изменено пользователем @Ark

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


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

В предложенном мной протоколе дважды передается байт специальный символ 0xF0. Первый байт синхронизирует UART, второй очищает приемные буфера.

Я бы хотел уточнить: всё это делается после паузы со включённым передатчиком длительностью более байта. Иначе никакой 0xF0 не поможет.

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


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

Я бы хотел уточнить: всё это делается после паузы со включённым передатчиком длительностью более байта. Иначе никакой 0xF0 не поможет.

 

Нет, в данном случае пауза не нужна. Неважно какой мусор уже принят UARTом к моменту начала передачи первого символа 0xF0, к моменту окончания его передачи все UARTы закончат прием байта, правильного или неправильного, и будут готовы к приему следующего байта. Поэтому второй байт 0xF0 будет гарантированно принят правильно и прочистит буфера всех приемников.

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


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

Нет, в данном случае пауза не нужна. Неважно какой мусор уже принят UARTом к моменту начала передачи первого символа 0xF0, к моменту окончания его передачи все UARTы закончат прием байта, правильного или неправильного, и будут готовы к приему следующего байта. Поэтому второй байт 0xF0 будет гарантированно принят правильно и прочистит буфера всех приемников.

Ну почему же. Если принят ложный старт-бит, скажем, за 5 битов до стартового от байта 0xF0, то примется что-то другое:

post-29684-1350481322_thumb.png

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


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

Ну почему же. Если принят ложный старт-бит, скажем, за 5 битов до стартового от байта 0xF0, то примется что-то другое:

В UART младший бит передается первым, а на Ваших диаграммах первыми передаются старшие биты.

 

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


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

Неужели можно делать иначе ?

Ага. Например, когда пауза между моментом включения передатчика и моментом начала передачи стартового бита равно нулю.

 

Или вообще есть системы, где передатчик тянет линию только в активное состояние линии, а пассивное состояние во время передачи байта и между байтами внутри пакета обеспечивается подтяжками (логика типа "открытый коллектор"). Вот в таких системах можно диссертацию написать про значение и особенности выбора подтягивающих резисторов.

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


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

В UART младший бит передается первым, а на Ваших диаграммах первыми передаются старшие биты.

А, точно! Тогда всё нормально, да. :)

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


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

И вообще, о каких протоколах Вы говорите? Вот я например использую MODBUS-RTU, он заточен под грязные линии. Что такого Вы нашли, что менее емко по ресурсам?

MODBUS-ASCII ! :)

Что до совершенно непонятной мифологической полемики, которая тут происходит, поддержу Вас насчет RTU, который при включенном parity check сокращает проблему глотания мусора до пренебрежительно малого уровня. И всё из-за двух "мелочей" :)

1. не забывать, что при приеме любого ошибочного байта надо сбрасывать число принятых байт в ноль.

2. не забывать, что станция, начинающая передачу, ответственна за Т35 - включил передатчик, продул линию(бывает), передал пакет, подождал Т35, выключил передатчик. Вуаля.

Изменено пользователем _Pasha

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


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

Нет, в данном случае пауза не нужна. Неважно какой мусор уже принят UARTом к моменту начала передачи первого символа 0xF0, к моменту окончания его передачи все UARTы закончат прием байта, правильного или неправильного, и будут готовы к приему следующего байта. Поэтому второй байт 0xF0 будет гарантированно принят правильно и прочистит буфера всех приемников.

А зачем два байта 0хF0?

Почему нельзя сделать так:

 

1.Включаем передатчик.

2.Ждём пока линия устаканится... (согласно DS).

3.Пауза длительностью 1 байт (что бы все приёмники закончили принимать (если начали) возможный мусор).

4.Передаём пакет.

 

 

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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