- PVSM.RU - https://www.pvsm.ru -
Роутеры серии ICR-3200 [1] призваны заменить классическую связку: одноплатный компьютер + модем + роутер. Теперь можно запускать всю необходимую логику прямо на роутере. Благодаря мощному ARM-процессору, 512 МБ оперативной памяти и ~2ГБ встроенной флеш-памяти, на роутере можно даже запустить сервер nodejs!
Последовательные интерфейсы RS-232/485 также встроены в роутер и доступны сразу в операционной системе с полным root-доступом. Открытое окружение для сборки собственных программ и библиотеки C/C++ для работы с низкоуровневым аппаратным API также в наличии.
Функция глубокого сна позволит экономить энергию при работе от аккумулятора: роутер можно активировать только тогда, когда связь действительно необходима.
В статье мы разберем интересные функции устройства и попробуем на практике поработать с интерфейсом ввода-вывода из shell-скриптов.
Роутеры серии ICR-3200 [1] выполнены на единой аппаратной платформе и представлены пятью моделями, различающимися диапазонами частот LTE, наличием Wi-Fi и геолокации (GNSS). Устройства позиционируются как замена связки одноплатного компьютера и роутера. Мощный процессор и большой объем оперативной памяти позволяет запускать ресурсоемкие пользовательские приложения прямо на роутере.
Отдельно стоит модель ICR-3211B [2], работающая по стандарту LTE Cat. M1 (NB-IoT [3]). Протокол LTE Cat. M1 был специально разработан для M2M-решений, имеет низкую скорость передачи данных (375 kb/s), а также большую дальность действия и повышенную стабильность в сложных условиях связи внутри помещений. Роутер имеет встроенный ионистор (суперконденсатор) [4], позволяющий устройству работать короткое время после полного отключения питания.
Режим глубоко сна позволяет ввести роутер в состояние, когда все процессы заморожены и аппаратная часть отключены, для экономии энергии, при этом все функции устройства отключаются и со стороны оно будет выглядит полностью выключенным. Потребление энергии в таком режиме составляет не более 10 mW.
В режиме сна роутер почти не потребляет энергию и просыпается за 3 секунды
Когда потребуется разбудить роутер для передачи данных, он проснется за ~3 секунды. Разумеется, потребуется дополнительное время на регистрацию модема в сотовой сети, однако это существенно быстрее загрузки роутера с нуля. Такая опция полезна для систем с автономным питанием, большую часть времени находящихся в простое и активирующихся изредка, для выполнения активных действий, например сигнализации или блока резервирования.
Управление засыпанием и пробуждением происходит через модуль Sleep Mode [5].
Существует 2 способа управления режимом сна:
Интерфейс настройки режима глубоко сна
Авария питания на удаленном объекте бывает особенно неприятной, потому что непонятно, из-за чего недоступна связь с объектом. Функция «Последний вздох» позволяет роутеру работать некоторое время после полного отключения питания и отправить сообщение о том, что произошла авария и резервное питание не включилось. Благодаря встроенному ионистору, ресурс которого значительно больше аккумуляторных батарей, он не требует обслуживания и замены. Это полезно для систем резервирования питания, в которых возможны сбои и важно отследить момент полной потери напряжения.
Роутер пошлет сигнал об аварии питания даже после полного отключения питания
Чтобы правильно отреагировать на событие потери питания, нужно как-то узнать об этом.
Текущее напряжение питания можно получить либо с помощью 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-скриптов в данном случае для более быстрой реакции. Подробная информация о работе с аппаратной частью доступна в руководстве разработчика. [6]
Запрос 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 [7] и другие.
Функциональность устройства можно расширить с помощью пользовательских модулей: это упрощенный вариант пакетов, только без пакетного менеджера. Весь список доступных модулей имеется на сайте https://advantech-bb.cz/products/software/user-modules [8].
Модули устанавливаются вручную, с помощью загрузки файла пакета через веб-интерфейс:
На текущий момент доступны 73 модуля. Вот некоторые интересные из них:
Так как прошивка роутеров открыта, разработчики могут писать собственные модули, в том числе и с веб-интерфейсом. Справочные материалы доступны в руководстве по написанию модулей [6] и и разделе для разработчиков [14] на веб-сайте компании. Для удобства сборки пакетов доступно готовое окружение для кросс-компиляции [15].
Для простых задач автоматизации удобно использовать 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-скрипта, отображающего состояние цифрового входа с помощью индикатора.
Несмотря на примитивность этого скрипта, он наглядно показывает, как в одну строчку, без дополнительного ПО, библиотек и настроек можно получать входные данные с цифровых входов и реагировать на них.
Автор: Advantech Россия
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/lte/327657
Ссылки в тексте:
[1] ICR-3200: https://www.advantech.ru/products/industrial-iot-4g-lte-router-gateway/sub_7e21d2de-630c-4925-a51c-f41c18642d72?utm_source=habr&utm_medium=post&utm_campaign=icr-3200&utm_content=all
[2] ICR-3211B: https://www.advantech.ru/products/7e21d2de-630c-4925-a51c-f41c18642d72/icr-3211b/mod_3e1da9ee-6d63-4539-a4c2-d903fb360c5c?utm_source=habr&utm_medium=post&utm_campaign=icr-3200&utm_content=icr-3211b
[3] NB-IoT: https://ru.wikipedia.org/wiki/NB_IoT
[4] ионистор (суперконденсатор): https://ru.wikipedia.org/wiki/%D0%98%D0%BE%D0%BD%D0%B8%D1%81%D1%82%D0%BE%D1%80
[5] Sleep Mode: https://ep.advantech-bb.cz/products/software/user-modules/download/333/sleep-mode-application-note-20190329.pdf
[6] руководстве разработчика.: https://advantech-bb.cz/support/router-models/download/294/programming-of-user-modules-20181121.pdf
[7] Modbus-RTU2TCP: https://ep.advantech-bb.cz/products/software/user-modules#protocol-modbus-rtu2tcp
[8] https://advantech-bb.cz/products/software/user-modules: https://advantech-bb.cz/products/software/user-modules
[9] Node-RED: https://ep.advantech-bb.cz/products/software/user-modules#node-red
[10] Nodejs: https://ep.advantech-bb.cz/products/software/user-modules#nodejs
[11] Python2/3: https://ep.advantech-bb.cz/products/software/user-modules#python3
[12] Веб-shell: https://ep.advantech-bb.cz/products/software/user-modules#web-terminal
[13] Azure IoT SDK Python: https://ep.advantech-bb.cz/products/software/user-modules#azure-iot-sdk-python
[14] и разделе для разработчиков: https://ep.advantech-bb.cz/devzone
[15] окружение для кросс-компиляции: https://ep.advantech-bb.cz/devzone/preparing-build-environment
[16] Промышленные 4G-роутеры SmartMotion: https://habr.com/ru/company/advantech/blog/449962/
[17] Привет, мы Advantech: https://habr.com/ru/company/advantech/blog/445912/
[18] онлайн-магазине: https://buyemt.advantech.com/?utm_source=habr&utm_medium=post&utm_campaign=icr-3200&utm_content=buyemt
[19] Источник: https://habr.com/ru/post/464003/?utm_source=habrahabr&utm_medium=rss&utm_campaign=464003
Нажмите здесь для печати.