Перейти к содержанию
    

Устройство на RS485 странное поведение

Тогда все понятно.

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

Люди вовсе не от скуки рисуют многоуровневую систему протоколов для сетевого общения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у топикстартера фундаментальная проблема с протоколом, то смена этих рюшечек ему точно совсем никак не поможет.

Конечно, это брюзжание :)

 

У топикстартера проблема с инструментарием.

Осциллограф позволит узнать, кто послал посылку, кто ее получил, кто не получил, а кто зажал ответ.

Нет осциллографа - светодиоды помогут.

Нет светодиодов - тестер (проверить сигнал направления после посылок).

Нужно учиться отлаживать программу и находить собственные ошибки. Любым доступным способом.

 

Ничего нет - ну что ж - будем учить строить автоматы состояний приемо-передачи.

Типа такого... Dmb_mast.pdf

 

Легкой жизни не будет! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Легкой жизни не будет! :)

Ну почему, если подключили второе устройство и всё упало - то тут всё просто.

У нас круче было.

512 модулей в сети RS-485 (только не говорите, что это невозможно), управляют решёткой ФАР.

Всё работает. Но есть одна команда, которая загружает в память модуля массив из 8кБ.

И каждый раз на одном и том же байте (где-то после первой тысячи) происходит сбой и пара-тройка байт пишется с ошибками.

И что только не пробовали.

Согласовывали, резисторы вешали, земли выравнивали, даже конденсатор вешали (крайняя мера, всегда помогало!)

А тут ни в какую.

Дело происходило в последний день (вернее, уже ночь) перед сдачей (или несдачей) системы.

На кону пара сотен миллионов (рублей).

Из 6 присутствующих трое были начальники отделов, и они жутко мотивировали.

Иногда забегал зам главного инженера и тоже добавлял мотивации.

 

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

Рассмотрели коллизию, поняли причину.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

даже конденсатор вешали (крайняя мера, всегда помогало!)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Легкой жизни не будет! :)

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

 

Тогда все понятно.

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

Люди вовсе не от скуки рисуют многоуровневую систему протоколов для сетевого общения.

О канальном уровне где можно посмотреть? Хотяб краткое разъяснение что это и зачем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Непонятно, чем он принципиально лучше.

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

 

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

Адрес получателя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О канальном уровне где можно посмотреть? Хотяб краткое разъяснение что это и зачем.
Сетевая модель OSI

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вот с этого и надо было начинать. Тогда, действительно, ваш протокол вполне работоспособен. Для полного счастья ему не хватает только преабулы перед первым байтом (адресом) и жестко оговоренных таймаутов :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для полного счастья ему не хватает только преабулы перед первым байтом (адресом) и жестко оговоренных таймаутов :)

Таймаут общий за счет того, что слейвы обязаны ответить.

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

ЗЫ: в первом посте о протоколе - забыл отдельно сказать, что слейв отвечает так же, только вместо команды выдает статус

<адрес> <длина пакета> <адрес отправителя> <статус> [данные] <CRC8>

ЗЗЫ: адрес общего вызова 0х00. Если пакет подписан адресом отправителя 0х00, то на него никто из слейвов не имеет права отвечать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Таймаут общий за счет того, что слейвы обязаны ответить.

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, понятно. Я это давным-давно обозвал "продувкой линии" :laughing: и теория потому прошла мимо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...