реклама на сайте
подробности

 
 
> Как лучше организовать протокол (логический) для RS-485
Diusha
сообщение Feb 22 2010, 09:15
Сообщение #1


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



На главный блок должна стекаться инфа с нескольких периферийных.
Есть такие варианты:
1) Каждый периферийный посылает данные (по мере их готовности) и в теч. нек. времени ждет подтверждение от главного. Если подтверждения нет, посылает еще раз. Если случайно 2 периферийных пошлют одновременно, то контрольная сумма не совпадет -> не будет подтверждения -> повтор.
2) Главный постоянно периферийным шлет запросы. Если у периферийного данные готовы, то он посылает.

Вроде оба варианта имеют право на существование, но чего-то не нравятся. Может предложите получше варианты или есть решения, проверенные временем?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Feb 22 2010, 14:05
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Diusha @ Feb 22 2010, 11:15) *
1) Каждый периферийный посылает данные (по мере их готовности) и в теч. нек. времени ждет подтверждение от главного. Если подтверждения нет, посылает еще раз. Если случайно 2 периферийных пошлют одновременно, то контрольная сумма не совпадет -> не будет подтверждения -> повтор.
А как он узнает, что в этот момент канал свободен и он своей передачей никому не помешает?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Diusha
сообщение Feb 22 2010, 15:42
Сообщение #3


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(rezident @ Feb 22 2010, 17:53) *
Первый весьма замороченный, т.к. требует постоянной прослушки линии всеми устройствами сети и передачи маркеров по которым устройства имеют право занять линию для передачи. Основная сложность в том, что RS485 не имеет штатных аппаратных средств для детектирования и "разруливания" коллизий.

Цитата(Сергей Борщ @ Feb 22 2010, 17:05) *
А как он узнает, что в этот момент канал свободен и он своей передачей никому не помешает?

Цитата(Diusha @ Feb 22 2010, 12:15) *
Если случайно 2 периферийных пошлют одновременно, то контрольная сумма не совпадет -> не будет подтверждения -> повтор.

Дело в том, что передачи относительно редки => вероятность коллизии невысока. Коллизии разрулятся с помощью контрольной суммы. Прослушивать ничего не надо.
2-й вариант смущает тем, что линию придется держать занятой на несколько порядков бóльшее время (лишние помехи), т.к. главный должен получить данные быстро => запросы придется слать с большой частотой.

Цитата(rezident @ Feb 22 2010, 17:53) *
Если вам нужен именно первый вариант, то переходите на CAN.

САN - в следующий раз, сейчас железо сделано под 485

Какие будут советы в свете моих уточнений? Может есть еще какой-нибудь 3-й вариант?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 22 2010, 17:17
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Diusha @ Feb 22 2010, 17:42) *
Дело в том, что передачи относительно редки => вероятность коллизии невысока. Коллизии разрулятся с помощью контрольной суммы.
Для 485 коллизия является нештатной ситуацией. Производитель не гарантирует, что драйвера выдержат сколь-нибудь долгую эксплуатацию в таком режиме. Хотите иметь неприятности из-за отказов - делайте.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Feb 24 2010, 12:31
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(Сергей Борщ @ Feb 22 2010, 19:17) *
Для 485 коллизия является нештатной ситуацией. Производитель не гарантирует, что драйвера выдержат сколь-нибудь долгую эксплуатацию в таком режиме. Хотите иметь неприятности из-за отказов - делайте.


Назовите мне модель драйвера RS-485, для которого коллизия является нештатной и который от этого крякнется. Я эту фирму буду обходить стороной. smile.gif

Как правило в даташите пишут нечто подобное (это из ST485): "Current limiting and thermal shutdown for driver overload protection".

так что производители гарантируют.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 24 2010, 13:28
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Ruslan1 @ Feb 24 2010, 14:31) *
Назовите мне модель драйвера RS-485, для которого коллизия является нештатной и который от этого крякнется. Я эту фирму буду обходить стороной. smile.gif
У Sipex в даташитах специфицирован только ток КЗ по выходу и макс. рассеиваимая мощность корпуса. Про коллизию не нашел ни в одном даташите. Есть защита от КЗ, но это как бы совсем не коллизия.
Обходите.

Цитата(Ruslan1 @ Feb 24 2010, 14:31) *
Как правило в даташите пишут нечто подобное (это из ST485): "Current limiting and thermal shutdown for driver overload protection".

