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

|
Доброго времени суток!!! Есть устройство, описание приведено в прикрепленном файле. И ведет себя немножко странно: Если в сети подключено одно устройство все работает как на алгоритме и без сбоев. Стоит подключить второе устройство оба устройства перестают отвечать. Но если посылать команды то они выполняются. На данный момент у меня нет устройства чтоб подключить к сети для мониторинга и поэтому что творится на линии не знаю. Посоветуйте в какую сторону копать.
Сообщение отредактировал xoz - Aug 25 2009, 13:50
Эскизы прикрепленных изображений
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 26)
|
Aug 25 2009, 16:14
|
Группа: Участник
Сообщений: 14
Регистрация: 22-12-08
Пользователь №: 42 655

|
Цитата(DpInRock @ Aug 25 2009, 18:53)  Это не описание. Вы ошиблись. Безпроблем! Можно называть это как угодно  главное я думаю суть понятна. to rezident: Да это как раз таки на ADM 485 реализовано. С таймингами я довольно долго игрался Наверно придется собрать чтонить анализирующее линию.
|
|
|
|
|
Aug 25 2009, 16:30
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(xoz @ Aug 25 2009, 22:14)  С таймингами я довольно долго игрался Наверно придется собрать чтонить анализирующее линию. А какой протокол вы используете? Адресация в нем присутствует? Если да, то анализировать линию нет смысла. Оба/все ведомые принимают любой пакет/запрос, но отвечают только в том случае, если сетевой адрес в пакете совпадает с их собственным. По поводу таймингов могу подсказать, что ведущий должен иметь два настраиваемых параметра: а) время ожидания ответа ведомого (в него входит время, необходимое для передачи пакета запроса) б) минимальное время перед началом передачи запроса Соответственно у ведомого параметры: а) максимальное время подготовки ответа (от получения запроса до начала передачи пакета ответа) б) минимальное время перед началом передачи запроса Дополнительные параметры для обоих (и ведущего и ведомого) а) время между переключением трансивера RS485 на передачу и собственно началом передачи пакета б) время удержания трансивера RS485 в режиме передачи после окончания передачи пакета Реализовав все перечисленные опции, вы сможете поддержать почти любой используемый в сетях RS485 протокол связи типа "запрос-ответ".
|
|
|
|
|
Aug 25 2009, 21:22
|
Группа: Участник
Сообщений: 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 тик включаю на прием отключаю таймер Это все без проблем работает если один ведомый Но скорей всего мне надо будет пересмотреть весь алгоритм
|
|
|
|
|
Aug 26 2009, 04:45
|
Группа: Участник
Сообщений: 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 байт
|
|
|
|
|
Aug 26 2009, 05:37
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(xoz @ Aug 26 2009, 07:45)  скорость передачи 9600 Максимальная длина пакетов 9 байт ПримИте такой протокол Код <адрес вызываемого> <длина пакета> <адрес вызывающего> <команда/статус> [данные] <crc8> И не мучайтесь  Мин размер пакета 5 байт
|
|
|
|
|
Aug 26 2009, 06:01
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(xoz @ Aug 26 2009, 07:45)  Определены командные символы Кодовая таблица ASCII существует десятки лет, STX, ETX,ETB давно определены и стандартизованы европейскими стандартами. Обертка пакета тоже давно устоялась. Но "мы пойдем другим путем!" "Какую будем делать ширину ЖД?"
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Aug 26 2009, 07:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(Dog Pawlowa @ Aug 26 2009, 12:01)  "Какую будем делать ширину ЖД?" Как в Модбасе? или на 89 миллиметров шире?
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Aug 26 2009, 09:14
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(=AK= @ Aug 26 2009, 09:50)  Если у топикстартера фундаментальная проблема с протоколом, то смена этих рюшечек ему точно совсем никак не поможет. Конечно, это брюзжание  У топикстартера проблема с инструментарием. Осциллограф позволит узнать, кто послал посылку, кто ее получил, кто не получил, а кто зажал ответ. Нет осциллографа - светодиоды помогут. Нет светодиодов - тестер (проверить сигнал направления после посылок). Нужно учиться отлаживать программу и находить собственные ошибки. Любым доступным способом. Ничего нет - ну что ж - будем учить строить автоматы состояний приемо-передачи. Типа такого...
Dmb_mast.pdf ( 23.2 килобайт )
Кол-во скачиваний: 260Легкой жизни не будет!
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Aug 26 2009, 09:34
|

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

