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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Свой протокол поверх RS-485
kt361
сообщение Dec 2 2012, 14:08
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 28-10-09
Пользователь №: 53 272



Добрый день!

Для реализации своей задумки мне необходимо соединить порядка 20 устройств по общей шине в режиме Multi-Master.
В любой момент любое устройство независимо должно иметь возможность отправить свое сообщение в шину.
Если любое из устройств зависает или ломается, оно не должно никоим образом влиять на работоспособность других устройств в сети.
Ввиду стоимости и простоты переноса в различные среды я хочу использовать RS-485 на общей шине.

Исходя из условий, приходится отмести условно-стандартный для указанного физического уровня Modbus.
Соответственно, приходится выдумывать некую свою поделку, отправной точкой я хочу взять описание протокола от zap: http://electrotransport.ru/ussr/index.php?...12449#msg112449

Кратко: muli-master протокол с гарантированной отправкой над первичным протоколом, способным отправлять байты, но не биты.
Контроллер всегда слушает то, что творится в линии. Если линия свободна от передаваемых данных, котроллер может передавать свои данные. Если передаваемый байт не совпал с принятым, значит произошла одновременная отправка с другим контроллером. В этом случае оба затыкаются на время передачи двух символов и выбирают на рандом - начать отправлять снова, или ждать.
В описанном протоколе необходимо и для чтения, и для отправки необходимо знать время отправки одного символа (байта).

Реализовать передачу данных в преобразователь (st485/max485 итп) и измерять эти интервалы можно двояко:
1. Подключать встроенный в микроконтроллер UART. Интервал измерять временем выполнения функции uart_write в пустоту, с отключенным DE в преобразователе RS-485.
2. Реализовать UART программно на таймере и прерываниях, из прерываний таймера знаем время передачи одного символа.

Как лучше поступить?
В первой реализации используется меньше кода, ибо железная реализация uart. Но не очень нравится костыляция с пустой отправкой байтов.
Во второй реализации больше кода, зато полностью управляемая система с прерываниями, никаких костылей.

Благодарю за ответы и рассуждения!
Go to the top of the page
 
+Quote Post
stells
сообщение Dec 2 2012, 14:42
Сообщение #2


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(kt361 @ Dec 2 2012, 18:08) *
Если передаваемый байт не совпал с принятым, значит...

... произошло КЗ... драйверы конечно с защитой от КЗ, но насколько корректно закладывать изначально такие конфликты?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 2 2012, 15:04
Сообщение #3


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



ТС забыл указать физ. длину этой шины, потому что, для разруливания коллизий вполне может прокатить LIN-вариант управления передатчиком не через DI, а через TXE. Разумеется, если протокол будет способен гарантированно заткнуть мастеров на время длинной посылки, возникнет соблазн красиво переходить на максимально возможные скорости, тогда надо подумать о том, чтобы вернуть соединение TXD и DI обратно.
Go to the top of the page
 
+Quote Post
Lagman
сообщение Dec 2 2012, 15:15
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



похоже на CAN
Go to the top of the page
 
+Quote Post
kt361
сообщение Dec 2 2012, 15:24
Сообщение #5





Группа: Участник
Сообщений: 11
Регистрация: 28-10-09
Пользователь №: 53 272



На КЗ не стоит рассчитывать, шина предположительно защищена от внешних воздействий, если же такое произойдет из-за поломки одного из устройств, это будет заметно.

Длину шины я предполагаю метров на 300. RS485 разрешает на 1200 м делать.

Скорости 9600 бод вполне хватит. Особо длинных пакетов не будет. Если будет, можно будет и раздробить уже на более высоком уровне. Предположим максимум в 32 байта данных + заголовок
Go to the top of the page
 
+Quote Post
stells
сообщение Dec 2 2012, 15:27
Сообщение #6


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(kt361 @ Dec 2 2012, 19:24) *
На КЗ не стоит рассчитывать...

если на выходе одного передатчика 1, а на выходе другого 0, то они в режиме КЗ
Go to the top of the page
 
+Quote Post
kt361
сообщение Dec 2 2012, 15:39
Сообщение #7





Группа: Участник
Сообщений: 11
Регистрация: 28-10-09
Пользователь №: 53 272



Точно. Но в драйверах ставят защиту от КЗ.
Я рассчитываю использовать ST485. Плюс можно поставить резисторы на выход в линию.
Go to the top of the page
 
+Quote Post
kt361
сообщение Dec 2 2012, 16:47
Сообщение #8





Группа: Участник
Сообщений: 11
Регистрация: 28-10-09
Пользователь №: 53 272



Цитата(Lagman @ Dec 2 2012, 19:15) *
похоже на CAN


CAN - дорого: Нужен Контроллер с CAN (120-200р) + драйвер шины .
RS-485: Контроллер за 50 р я присмотрел + RS485 (30 р).
Go to the top of the page
 
+Quote Post
=AK=
сообщение Dec 3 2012, 03:46
Сообщение #9


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(kt361 @ Dec 3 2012, 00:38) *
Контроллер всегда слушает то, что творится в линии. Если линия свободна от передаваемых данных, котроллер может передавать свои данные. Если передаваемый байт не совпал с принятым, значит произошла одновременная отправка с другим контроллером. В этом случае оба затыкаются на время передачи двух символов и выбирают на рандом - начать отправлять снова, или ждать.


Используйте приемопередатчики CAN. Они представляют собой помесь RS485 и передатчиков с открытым коллектором, поэтому нечувствительны к столкновениям.

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

А для тех редких случаев, когда два узла начали передавать одновременно и потому не обнаружили столкновения в самом начале, там уже можно обнаруживать столкновения по несовпадению переданных и принятых байт, затыкаться и ждать рэндом интервал.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 3 2012, 05:28
Сообщение #10


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Lagman @ Dec 2 2012, 19:15) *
похоже на CAN
+1


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 3 2012, 05:47
Сообщение #11


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Есть такой лисапедег

Цитата
Имеется доминантный и рецессивный сигналы, как в CAN. В случае с проводами (кто знает, может я ещё и радио или ИК свет буду использовать) доминантный — это прижимание линии данных к земле. В обычном состоянии линия данных имеет подтяжку к +5В. Таким образом, когда устройство видит, что линия уже прижата к земле, оно понимает, что какое-то другое устройство уже шлёт данные, и ждёт освобождения линии. Сами данные кодируются длиною доминантных сигналов. 1T — ноль, 3T — единица, пауза между ними — 1T. Каждая передача начинается инициализацией в виде длинного сигнала в 10T.


CAN для нищебродов sm.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
kt361
сообщение Dec 3 2012, 07:06
Сообщение #12





Группа: Участник
Сообщений: 11
Регистрация: 28-10-09
Пользователь №: 53 272



Так. ладно. разочаруюсь в RS485.

В CAN, как я понимаю, нет адресации, но есть непонятные мне пока фильтры сообщений (смотрю в сторону stm8s208). Даже можно постараться влезть в 8 байт данных для своих нужд.

Мне хотелось, чтобы устройства могли посылать широковещательные пакеты и направленные одному адресату.
Т.е. каждое устройство имеет свой идентификатор (0-254). Зашит в EEPROM, не меняется никогда и заведомо уникален в рамках одной сети.
Первый байт в пакете пусть будет отвечать за адресацию этого сообщения. если 0-254 - принимает ответственное устройство, если 255 - значит, широковещательный пакет, принимают все устройства.

В добавок мне нужно, чтобы была возможность перепрошить то или иное устройство в составе сети по этой же сети. Как понимаю из аппноута, стандартным бутлодером мне это не удастся - столкновение протоколов. Где прочитать о создании своего бутлодера для STM8?

Как наименьшей кровью реализовать такую или похожую схему? Для чего нужны фильтры, и помогу ли они мне?

Сообщение отредактировал kt361 - Dec 3 2012, 07:17
Go to the top of the page
 
+Quote Post
редактор
сообщение Dec 3 2012, 07:32
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



раз уж речь зашла о CAN, и стандартные протоколы не устраивают (непонятно и т.д), то в заголовок CAN-сообщения можно вставить некоторую информацию (например адрес устройства, отправляющего пакет). Пакеты в CAN принимают все устройства, но используют только те, кому это необходимо. Остальные отбраковывают пакет с помощью фильтров (аппаратно) и программно.
Если использовать расширенные пакеты, то в 29 бит заголовка можно впихнуть очень много.
Ограничением в 8 байт на пакет не пугайтесь. Можно организовать мультипакетную передачу, и собирать из фрагментов единое сообщение.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Dec 3 2012, 13:01
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата
если 255 - значит, широковещательный пакет, принимают все устройства.

Для этого существует 9-бит
Цитата
Так. ладно. разочаруюсь в RS485
.
Перед тем как разочаровываться , Вы разбритесь , что из себя представляет техническая сторона RS485 и протоколы для обмена
в сети.


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
kt361
сообщение Dec 3 2012, 13:27
Сообщение #15





Группа: Участник
Сообщений: 11
Регистрация: 28-10-09
Пользователь №: 53 272



Так помогите разобраться.
В RS ничего кроме физической реализации нет.

Сообщение отредактировал kt361 - Dec 3 2012, 13:28
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 9th August 2025 - 22:31
Рейтинг@Mail.ru


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