так что производители гарантируют.
Согласен, многие гарантируют.
И тем не менее: вы считаете, что доводить систему до срабатывания защиты - это нормально? Или вы считаете, что возможные периодические временные отказы связи из-за thermal shutdown - это штатный режим работы системы?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Diusha
сообщение Feb 25 2010, 05:47
Сообщение #7


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(galjoen @ Feb 24 2010, 13:45) *
включите драйвера RS-485 так, чтобы они только 0 передавали, а 1 за счёт резисторных растяжек формировалась.

А не знаете, нет ли микосхемки, совместимой по выводам с МАХ485, только с открытым коллектором?

Цитата(Ruslan1 @ Feb 24 2010, 15:31) *
Назовите мне модель драйвера RS-485, для которого коллизия является нештатной и который от этого крякнется. Я эту фирму буду обходить стороной. smile.gif

Как правило в даташите пишут нечто подобное (это из ST485): "Current limiting and thermal shutdown for driver overload protection".

Из портянки на МАХ485:
"Drivers are short-circuit current limited and are protected against excessive power dissipation by thermal shutdown circuit"
Провел эксперимент: замкнул А и В. Секунд через 7 микросхема (в ДИПе) нагрелась градусов до 45, дальше температура не росла; thermal shutdown не было; ток 100 мА.
Не лучший вариант...

Из той же портянки:
"The receiver input has a fail-safe feature that guarantees a logic-high output if the input is open circuit."
Я правильно понял, имеется в виду, что если линия болтается в воздухе, то "фича гарантирует", что на выходе приемника болтанки не будет? Но тогда непонятно, как фича догадается, что это наводки, а не сигнал?
Go to the top of the page
 
+Quote Post
galjoen
сообщение Feb 25 2010, 10:03
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Diusha @ Feb 25 2010, 08:47) *
А не знаете, нет ли микосхемки, совместимой по выводам с МАХ485, только с открытым коллектором?

Это стандартный драйвер CAN. Насчёт совместимости по ногам - смотрите сами. Но так-то ничего не мешает использовать его вместо драйверов RS-485. Всё будет работать абсолютно так-же, только терминаторы в этом случае обязательны. Ещё можно приёмником USART слушать линию во время передачи, и если принятое будет отличаться от переданного - коллизия. Собственно всё так же, как при включении драйверов RS-485 по стандарту J1708 - CAN оттуда и произошёл. Кстати, не удивлюсь, если и модбас оттуда - и протокол и времянки то очень похожи. Только модбас не мультимастерный.

А вообще, закладывать модбас в новую разработку, ИМХО это не есть гуд.
Go to the top of the page
 
+Quote Post
Itch
сообщение Feb 25 2010, 10:38
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410



Цитата(galjoen @ Feb 25 2010, 16:03) *
А вообще, закладывать модбас в новую разработку, ИМХО это не есть гуд.

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

Цитата
Это стандартный драйвер CAN. Насчёт совместимости по ногам - смотрите сами. Но так-то ничего не мешает использовать его вместо драйверов RS-485. Всё будет работать абсолютно так-же, только терминаторы в этом случае обязательны

Терминаторы да, обязательны. Нетерминированый отрезок кабеля в 50м намертво убивал передачу на 19200.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Diusha   Как лучше организовать протокол (логический) для RS-485   Feb 22 2010, 09:15
- - ASN   Diusha Второй способ используем достаточно давно. ...   Feb 22 2010, 10:40
|- - ASN   Diusha Линию в любом случае кто-то должен держать....   Feb 22 2010, 15:50
|||- - Ruslan1   Цитата(Diusha @ Feb 25 2010, 07:47) Из по...   Feb 25 2010, 07:35
|||- - 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
- - SSerge   Не мучайтесь, сделайте Модбас. Заодно получите воз...   Feb 23 2010, 04:40
|- - Diusha   Цитата(ASN @ Feb 22 2010, 18:50) Линию в ...   Feb 23 2010, 08:04
|- - ASN   Diusha Держать желательно, чтобы не линия "бо...   Feb 23 2010, 10:12
||- - Diusha   Цитата(ASN @ Feb 23 2010, 13:12) Держать ...   Feb 23 2010, 13:34
||- - ASN   Diusha А если длина линии (в смысле ёмкость) больш...   Feb 23 2010, 18:23
||- - Diusha   Цитата(ASN @ Feb 23 2010, 21:23) IMHO, Ва...   Feb 24 2010, 03:46
||- - galjoen   Если так боитесь коллизий и скорость передачи у ва...   Feb 24 2010, 10:45
|- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 04:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016