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

Преобразователь 232-485 ADAM-4520

Есть железяка с интерфейсом 485 на одном конце, линия длинной порядка 100м, на другом конце комп сопряжённый с 485 линией посредством преобразователя ADAM-4520. Всё работало замечательно пока работали на скоростях более 19200 бод. Но потребовалось перейти на скорость 4800 и вот тута началось. Моя железка изначально настоена на приём, получаю я комманду из линии, переключаюсь на передачу и отсылаю подтверждение приёма данных. На другом конце в комп приходит какая то ересь. В линии до АДАМА данные корректны, а вот после него уже нет. Заметим, что АДАМ автоматом определяет направление передачи данных. В конце концов выяснилось, что нужно сделать задержку порядка 50-500 мкс (на разных линиях по разному ) после того как контроллер переключает драйвера 485-го на передачу и только потом выдавать данные в линию. Подозреваю что эта задержка нужна для того что бы АДАМ определил направление прередачи данных. Но данный эффект пропадает напрочь если скорость выше 9600 бод. Чем скорость ниже тем дольше нужно делать задерку. И почему данная задержка зависит от линии? Две идентичные линии, одинаковой длинны, но на одной задержку приходится делать 50мкс, а на другой 500мкс. Смотрел осцилоскопом, качество сигнала одинаково в обеих линиях. Может кто сталкивался с чем нибудь подобным? Непонятно мне всё это...

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


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

В конце концов выяснилось, что нужно сделать задержку порядка 50-500 мкс (на разных линиях по разному ) после того как контроллер переключает драйвера 485-го на передачу и только потом выдавать данные в линию. Подозреваю что эта задержка нужна для того что бы АДАМ определил направление прередачи данных. Но данный эффект пропадает напрочь если скорость выше 9600 бод. Чем скорость ниже тем дольше нужно делать задерку.
Догадки у вас в правильном направлении идут. Раз преобразователь не зависит от протокола, а лишь от формата символа, то скорее всего у него унутре стоит "переключалка" с перезапуском, завязанная на длительность передачи символа. Пришел перепад уровня 1->0 "переключалка" включила выходной драйвер и держит его в режиме передачи как минимум на время передачи одного символа со всеми битами четности и стоп-битами. И такая реакция будет на любой перепад 1->0, т.е. перезапуск на каждый переход. Поэтому минимальное время удержания будет 1 символ + какой-то запасец, определяемый задумкой авторов, на выбранной с помощью свитчей скорости передачи и количества бит, а максимальное 1 + 0,8/0,9 символа + какой-то запасец. Если вы в своем приборе не делаете какую-либо паузу после приема, а тут же пытаетесь гнать ответ в линию, то возникает коллизия, при которой пакет портится. Сделайте в своей реализации протокола два перестраиваемых тайм-аута.

1) задержка на выдачу ответа, после приема

2) задержка на удержание драйвера в состоянии передачи.

Вторая задержка бывает полезна если протокол RTU-ный.

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


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

Вместо АДАМОВ воткнул в комп плату PCI-485 всё от того же Advantech. Всё замечательно работает безо всяких задержек на скорости 4800 и менее. Видно такая ерунда с задержками особенность данного АДАМА 4520. Меня больше всего интересует почему задержка разная на разных линиях? Протокол можно скоректировать, но величина задержки различается на порядок...Что то тут не так...

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


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

Вместо АДАМОВ воткнул в комп плату PCI-485 всё от того же Advantech. Всё замечательно работает безо всяких задержек на скорости 4800 и менее.

Не надо путать хрен с пальцем.

Там направление железно драйвером переключается.

В преобразователях 232-485 то же самое можно реализовать, дёргая ногой DTR (по-моему)

А если распознавание автоматическое - тогда только анализ потока.

Про этот случай rezident вам расписал ситуацию.

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


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

В преобразователях 232-485 то же самое можно реализовать, дёргая ногой DTR (по-моему)
У этой модели RTS используется. Картинка из мануала.

post-3882-1222953157_thumb.jpg

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


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

У этой модели 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-ом управлять

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


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

Вот мануал смотрю: тама написано -

Интелектуальный контроль RS485

АДАМ 4520 автоматически чувствует направление потока данных и автоматически переключает направление передачи.

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


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

Вот что нужно, чтобы RTS-ом управлять
Если это вопрос, то ответ на 3 странице мануала. Только вот управлять направлением передачи с помощью RTS под Виндой это геморрой еще тот :(

post-3882-1222954677_thumb.jpg

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


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

Короче: если хотите, чтобы направлением потока управляло приложение, надо ставить движок на контроль от RTS.

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

Я так понимаю.

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


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

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

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

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

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

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

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

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

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

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