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

 
 
> Устройство на RS485 странное поведение
xoz
сообщение Aug 25 2009, 13:48
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 22-12-08
Пользователь №: 42 655



Доброго времени суток!!!
Есть устройство, описание приведено в прикрепленном файле. И ведет себя немножко странно:
Если в сети подключено одно устройство все работает как на алгоритме и без сбоев. Стоит подключить второе устройство оба устройства перестают отвечать. Но если посылать команды то они выполняются.
На данный момент у меня нет устройства чтоб подключить к сети для мониторинга и поэтому что творится на линии не знаю. Посоветуйте в какую сторону копать.

Сообщение отредактировал xoz - Aug 25 2009, 13:50
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 26)
DpInRock
сообщение Aug 25 2009, 13:53
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата
описание

Это не описание. Вы ошиблись.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 25 2009, 14:54
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Если "это" интерфейс связи типа RS485, то очевидно, что проблема где-то в реализации протокола и/или управлении направлением драйвера RS485 или таймингами, связанными с этим процессом.
Go to the top of the page
 
+Quote Post
xoz
сообщение Aug 25 2009, 16:14
Сообщение #4





Группа: Участник
Сообщений: 14
Регистрация: 22-12-08
Пользователь №: 42 655



Цитата(DpInRock @ Aug 25 2009, 18:53) *
Это не описание. Вы ошиблись.

Безпроблем! Можно называть это как угодно biggrin.gif главное я думаю суть понятна.

to rezident: Да это как раз таки на ADM 485 реализовано. С таймингами я довольно долго игрался wacko.gif
Наверно придется собрать чтонить анализирующее линию.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 25 2009, 16:24
Сообщение #5


;
******

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



Цитата(xoz @ Aug 25 2009, 19:14) *
С таймингами я довольно долго игрался wacko.gif

У Вас там коллизии случайно не случилось? smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 25 2009, 16:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(xoz @ Aug 25 2009, 22:14) *
С таймингами я довольно долго игрался wacko.gif
Наверно придется собрать чтонить анализирующее линию.
А какой протокол вы используете? Адресация в нем присутствует? Если да, то анализировать линию нет смысла. Оба/все ведомые принимают любой пакет/запрос, но отвечают только в том случае, если сетевой адрес в пакете совпадает с их собственным.
По поводу таймингов могу подсказать, что ведущий должен иметь два настраиваемых параметра:
а) время ожидания ответа ведомого (в него входит время, необходимое для передачи пакета запроса)
б) минимальное время перед началом передачи запроса
Соответственно у ведомого параметры:
а) максимальное время подготовки ответа (от получения запроса до начала передачи пакета ответа)
б) минимальное время перед началом передачи запроса
Дополнительные параметры для обоих (и ведущего и ведомого)
а) время между переключением трансивера RS485 на передачу и собственно началом передачи пакета
б) время удержания трансивера RS485 в режиме передачи после окончания передачи пакета
Реализовав все перечисленные опции, вы сможете поддержать почти любой используемый в сетях RS485 протокол связи типа "запрос-ответ".
Go to the top of the page
 
+Quote Post
xoz
сообщение Aug 25 2009, 21:22
Сообщение #7





Группа: Участник
Сообщений: 14
Регистрация: 22-12-08
Пользователь №: 42 655



Цитата(rezident @ Aug 25 2009, 21:30) *
А какой протокол вы используете? Адресация в нем присутствует? Если да, то анализировать линию нет смысла. Оба/все ведомые принимают любой пакет/запрос, но отвечают только в том случае, если сетевой адрес в пакете совпадает с их собственным.
По поводу таймингов могу подсказать, что ведущий должен иметь два настраиваемых параметра:
а) время ожидания ответа ведомого (в него входит время, необходимое для передачи пакета запроса)
б) минимальное время перед началом передачи запроса
Соответственно у ведомого параметры:
а) максимальное время подготовки ответа (от получения запроса до начала передачи пакета ответа)
б) минимальное время перед началом передачи запроса
Дополнительные параметры для обоих (и ведущего и ведомого)
а) время между переключением трансивера RS485 на передачу и собственно началом передачи пакета
б) время удержания трансивера RS485 в режиме передачи после окончания передачи пакета
Реализовав все перечисленные опции, вы сможете поддержать почти любой используемый в сетях RS485 протокол связи типа "запрос-ответ".

Да там адресация присутствует.
реализовывал следующим путем(так как только учусь пожалуйста не пинайте)
Расчитал примерное время передачи самого длинного пакета, создал таймер с запасом(период в 2 раза больше времени посылки) и действия разбил по "тик"ам таймера.
Ведущий
1 тик включаю на передачу
2 тик передаю данные
3 тик включаю на прием
4 тик ожидаю данные и отсылаю на обработку
5 тик включаю на передачу

Ведомый
1. включаю на прием жду приема
2. если запрос для меня запускаю таймер
3. 1 тик включаю на передачу
4. 2 тик передаю
5. 3 тик включаю на прием отключаю таймер

Это все без проблем работает если один ведомый

Но скорей всего мне надо будет пересмотреть весь алгоритм maniac.gif
Go to the top of the page
 
