|
Как лучше организовать протокол (логический) для RS-485 |
|
|
|
 |
Ответов
|
Feb 23 2010, 08:04
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(ASN @ Feb 22 2010, 18:50)  Линию в любом случае кто-то должен держать. Зачем ее обязательно кому-то держать? (я не спорю, а просто спрашиваю  ) Цитата(ASN @ Feb 22 2010, 18:50)  Большая частота - это какая величина? Пока только расплывчато… Чтобы на глаз задержка не была заметна. Думаю, миллисек 50 от готовности данных до их получения на центральном. Цитата(ASN @ Feb 22 2010, 18:50)  Чем не устраивает такой протокол? Да вроде только тем, что линия будет трещать без умолку, тогда как могла бы быть занята только на время передачи нескольких байт раз в неск. секунд. Честно говоря, не знаю даже, это плохо или нейтрально Цитата(Andron_ @ Feb 22 2010, 20:06)  а гарантированная доставка пакета от периферийного устройства необходима? Да. Думаю это организовать с помощью добавления в пакет его номера. Интересно было бы посмотреть примеры, как делают умные люди. Цитата(rezident @ Feb 22 2010, 20:32)  Я с ходу могу предложить ситуацию в которой будет коллизия, которую разрулить будет весьма сложно. Представьте, что на контролируемом объекте произошла авария и все устройства с этого объекта пытаются одновременно передать информацию об аварийном событии.  Разруливается весьма легко: У каждого устройства свой период повторной передачи в случае неполучения подтверждения. Цитата(Сергей Борщ @ Feb 22 2010, 20:17)  Для 485 коллизия является нештатной ситуацией. Производитель не гарантирует, что драйвера выдержат сколь-нибудь долгую эксплуатацию в таком режиме. Логично! Не подумал об этом. Чего-то не нашел в ДШ на МАХ485 про допустимую нагрузку. Цитата(SSerge @ Feb 23 2010, 07:40)  Не мучайтесь, сделайте Модбас. Заодно получите возможность подключать вместе с Вашими ещё кучу других устройств и опрашивать их не только своей программой, но и многими другими системами сбора данных. «Куча» не понадобится и опрос другими системами тоже. Так что подгонгять под определенный готовый стандарт и проверять, действительно ли оно соответствует, – как раз лишнее мучение. Но общие принципы модбаса стоит взять на вооружение.
|
|
|
|
|
Feb 23 2010, 10:12
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326

|
DiushaДержать желательно, чтобы не линия "болтала". Были в практике неприятные истории, когда устройства постоянно "дёргались" обрабатывать запросы по UART, потому что линией никто не управлял и она "ловила" шумы. При скорости 19200 время передачи одного байта около 0,5 мс. Даже если сообщение состоит из 10 байт + время на включение/выключение опрос одного устройства займёт не более 5 мс. Сколько у Вас устройств? Для 10, IMHO, времени достаточно. Плюс к тому, чтобы на глаз задержка не была заметна для нескольких байт ограничение будет выступать, IMHO, не задержки передачи, а задержки отрисовки в ПЭВМ. Если надо опрашивать много устройств, IMHO, лучше сделать концентраторы, которые собирают информацию с удалённых объектов и отсылают её в host. На подобие дерева. P.S. Я бы рекомендовал Modbus - лучше день потерять, потом за час долететь  Просто, надёжно.
|
|
|
|
|
Feb 23 2010, 13:34
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(ASN @ Feb 23 2010, 13:12)  Держать желательно, чтобы не линия "болтала". Были в практике неприятные истории, когда устройства постоянно "дёргались" обрабатывать запросы по UART, потому что линией никто не управлял и она "ловила" шумы. В любом случае если не повесить подтяжки, линия болтать будет: мастер послал запрос и переключился на прием. Пока слейв не ответил, все устройства слушают болтавню. Или я что-то не понимаю? Цитата(ASN @ Feb 23 2010, 13:12)  чтобы на глаз задержка не была заметна для нескольких байт ограничение будет выступать, IMHO, не задержки передачи, а задержки отрисовки в ПЭВМ. Ну я имел в виду задержку не передачи, а периода посылки запросов мастером, если период будет велик
Сообщение отредактировал Diusha - Feb 23 2010, 13:30
|
|
|
|
|
Feb 23 2010, 18:23
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326

