EugeNNe 0 2 октября, 2008 Опубликовано 2 октября, 2008 · Жалоба Есть железяка с интерфейсом 485 на одном конце, линия длинной порядка 100м, на другом конце комп сопряжённый с 485 линией посредством преобразователя ADAM-4520. Всё работало замечательно пока работали на скоростях более 19200 бод. Но потребовалось перейти на скорость 4800 и вот тута началось. Моя железка изначально настоена на приём, получаю я комманду из линии, переключаюсь на передачу и отсылаю подтверждение приёма данных. На другом конце в комп приходит какая то ересь. В линии до АДАМА данные корректны, а вот после него уже нет. Заметим, что АДАМ автоматом определяет направление передачи данных. В конце концов выяснилось, что нужно сделать задержку порядка 50-500 мкс (на разных линиях по разному ) после того как контроллер переключает драйвера 485-го на передачу и только потом выдавать данные в линию. Подозреваю что эта задержка нужна для того что бы АДАМ определил направление прередачи данных. Но данный эффект пропадает напрочь если скорость выше 9600 бод. Чем скорость ниже тем дольше нужно делать задерку. И почему данная задержка зависит от линии? Две идентичные линии, одинаковой длинны, но на одной задержку приходится делать 50мкс, а на другой 500мкс. Смотрел осцилоскопом, качество сигнала одинаково в обеих линиях. Может кто сталкивался с чем нибудь подобным? Непонятно мне всё это... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 2 октября, 2008 Опубликовано 2 октября, 2008 · Жалоба В конце концов выяснилось, что нужно сделать задержку порядка 50-500 мкс (на разных линиях по разному ) после того как контроллер переключает драйвера 485-го на передачу и только потом выдавать данные в линию. Подозреваю что эта задержка нужна для того что бы АДАМ определил направление прередачи данных. Но данный эффект пропадает напрочь если скорость выше 9600 бод. Чем скорость ниже тем дольше нужно делать задерку.Догадки у вас в правильном направлении идут. Раз преобразователь не зависит от протокола, а лишь от формата символа, то скорее всего у него унутре стоит "переключалка" с перезапуском, завязанная на длительность передачи символа. Пришел перепад уровня 1->0 "переключалка" включила выходной драйвер и держит его в режиме передачи как минимум на время передачи одного символа со всеми битами четности и стоп-битами. И такая реакция будет на любой перепад 1->0, т.е. перезапуск на каждый переход. Поэтому минимальное время удержания будет 1 символ + какой-то запасец, определяемый задумкой авторов, на выбранной с помощью свитчей скорости передачи и количества бит, а максимальное 1 + 0,8/0,9 символа + какой-то запасец. Если вы в своем приборе не делаете какую-либо паузу после приема, а тут же пытаетесь гнать ответ в линию, то возникает коллизия, при которой пакет портится. Сделайте в своей реализации протокола два перестраиваемых тайм-аута. 1) задержка на выдачу ответа, после приема 2) задержка на удержание драйвера в состоянии передачи. Вторая задержка бывает полезна если протокол RTU-ный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EugeNNe 0 2 октября, 2008 Опубликовано 2 октября, 2008 · Жалоба Вместо АДАМОВ воткнул в комп плату PCI-485 всё от того же Advantech. Всё замечательно работает безо всяких задержек на скорости 4800 и менее. Видно такая ерунда с задержками особенность данного АДАМА 4520. Меня больше всего интересует почему задержка разная на разных линиях? Протокол можно скоректировать, но величина задержки различается на порядок...Что то тут не так... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 2 октября, 2008 Опубликовано 2 октября, 2008 · Жалоба Вместо АДАМОВ воткнул в комп плату PCI-485 всё от того же Advantech. Всё замечательно работает безо всяких задержек на скорости 4800 и менее. Не надо путать хрен с пальцем. Там направление железно драйвером переключается. В преобразователях 232-485 то же самое можно реализовать, дёргая ногой DTR (по-моему) А если распознавание автоматическое - тогда только анализ потока. Про этот случай rezident вам расписал ситуацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 2 октября, 2008 Опубликовано 2 октября, 2008 · Жалоба В преобразователях 232-485 то же самое можно реализовать, дёргая ногой DTR (по-моему)У этой модели RTS используется. Картинка из мануала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 2 октября, 2008 Опубликовано 2 октября, 2008 · Жалоба У этой модели 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 0 2 октября, 2008 Опубликовано 2 октября, 2008 · Жалоба Вот мануал смотрю: тама написано - Интелектуальный контроль RS485 АДАМ 4520 автоматически чувствует направление потока данных и автоматически переключает направление передачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 2 октября, 2008 Опубликовано 2 октября, 2008 · Жалоба Вот что нужно, чтобы RTS-ом управлятьЕсли это вопрос, то ответ на 3 странице мануала. Только вот управлять направлением передачи с помощью RTS под Виндой это геморрой еще тот :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 2 октября, 2008 Опубликовано 2 октября, 2008 · Жалоба Короче: если хотите, чтобы направлением потока управляло приложение, надо ставить движок на контроль от RTS. Если автоматом - тогда выставить нужную скорость и терпеть задержку переключения на длину символа. Я так понимаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться