4G-роутер в роли универсального сервера для IoT


    Роутеры серии ICR-3200 призваны заменить классическую связку: одноплатный компьютер + модем + роутер. Теперь можно запускать всю необходимую логику прямо на роутере. Благодаря мощному ARM-процессору, 512 МБ оперативной памяти и ~2ГБ встроенной флеш-памяти, на роутере можно даже запустить сервер nodejs!

    Последовательные интерфейсы RS-232/485 также встроены в роутер и доступны сразу в операционной системе с полным root-доступом. Открытое окружение для сборки собственных программ и библиотеки C/C++ для работы с низкоуровневым аппаратным API также в наличии.
    Функция глубокого сна позволит экономить энергию при работе от аккумулятора: роутер можно активировать только тогда, когда связь действительно необходима.

    В статье мы разберем интересные функции устройства и попробуем на практике поработать с интерфейсом ввода-вывода из shell-скриптов.

    Технические характеристики


    Роутеры серии ICR-3200 выполнены на единой аппаратной платформе и представлены пятью моделями, различающимися диапазонами частот LTE, наличием Wi-Fi и геолокации (GNSS). Устройства позиционируются как замена связки одноплатного компьютера и роутера. Мощный процессор и большой объем оперативной памяти позволяет запускать ресурсоемкие пользовательские приложения прямо на роутере.

    • Процессор Cortex-A8 — тактовая частота 1 ГГц, архитектура 32 bit
    • 512 МБ RAM
    • Флеш-память от 1,5 до 4 ГБ — для хранения пользовательских данных
    • Порты ввода-вывода — интерфейсы RS-232/485 и цифровые порты ввода-вывода доступны для использования пользовательскими программами

    Отдельно стоит модель ICR-3211B, работающая по стандарту LTE Cat. M1 (NB-IoT). Протокол LTE Cat. M1 был специально разработан для M2M-решений, имеет низкую скорость передачи данных (375 kb/s), а также большую дальность действия и повышенную стабильность в сложных условиях связи внутри помещений. Роутер имеет встроенный ионистор (суперконденсатор), позволяющий устройству работать короткое время после полного отключения питания.

    Режим глубокого сна


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


    В режиме сна роутер почти не потребляет энергию и просыпается за 3 секунды

    Когда потребуется разбудить роутер для передачи данных, он проснется за ~3 секунды. Разумеется, потребуется дополнительное время на регистрацию модема в сотовой сети, однако это существенно быстрее загрузки роутера с нуля. Такая опция полезна для систем с автономным питанием, большую часть времени находящихся в простое и активирующихся изредка, для выполнения активных действий, например сигнализации или блока резервирования.

    Пробуждение и засыпание


    Управление засыпанием и пробуждением происходит через модуль Sleep Mode.

    Существует 2 способа управления режимом сна:

    • Через цифровой вход — в этом режиме роутером управляет внешнее устройство, например микроконтроллер. По сигналу LOW на цифровой вход роутер засыпает, а при получении HIGH — просыпается, или наоборот. Можно также настроить таймаут срабатывания для защиты от случайных переключений.
    • Через внутренний таймер — роутер отсчитывает время и просыпается/засыпает в нужное время. Это удобно использовать для выполнения разовых операций или загрузки данных за определенный период.


    Интерфейс настройки режима глубоко сна

    Функция «последний вздох»


    Авария питания на удаленном объекте бывает особенно неприятной, потому что непонятно, из-за чего недоступна связь с объектом. Функция «Последний вздох» позволяет роутеру работать некоторое время после полного отключения питания и отправить сообщение о том, что произошла авария и резервное питание не включилось. Благодаря встроенному ионистору, ресурс которого значительно больше аккумуляторных батарей, он не требует обслуживания и замены. Это полезно для систем резервирования питания, в которых возможны сбои и важно отследить момент полной потери напряжения.


    Роутер пошлет сигнал об аварии питания даже после полного отключения питания

    Чтобы правильно отреагировать на событие потери питания, нужно как-то узнать об этом.
    Текущее напряжение питания можно получить либо с помощью shell-команды status sys:

    $ status sys
    Firmware Version : 6.1.10 (2019-07-02)
    Serial Number    : ACZ1100000623519
    Profile          : Standard
    RTC Battery      : Ok
    Supply Voltage   : 12.3 V # ← напряжение питания
    Temperature      : 37 C   # ← температура внутри корпуса
    Time             : 2019-08-16 16:21:18
    Uptime           : 0 days, 11 hours, 43 minutes
    

    Либо с помощью аппаратного Unix I/O control (ioctl) и программы на C/C++ или другом языке.
    В таблице показаны адреса нужных аппаратных регистров. Текущее напряжение питания возвращается в виде целого числа, в милливольтах. Использование низкоуровневого API предпочтительнее shell-скриптов в данном случае для более быстрой реакции. Подробная информация о работе с аппаратной частью доступна в руководстве разработчика.


    Запрос ioctl, отдающий текущее напряжение питания.

    Последовательные интерфейсы


    В роутер встроены два последовательных интерфейса: RS-232 и RS-485. Они позволяют подключать периферийные устройства напрямую к роутеру, без использования дополнительной обвязки. При этом на роутере может быть запущен полноценный сервер Node-RED или Nodejs, что позволяет обойтись одним устройств для разворачивания простой системы автоматизации, без дополнительных компьютеров и контроллеров.



    По умолчанию оба интерфейса доступны для работы как стандартные serial-устройства в Linux:

    ls -la /dev/ttyS*
    crw-------    1 root     root      251,   0 Jan  1  1970 /dev/ttyS0 # ← порт rs-232
    crw-------    1 root     root      251,   1 Jan  1  1970 /dev/ttyS1 # ← порт rs-485 
    crw-------    1 root     root      251,   5 Jan  1  1970 /dev/ttyS5 # ← не разведен
    

    Все стандартные библиотеки будут поддерживать эти устройства без дополнительных настроек, в том числе модуль Modbus-RTU2TCP и другие.

    Пользовательские модули


    Функциональность устройства можно расширить с помощью пользовательских модулей: это упрощенный вариант пакетов, только без пакетного менеджера. Весь список доступных модулей имеется на сайте https://advantech-bb.cz/products/software/user-modules.

    Модули устанавливаются вручную, с помощью загрузки файла пакета через веб-интерфейс:



    На текущий момент доступны 73 модуля. Вот некоторые интересные из них:

    • Node-RED — популярный инструмент для объединения различных промышленных протоколов в целостную систему
    • Nodejs — полноценный сервер nodejs. Большой объем оперативной памяти и мощный процессор позволяет запускать ресурсоемкие приложения прямо на роутере!
    • Python2/3
    • Веб-shell — позволяет работать в консоли через браузер.
    • Azure IoT SDK Python — набор инструментов для разработки программ под Microsoft Azure IoT Hub.

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

    Аппаратные ресурсы через shell-скрипты


    Для простых задач автоматизации удобно использовать shell-скрипты, из которых можно управлять световой индикацией и получать/задавать состояние цифровых пинов.

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

    # led
    led on|off|fast|slow
    

    Вот как это выглядит в реальной жизни:


    Демонстрация режимов работы пользовательского индикатора через shell-команды

    Для работы с цифровыми пинами используется команда io.

    $ io
    Usage: io [get <pin>] | [set <pin> <value>]
    
    io set out0 1 # Установить цифровой выход OUT0 в состояние 1 (LOW)
    io get bin0   #  Получить значение цифрового входа BIN0
    

    Важно помнить, что логика в данном случае инвертированная. Соответственно 1=LOW, 0=HIGH. Используя команду io мы можем легко работать с цифровыми пинами из bash-скриптов и строить простую логику для автоматизации и управления.

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

    #!/bin/bash
    while true
    do
    	[ $(io get bin0) -eq 0 ] && led fast || led on
    done
    

    Принцип работы скрипта прост: если BIN0 в состоянии 0, то диод горит часто, иначе горит непрерывно. Вот как это выглядит вживую:


    Демонстрация работы bash-скрипта, отображающего состояние цифрового входа с помощью индикатора.

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

    Ссылки


    • В данной статье не затрагиваются сетевые функции роутеров, такие как балансировка, failover, VPN и прочее, так как все эти темы уже разобраны в другой нашей статье: Промышленные 4G-роутеры SmartMotion.
    • Пример применения роутера ICR-3211B есть в нашей первой статье: Привет, Хабр, мы Advantech.
    • Ознакомиться с ценами на продукцию можно в общем онлайн-магазине. Собственный сайт на русском еще не готов.

    Приглашаем на партнерский форум Advantech



    Форум Advantech станет уникальной площадкой для обсуждения локальных и глобальных тенденций в области Интернета вещей. Здесь вы сможете обменяться опытом использования новых технологических решений и продуктов, найти новых клиентов и партнеров. У вас будет шанс увидеть продукцию, которую мы описывали в статьях и не только. У нас выступят лидеры отрасли и представители ключевых партнеров – NVidia, Intel и другие компании, которые принимают активное участие в развитии промышленного Интернета вещей на ближайшие годы. Мы будем рады увидеть на мероприятии всех специалистов в сфере промышленной автоматизации и Интернета вещей. Участие в мероприятии бесплатное! Количество мест ограничено. Успейте зарегистрироваться.
    Advantech IIoT
    37,42
    Наша миссия — создание умной планеты.
    Поделиться публикацией

    Комментарии 14

      +2
      Ознакомиться с ценами на продукцию можно в общем онлайн-магазине. Собственный сайт на русском еще не готов.

      Но там цен на этот продукт нет. И вот из-за таких обманов как-то вся статья начинает восприниматься немного по-иному.
        0
        440 USD за ICR-3241
          0
          Беглое гугление показывает что 400-550 €
          +1
          Ну и использование ионистора, как правило, связано с необходимым температурным диапазоном работы (-40 градусов), а не чем-то другим. Литий в таких условиях не работает, насколько мне известно.
            0
            Для минусовых температур (до -30 гр.Ц) используются литий-железо-фосфатные (LiFePO4) аккумуляторы.
              +3
              У ионистров еще сильно больше ресурс циклов заряда-разряда в сравнении с литием. Можно не обслуживать его и не переживать, что он вздуется за полгода
              0
              RS-232 в нем полноценный с уровнями +13/-13V? А то часто под RS-232 скрывается UART с TTL уровнями +5/-5V.
                0
                Да, полноценный, и RS-485 тоже. Есть вам нужен UART, можно использовать конвертер уровней.
                  0
                  RS-485 изолирована от остальной логики по питанию и сигнальным линиям или нет? Используется ли защита от перенапряжений? А то на длинном шлейфе может легко и киловольт навестись относительно земли.
                0
                .
                  –4
                  30 тысяч рублей за недоRaspberry? Серьёзно?
                    +1
                    Скорее за устройство готовое к работе.
                      +4

                      Этот недоRaspberry можно смело ставить для автоматизации серьёзного и взрослого оборудования на заводах и промышленных объектах, где требуется в первую очередь надёжность. С чем, собственно, у Advantech проблем нет, в отличие от Respberry. Эти устройства из совсем разных классов.

                        0
                        Это можно только в шкаф поставить, а для серьезного и взрослого оборудования как минимум надо смотреть на схемотехнику. Спецификация на сайте жидкая, от её чтения больше вопросов чем ответов. Неизвестно развязан ли порт 485 гальванически от логики или нет, нет фотографии внутренностей (а там сразу будет видно, есть ли защита на IO), так что пока выложенная железка для меня это только дорогая малинка/апельсинка.

                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                    Самое читаемое