|
Цитата(Dog Pawlowa @ Aug 26 2009, 13:14)  Легкой жизни не будет!  Ну почему, если подключили второе устройство и всё упало - то тут всё просто. У нас круче было. 512 модулей в сети RS-485 (только не говорите, что это невозможно), управляют решёткой ФАР. Всё работает. Но есть одна команда, которая загружает в память модуля массив из 8кБ. И каждый раз на одном и том же байте (где-то после первой тысячи) происходит сбой и пара-тройка байт пишется с ошибками. И что только не пробовали. Согласовывали, резисторы вешали, земли выравнивали, даже конденсатор вешали (крайняя мера, всегда помогало!) А тут ни в какую. Дело происходило в последний день (вернее, уже ночь) перед сдачей (или несдачей) системы. На кону пара сотен миллионов (рублей). Из 6 присутствующих трое были начальники отделов, и они жутко мотивировали. Иногда забегал зам главного инженера и тоже добавлял мотивации. Помог крутой ажилент (тогда ещё HP) за $7000, с памятью на мегасемпл и функцией мегазум. Рассмотрели коллизию, поняли причину. Рвали волосы, посыпали головы пеплом...
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Aug 26 2009, 10:58
|
Группа: Участник
Сообщений: 14
Регистрация: 22-12-08
Пользователь №: 42 655

|
Цитата(Dog Pawlowa @ Aug 26 2009, 14:14)  Легкой жизни не будет!  О легкой жизни и не мечтал  Цитата(DpInRock @ Aug 26 2009, 12:47)  Тогда все понятно. Вы делаете сеть. Физический уровень вам делает микросхема. А вот канальный вы даже и не думали делать. Сразу перепрыгнули на уровень приложения. Люди вовсе не от скуки рисуют многоуровневую систему протоколов для сетевого общения. О канальном уровне где можно посмотреть? Хотяб краткое разъяснение что это и зачем.
|
|
|
|
|
Aug 26 2009, 11:13
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(=AK= @ Aug 26 2009, 08:53)  Непонятно, чем он принципиально лучше. Тьфу! Забыл. Там был 9-битный протокол. Адрес, соотв. с 9-битом == 1. Цитата Для него остается в силе мой вопрос: что гарантирует отсутствие ложной реакции ведомого на данные, передаваемые другим ведомым? Адрес получателя.
|
|
|
|
|
Aug 26 2009, 12:42
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(=AK= @ Aug 26 2009, 15:33)  Для полного счастья ему не хватает только преабулы перед первым байтом (адресом) и жестко оговоренных таймаутов  Таймаут общий за счет того, что слейвы обязаны ответить. А про прембулу перед адресом - не понял, зачем? ЗЫ: в первом посте о протоколе - забыл отдельно сказать, что слейв отвечает так же, только вместо команды выдает статус Код <адрес> <длина пакета> <адрес отправителя> <статус> [данные] <CRC8> ЗЗЫ: адрес общего вызова 0х00. Если пакет подписан адресом отправителя 0х00, то на него никто из слейвов не имеет права отвечать.
|
|
|
|
|
Aug 26 2009, 12:51
|

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

|
Цитата(_Pasha @ Aug 26 2009, 22:12)  Таймаут общий за счет того, что слейвы обязаны ответить. А про прембулу перед адресом - не понял, зачем? Если ввести правило, по которому пауза между соседними байтами в сообщении не может превышать, например, одного байт-интервала, то при помощи преамбулы удается резко поднять помехоустойчивость. Преамбула состоит в том, что передатчик включает свой RS-485 трансивер на передачу, и молчит в течении, скажем, 2-х байт-интервалов. Вследствие упомянутого правила все приемники, обнаружив длинную паузу, сбрасывают свои приемные тракты в исходное состояние и изготавливаются к приему первого байта сообщения. Без преамбулы помеховый сигнал на линии может инициировать начало ложного приема. Ведь приемники RS-485 очень чувствительные, а на свободную линию, когда ни один из передатчиков не включен, легко наводятся помехи.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|