Pull to refresh
0
Directum
Цифровизация процессов и документов

Power-line communication. Часть 1 — Основы передачи данных по линиям электропередач

Reading time9 min
Views36K
Не так давно передо мной встала нетривиальная задачка — собрать устройство, которое могло бы по линиям электропередач (0,4 кВ), в сетях обычных бытовых потребителей, передавать некоторую информацию, а точнее — показания электросчетчиков.



Перед началом работы над созданием этого устройства, я мало понимал в цифровой обработке сигналов и в том, как работают компьютерные сети на физическом уровне. Нужно было быстро погрузиться в вопрос и выстроить план по созданию рабочего прототипа.
В процессе изучения я нашел очень много специализированной литературы по электронике, микроконтроллерам и цифровой обработке сигналов, которая очень помогла мне в этом. Но в самом начале пути для выбора направлений изучения мне бы пригодились обзорные статьи вроде этой.

Дальнейший материал — это выжимка из профессионального опыта в том виде, в котором я бы хотел это рассказать самому себе из прошлого. Многие факты сильно упрощены для лучшей читаемости.



Коммуникация


Начнём с абстракций. Представим, что нужно передать порцию информации от одного человека другому. На изображении: красный человечек — это передатчик, а синий — приёмник.



Для передачи информации будем использовать голос. Информация — это какой-то текст в нашей голове. Текст можно разбить на буквы и каждую букву представить в виде звукового сигнала. Таким образом можно кодировать каждую букву каким-то соответствующим звуковым сигналом.



Проводник


Звук, как известно, распространяется в виде волн — колебаний плотности воздуха или иной среды. В нашем случае средой для распространения сигнала служит воздух. От красного человечка звуковые волны по воздуху распространяются во все стороны.

Полезный сигнал




К счастью, информацию из нашей головы мы не можем мысленно передать напрямую в голову собеседнику. Поэтому буквы из нашей головы на “аппаратном уровне” мы преобразуем (кодируем) в звуковые сигналы (наборы звуковых волн). Будем называть это “полезным сигналом”.
Важно: каждая буква кодируется устойчивым набором звуковых волн. Из этих волн мы можем распознать определенную букву (если мы ее знаем, конечно же). Происходит преобразование из буквы в звук и обратно из звука в букву.

Шум



Шум — это такой же сигнал, но он не несёт в себе полезной информации. Шум искажает полезный сигнал и уменьшает дальность уверенного приема. Это может быть толпа людей, громко говорящих о чем-то своем, а может быть даже эхо или другие посторонние звуки, которые смешиваются с полезным сигналом. Шум обычно мешает прохождению полезного сигнала до приемника.

Протокол



В таком виде сигнал доходит до приемника. Приёмник из набора звуковых волн узнаёт (декодирует) буквы и собирает из них слова. Если ему кажется, что это бессмысленный набор звуков, то он их отбрасывает либо пытается восстановить исходный сигнал по сложному алгоритму. Отчасти, из-за этого мы иногда сначала переспрашиваем “Что?”, а уже потом понимаем, что всё расслышали.

Протокол — это, по сути, набор правил и алгоритмов, по которым мы из полезного сигнала сможем вычленить информацию. В данном примере это наш язык, на котором мы общаемся с собеседником. По нему мы узнаем смысл переданных звуков. Всё это происходит неосознанно можно сказать “на аппаратном уровне”.

Всё описанное выше в очень упрощенном виде показывает, как работает передача данных не только между людьми, но и между электронными устройствами. Только физическим воздействием у них будет, например, электрическое напряжение, а проводником — медный кабель. Информация, хранящаяся в устройстве, может быть передана с помощью различных физических сред передачи и протоколов, но суть примерно одна и та же: проводник, физическое воздействие, протокол.


Линии электропередач как канал связи



Далее мы по шагам разберемся, как передавать данные по линиям электропередач, и по ходу дела придумаем свой велосипед протокол. Основные идеи из открытого промышленного стандарта X10.

Чтобы использовать линии электропередач в качестве канала связи, нужно понять, как они устроены, и какие физические процессы в них происходят.
Взглянем на схему доставки электроэнергии от подстанции до жилых домов. Электрические сети трехфазные, и от подстанции идут три “фазы” (A, B и С), которые электрически изолированы друг от друга.



Для простоты условимся, что каждая фаза — это отдельный канал связи. Устройства, подключенные к разным фазам, не слышат друг друга.

Сейчас на рынке есть устройства, которые умеют общаться между фазами, для них вся подстанция — это один канал связи. Но пока для понимания это не играет особой роли.