|
DiushaА если длина линии (в смысле ёмкость) большая? Её "пробить" надо. Простыми резисторами в этом случае не обойдёшься. Алгоритм работы простой: - опрос состояний всех устройств (их два - длинный адрес при инициализации и короткий в рабочем цикле); - ответ каждого устройства словосостоянием (4 байт обычно достаточно) (после получения запроса все slave отключают приём на фиксированное время - один выходил на передачу); - при необходимости запрос дополнительных данных от выбранного устройства. Про "отрисовку". Кто является мастером? ПЭВМ? Работает под Win? Время реакции Win (со слов системного программиста) около 50 мс + всякие графические примочки. На круг обычно выходит около 1 секунды. За это время можно переслать уйму данных. Узким местом, как правило, оказывается "человеческий фактор" - оператор просто не успевает обрабатывать такой поток информации. IMHO, Вам предоставили достаточно информации, чтобы принять правильное решение
|
|
|
|
|
Feb 24 2010, 03:46
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(ASN @ Feb 23 2010, 21:23)  IMHO, Вам предоставили достаточно информации, чтобы принять правильное решение  Да! Информации достаточно. Склонился в сторону 2-го варианта, на самом деле уже давно, специально не говорил Самый веский аргумент, ИМХО: Цитата(Сергей Борщ @ Feb 22 2010, 20:17)  Для 485 коллизия является нештатной ситуацией. Производитель не гарантирует, что драйвера выдержат сколь-нибудь долгую эксплуатацию в таком режиме. Всем большое спасибо!
|
|
|
|
Сообщений в этой теме
Diusha Как лучше организовать протокол (логический) для RS-485 Feb 22 2010, 09:15 ASN Diusha
Второй способ используем достаточно давно. ... Feb 22 2010, 10:40 Сергей Борщ Цитата(Diusha @ Feb 22 2010, 11:15) 1) Ка... Feb 22 2010, 14:05 Diusha Цитата(rezident @ Feb 22 2010, 17:53) Пер... Feb 22 2010, 15:42  ASN Diusha
Линию в любом случае кто-то должен держать.... Feb 22 2010, 15:50  Сергей Борщ Цитата(Diusha @ Feb 22 2010, 17:42) Дело ... Feb 22 2010, 17:17   Ruslan1 Цитата(Сергей Борщ @ Feb 22 2010, 19:17) ... Feb 24 2010, 12:31    Сергей Борщ Цитата(Ruslan1 @ Feb 24 2010, 14:31) Назо... Feb 24 2010, 13:28     Diusha Цитата(galjoen @ Feb 24 2010, 13:45) вклю... Feb 25 2010, 05:47      Ruslan1 Цитата(Diusha @ Feb 25 2010, 07:47) Из по... Feb 25 2010, 07:35      galjoen Цитата(Diusha @ Feb 25 2010, 08:47) А не ... Feb 25 2010, 10:03       Itch Цитата(galjoen @ Feb 25 2010, 16:03) А во... Feb 25 2010, 10:38        galjoen Цитата(Itch @ Feb 25 2010, 13:38) чем не ... Feb 25 2010, 11:08     Ruslan1 Цитата(Сергей Борщ @ Feb 24 2010, 15:28) ... Feb 25 2010, 07:12  rezident Цитата(Diusha @ Feb 22 2010, 20:42) Дело ... Feb 22 2010, 17:32 rezident Цитата(Diusha @ Feb 22 2010, 14:15) Вроде... Feb 22 2010, 14:53 Andron_ а гарантированная доставка пакета от периферийного... Feb 22 2010, 17:06  rezident Цитата(Diusha @ Feb 23 2010, 13:04) Разру... Feb 23 2010, 13:48   Diusha Цитата(rezident @ Feb 23 2010, 16:48) Хе-... Feb 23 2010, 15:04 Don2 Цитата(Diusha @ Feb 22 2010, 12:15) Вроде... Feb 23 2010, 07:24 stells Цитата(Don2 @ Feb 23 2010, 10:24) можете ... Feb 23 2010, 07:45 bill_vs А сколько устройств на линии по максиму? Может и п... Feb 23 2010, 15:46 Diusha Цитата(bill_vs @ Feb 23 2010, 18:46) А ск... Feb 23 2010, 16:09  bill_vs Цитата(Diusha @ Feb 23 2010, 19:09) ... Е... Feb 23 2010, 17:46 Andron_ тут вот так вот на пальцах можно бесконечно долго ... Feb 23 2010, 16:36 Andron_ 2Ruslan1
Т.о. вы считаете, что система может стро... Feb 25 2010, 07:28 MrYuran Нда...
Как говорится, мы трудностей не боимся.
Не ... Feb 25 2010, 07:55 Andron_ ЦитатаНо с точки зрения программинга упаси Боже Ва... Feb 25 2010, 12:01 Diusha Цитата(Ruslan1 @ Feb 25 2010, 10:35) Не н... Feb 25 2010, 17:40
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|