- Связь в интернете вещей: LoRa против UNB. Часть 1: физика
- Связь в интернете вещей: LoRa против UNB. Часть 2: бизнес
- Связь в интернете вещей: LoRa против UNB. Часть 3: технические тонкости
- Связь в интернете вещей: LoRa против UNB. Часть 4: сети и оборудование LoRa
Привет, Гиктаймс!
Извиняюсь за долгое молчание — я обещал многим выложить эту часть статьи ещё 22-го августа, но меня немного затянул прекрасный город Алматы, а потом прочие неотложные дела. В качестве компенсации — обещаю после сегодняшнего текста рассказать про конкретное оборудование для сетей LoRa/LoRaWAN (наше и не только), а также ещё и про некоторые технические аспекты работы сетей LPWAN. Последний текст логически должен был бы продолжать самый первый — там будет и про помехозащищённость, и про проблему обратной связи, и про достижимые скорости — но с одной стороны, на наших лекциях многие интересовались этими деталями, а с другой, сегодняшний текст тоже был обещан ещё более многим, и задерживать его ещё дольше совсем некрасиво. Поэтому сначала немного поговорим про бизнес.
Итак, поехали. В первой части я рассказал, чем схожи и чем отличаются на физическом уровне конкурирующие протоколы для IoT-сетей большой дальности — LoRa, Стриж, Sigfox и другие.
Но отличия на физическом уровне — это знания академические, нас же волнует, можем ли мы реализовать на том или ином протоколе тот или иной проект. Клиенту не нужно знать принцип действия молотка — ему нужно картину на гвоздь повесить.
И вот здесь всё становится совсем весело.
Главное, что нужно понимать про все перечисленные протоколы — они все проприетарные, то есть, как минимум физический уровень принадлежит конкретной компании. Сейчас разрабатывается открытый стандарт Weightless (он относится к группе UNB-систем), но до его практического внедрения пройдёт ещё неизвестно сколько времени — и, собственно, само это внедрение в общем и целом под вопросом: стандартов разрабатывается много, выживают из них единицы.
Второй важный момент: владельцы патента обычно хотят контролировать не только физический уровень.
Собственно, какие уровни вообще у нас есть — если рассматривать не модель OSI, а реализованный IoT-проект?
- Физический уровень. В нашем случае — это полупроводниковый чип, реализующий нужный нам канал связи, и/или специальная прошивка для некоторого набора типовых чипов, если канал связи может быть реализован чисто программно.
- Протокол связи. Это MAC-уровень и сетевой уровень модели OSI — конечные устройства передают с их использованием данные на базовую станцию сети.
- Собственно конечные устройства. В них стоит чип, на котором реализован нужный нам канал связи с нужным MAC и сетевым уровнями.
- Базовая станция.
- Сеть передачи данных. Это как физические каналы связи от базовой станции до центрального сервера сети, так и бегающий по ним протокол.
- Система управления. Центральный сервер сети, который принимает данные от базовых станций. Может как включать в себя ПО верхнего уровня, занимающееся хранением-обработкой-визуализацией этих данных, так и просто передавать их куда-то дальше.
Совокупность всего это и образует сеть сбора данных поколения Интернета вещей. И если говорить про степень открытости для третьих сторон трёх основных представленных на рынке стран СНГ технологий — LoRa, Стриж, Sigfox — то выглядит она так:
Sigfox — исторически первая крупная компания на этом рынке — выбрал для себя довольно закрытую модель. У Sigfox необходимо купить базовые станции и заключить с ним договор на разворачивание сети, к которой будет предоставляться платный доступ сторонним абонентам. Часть денег, полученных с абонентов, по этому договору уйдёт в Sigfox. Базовые станции передают данные на сервера Sigfox, то есть канал связи — не физический, конечно, но логический — и ПО верхнего уровня также принадлежат Sigfox.
К счастью, Sigfox не стал узурпировать рынок чипов и конечных устройств — он договорился с Texas Instruments, SiLabs и другими производителями о поддержке своей сети, так что если вы желаете сделать или заказать какое-то нестандартное Sigfox-устройство — это не составит принципиальной проблемы.
К сожалению, проблему может составить его подключение к сети: если в Европе Sigfox успел развернуться, то сейчас, с появлением LoRa, его экспансия фактически остановилась.
«Стриж-телематика», объясняя необходимость этого неразвитостью рынка, пошли ещё дальше — в их случае вертикаль власти доведена до абсолютного предела: компания сама производит базовые станции и конечные устройства, сама предоставляет сервер сети, даже устанавливать базовые станции в общем и целом предпочитает сама. С каждого подключённого устройства взимается абонентская плата. Компания не производит чипы сама — она использует готовые трансиверы Semtech и Axsem — однако выпускает для них прошивки, без которых эти чипы в сети «Стриж», очевидно, совершенно бесполезны.
Такая степень закрытости не только не позволяет реализовать многие проекты вообще, но и даже там, где реализация возможна, представляет серьёзный риск для бизнеса: вы оказываетесь привязаны к единственному поставщику по всем вообще уровням решения. Шаг влево, шаг вправо — побег, прыжок на месте — попытка улететь.
Возможно, со «Стриж-Телематикой» можно договориться на какие-то послабления в их политике, однако сайт компании прямо об этом не сообщает ровным счётом ничего.
Наконец, LoRa. Владелец технологии LoRa — компания Semtech, крупный производитель полупроводниковых изделий. Собственно, и с LoRa Semtech решил поступить так же — зарабатывать на полупроводниковых изделиях, отдав всё остальное на откуп потребителей.
Чипы LoRa для конечных устройств присутствуют в свободной продаже, документация на них открыта, делать устройства на них могут все желающие. Чипы для базовых станций продаются только по прямому контракту с Semtech, а документация на них — под NDA, но более никак производители базовых станций не ограничены, так что эта среда — также конкурентная, хотя, в силу технической сложности БС, игроков здесь меньше, чем среди конечных устройств.
Более того, простую базовую станцию LoRa можно сделать и на чипах для конечных устройств — у неё будут технические ограничения, но они не критичны для многих проектов. Впрочем, об этом — в следующей статье.
Если вы хотите строить сотовую сеть с множественными БС — а это является основной бизнес-моделью для всех LPWAN-сетей — то Semtech предлагает использовать стандартный MAC-уровень LoRaWAN. Исходные коды доступны на гитхабе, лицензия — модифицированная BSD. Как вы строите сеть, что используете в качестве сервера сети, как взимаете плату с абонентов и взимаете ли вообще, предоставляете ли им какие-то облачные сервисы или предлагаете использовать собственные — исключительно ваша проблема. Semtech в то, как вы её решаете, не вмешивается. Если вы не обладаете достаточно квалификацией для её решения — вы можете обратиться к сторонним разработчикам конечных устройств (например, к нам), операторам сетей LoRaWAN (мы можем познакомить) и разработчикам ПО верхнего уровня (многие в b2b, например, используют Azure).
Если вам нужна сеть масштаба предприятия — вы можете вообще обойтись без LoRaWAN, построив сеть «звезда» с радиусом охвата в пару-тройку километров, фиксированными скоростями устройств и недорогой базовой станцией, которой для работы не требуется ни сервер сети, ни вообще подключение к интернету. Например, на фото в начале статьи — одноканальная БС LoRa нашей разработки, стоящая в базовой комплектации всего 6500 рублей.
Именно такая свобода выбора и определила интерес большой к сетям LoRa: у разных потребителей — разные потребности и разные бизнес-модели, реализовать многие из которых в условиях жёстких ограничения владельцев технологий Sigfox или «Стриж» попросту невозможно.
Если разделять проекты по типам с точки зрения топологии сети — можно выделить три основных варианта:
Сотовые сети LPWAN — сети масштаба городов
Это сети с множеством базовых станций (например, на покрытие Москвы надо порядка 200 штук), как правило, обслуживаемые оператором сети, предоставляющим за денежку малую доступ к ней владельцам конечных устройств.
С технической точки зрения LoRa, Стриж и Sigfox в таких сетях почти равны — у всех трёх базовая бизнес-модель нацелена именно на сотовые сети. Но с точки зрения бизнеса есть существенный нюанс: Semtech (LoRa) не регламентирует работу и тарифную сетку операторов сети, что теоретически позволяет им конкурировать друг с другом, а также предлагать те условия, которые они считают разумными для абонентов. Sigfox устанавливает жёсткую тарифную сетку, «Стриж» такой сетки официально не публикует, но очевидно, что все переговоры о тарифах придётся проводить именно с ним напрямую.
Впрочем, слово «почти» было выше употреблено не случайно. LoRa и UNB-технологии равны в том, что касается доставки данных от абонента к БС. Но, как говорилось в предыдущей статье, с симметрией канала у UNB-технологий всё довольно плохо — передача данных от БС к абоненту затруднена, а иногда просто невозможна.
В результате UNB-системы используются только для снятия данных, например, с приборов учёта, а вот другая большая тема — АСУНО, то есть управление уличным освещением — для них недоступна, т.к. предполагает именно эффективную и постоянную связь в направлении БС>абонент.
Локальные сети топологии «звезда»
В случае, если ваш масштаб — несколько километров максимум (например, предприятие, бизнес-центр, дачный посёлок, карьерные разработки и т.п.), то сотовая сеть со всеми её сложностями в реализации и разворачивании вам, скорее всего, не нужна. В этом случае вам будет дешевле и удобнее использовать топологию «звезда» с одной базовой станцией, обслуживающей сотню-две-три абонентских устройств.
Sigfox такую модель не позволяет в принципе. Не входит в варианты лицензирования. Точка, абзац.
«Стриж» теоретически позволяет, но с очень существенными для бизнеса ограничениями. Так как технологии «Стрижа» заточены под сотовые сети, то даже если вы поставите одну базовую станцию — данные с неё всё равно будут идти на сервер сети и облачные сервисы «Стриж-Телематики». Существует информация — на сайте компании не представленная, что сервер сети можно лицензировать для локальной установки. В результате, хотя бизнес-модель «Стрижа» в этом вопросе внезапно оказывается мягче Sigfox'а, на практике она не столь гибка и удобна, как хотелось бы многим клиентам.
LoRa, как было сказано выше, никак не ограничивает ни бизнес-модели, ни даже использование LoRaWAN. Поэтому локальную сеть на LoRa на небольшую территорию и небольшое количество устройств можно построить так, как требуется именно заказчику — в том числе, полностью передать ему эту сеть во владение без каких-либо лицензий и отчислений. В качестве сервера такой сети может выступать сама базовая станция — например, та БС, что на фото в начале статьи, имеет встроенный микрокомпьютер с Linux'ом и умеет транслировать трафик LoRa в понятный многим протокол MQTT.
Сети специфических топологий
К таким можно отнести, например, радиорелейные сети.
Представьте себе ЛЭП. С одной стороны, энергетики хотят с приемлемым пространственным разрешением контролировать несколько базовых параметров — натяжение провода (увеличивается при обледенении), напряжение на проводе (уменьшается при срезании его аборигенами), коронные разряды (возникают на изоляторах при их загрязнении). Поставить датчики — не проблема, но что дальше делать с данными с них? 3G? Дорого, да и покрытие сотовых сетей есть, мягко говоря, далеко не везде, где проходят ЛЭП. PLC? С подключением к проводу ЛЭП, дистанциями в десятки-сотни километров и множеством передатчиков? Никто даже не будет это всерьёз обсуждать.
Тем временем, если мы имеем в наличии недорогой приёмопередатчик, работающий в безлицензионном диапазоне с дальностью в километры, то технически ничто не должно нам мешать, расставив такие передатчики на оснащённых датчиками опорах ЛЭП, организовать передачу телеметрии между ними по цепочке. Получив дешёвую безлицензионную радиорелейку.
Как нетрудно догадаться, такие сети позволяет делать только LoRa — где мы можем отказаться от использования LoRaWAN и всего, с ним связанного, и написать свой протокол передачи данных поверх физического уровня LoRa.
Ни в Sigfox, ни в «Стриже», ни вообще в мире узкополосных UNB-систем сети такой топологии технически невозможны.
Компания Unwired Devices занимается разработкой и производством модулей связи для ячеистых сетей 6LoWPAN и сетей дальней связи LoRa, а также датчиков и других оконечных устройств для данных сетей, включая как аппаратную часть, так и прошивки с поддержкой необходимых сетевых технологий. В случае с сетями LoRa мы разрабатываем все возможные топологии: ячеистые и статические радиорелейные сети, объектовые сети типа «звезда» с одной БС и устройства для глобальных сетей LoRaWAN.
Комментарии (75)
qbertych
02.09.2016 18:40А можете рассказать про то, как в LoRaWAN абонент может менять базовую станцию (например, если он движется)? Есть ли какие-то тонкости типа динамического распределения адресов, ситуаций типа "набежали все на один канал, а два другие свободны" или чего-то еще?
olartamonov
02.09.2016 20:23+1Вопросы переключения между БС решает сетевой сервер LoRaWAN. БС в LoRaWAN сами по себе довольно тупые, они просто транслируют полученное от абонентов на сервер — а тот уже указывает, какой БС с ним общаться. Так как связь двусторонняя, то мобильное устройство обязано периодически что-нибудь отсылать на сервер, чтобы тот знал, через какую БС с ним связаться — это может быть любое сообщение, можно с пустым содержимым.
С разделением абонентов — в LoRa есть два варианта, CDMA (кодовое) и TDMA (временное). Для первого в LoRaWAN есть механизм ADR — adaptive data rate, фактически это просто команда от БС к абоненту установить определённую модуляцию и мощность выхлопа в эфир. Модуляция при этом косвенно влияет и на TDMA — она определяет скорость связи, так что близкие к БС абоненты с хорошим уровнем сигнала могут уйти на более высокие скорости и быстрее освобождать эфир (а также меньше жрать батарейку).
TDMA — вещь в случае с кучей совершенно разнотипных абонентов неочевидная, но БС может указывать абоненту, сколько времени он имеет право проводить в эфире (включая полное радиомолчание). Абонент обязан подстроиться.
То есть, набежать всем на один канал сетевой сервер имеет право не позволить, принудительно разбросав абонентов по разным каналам и установив им предельное время активности.
FDMA не используется, хотя у БС есть возможность разослать абонентам команду смены рабочей частоты. Но на неё переедет вся сеть — по частотке стандартные БС одноканальные.
********
В локальных сетях LoRa (без полной поддержки LoRaWAN) всё проще. Как правило, в них нет CDMA — простейшие БС (типа той, что на фото) одноканальные, хотя в принципе можно сделать и БС на несколько каналов на дешёвых чипах, она всё ещё будет радикально дешевле полформатной БС LoRaWAN. Зато сеть закрыта, случайные абоненты в ней не появляются, поэтому TDMA можно хорошо реализовать на уровне БС: передав порцию данных, устройство в ответе от БС получает время до следующего слота передачи.qbertych
02.09.2016 21:02А как проще всего включать устройство в сеть с TDMA, чтобы не было коллизий с другими говорящими абонетами? Понятно, что можно выделить пять секунд в минуту для новых, или посылать с БС широкополосный запрос "кто на новенького?", или забить и ребутнуть абонента, если с первого раза не получилось. Но как обычно делают?
И про пропавших абонентов: есть ли возможность контроля тех, кто не вышел на связь в нужное время?
olartamonov
02.09.2016 21:08Новые не знают, когда случатся эти пять секунд ;) Поэтому способ один — абонент начинает стучаться в БС, если с кем-то столкнулся — ну, коллизия, ждём случайное число секунд, стучимся снова. Достучались — получили свои персональные настройки.
Это должно делаться автоматически, потому что мало ли почему он там новым абонентом стал — может, свет выключали, а у него батарейки нет и настройки в EEPROM не сохраняются. Человека рядом может не быть.
И про пропавших абонентов: есть ли возможность контроля тех, кто не вышел на связь в нужное время?
В ПО верхнего уровня — конечно, оно же в принципе имеет право знать, сколько у него должно быть абонентов и с какой периодичностью они должны выходить на связь.OFFREAL
03.09.2016 20:04Эти проблемы решаются отказом от базовых станций. У нас есть mesh работающий на LoRa, полный стек для уровней выше физического.
olartamonov
03.09.2016 20:10+1Меш на LoRa — это здорово, и я даже знаю людей, которым он нужен. Вот только у них специфический проект, в котором число абонентов исчисляется максимум десятками.
Вот только в городе одних лишь фонарных ламп — примерно по 10 тыс. на каждые 100 тыс. населения, и если сделать меш из одного только освещения, даже не трогая счётчики в ЖКХ и кучу прочих датчиков, которые эффективно утроят число абонентов, в эфире будет царить невероятный ад.
На сетях такого размера радиоэфир — это очень ценный ресурс, а меш со средней глубиной сети N хопов в самом идеальном случае жрёт его в N раз больше сотовой сети. Причём, что характерно, ещё и территориально крайне неравномерно — так как все сообщения идут к шлюзу из меша наружу и от него, то вокруг шлюза бутылочное горлышко возникнет примерно мгновенно и на очень скромных размерах сети.Klukonin
04.09.2016 23:07Ё, десятки устройств — это же мой профиль!
Не поделитесь контактами?))
Под честное слово, что для проекта буду использовать, в случае чего, ваши модули на атеросе?))
У меня же работа на низких мощностях (0-2 дБм) и несколько нод на расстоянии 10-20м — точто доктор прописал.
Про N раз вы не правы. С использованием NC это примерно N/2, а если учитывать такие фичи как мультикаст через бродкаст, Распеределенную ARP таблицу и возможность использовать несколько шлюзов то и все N/4 — вполне себе торт!
И роуминг абонентов занимает около 100-300мс без оптимизации. для потока телеметрии не заметно даже. То есть, полноценный динамический меш.
Глядишь, и тема для кандидатской нарисуется =))))olartamonov
04.09.2016 23:10При чём тут атерос? Людям нужна LoRa и строго LoRa, там речь о сети с несколькими километрами между узлами идёт.
Klukonin
05.09.2016 00:25Пардон, прочиталось, как будто речь шла об освещении.
Не, килоетры — это не мое =))
DASM
03.09.2016 09:55Олег, не подскажите… читал даташиты чипов типа SX1276 — не очень понимаю, откуда там кодовое разделение каналов. Ну можно использовать разный Spreading factor, но их немного разных и битрейт на каждом факторе иной. Как вообще конфликтов избегают в таких сетях? Почему все что читал на эту тему не особо вдаются в этот вопрос. Спасибо.
olartamonov
03.09.2016 10:03Spreading factor — это и есть CDMA, он просто преследует в LoRa сразу две цели — как разделение абонентов, так и механизм адаптивной скорости. Делать их много не имеет смысла, если одновременно работающих устройств в эфире будет больше десятка, они просто забьют друг друга в канале приёмника БС.
Конфликтов во всех подобных сетях в общем и целом избегают так же, как в банальном эзернете — если не получили подтверждение в ответ на свой пакет, то ждём случайное количество секунд и пробуем снова. Ну или, в некритичных системах типа счётчиков в ЖКХ, никак вообще не избегают — не сбросил показания сегодня, подождём до завтра (тем более, что у того же Sigfox вообще с обратной связью с подтверждением доставки дела не очень).
При желании на уровне конечного устройства можно разбавить это схемой listen-before-talk — если оно видит в эфире какой-то сигнал, то задерживает передачу. Но тут главное не переборщить, а то постоянная помеха достаточного уровня заткнёт устройство на всё время своего присутствия, т.е. LBT должна быть ограничена по времени, например, несколькими секундами.
При этом собственно разделение устройств не является наиболее критичной проблемой — чаще случается банальная плохая связь, например, из-за неудачного расположения антенны абонентского устройства.
Vasyutka
03.09.2016 14:01Существует метод синхронизированного разделения кодовых каналов. Т.е. если у всех есть точное время (базовая станция раздала), то можно излучать ортогональными друг другу кодами. В LORA этого нет, поэтому кодовое разделение может строится на том принципе, что два сообщения не случаются строго одновременно. А несколько ЛЧМ при смещении по времени становятся разделимы, даже при использовании одного и того же «кода». По-этому, если преамбулы разошлись во времени, то приемник в теории может разделить несколько пакетов. Честно говоря, я не знаю, Как это сделано на практике в базовых станциях LORA. SX1276 на прием срабатывает по первой преамбуле. А значит, что никакое другое сообщение принято не будет. Т.е. в теории разделить можно два сообщения, наехавших друг на друга, даже с одинаковыми параметрами ЛЧМ. Но правда и тут есть ограничение. Два сигнала ЛЧМ смещенные по времени на самом деле можно разделить только при условии, что они не сильно отличаются по мощности (20-30дБ). А это в системах с динамическим диапазоном приема в реальных условиях около 60-80дБ станет принципиально непреодолимой проблемой.
П.С.: да, чтобы разделить с SX1276 все это подойдет: разделение по частотным каналам, различный битрейт,SF. Но опять же, если появится в эфире мощный сигнал LORA в той же часоте, но пусть другим SF, то он будет маскировать значительно более слабый.olartamonov
03.09.2016 14:03Честно говоря, я не знаю, Как это сделано на практике в базовых станциях LORA. SX1276 на прием срабатывает по первой преамбуле
В SX127x — один цифровой демодулятор, в чипе для БС SX1301 — 49 параллельных демодуляторов.
leocat33
02.09.2016 21:04Во… А я тоже «велосипед изобрел»:)
open-plc.comsoftmart
03.09.2016 09:38Как то сыровато выглядит. Побольше бы информации, или уже довести до ума, а не спешить выкладывать.
leocat33
03.09.2016 18:49Согласен, описание — сыровато, вернее «в процессе». На самом деле уже сделано намного больше, чем описано. Выкладывается по мере появления свободного времени. Есть Linux-based контроллеры. Фото одного из реальных шкафов автоматики на первой странице.
Ну и… я не особо писака WEB ( сам сайт сделан тупо с помощью OpenOffice ).
На сайте есть черновик одной из статей про программную архитектуру системы:
leocat3.com.fozzyhost.com/article.doc ( на русском )
Если интересно, можете почитать…
leocat33
03.09.2016 18:53Да, к линукс-контроллерам можно цеплять тачпанели ( монтаж в шкаф ). Фото там же:
http://leocat3.com.fozzyhost.com/pictures/DSC00966.JPG
http://leocat3.com.fozzyhost.com/pictures/DSC00967.JPG
http://leocat3.com.fozzyhost.com/pictures/DSC00968.JPGsoftmart
03.09.2016 19:08Если это PLC, то какая среда программирования, какие языки МЭК поддерживает? Как реализована трансляция языков в самом МК?
leocat33
03.09.2016 19:23Ответы в статье и на сайте…
Это не только PLC ( ПЛК ) но и архитектура системы. От одного контроллера ( STM32f10x ) до распределенной системы. В роли контроллера может быть одна плата ( с чего начал описание на сайте ) до картинок, там же, на сайте.
Среда программирования — на ваш выбор.
Языки программирования:
ISO/IEC 14882:1998 ( ”C” ), ISO/IEC 14882:2003 ( ”C++” )
Пытаюсь подключить студентов, для разработки/адаптации IEC 61131-3 ( ”FDB, ST” ), правда процесс идет пока не очень быстро.
Причем все означенные языки программирования могут быть реализованы как интерпретаторы ( на линукс-ПЛК ). С интерпретаторами С/С++ баловался — CINT ( https://root.cern.ch/cint ), до FDB, ST дело пока не дошло…softmart
03.09.2016 19:38Пока нет поддержки хотя бы одного языка МЭК — это не может называться PLC.
leocat33
03.09.2016 19:42ISO/IEC 14882:1998 ( ”C” ), ISO/IEC 14882:2003 ( ”C++” )
IEC == МЭКsoftmart
03.09.2016 19:46Для программирования ПЛК используются стандартизированные языки МЭК (IEC) стандарта IEC61131-3
Языки программирования (графические)
LD (Ladder Diagram) — Язык релейных схем — самый распространённый язык для PLC
FBD (Function Block Diagram) — Язык функциональных блоков — 2-й по распространённости язык для PLC
SFC (Sequential Function Chart) — Язык диаграмм состояний — используется для программирования автоматов
CFC (Continuous Function Chart) — Не сертифицирован IEC61131-3, дальнейшее развитие FBD
Языки программирования (текстовые)
IL (Instruction List) — Ассемблеро-подобный язык
ST (Structured Text) — Паскале-подобный язык
О С/С++ речи нет.leocat33
03.09.2016 19:58Вообще МЭК стандарты не ограничиваются 61131, хотя и спецификацию 61131 я прочитал не раз…
Мало того, при разработке архитектуры РИУС использовал именно этот стандарт как основной. Он описывает не только языки программирования, но и архитектуру ПЛК.
Если ссылаться на вики, то:
https://ru.wikipedia.org/wiki/ISO/IEC_14882 ( МЭК, однако )
softmart
03.09.2016 20:09Все ограничивается что есть пользователи ПЛК, у них например есть Codesys. Программируется ли ваш ПЛК из Codesys? Нет? Значит есть своя среда с поддержкой одного из популярных языков? Нет? Аа, можно в IAR на С++ запрограммировать? Чудесно.
leocat33
03.09.2016 20:13C / C++ это не популярные языки?
softmart
03.09.2016 20:17На них не программируют большинство пользователей ПЛК.
leocat33
03.09.2016 20:26Как писал выше — все «скушать» просто невозможно. Пока вся реализация сделана только двумя руками и одной головой… Если интересно — можете подключиться к проекту.
Из открытых решений пока нашел только это: http://www.beremiz.org/doc
( Compiles ST/IL/SFC code into ANSI-C code. )
Если встречали FBD code into ANSI-C code, то буду благодарен за ссылку. Ускорит разработку ПО.
Вы не первый, кто говорит: где реализация 61131? :)softmart
03.09.2016 20:32Для меня это до сих пор загадка, как например тот же Овен это делает. Они делают ПЛК под среду Codesys, вероятно и рантайм (транслятор с языков МЭК) предосавляет тот же Codesys. И видимо совсем не бесплатно.
Да и транслятор это одно, а пошаговая внутрисхемная отладка языков МЭК из среды — это отдельная тема, как она реализуется, мне тоже непонятно.
А то сейчас много «ПЛК», вон на ардуине несколько «ПЛК» есть в инете, только на поверку оказывается что никакой это не ПЛК.
softmart
03.09.2016 20:21С++ прекрасный сильнейший язык программирования. На нем можно запрограммировать любые задачи. Но, это компьютерный язык, а не язык спроектированный специально для ПЛК. Тут есть определенные особенности.
1) Для ПЛК важно иметь интегрированные отладочные средства,
заточенные под специфику автоматизации. Они должны позволять производить технологические операции с оборудованием. Например, при ремонте/наладке некой машины, техник/электрик/механик может машину остановить, вручную поуправлять выходами, проверить входы, зафиксировать выходы и т.п.
В CoDeSys это делается элементарно. Никаких программ писать не нужно вообще. Ни в одной среде С++ этого нет и близко. Там для элементарного задания нескольких последовательных наборов значений выходов, технику надо звать программиста и тратить время на программу.
2) Для ПЛК практически наплевать на эффективность кода, размер программы, экономию памяти, без которых не обойтись, например в базах данных, играх, при запуске непредсказуемо разных приложений пользователя и др. и пр.
Для ПЛК генератор кода должен давать простой дубово-надежный машинный код. Огромные массивы данных тут гонять не нужно. Рядом с ПЛК нет человека-контролера, который бы его перезагрузил при зависании. Да и сам подобный факт может быть фатальным. Поэтому из языков ПЛК намеренно выброшены все потенциально опасные штуки, типа new. В мире широко известны несколько громких аварий по причине примитивных программных ошибок в Си. В МЭК подобные ошибки сделать просто нельзя.
3) ПЛК всегда работает в реальном времени. В МЭК системы встроены свои переносимые средства многозадачности, обеспечения времени цикла, вызова задач по фронтам и т.п. Программисту МЭК нет дела какая ОС сидит внутри ПЛК. Изучать ее функции не надою. В С++ без этого никуда. Своих подобных средств в нем нет, он опирается на ОС. Ее надо изучать.
Ее качество влияет на программу непосредственно. Перенос программы из одной ОС в другую (если сразу не приняты специальные меры) представляет сложность.
4) Языки МЭК значительно проще в освоении. Это не декларация, а факт. Мы не раз сталкивались с обучением техников/наладчиков на заводах. Максимум полдня и электрик уже может выполнить минимально необходимые ему действия сам. Шансов его обучить С++ за полдня ноль. С++ язык для программистов профи. Он позволяет залезать на низкий
уровень и эффективно программировать на уровне железа. Ест-но такие программы требуют знаний, тестирования, по специальным методикам и пр.
5) Часто для некоего электронного устройства 1 программист пишет все от формирования времянок микросхем, до прикладных вещей на С++. Программа выглядит одним большим винегретом. Никто, кроме автора в этом разобраться не может. Он незаменим и обязан сопровождать свою программу, даже если это ему совсем уже не хочется. Руководитель не может отдать это сопровождение молодому специалисту, а этого квалифицированного человека перевести на более выгодную работу. Ни в от отпуск, никуда… У нас это классическая судьба С++ программиста.
Теперь делим софт на системный уровень и прикладной. Между ними простой, четко описанный интерфейс. Это переменные ввода/вывода и системные биб-ки. Системный софт четко разграничен и понятен. Его может писать любой программист, даже наемный. Его легко заменить. Аналогично с прикладным.
Это широко известная старая концепция разделяй и властвуй, но верная и ныне. Подробнее тут.
Для системного уровня С++ прекрасно подходит. Для прикладных задач МЭК языки прекрасно подходят.
leocat33
03.09.2016 20:37Пока сделаны «шаблоны» на «С» для STM32F100/103 под конечный класс устройств. Напр: блоки: 3 реле 220V, 10A, датчики тока по каждой реле, блок 8 входов 0-20mA, блок 2 выхода 4-20mA,…
Управление CAN пакетами, в том числе и нестандартными решениями: радио, IP, PLC ( в тестировании собственная реализация Power Line Cjmmunication протокола 19200 бит/с, а-ля CAN формат ). Есть USB<->CAN шлюз ( проект лежит на сайте ). Можно строить системы с управляющей например win-машиной. Общение с устройствами через COM порт текстовыми данными.
Нужен ли в этом случае 61131?
Я повторюсь, что спроектирована именно архитектура. Да, нестандартная, но на основе 61131 описания архитектуры ПЛК.softmart
03.09.2016 20:57Можете для тех кто на бронетранспортере привести преимущества вашего решения?
Общаться через COM порт многие могут.leocat33
03.09.2016 21:24Спасибо за вопросы. Именно вопросы помогают понять, как же писать буквари.
COM — частный случай. Можно использовать например Siemens контроллер с CAN интерфейсом. Но задача стояла несколько иная. Создать масштабируемую РИУС. Надежную ( пром стандарт ) с предельно низкой стоимостью. Строится из простых блоков на основе STM32F100/103. Блоки понимают простые команды: запиши данные ( управление реле, передачи сигналов и пр ) / дай данные ( состояние входов, состояние реле и пр. ) Потому и начал описание с самих блоков. Но, блок на такой же плате может быть управляющим ( в случае простых систем или старта). На этом же блоке сделан шлюз CAN <-> USB. Т.е. сделана унификация по железу, одна плата — много блоков. Общение между блоками CAN или а-ля CAN пакетами. Математика платы/блока как шаблон на «С» ( что-то не нравится — меняй по своему усмотрению )
Архитектура ПО, начиная с простого ( STM ) построена по одному принципу: работа через разделяемую память. В случае простого блока ( датчиков, управления,… ) в качестве разделяемой памяти — глобальная память ( heap ). Потоки в этом случае вырождаются до функций с приоритетами ( работа напр прерывания по устройству, прерывания по таймеру и т.д.) Пользовательский поток — основной цикл. В нем можно поменять-посмотреть глобальные переменные ( реальные сигналы ). По запросу CAN интерфейса блок получает/отдает данные. CAN обслуживает отдельная функция / а-ля поток.
В случае контроллера/ПЛК отдельные потоки обслуживают свои классы устройств. Все это маппируется на NAMED shared memory. Это память выглядит как отображение на файловую систему. Т.е. мы видим данные как файл, строки с фиксированной структурой. Почему именно так? Реализация NAMED shared memory есть практически во всех ОС, win не исключение. Процессы пользователя работают с сигналами — отображаемые на эту память. На чем будет выполнена реализация сценария ( язык программирования ) в этом случае совершенно все равно. Хоть интерпретатор бэйсика. Что знаем на том и пишем. Вот только интерпретатора 61131 готового я не нашел…softmart
03.09.2016 21:32Это вы привели какой-то поток сознания по теме философии разработки, а хотелось бы услышать конкретные преимущества для простого автоматизатора, не для разработчика ПО.
leocat33
03.09.2016 21:52Простота использования, масштабируемость, низкая цена, надежность, пром диапазон.
softmart
03.09.2016 22:01Это слишком обобщенно, отсюда непонятна конкретная выгода.
Так можно сказать про любое устройство.
Можете привести КОНКРЕТНЫЙ пример где существующая система хуже, чем ваша и чем КОНКРЕТНО хуже?
softmart
03.09.2016 19:49В аппаратной части ПЛК ничего сложного нет. Вся суть в трансляторе языков.
leocat33
03.09.2016 20:00Вынужден не согласиться. Реализовать работу в пром условиях не так просто.
olartamonov
03.09.2016 20:29Ничего сложного при грамотном проектировании электроники. Собственно, по вашему же сайту и видно — схемотехника у вас там банальна на 100,0 %, более того, в sens_b1:
1) C2 надо поставить после VD1, прямо перед DC/DC, в текущем положении у него нет смысла
2) VD3 срабатывает в районе 40 В, MC34063A отбрасывает копыта при 40 В — т.е. запаса прочности у защиты от перенапряжения нет
А вот отсутствие МЭКовских языков — это сразу бетонный блок поперёк дороги для 9 из 10 проектов. У эксплуатантов толпы инженеров, не умеющих ничего, кроме МЭК — и либо вы предлагаете им радикально лучшую альтернативу, освоение которой окупится, либо идёте лесом. С C/C++ вы, очевидно, идёте лесом.leocat33
03.09.2016 20:51Не правильные советы…
С2 именно там, где должен ( фильтр вч говна по питанию )
VD3 — SMBJ26A, срабатывание min 28.9V, max 31.9V
Предельно может выдержать ( долговременно ) до 42.1V, но для защиты самого диода стоит F1 ( самовостонавливающийся ) В схеме использован SMBJ26A с маркировкой LE ( unidirectional ) Делает «козу» в случае переполюсовки, заставляя работать F1.
Плата датчиков — универсальная. Сделана для поддержки «кучи» разных датчиков.olartamonov
03.09.2016 21:03С2 именно там, где должен ( фильтр вч говна по питанию )
Керамические конденсаторы вокруг DC/DC ставят для фильтрации помех от самого же DC/DC, чтобы он внезапно в самовозбуждение не ушёл.
Если же вы зачем-то хотите фильтровать входящее питание по ВЧ (но зачем?), то надо ставить LC-фильтр нормальный.
У вас же в схеме C2 выполняет чисто декоративные функции.
VD3 — SMBJ26A, срабатывание min 28.9V, max 31.9V
Вы в даташите не на ту колонку смотрите.
Срабатывание даётся при прямом токе 1 мА, которого ваш предохранитель даже не заметит. Гарантированное срабатывание с токами, на которые предохранитель отреагирует, у SMBJ26A случается при 42,1 В.
Предельно может выдержать ( долговременно ) до 42.1V
У него вообще такого понятия «выдерживаемое напряжение» нет. У него есть выдерживаемая рассеиваемая мощность, в данном случае 600 Вт при продолжительности не более 1 мс.
В схеме использован SMBJ26A с маркировкой LE ( unidirectional )
Ваще если у него на корпусе написано «LE», то это SMBJ12A, с чем я вас и поздравляю.
SMBJxxA — униполярные по определению, потому что биполярные — это SMBJxxCA.
Делает «козу» в случае переполюсовки, заставляя работать F1
И VD1 тоже не нужен.leocat33
03.09.2016 21:45И DA1 — тоже не нужен. Можно сразу запитать сразу 5V. инвертор 24-5 только для запитки по проводу CAN ( БП один на много блоков. ) SMBJ — ну поставте, какой нравится! Сильно принципиально? Опечатался. Просто есть реализации на 12V… SMBJ26A есть как ME, так и CE ( в этом случае см. маркировку на корпусе ). По SMBJ26, не поленитесь, попробуйте вольтметром. Разброс срабатывания большой, но больше 35V мне не попались. Пробовал, как долго выдержит превышение напряжения. Диоды суровые. Отваливается от платы ( перегрев и олово жидкое ), но остаются живы.
Да, «тренируюсь» на диодах от ST.
Цитаты:
U проб. (В) – значение напряжения пробоя. В зарубежной технической документации этот параметр обозначается как VBR (Breakdown Voltage). Это значение напряжения, при котором диод резко открывается и отводит опасный импульс тока на общий провод («на землю»).
U огр. имп. (В) – максимальное импульсное напряжение ограничения. В даташитах обозначается как VCL или VC – Max. Clamping Voltage или просто Clamping Voltage.
Для гашения отдельных импульсов и есть цепь VD1-C3.
Да, схема действительно тривиальна:)olartamonov
03.09.2016 22:00Я просто зафиксирую, что вы начали с «промышленную электронику надо уметь проектировать», а закончили на «даташит мне не указ, я вольтметром пробовал, у меня работает».
Причём даташит вам настолько не указ, что вы его даже не читали.
Это не самый ад, который я видел в работах т.н. «разработчиков электроники», но общий уровень демонстрирует хорошо.
SMBJ26A есть как ME, так и CE
Чушь. SMBJ26A маркируется буквами «ME». Буквами «CE» маркируется SMBJ26CA.
U проб. (В) – значение напряжения пробоя. В зарубежной технической документации этот параметр обозначается как VBR (Breakdown Voltage). Это значение напряжения, при котором диод резко открывается и отводит опасный импульс тока на общий провод («на землю»).
Это, простите, цитата из кого — из вас? Потому что цитата из даташита выглядит иначе: «VBR Breakdown Voltage — Maximum voltage that flows though the TVS at a specified test current (IT)». IT указан ровно в следующей колонке таблицы и равен 1 мА.
Как вы думаете, если в даташите написано «1 мА», а вы разводите ля-ля про «резко открывается», я кому поверяю, вам или даташиту?
Для гашения отдельных импульсов и есть цепь VD1-C3
Я даже не буду спрашивать, как у вас конденсатор какие-то импульсы гасит, а то мы так быстро до проверки знания вами школьного курса физики дойдём, причём с заранее понятным результатом.leocat33
03.09.2016 22:03Гы. См. время зарядки конденсатора…
olartamonov
03.09.2016 22:10Есть мнение, что t=RC, причём и R, и C у вас очень маленькие, а также непонятно, какое вообще оно имеет значение.
leocat33
03.09.2016 22:21Да, сплю почти…
Посмотрел, что у меня впаяно… SMBJ26A-TR BUK
С Vishay экспериментировал, но они мне почему то не понравились…
Смотрим на время импульса:
Peak pulse power:
– 600 W (10/1000 ?s)
– 4 kW (8/20 µs)
( это для чего диод+емкость )
tp = 10ms Tj initial = Tamb 100 A
При постоянном напряжении ( см выше, что я писал ) может рассеять 5W, после чего нагревается и отваливается. Реально — не успевает ибо есть предохранитель.
По схеме: Вч импульсы часть гасит C2, что не смог — VD3. Более длительные фильтруется VD1+С3.olartamonov
03.09.2016 22:26Вы вообще понимаете, что напряжение на конденсаторе тупо пропорционально его заряду, поэтому никакие импульсы он не гасит? А что постоянная времени при 0,1 мкФ у вас вообще в наносекундном диапазоне, вам калькулятор не подсказывает?
leocat33
03.09.2016 22:31А я что выше написал? Вроде даже по-русски…
olartamonov
03.09.2016 22:33Выше вы написали грамматически корректный, но совершенно бессмысленный набор слов.
leocat33
03.09.2016 20:58И — да. Стремился делать как можно проще и понятнее…
Сама по себе плата датчиков — только для датчиков и ничего более. Там какой то логики ( МК ) нет вообще. И инвертор DC-DC делался по принципу минимальной стоимости. Мог бы вполне сделать более компактное решение на мегагерцовых чипах, но цена буде в 4-6 раз выше.
Язык программирования для тех же датчиков… Пользователь работает с этими устройствами пакетами а-ля CAN. Устройство понимает установи сигналы — дай сигналы. Никто не мешает использовать стандартные PLC например от Siemens. Или ПК в качестве управляющего.olartamonov
03.09.2016 21:10И инвертор DC-DC делался по принципу минимальной стоимости. Мог бы вполне сделать более компактное решение на мегагерцовых чипах, но цена буде в 4-6 раз выше
Давайте в абсолютных единицах? Ваш MC34063 стоит в пределах полудоллара в розницу, нормальный современный чип на 60 В входного напряжения — от силы $2,5-3,5. Трудно считать это гигантской разницей для промышленного оборудования.leocat33
03.09.2016 21:50Я покупаю по 25 р. за штуку. На алиэкпресс можно приобрести по 6-10 р. за штуку.
Напр:
http://ru.aliexpress.com/item/Free-shipping-40pcs-lot-SMBJ26A-ME-screen-TVS-transient-diode-DO-214AA-SMB-type-new-original/32518957153.html?spm=2114.03010208.3.55.PzBAcC&ws_ab_test=searchweb201556_7,searchweb201602_4_10039_10057_10065_10056_10055_10054_10069_10059_10058_10017_10070_10060_10061_10052_10062_10053_10050_10051,searchweb201603_1&btsid=5a055fac-0e61-4b28-94f6-4a70ad6d044bolartamonov
03.09.2016 22:03+1Реализовать работу в пром условиях не так просто
На алиэкпресс можно приобрести по 6-10 р. за штуку
А когда у счастливого заказчика ваших контроллеров производственный процесс на денёк-другой остановится из-за того, что вам с алиэкспресса прислали отбраковку, зато по 6 рублей, вы ему какую сумму будете готовы компенсировать, если не секрет?leocat33
03.09.2016 22:30Ну да, на http://ru.mouser.com ( это не самый дешевый поставщик )
1шт: $0.611; 100шт: $0.455 но даже это не $2.5 В общем то я и писал, что разница минимум в 4 — 6 раз…
25 р. от 1 шт. — нормально? 20шт — 20р. 100шт — 17р.… ( с европейских складов )olartamonov
03.09.2016 22:32Вы покупателям промышленных ПЛК как-нибудь расскажите, что вы на них два доллара экономите, реакция будет забавная.
leocat33
03.09.2016 22:36На сайте что-то про идею написано… Читали?
olartamonov
03.09.2016 22:38Что за идею вы философски вещать можете бесконечно, мы уже все поняли, спасибо.
leocat33
03.09.2016 22:46Да не за что… Ну я во всяком случае попытался…
Про защитные диоды: http://go-radio.ru/supressor.html
Может понятно станет схемотехническое решение, и почему именно так.olartamonov
03.09.2016 22:58+1Может понятно станет схемотехническое решение, и почему именно так
Фейспалм, бесконечный фейспалм. Вы знаете, я вообще-то немного разрабатываю электронику посложнее вашей. И ещё немного руковожу другими разработчиками.
В ваших решениях понимать нечего. Они тупо неправильные. Вы не умеет грамотно разрабатывать электронику.
При этом вместо того, чтобы исправить эти в общем-то мелкие огрехи, которые можно хотя бы на банальную невнимательность списать, вы встали в позу и доказываете мне, что так и надо. Что как бы говорит нам, что не дай бог вы что-то серьёзнее решите разработать — там у вас будет шанс налажать куда масштабнее.leocat33
04.09.2016 05:45-1Данные решения появились не за 5 минут. Что-то объяснять вам далее — бессмысленно. Нести не аргументированную ахинею легче всего.
Вы сами что сделали для сообщества opensource?
softmart
03.09.2016 19:42А таких картинок я могу десятками генерить, они же ни к чему не обязывают. Вы реализуйте хотя бы одну.
leocat33
03.09.2016 19:46Все, что нарисовано — от реализации:) Т.е. такие системы уже работают, причем не один год и некоторые в очень суровых условиях ( металлургия ). Как уже писал, начал делать и публиковать как open source то, что уже сделано и работает не один год. Да, нет списка готовых изделий. Начал «с конца», т.е. с периферийных устройств. Но и систему можно строить начиная с одной предельно низкой по цене платы.
DmitrySpb79
03.09.2016 01:20Как-то все сложно написано имхо.
Если по-простому: я хочу попробовать lorawan, какой девайс я должен купить? В качестве оконечного устройства будет Raspberry Pi.
Небольшое гугление показало, что надо что-то типа такого?
https://www.cooking-hacks.com/lorawan-shield-for-raspberry-pi-868-mhz-xbee-socket
Если допустим, я решу создать свой gateway, тогда что нужно? И раз это wan, то где-то регистрироваться надо и все эти адреса прописывать?olartamonov
03.09.2016 09:53Если по-простому: я хочу попробовать lorawan, какой девайс я должен купить?
LoRaWAN — это протокол для сотовой сети. Чтобы его попробовать, вам придётся поднять, собственно, сотовую сеть — со стеком LoRaWAN на конечных устройствах, базовой станцией и сетевым сервером. Или подключиться к уже существующей — тогда вам надо обратиться к оператору этой сети с вопросом о конечных устройствах и стоимости подключения.
С модулем же для ардуины самим по себе можно попробовать связь точка-точка или «звезду» на каком-нибудь собственном протоколе.
Если допустим, я решу создать свой gateway, тогда что нужно?
GW именно для LoRaWAN, с его полноценной поддержкой? Как минимум, нужна система на 4-8 чипах SX127x, как максимум — на одном SX1301. Диапазон тут широк, от голых модемов на SX1301 ($180-220), вешаемых на Raspberry Pi, до Kerlink и Cisco IR 910.
И раз это wan, то где-то регистрироваться надо и все эти адреса прописывать?
Если вы хотите делать конечные устройства для подключения к чужим LoRaWAN-сетям, им будут нужны официальные адреса EUI-64 — DevEUI для идентификации устройства и AppEUI для идентификации выполняемого на нём приложения. Адреса получаются как обычно — покупаются блоками у IEEE или поштучно в составе каких-либо чипов (например, DS2502-E64).DmitrySpb79
03.09.2016 14:49+1Спасибо.
Здесь нашел более-менее подробное описание: https://docs.mbed.com/docs/lora-with-mbed/en/latest/intro-to-lora/
x893
05.09.2016 10:02А будет опубликована информации по российской части LORAWAN?
Какой-нибудь аналог TTN.ru
Будет поддерживаться beacon?
Можно свой шлюз зарегистрировать (приватный/публичный) и использовать сервер для передаче?
Может пропустил эту информацию.olartamonov
05.09.2016 10:28Это вопросы к операторам сетей. Мы с ними сотрудничаем и делаем для них железки, но мы — не оператор.
x893
Можно посмотреть на карту покрытия LORA (TTN) в Голландии (например) и в России.
Становится очень грустно.
olartamonov
В России широкомасштабные сети LoRaWAN (не LoRa, LoRa — это лишь тип модуляции сигнала) начнут разворачиваться где-то в конце текущего года.
Пока что ни по одной из вышеупомянутых технологий внедрений масштаба города нет — если, конечно, не считать за таковые бравурные пресс-релизы о «100 % покрытии» городков в несколько километров в поперечнике после установки единственной БС и подключения к ней трёх десятков счётчиков воды.
x893
Счетчики воды мне совсем не интересны, но устройства слежения работают гораздо дольше через LORA, чем через GPRS. Хотя рынок счетчиков может и больше. Будет развернут — это хорошо. Но как бы всё опять не уперлось в заоблачные цены на передачу и в несовместимую ни с чем платформу. Посмотрим — осталось не долго.
olartamonov
Цены в таких сетях будут вполне разумные — радикально ниже, чем в обычных сотовых.
Несовместимая платформа — а с чем ей быть несовместимой? Уровень LoRaWAN — стандартный, а вся инфраструктура сети — просто транспорт для бинарных данных, пришедших с абонентского устройства.