Далее на схемах будем рассматривать только фазу «А» (в других всё аналогично).



При подключении нескольких приемо-передающих устройств к одной фазе образуется сетевая топология типа “общая шина”. Сигнал, отправленный одним из устройств, получат все остальные устройства, находящиеся в пределах распространения сигнала.


Проводник


Подробнее изучим среду передачи сигнала. Для этого рассмотрим, в каком виде передается электрическая энергия, и узнаем, как через этот поток мы можем передать свой полезный сигнал.
Электроэнергия передается в виде переменного тока. Проводниками обычно выступают алюминиевый или медный кабели. Напряжение в электрической сети имеет форму синусоиды с периодом 20 миллисекунд (частота 50 Гц).


Так как ток переменный, он периодически меняет направление «течения», и в момент смены направления мощность практически не передается (если не учитывать сдвиг из-за сильной емкостной или индуктивной нагрузки). Наступают мгновения затишья. Это называется «zero cross» (далее ZC) — момент, в который напряжение равно нулю.


В этот момент в сети также наблюдается наименьший уровень шума. Это самый благоприятный момент для генерации полезного сигнала.

В электрической сети с частотой 50 Гц (как в России) момент ZC происходит 100 раз в секунду. И если передавать по одному символу за один переход через ноль, то скорость соединения будет равна 100 бод. Скорость передачи в байтах уже зависит от формата кадра, от того, сколько служебных бит, помимо самих данных, будет в кадре (о формате кадров ниже по тексту).

Синхронизация


Еще один немаловажный момент — это синхронизация момента передачи и приема между устройствами.

Для нашего нового протокола будем использовать “синхронную передачу данных”, так как это проще в реализации.

Передатчику нужно знать, в какой конкретный момент надо включить ЦАП для генерации сигнала. Приемнику нужно понимать в какой конкретный момент надо включить АЦП для измерения и оцифровки входящего сигнала. Для этого кто-то должен подавать сигнал процессору.

Этим будет заниматься отдельная часть схемы устройства «Zero Cross Detector». Он просто дожидается, когда напряжение на линии будет 0 вольт, и подает об этом сигнал. В сетях с частотой 50 Гц, сигнал будет приходить каждые 10 миллисекунд.


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

В интернете можно найти примеры схем детектора под названиями «Детектора нуля» или «Zero Cross Detector».

Полезный сигнал


Существуют различные варианты кодирования информации для передачи по ЛЭП. Мы будем использовать узкополосную передачу с частотной манипуляцией, т.к. она проще для понимания и надежнее. Минусом является низкая скорость передачи данных, но для нас это пока не играет особой роли.

Полезный сигнал — это обычная синусоида фиксированной амплитуды. Изменяется только частота сигнала. Выберем пару частот и скажем, что сигнал с одной частотой — это “0”, а сигнал с другой частотой – это “1”.



Другой вариант: как в стандарте «X10», наличие сигнала означает «1», а его отсутствие «0».

Примечание. Частоты полезного сигнала порядка 35-91 кГц. Вся нижняя составляющая сигнала (50 Гц и гармоники) отсекается на входе в устройство. Всё что остается — это высокочастотный шум перемешанный с полезным сигналом.

Физически этот сигнал можно генерировать с помощью модуля ЦАП, который есть почти в любом современном микроконтроллере. На вход ЦАП принимает программным путем цифры (уровень сигнала), а на выходе выдает соответствующий этой цифре уровень напряжения. Таким нехитрым образом можно по таймеру подавать в модуль ЦАП массив чисел, а на выходе получать синусоиду с нужной нам частотой.


Подробнее о том, как эффективно генерировать синусоидальный сигнал, расскажу в следующей статье.

Шум


В ЛЭП изначально присутствует довольно мощный сигнал – это передаваемая электрическая энергия от подстанции до жилых домов. И при нагрузке появляется большое количество шума на широкой полосе частот. Бытовая техника, блок питания компьютера, зарядные устройства — они испускают широкий спектр частот в электрическую сеть.

Для понимания, сравним выделенную линию передачи данных с ЛЭП.

Выделенная линия — это отдельный провод, по которому общается некоторое количество устройств. Можно сравнить с пустой комнатой, в которой можно комфортно общаться.



А ЛЭП можно сравнить с коридором, в котором проводят работы перфоратором, и по середине едет поезд (очень шумно). В этих условиях передать информацию сложно, но реально.



Протокол


