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

|
Доброго времени суток!!! Есть устройство, описание приведено в прикрепленном файле. И ведет себя немножко странно: Если в сети подключено одно устройство все работает как на алгоритме и без сбоев. Стоит подключить второе устройство оба устройства перестают отвечать. Но если посылать команды то они выполняются. На данный момент у меня нет устройства чтоб подключить к сети для мониторинга и поэтому что творится на линии не знаю. Посоветуйте в какую сторону копать.
Сообщение отредактировал xoz - Aug 25 2009, 13:50
Эскизы прикрепленных изображений
|
|
|
|
|
 |
Ответов
|
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, 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, то на него никто из слейвов не имеет права отвечать.
|
|
|
|
Сообщений в этой теме
xoz Устройство на RS485 странное поведение Aug 25 2009, 13:48  _Pasha Цитата(xoz @ Aug 25 2009, 19:14) С таймин... Aug 25 2009, 16:24      =AK= Цитата(xoz @ Aug 26 2009, 14:15) Определе... Aug 26 2009, 05:24           =AK= Цитата(_Pasha @ Aug 26 2009, 22:12) Тайма... Aug 26 2009, 12:51      Dog Pawlowa Цитата(xoz @ Aug 26 2009, 07:45) Определе... Aug 26 2009, 06:01       =AK= Цитата(Dog Pawlowa @ Aug 26 2009, 15:31) ... Aug 26 2009, 06:50        Dog Pawlowa Цитата(=AK= @ Aug 26 2009, 09:50) Если у ... Aug 26 2009, 09:14         MrYuran Цитата(Dog Pawlowa @ Aug 26 2009, 13:14) ... Aug 26 2009, 09:34          Dog Pawlowa Цитата(MrYuran @ Aug 26 2009, 12:34) даже... Aug 26 2009, 10:13         xoz Цитата(Dog Pawlowa @ Aug 26 2009, 14:14) ... Aug 26 2009, 10:58          rezident Цитата(xoz @ Aug 26 2009, 16:58) О каналь... Aug 26 2009, 12:31       SSerge Цитата(Dog Pawlowa @ Aug 26 2009, 12:01) ... Aug 26 2009, 07:22 rezident Если "это" интерфейс связи типа RS485, т... Aug 25 2009, 14:54 DpInRock Тогда все понятно.
Вы делаете сеть. Физический ур... Aug 26 2009, 07:47 Rst7 ЦитатаА про прембулу перед адресом - не понял, зач... Aug 26 2009, 12:46 _Pasha Спасибо, понятно. Я это давным-давно обозвал ... Aug 26 2009, 12:55
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|