Удлинитель последовательного интерфейса

Цель

Создание беспроводного канала для замены последовательного интерфейса

Что потребуется

  • Модуль MBee-868-2.0 или MBee-868-3.0 – 2 шт
  • Антенны 868 МГц с разъемом SMA - 2 шт
  • Плата MB-USBridge – 2 шт
  • USB-провод – 2 шт
  • Компьютер с терминальной программой
  • Плата MB-Tag – 1 шт (опционально)

Что делаем

Модуль на плате MB-USBridge

  1. Устанавливаем оба модуля на платы MB-USBridge, в соответствии с изображением.
  2. Предполагаем, что ПО SerialStar в модуль уже загружено. Если нет, то посмотрите, как это сделать здесь. Не забываем сбросить все настройки к заводским значениям. Там рассказано, как это сделать.
  3. Если Вы проводите эксперимент на столе, то антенну достаточно установить на один модуль. Если требуются более значительные расстояния, то антенну надо иметь на обоих модулях.
  4. Подключаем обе платы к компьютеру и все. Можно проверять.

Проверяем

  1. Запускаем пару копий терминальной программы.
  2. Выбираем в каждом окне соответствующие номера портов.
  3. Устанавливаем параметры порта 9600 8N1 CTS/RTS.
  4. Если все правильно, то все, что печатаем в одном окне, должно появляется в другом.

Что-то не работает

  1. А точно 9600 8N1 CTS/RTS?
  2. Модули разнесены хотя бы на метр?
  3. Все перепробовали и все равно ничего не получается? Ну тогда на форум или в почту.

Для тех, кому требуется нечто большее

Ниже вопросы, которые обычно возникают в этой точке и ответы на них

Как мне оценить дальность связи, если под рукой нет второго компьютера или ноутбука?

Очень просто. На одном из модулей отключаем вход управления потоком CTS. Для этого отдаем команды AT R7⏎ и AT CN⏎ (здесь и далее  ⏎ означает нажатие клавиши «ENTER»).

Берем плату MB-Tag, устанавливаем на нее этот модуль и относим в требуемую точку пространства. Замыкаем с помощью перемычки линии UART TX и UART RX (контакты №8 и №9 разъема X7). Если Вы надеетесь, что проведете эксперимент быстро, то вставляете батарейку CR2032 и замыкаете JP 1. Можно бежать к компьютеру, к которому подключен второй модуль, и что-нибудь напечатать в терминале. Если связь устойчивая, то каждый символ должен повторяться. Тем самым мы сможем судить о надежности линии связи в обоих направлениях. Только предупреждаем, что модуль, установленный на MB-Tag, потребляет что-то около 25мА. Поэтому батарейки CR2032 надолго не хватит. Если Вы предполагаете, что эксперимент затянется, то сразу позаботьтесь о более мощном источнике питания. Подключить его можно к разъему X11. Две последовательные батарейки АА будут оптимальным выбором для того, чтобы эксперимент не закончился на самом интересном месте.

Мой сосед, который тоже осваивает SerialStar, жалуетс я, что у него в терминал идет поток непонятных данных. Что делать?

Ничего удивительного. Ведь на модулях адрес для передачи оставлен нами «по умолчанию». А он установлен как широковещательный 0xFFFF. Вот поэтому, все, что Вы печатаете в терминале, немедленно становится известно соседу. Если Вы сторонник более современных способов общения, то надо уходить от широковещательной связи и переходить в режим «точка-точка». Для этого устанавливаем на обоих модулях отличающиеся адреса с помощью команды «AT MY». Затем меняем командой «AT TX» в одном модуле адрес для передачи на собственный адрес второго модуля и тоже самое делаем на втором модуле. Если Вам понятнее язык формул, то надо чтобы выполнялись следующие равенства: MYID1=TXID2, MYID2=TXID1. А еще можно перейти на другой частотный канал, изменить битовую скорость, идентификатор сети или системы. Словом, средств, которые предоставляет SerialStar, достаточно, чтобы не толкаться в эфире.

Все прекрасно работает на скорости 9600 бит/с, но мне этого мало. С помощью программы SycmcBootLoader я установил желаемую скорость, но улучшения не заметил. Что делать?

Все понятно. Вы увеличили скорость передачи по UART, однако не поинтересовались, а влезет ли увеличенный поток данных в эфирный канал. Эфирная скорость, установлена «по умолчанию» 38400 бит/сек. Но ведь не весь передаваемый трафик является полезным. Есть же и преамбулы, и маршрутные заголовки, служебные поля ну и так далее. Да и вообще, данные в эфире передаются пакетами, а не льются непрерывным потоком как по UART. Необходимо же еще и организовать обратный канал. Вот отсюда и получается, что эфирная скорость должна значительно превышать скорость UART, если требуется передавать потоки данных, соизмеримые с битовой скоростью UART. Другими словами, при увеличении скорости потока, потребуется пропорциональное увеличение эфирной битовой скорости. Доступные значения и AT-команда для этого приводятся в полной документации на проект Техническое руководстве ПО «SerialStar». Помните только, что увеличение битовой скорости неизбежно приведет к падению дальности устойчивой связи.

Результатами доволен. Мне надо быстро заменить, на время поиска обрыва, провод от панели оператора к контроллеру вентиляции, на беспроводной интерфейс. Что делать, если контроллер имеет только RS485?

Все просто. Вам потребуется простейший трансивер RS485-UART. Только UART должен иметь логические уровни 3,3В. Соединяете его с модулем MBee по схеме RX->TX, TX->RX и настраиваете один из выводов модуля на работу в качестве сигнала управления драйвером RS485. Как это делается, объясняется как в Техническом руководстве ПО «SerialStar», так и в следующей главе. У нас для таких задач есть плата MB-Serial. С ней немного все проще потому, что у нее драйвер RS485 автоматический и не требует настройки сигнала управления. Вставили и все заработало.

Необходимое предупреждение

Если Вы ставите своей задачей замену проводного канала беспроводным, то необходимо принимать во внимание тот факт, что не все протоколы, которые ориентированы на работу в проводных линиях связи, допускают бесшовную замену радиоинтерфейсом. Дело тут в специфике радиоканала, а именно в пакетном способе передачи. Ведь в случае с проводом, особенно если линия дуплексная, теоретически можно передавать данные непрерывным потоком. С радиолинией такое не проходит. Надо всегда делать паузу в передаче, чтобы дать время на получение данных во встречном направлении. Поэтому потоки неизбежно разбиваются на пакеты. Даже если исходный протокол тоже использует пакетный способ передачи, то еще не факт, что длина этого пакета совпадет с длиной эфирного пакета. Хорошо еще, если длина исходного пакета меньше эфирного, тогда есть большая вероятность того, что исходный пакет уйдет в эфир не фрагментированным. В этом случае замена проводного протокола произойдет, скорее всего, безболезненно, т.е. без необходимости адаптации исходных протоколов. Если же Вы столкнетесь с обратной ситуацией, когда исходный пакет длиннее эфирного, то он неизбежно будет передан фрагментами. А вот тут уже неизвестно как поведет себя используемый протокол. Допускает он разрывы внутри пакета или нет. Позволяет он настраивать максимальное время ожидания получения недостающей части пакета (регулировать таймауты) или нет. Современные протоколы в области промышленной автоматизации, как правило, имеют такие возможности. Главное, чтобы диапазоны настроек позволили осуществить компенсацию разрывов пакетов и свели бы процент их потерь к допустимому значению.

Для справки: эфирный пакет, применяемый в SerialStar, имеет максимальную длину полезной нагрузки 40 байт. Если Вы применяете шифрование, то длина полезной нагрузки уменьшается и становится равной 32 байта.