Кодирование очень простое — выбираем несколько символов и ставим в соответствие каждому какую-либо частоту сигнала. Для простоты сделаем три символа:

  • “Start” — по этому символу устройство поймёт, что началась передача кадра;
  • “0” — это символ бита 0;
  • “1” — это символ бита 1.


Передатчик по сигналу из ZC детектора на короткое время генерирует синусоиду нужной частоты. И таким образом передается по одному символу («S», «0» или «1») за один переход напряжения сети через ноль (каждые 10 миллисекунд). Приемники измеряют этот сигнал, узнают его частоту и записывают соответствующий этой частоте символ («S», «0» или «1») в буфер.


Теперь мы умеем сообщать о начале кадра и передавать некоторый набор единиц и нулей. Далее из них будем складывать слова или «кадры». Целостные порции информации.

Формат кадра


Нужно ещё придумать формат кадра, который мы будет передавать с помощью этих символов. Есть несколько важных моментов, которые отразятся на формате данных: длина кадра, адресация, проверка целостности.

Длина кадра
Чем больше порция данных, тем меньше накладных расходов на передачу данных, так как помимо самих данных в кадре есть служебная информация вроде контрольной суммы и адреса назначения. Но чем меньше порция данных, тем больше вероятность успешной передачи. Тут важно найти золотую середину. Определяется это обычно опытным путем. Если взять пример из компьютерных сетей, то в Ethernet кадре было выбрано ограничение в 1500 байт данных (несмотря на то, что эта цифра быстро устарела, она используется до сих пор).


При сильном увеличении длины кадра, вероятность передать хоть какие-то данные стремится к нулю.

Адресация
Нужно ещё не забыть, что у нас топология сети “общая шина”. Информацию, отправляемую в эту шину, будут получать все устройства. И чтобы общение у них хоть как-то заладилось, у них должны быть адреса.

Адрес добавим в самое начало кадра, чтобы принимающая сторона, для которой не предназначены эти данные, не тратила время на прослушивание и ожидание всего кадра, так мы немного освободим процессор от бесполезной работы.


Длина адреса выбирается исходя из максимального количества устройств, которые могут одновременно находится в одной области видимости. Например, 8 бит — это максимум 255 устройств (если 0 оставить как широковещательный).

Проверка целостности
При передаче информации по ЛЭП очень большая вероятность потерять часть данных. Поэтому обязательно должна быть проверка целостности. Для этих целей в кадр добавляется “концевик”. Это некоторая избыточная информация, с помощью которой приёмник сможет убедиться в том, что данные не искажены.

Придумаем окончательный вид кадра. Пусть длина адреса будет 8 бит (255 устройств в канале + 1 широковещательный адрес). Затем идут данные 8 бит (1 байт).

Концевиком у нас будет просто результат сложения адреса и байта. Но есть один нюанс: устройство может стабильно ловить сильный шум на частоте наших символов «0» или «1» и думать, что это полезный сигнал. И есть большая вероятность ложно считывать крайние значения типа «0x00» или «0xFF». Для защиты от этого, при подсчете концевика, просто будем прибавлять число «42».

Примерно так будет выглядеть один кадр данных: отправляем число «110» на устройство с адресом «17», концевик «169» (110 + 17 + 42).


Целый кадр будем собирать по кусочку из приходящих символов «0» и «1» после символа «Start».

Опишем алгоритм приема кадра.

Изначально устройство находится в ожидании символа «Start». Буфер отключен, в него ничего не пишем.
Когда пришёл символ «Start», для удобства очищаем буфер приема и запускаем счетчик бит (по счетчику бит будем определять целый кадр).



Каждый следующий символ («0» или «1») последовательно пишем в буфер приема и инкрементируем счетчик бит.


Когда соберется нужное количество бит (полный кадр), проверяем целостность. Выделяем из кадра «Адрес» и «Данные». Подсчитываем по алгоритму «Концевик» и сравниваем с тем, что в кадре.


Если значения сошлись, извлекаем из кадра данные и отправляем в вышестоящий протокол.


Если значения не сошлись, продолжаем ждать символ «Start». И всё заново.

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

Итог


В этой статье я постарался общим и понятным языком ввести читателя в тему передачи данных по линиям электропередач. Надеюсь, кому-то это информация пригодится, возможно, не только в области PLC.

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

Возможно кто-то в комментариях подкинет ещё идей. Буду рад обратной связи!



Ссылки и материалы по теме:

Tags:
Hubs:
Total votes 38: ↑37 and ↓1+46
Comments50

Articles

Information

Website
www.directum.ru
Registered
Founded
Employees
501–1,000 employees
Location
Россия