+Quote Post
=AK=
сообщение Aug 26 2009, 03:42
Сообщение #8


pontificator
******

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



Цитата(xoz @ Aug 26 2009, 06:52) *
Да там адресация присутствует.
...
Это все без проблем работает если один ведомый

Расскажите, как реализована адресация.

Kаким образом ведомый знает, что текущая передача идет от мастера, а не от второго ведомого?
Go to the top of the page
 
+Quote Post
xoz
сообщение Aug 26 2009, 04:45
Сообщение #9





Группа: Участник
Сообщений: 14
Регистрация: 22-12-08
Пользователь №: 42 655



Цитата(=AK= @ Aug 26 2009, 08:42) *
Расскажите, как реализована адресация.

Определены командные символы
#define REDY 0xFE //запрос на состояние
#define REPLY 0xF0 //ответ от ведомого
#define COMMAND 0xF5//команда
#define END 0xFA //конец передачи

Запрос на состояние: REDY (адрес 1 байт) END
Ответ от ведомого: REPLY (адрес 1 байт) (данные)END
Команда: COMMAND(адрес 1 байт)(тип действия 2 байта) END

скорость передачи 9600
Максимальная длина пакетов 9 байт
Go to the top of the page
 
+Quote Post
=AK=
сообщение Aug 26 2009, 05:24
Сообщение #10


pontificator
******

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



Цитата(xoz @ Aug 26 2009, 14:15) *
Определены командные символы

Каким образом ведомый отличает " командные символы" от данных? Почему бы ведомому не отреагировать на данные, передаваемые от другого ведомого мастеру, таким же образом, как на команды от мастера - и не начать самому передавать данные?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 26 2009, 05:37
Сообщение #11


;
******

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



Цитата(xoz @ Aug 26 2009, 07:45) *
скорость передачи 9600
Максимальная длина пакетов 9 байт

ПримИте такой протокол
Код
<адрес вызываемого> <длина пакета> <адрес вызывающего> <команда/статус> [данные] <crc8>

И не мучайтесь smile.gif
Мин размер пакета 5 байт
Go to the top of the page
 
+Quote Post
=AK=
сообщение Aug 26 2009, 05:53
Сообщение #12


pontificator
******

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



Цитата(_Pasha @ Aug 26 2009, 15:07) *
ПримИте такой протокол

Непонятно, чем он принципиально лучше. Для него остается в силе мой вопрос: что гарантирует отсутствие ложной реакции ведомого на данные, передаваемые другим ведомым?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 26 2009, 06:01
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(xoz @ Aug 26 2009, 07:45) *
Определены командные символы

Кодовая таблица ASCII существует десятки лет, STX, ETX,ETB давно определены и стандартизованы европейскими стандартами.
Обертка пакета тоже давно устоялась.
Но "мы пойдем другим путем!" "Какую будем делать ширину ЖД?"


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
=AK=
сообщение Aug 26 2009, 06:50
Сообщение #14


pontificator
******

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



Цитата(Dog Pawlowa @ Aug 26 2009, 15:31) *
Кодовая таблица ASCII существует десятки лет, STX, ETX,ETB давно определены и стандартизованы европейскими стандартами.
Обертка пакета тоже давно устоялась.

Обертка пакета и коды символов - это мелкие "рюшечки", та малая составляющая протокола, которая мало на что влияет. Если у топикстартера фундаментальная проблема с протоколом, то смена этих рюшечек ему точно совсем никак не поможет.
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 26 2009, 07:22
Сообщение #15


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(Dog Pawlowa @ Aug 26 2009, 12:01) *
"Какую будем делать ширину ЖД?"

Как в Модбасе?
или на 89 миллиметров шире?


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Aug 26 2009, 07:47
Сообщение #16


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Тогда все понятно.
Вы делаете сеть. Физический уровень вам делает микросхема. А вот канальный вы даже и не думали делать. Сразу перепрыгнули на уровень приложения.
Люди вовсе не от скуки рисуют многоуровневую систему протоколов для сетевого общения.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 26 2009, 09:14
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(=AK= @ Aug 26 2009, 09:50) *
Если у топикстартера фундаментальная проблема с протоколом, то смена этих рюшечек ему точно совсем никак не поможет.

Конечно, это брюзжание smile.gif

У топикстартера проблема с инструментарием.
Осциллограф позволит узнать, кто послал посылку, кто ее получил, кто не получил, а кто зажал ответ.
Нет осциллографа - светодиоды помогут.
Нет светодиодов - тестер (проверить сигнал направления после посылок).
Нужно учиться отлаживать программу и находить собственные ошибки. Любым доступным способом.

Ничего нет - ну что ж - будем учить строить автоматы состояний приемо-передачи.
Типа такого... Прикрепленный файл  Dmb_mast.pdf ( 23.2 килобайт ) Кол-во скачиваний: 260


Легкой жизни не будет! smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 26 2009, 09:34
Сообщение #18


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

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



Цитата(Dog Pawlowa @ Aug 26 2009, 13:14) *
Легкой жизни не будет! smile.gif

