![](https://habrastorage.org/webt/1u/hi/3x/1uhi3xv1ohuvrdyohxov8_pakd4.png)
Роутеры серии 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.
![](https://habrastorage.org/webt/em/xo/wv/emxowv-41hjru3b05fm4zfphmsc.png)
В режиме сна роутер почти не потребляет энергию и просыпается за 3 секунды
Когда потребуется разбудить роутер для передачи данных, он проснется за ~3 секунды. Разумеется, потребуется дополнительное время на регистрацию модема в сотовой сети, однако это существенно быстрее загрузки роутера с нуля. Такая опция полезна для систем с автономным питанием, большую часть времени находящихся в простое и активирующихся изредка, для выполнения активных действий, например сигнализации или блока резервирования.
Пробуждение и засыпание
Управление засыпанием и пробуждением происходит через модуль Sleep Mode.
Существует 2 способа управления режимом сна:
- Через цифровой вход — в этом режиме роутером управляет внешнее устройство, например микроконтроллер. По сигналу LOW на цифровой вход роутер засыпает, а при получении HIGH — просыпается, или наоборот. Можно также настроить таймаут срабатывания для защиты от случайных переключений.
- Через внутренний таймер — роутер отсчитывает время и просыпается/засыпает в нужное время. Это удобно использовать для выполнения разовых операций или загрузки данных за определенный период.
![](https://habrastorage.org/webt/ap/b7/zb/apb7zb1w1e1pvlxqcshws4tpimu.png)
Интерфейс настройки режима глубоко сна
Функция «последний вздох»
Авария питания на удаленном объекте бывает особенно неприятной, потому что непонятно, из-за чего недоступна связь с объектом. Функция «Последний вздох» позволяет роутеру работать некоторое время после полного отключения питания и отправить сообщение о том, что произошла авария и резервное питание не включилось. Благодаря встроенному ионистору, ресурс которого значительно больше аккумуляторных батарей, он не требует обслуживания и замены. Это полезно для систем резервирования питания, в которых возможны сбои и важно отследить момент полной потери напряжения.
![](https://habrastorage.org/webt/_f/ar/ab/_farabrj92de4-kgsb8vuwhlprc.png)
Роутер пошлет сигнал об аварии питания даже после полного отключения питания
Чтобы правильно отреагировать на событие потери питания, нужно как-то узнать об этом.
Текущее напряжение питания можно получить либо с помощью 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-скриптов в данном случае для более быстрой реакции. Подробная информация о работе с аппаратной частью доступна в руководстве разработчика.
![](https://habrastorage.org/webt/7l/ma/eg/7lmaegbu389ciafjyxkwtcgai0m.png)
Запрос ioctl, отдающий текущее напряжение питания.
Последовательные интерфейсы
В роутер встроены два последовательных интерфейса: RS-232 и RS-485. Они позволяют подключать периферийные устройства напрямую к роутеру, без использования дополнительной обвязки. При этом на роутере может быть запущен полноценный сервер Node-RED или Nodejs, что позволяет обойтись одним устройств для разворачивания простой системы автоматизации, без дополнительных компьютеров и контроллеров.
![](https://habrastorage.org/webt/w-/qo/lk/w-qolkr2baomfw18jtmtpsnxzs8.png)
По умолчанию оба интерфейса доступны для работы как стандартные 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.
Модули устанавливаются вручную, с помощью загрузки файла пакета через веб-интерфейс:
![](https://habrastorage.org/webt/5l/rs/am/5lrsamo-yvrnownsaclggrsvyda.png)
На текущий момент доступны 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
![](https://habrastorage.org/webt/eb/yx/pj/ebyxpjj1a8-zfozgcqds5in5kwy.png)
Форум Advantech станет уникальной площадкой для обсуждения локальных и глобальных тенденций в области Интернета вещей. Здесь вы сможете обменяться опытом использования новых технологических решений и продуктов, найти новых клиентов и партнеров. У вас будет шанс увидеть продукцию, которую мы описывали в статьях и не только. У нас выступят лидеры отрасли и представители ключевых партнеров – NVidia, Intel и другие компании, которые принимают активное участие в развитии промышленного Интернета вещей на ближайшие годы. Мы будем рады увидеть на мероприятии всех специалистов в сфере промышленной автоматизации и Интернета вещей. Участие в мероприятии бесплатное! Количество мест ограничено. Успейте зарегистрироваться.