![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
DimonSDA |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.4.2009 Репутация: нет Всего: нет |
Здравствуйте, меня интересуют следущие вопросы:
1) Каким образом происходит адресация устройств в RS-485 - аппаратно (посредством джамперов) или программно ? Если адресация происходит программно, то каким образом назначается адрес устройству - он уже зашит в его прошивку или его нужно туда как-то передать (типа как в USB) ? 2) Каково максимальное рабочее расстояние у этого интерфейса ? Практически везде встречаю что 1200 м, но также есть сведения что реально работает на 15 км. Реально ли 15км? 3) Может ли RS485 работать на скорости 19200 при расстоянии 1200 метров? 4) Может ли устройство работать на скорости 19600 или такой скорости вообще не существует? Насколько я понимаю скорости поддерживаемые RS485 такие-же как у RS-232. Или я неправ? 5) Существует ли спецификация интерфейса RS485 в виде pdf, я перерыл уже все, но так и не смог найти целостного документа, лишь разрозненные html где приводится весьма скудная информация. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
1. Этот вопрос происходит из-за путанице в голове понятий "интерфейс" и "протокол". Устройства, которые общаются цифровыми сигналами (не аналоговыми) адресуются так, как указано в спецификации на протокол. Например в протоколе ModBus первым передаваемым байтом идёт адрес устройства, которое должно ответить. Устройство должно принять всю посылку и в случае, если адрес в команде совпадает с его номером ответить ведущему. Т.е. правильный ответ - программно.
2. 1200 метров - это гарантированная длина кабеля, при котором будет устойчивый обмен данными. Работать будет и на больших линиях, но она должны при этом быть максимально качественной, т.е. правлильно согласовать шину, использовать кабель с наименьшим затуханием сигнала, ну и что бы на линию действовало как можно меньше наводок. И при этом всё стоит помнить, что чем выше скорость - тем короче должна быть линия связи. 3. Теоретически да. Но стоит помнить про предыдущий пункт. 4. Скорости 19600 среди "стандартных" нет. Тут следовало бы рассказать про тактирование и предделители, но неохота. Скажу одно - можно подобрать практически любую скорость обмена, но идеально точно это не всегда получится. А в некоторых случаях, когда нет доступа к предделителям, то вообще можно выбрать только стандартную скорость. 5. Не встречал, да в общем то и не нужно. Вот что по твоему спецификация на интерфейс? Спецификация должна только указать номиналы логических "1" и "0", сопротивлений между линиями, какие согласующие резисторы брать и т.д. По большому счёту в принципе этого знать не нужно, т.к. все существующие микросхемы как модулей UART, так и интефейсопреобразующих микросхем отвечают всем параметрам. А так в принципе кратко, но очень ёмко и понятно про интерфейс написано тута. Добавлено через 56 секунд И кстате тема не имеет никакого отношения к разделу "C/C++: Общие вопросы"... |
|||
|
||||
DimonSDA |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.4.2009 Репутация: нет Всего: нет |
А каким образом устройство узнает, что адрес указанный в принятом пакете соответствует именно ему? PS:
Извините за это, но я предпологал, что если речь пойдет о программном конфигурировании устройства (назначение адреса), то будет некорректно постить в другой ветке. А программу для работы с моим устройством я буду писать именно на С++. Это сообщение отредактировал(а) DimonSDA - 13.5.2009, 20:52 |
||||
|
|||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
Логично было бы завести переменную, в которой и хранить адрес этого самого устройства. И при получении данных сравнивать адрес в команде с этой переменной. А как изменять эту переменную - это уже другой вопрос. Тут всё зависит от того, что разработчики придумают. Можно джамперами, пожно ещё как. Например я для этих целей высосал из пальца свой "технический" протокол, с помощью которого я могу конфигурировать приборы как захочу. По спецификаии этого протокола прибор всегда откликается на нулевой адрес и на адрес, который хранится в той переменной. Нет, нет, нет и ещё раз нет. Во-первых у нас есть специальный раздел для всяких железок ("Программирование контроллеров"), во-вторых в теме ни слова не сказано, что будет использоваться С++, в-третьих не сказано что за устройства - компьютер или девайсы на базе каких-либо микроконтроллеров/микропроцессоров, в-четвёртых в этом разделе всё таки обсуждается сам язык С++, сложности использования самого языка, а не сложности усвоения попутной информации. Это сообщение отредактировал(а) UniBomb - 13.5.2009, 22:18 |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
UniBomb все подробно расписал, хочу только уточнить -
RS485 задает как будет передаваться сигнал по проводам (напряжения, последовательность передачи битов), он НИКАКИМ боком не задает ЧТО это все будет обозначать для устройств на линии RS485 Что у вас за устройства? |
|||
|
||||
DimonSDA |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.4.2009 Репутация: нет Всего: нет |
Это устройства спец. назначения, изготавливаются сторонним разработчиком, а я этими устройствами управляю с компа. Про адресацию в технических условиях ничего не говорится. Также нет никаких джамперов. Цепляются к компу через мультипортовую плату. Устройства служат для сбора информации от разных источников. Получается что любой пакет отправленный хостом будет принят всеми устройствами подключенными к шине, но для того-чтобы устройство, которому адресован этот пакет, распознало что адресовано именно оно, это устройство должно знать свой собственный адрес, для того, чтобы сравнить его с адресом, извлеченным из пакета. Так вот и непонятно откуда берется адрес внутри устройства. Тут есть три варианта: либо адрес жестко прошит в устройство (в моем случае неизвестен), либо этот адрес выставляется какими-нибудь джамперами (в моем случае их нет), либо задается программно. Тоесть остается програмно. Похоже разработчик просто забыл указать адреса устройств. Это сообщение отредактировал(а) DimonSDA - 14.5.2009, 18:23 |
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Тогда вам нужно трясти с разработчиков описание протокола обмена (или хотя бы название, если используется стандартный) Одного названия RS485 совершенно недостаточно |
||||
|
|||||
DimonSDA |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.4.2009 Репутация: нет Всего: нет |
Да этим и займусь, ведь все-таки за эти устройства деньги платим, а не даром получаем... Пусть уж потрудятся. Спасибо огромное всем откликнувшимся за помощь. Это сообщение отредактировал(а) DimonSDA - 14.5.2009, 21:41 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |