Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Преобразователь 232-485 ADAM-4520
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > RS232/LPT/USB/PCMCIA/FireWire
EugeNNe
Есть железяка с интерфейсом 485 на одном конце, линия длинной порядка 100м, на другом конце комп сопряжённый с 485 линией посредством преобразователя ADAM-4520. Всё работало замечательно пока работали на скоростях более 19200 бод. Но потребовалось перейти на скорость 4800 и вот тута началось. Моя железка изначально настоена на приём, получаю я комманду из линии, переключаюсь на передачу и отсылаю подтверждение приёма данных. На другом конце в комп приходит какая то ересь. В линии до АДАМА данные корректны, а вот после него уже нет. Заметим, что АДАМ автоматом определяет направление передачи данных. В конце концов выяснилось, что нужно сделать задержку порядка 50-500 мкс (на разных линиях по разному ) после того как контроллер переключает драйвера 485-го на передачу и только потом выдавать данные в линию. Подозреваю что эта задержка нужна для того что бы АДАМ определил направление прередачи данных. Но данный эффект пропадает напрочь если скорость выше 9600 бод. Чем скорость ниже тем дольше нужно делать задерку. И почему данная задержка зависит от линии? Две идентичные линии, одинаковой длинны, но на одной задержку приходится делать 50мкс, а на другой 500мкс. Смотрел осцилоскопом, качество сигнала одинаково в обеих линиях. Может кто сталкивался с чем нибудь подобным? Непонятно мне всё это...
rezident
Цитата(BigBolt @ Oct 2 2008, 15:18) *
В конце концов выяснилось, что нужно сделать задержку порядка 50-500 мкс (на разных линиях по разному ) после того как контроллер переключает драйвера 485-го на передачу и только потом выдавать данные в линию. Подозреваю что эта задержка нужна для того что бы АДАМ определил направление прередачи данных. Но данный эффект пропадает напрочь если скорость выше 9600 бод. Чем скорость ниже тем дольше нужно делать задерку.
Догадки у вас в правильном направлении идут. Раз преобразователь не зависит от протокола, а лишь от формата символа, то скорее всего у него унутре стоит "переключалка" с перезапуском, завязанная на длительность передачи символа. Пришел перепад уровня 1->0 "переключалка" включила выходной драйвер и держит его в режиме передачи как минимум на время передачи одного символа со всеми битами четности и стоп-битами. И такая реакция будет на любой перепад 1->0, т.е. перезапуск на каждый переход. Поэтому минимальное время удержания будет 1 символ + какой-то запасец, определяемый задумкой авторов, на выбранной с помощью свитчей скорости передачи и количества бит, а максимальное 1 + 0,8/0,9 символа + какой-то запасец. Если вы в своем приборе не делаете какую-либо паузу после приема, а тут же пытаетесь гнать ответ в линию, то возникает коллизия, при которой пакет портится. Сделайте в своей реализации протокола два перестраиваемых тайм-аута.
1) задержка на выдачу ответа, после приема
2) задержка на удержание драйвера в состоянии передачи.
Вторая задержка бывает полезна если протокол RTU-ный.
EugeNNe
Вместо АДАМОВ воткнул в комп плату PCI-485 всё от того же Advantech. Всё замечательно работает безо всяких задержек на скорости 4800 и менее. Видно такая ерунда с задержками особенность данного АДАМА 4520. Меня больше всего интересует почему задержка разная на разных линиях? Протокол можно скоректировать, но величина задержки различается на порядок...Что то тут не так...
MrYuran
Цитата(BigBolt @ Oct 2 2008, 16:54) *
Вместо АДАМОВ воткнул в комп плату PCI-485 всё от того же Advantech. Всё замечательно работает безо всяких задержек на скорости 4800 и менее.

Не надо путать хрен с пальцем.
Там направление железно драйвером переключается.
В преобразователях 232-485 то же самое можно реализовать, дёргая ногой DTR (по-моему)
А если распознавание автоматическое - тогда только анализ потока.
Про этот случай rezident вам расписал ситуацию.
rezident
Цитата(MrYuran @ Oct 2 2008, 19:02) *
В преобразователях 232-485 то же самое можно реализовать, дёргая ногой DTR (по-моему)
У этой модели RTS используется. Картинка из мануала.
MrYuran
Цитата(rezident @ Oct 2 2008, 17:13) *
У этой модели RTS используется.

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

Цитата
Baudrate (bps): 1200, 2400, 4800, 9600, 19.2 k, 38.4 k, 57.6 k, 115.2 k, RTS control and RS-422 mode (switchable

Вот что нужно, чтобы RTS-ом управлять
EugeNNe
Вот мануал смотрю: тама написано -
Интелектуальный контроль RS485
АДАМ 4520 автоматически чувствует направление потока данных и автоматически переключает направление передачи.
rezident
Цитата(MrYuran @ Oct 2 2008, 19:21) *
Вот что нужно, чтобы RTS-ом управлять
Если это вопрос, то ответ на 3 странице мануала. Только вот управлять направлением передачи с помощью RTS под Виндой это геморрой еще тот sad.gif
MrYuran
Короче: если хотите, чтобы направлением потока управляло приложение, надо ставить движок на контроль от RTS.
Если автоматом - тогда выставить нужную скорость и терпеть задержку переключения на длину символа.
Я так понимаю.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.