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

в 6:27, , рубрики: 4G, cortex-a8, icr-3200, ioctl, IoT, LTE, modbus rtu, modbus tcp, node-red, nodejs, rs-232, RS-485, shell-скрипт, Беспроводные технологии, Блог компании Advantech, Сетевые технологии

4G-роутер в роли универсального сервера для IoT - 1
Роутеры серии 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.

4G-роутер в роли универсального сервера для IoT - 2
В режиме сна роутер почти не потребляет энергию и просыпается за 3 секунды

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

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

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

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

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

4G-роутер в роли универсального сервера для IoT - 3
Интерфейс настройки режима глубоко сна

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

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

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

Чтобы правильно отреагировать на событие потери питания, нужно как-то узнать об этом.
Текущее напряжение питания можно получить либо с помощью 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-скриптов в данном случае для более быстрой реакции. Подробная информация о работе с аппаратной частью доступна в руководстве разработчика.

4G-роутер в роли универсального сервера для IoT - 5
Запрос ioctl, отдающий текущее напряжение питания.

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

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

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

По умолчанию оба интерфейса доступны для работы как стандартные 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.

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

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

На текущий момент доступны 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 Россия

Источник


* - обязательные к заполнению поля