Ну почему, если подключили второе устройство и всё упало - то тут всё просто.
У нас круче было.
512 модулей в сети RS-485 (только не говорите, что это невозможно), управляют решёткой ФАР.
Всё работает. Но есть одна команда, которая загружает в память модуля массив из 8кБ.
И каждый раз на одном и том же байте (где-то после первой тысячи) происходит сбой и пара-тройка байт пишется с ошибками.
И что только не пробовали.
Согласовывали, резисторы вешали, земли выравнивали, даже конденсатор вешали (крайняя мера, всегда помогало!)
А тут ни в какую.
Дело происходило в последний день (вернее, уже ночь) перед сдачей (или несдачей) системы.
На кону пара сотен миллионов (рублей).
Из 6 присутствующих трое были начальники отделов, и они жутко мотивировали.
Иногда забегал зам главного инженера и тоже добавлял мотивации.

Помог крутой ажилент (тогда ещё HP) за $7000, с памятью на мегасемпл и функцией мегазум.
Рассмотрели коллизию, поняли причину.

Рвали волосы, посыпали головы пеплом...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 26 2009, 10:13
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(MrYuran @ Aug 26 2009, 12:34) *
даже конденсатор вешали (крайняя мера, всегда помогало!)

да ... Действительно все меры ... biggrin.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
xoz
сообщение Aug 26 2009, 10:58
Сообщение #20





Группа: Участник
Сообщений: 14
Регистрация: 22-12-08
Пользователь №: 42 655



Цитата(Dog Pawlowa @ Aug 26 2009, 14:14) *
Легкой жизни не будет! smile.gif

О легкой жизни и не мечтал biggrin.gif

Цитата(DpInRock @ Aug 26 2009, 12:47) *
Тогда все понятно.
Вы делаете сеть. Физический уровень вам делает микросхема. А вот канальный вы даже и не думали делать. Сразу перепрыгнули на уровень приложения.
Люди вовсе не от скуки рисуют многоуровневую систему протоколов для сетевого общения.

О канальном уровне где можно посмотреть? Хотяб краткое разъяснение что это и зачем.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 26 2009, 11:13
Сообщение #21


;
******

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



Цитата(=AK= @ Aug 26 2009, 08:53) *
Непонятно, чем он принципиально лучше.

Тьфу! Забыл. Там был 9-битный протокол. Адрес, соотв. с 9-битом == 1.

Цитата
Для него остается в силе мой вопрос: что гарантирует отсутствие ложной реакции ведомого на данные, передаваемые другим ведомым?

Адрес получателя.
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 26 2009, 12:31
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(xoz @ Aug 26 2009, 16:58) *
О канальном уровне где можно посмотреть? Хотяб краткое разъяснение что это и зачем.
Сетевая модель OSI
Go to the top of the page
 
+Quote Post
=AK=
сообщение Aug 26 2009, 12:33
Сообщение #23


pontificator
******

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



Цитата(_Pasha @ Aug 26 2009, 20:43) *
Тьфу! Забыл. Там был 9-битный протокол. Адрес, соотв. с 9-битом == 1.

Вот с этого и надо было начинать. Тогда, действительно, ваш протокол вполне работоспособен. Для полного счастья ему не хватает только преабулы перед первым байтом (адресом) и жестко оговоренных таймаутов smile.gif
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 26 2009, 12:42
Сообщение #24


;
******

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



Цитата(=AK= @ Aug 26 2009, 15:33) *
Для полного счастья ему не хватает только преабулы перед первым байтом (адресом) и жестко оговоренных таймаутов smile.gif

Таймаут общий за счет того, что слейвы обязаны ответить.
А про прембулу перед адресом - не понял, зачем?
ЗЫ: в первом посте о протоколе - забыл отдельно сказать, что слейв отвечает так же, только вместо команды выдает статус
Код
<адрес> <длина пакета> <адрес отправителя> <статус> [данные] <CRC8>

ЗЗЫ: адрес общего вызова 0х00. Если пакет подписан адресом отправителя 0х00, то на него никто из слейвов не имеет права отвечать.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 26 2009, 12:46
Сообщение #25


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
А про прембулу перед адресом - не понял, зачем?


Ну например в виде байта 0xFF для борьбы с шумами линии, когда она в неактивном состоянии. После передачи 0xFF все приемники станут в одинаково готовое состояние для приема байта адреса в независимости от предыдущих помех на линии.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
=AK=
сообщение Aug 26 2009, 12:51
Сообщение #26


pontificator
******

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



Цитата(_Pasha @ Aug 26 2009, 22:12) *
Таймаут общий за счет того, что слейвы обязаны ответить.
А про прембулу перед адресом - не понял, зачем?


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

Без преамбулы помеховый сигнал на линии может инициировать начало ложного приема. Ведь приемники RS-485 очень чувствительные, а на свободную линию, когда ни один из передатчиков не включен, легко наводятся помехи.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 26 2009, 12:55
Сообщение #27


;
******

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



Спасибо, понятно. Я это давным-давно обозвал "продувкой линии" laughing.gif и теория потому прошла мимо.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:33
Рейтинг@Mail.ru


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