Подписаться

Мониторинг по Modbus на роутерах Teltonika (Linux)

Вступление

Configuration examples modbus logo.png
Modbus - это протокол последовательной связи, первоначально опубликованный Modicon (ныне Schneider Electric) в 1979 году для использования с его программируемыми логическими контроллерами (ПЛК). Modbus де-факто стал стандартным протоколом связи и теперь является общедоступным средством подключения промышленных электронных устройств. Основными причинами использования Modbus в промышленной среде являются:

разработан с учетом промышленного применения,
открыто опубликовано и без лицензионных платежей,
простота развертывания и обслуживания,
перемещает необработанные биты или слова, не накладывая много ограничений на поставщиков.
Modbus обеспечивает связь между многими устройствами, подключенными к одной и той же сети, например, системой, которая измеряет температуру и влажность и передает результаты на компьютер. Modbus часто используется для подключения управляющего компьютера к удаленному оконечному устройству (RTU) в системах диспетчерского управления и сбора данных (SCADA). Многие из типов данных названы из-за его использования в управляющих реле: однобитный физический выход называется катушкой, а однобитный физический вход называется дискретным входом или контактом.

Эта статья содержит руководство по использованию протокола Modbus TCP для мониторинга маршрутизаторов RUT955 с ПК с использованием операционной системы Linux. Однако те же принципы применимы к маршрутизаторам RUT230, RUT240 и RUT950, но информация о регистре хранения будет отличаться. Вы можете найти эту информацию в ссылках ниже:

Настройка роутера
Чтобы начать использовать Modbus TCP, мы должны сначала настроить маршрутизатор. Конфигурация Modbus TCP со стороны маршрутизатора очень проста. Все, что вам нужно сделать, это войти в WebUI маршрутизатора, перейти в раздел «Сервисы» → «Mobdus», «Включить службу Modbus TCP», ввести номер порта, через который будет осуществляться связь Modbus TCP, и «Разрешить удаленный доступ», если вы хотите подключиться к маршрутизатору. удаленно (из WAN).

Services modbus v2.PNG

Установка необходимого программного обеспечения
Далее вам понадобится программное обеспечение, способное общаться через Modbus. Программное обеспечение, которое мы будем использовать для этого руководства, называется modbus-cli. Чтобы получить его, сначала нужно установить ruby. Для этого откройте приложение «Терминал» и введите эти команды.

$ sudo apt-get install ruby
$ sudo gem install modbus-cli

Получение параметров маршрутизатора
Modbus TCP может использоваться как для получения, так и для установки определенных параметров маршрутизатора. Сначала давайте рассмотрим, как получить параметры через Modbus TCP.

Список параметров
Параметры маршрутизатора хранятся в регистрах. Каждый регистр содержит 2 байта информации. Для упрощения количество регистров для хранения числовых значений равно 2, а количество регистров для хранения текстовой информации равно 16. Адреса регистров и соответствующие системные значения описаны в таблице ниже:

необходимое значнение адрес регистра число регистров представление
System uptime 1 2 32 bit unsigned integer
Mobile signal strength (RSSI in dBm) 3 2 32 bit integer
System temperature (in 0.1 °C) 5 2 32 bit integer
System hostname 7 16 Text
GSM operator name 23 16 Text
Router serial number 39 16 Text
LAN MAC address 55 16 Text
Router name 71 16 Text
Currently active SIM card slot 87 16 Text
Network registration info 103 16 Text
Network type 119 16 Text
Digital input (DIN1) state 135 2 32 bit integer
Digital galvanically isolated input (DIN2) state 137 2 32 bit integer
Current WAN IP address 139 2 32 bit unsigned integer
Analog input value 141 2 32 bit integer
GPS latitude coordinate 143 2 32 bit float
GPS longitude coordinate 145 2 32 bit float
GPS fix time 147 16 Text (Unix timestamp×1000)
GPS date and time 163 16 Text (DDMMYYhhmmss)
GPS speed 179 2 32 bit integer
GPS satellite count 181 2 32 bit integer
GPS accuracy 183 2 32 bit float

Как читать Modbus
Для получения параметров из системы используется команда чтения Modbus. Синтаксис этой команды:

$ modbus read [OPTIONS] HOST_NAME REGISTER_ADDRESS NUMBER_OF_REGISTERS


ОПЦИИ могут описывать такие вещи, как тип данных, номер порта, тип адресации и т. Д.

HOST_NAME - это имя хоста или IP-адрес маршрутизатора (WAN IP, если вы подключаетесь удаленно).

REGISTER_ADDRESS указывает регистр, который вы хотите прочитать.

NUMBER_OF_REGISTERS указывает, сколько регистров следует прочитать, начиная с регистра, указанного в REGISTER_ADDRESS.

Примечание: всю эту информацию и многое другое можно просмотреть, выполнив эти команды в Терминале Linux: modbus read -h или modbus read --help.

Для первого примера, давайте использовать команду чтения Modbus, чтобы попытаться получить значение времени безотказной работы маршрутизатора в секундах. Если вы посмотрите на таблицу выше, вы увидите, что значение времени работы хранится в двух регистрах, начиная с первого регистра, поэтому:

$ modbus read -w -p 12345 192.168.1.1 %MW001 2


-w указывает тип данных. В этом случае беззнаковые 16-битные целые числа.

-p указывает номер порта.

192.168.1.1 - IP-адрес локальной сети маршрутизатора.

% MW001 указывает адрес регистра.

2 - указывает, сколько регистров нужно прочитать.

Configuration examples modbus uptime example.png

Как видно из приведенного выше примера, маршрутизатор возвращает значения, хранящиеся в двух регистрах: первом и втором. Возвращенные значения представлены в десятичной форме.

Интерпретация ответа
Значения возвращаются в десятичном виде и, если вы добавляете -D к команде, шестнадцатеричные формы. Иногда ответ очевиден, как в примере выше. Но, поскольку регистр содержит только 2 байта (16 битов) информации, значение, хранящееся в регистре, не может превышать 65535 (216 с -1). Так что же произойдет, если время работы маршрутизатора будет выше?

Configuration examples modbus higher uptime example v2.png

Когда значение превышает 65535, счетчик сбрасывается, а значение, хранящееся в первом регистре, увеличивается на 1. Таким образом, одним из способов интерпретации результатов будет умножение значения в первом регистре на 65536 (216) и добавление его к значению второй регистр:% MW1 * 65536 +% MW2. Что, как следует из приведенного выше примера, будет: 1 * 65536 + 3067 = 68603 с или 19 часов 3 минуты 23 секунды.

Однако, хотя это работает при расчете значений времени безотказной работы, оно не будет работать для всех параметров. Правильный способ вычислить окончательные значения - сначала преобразовать их в двоичные. Как упоминалось ранее в этой главе, регистр содержит 16 бит информации, которая может быть представлена ​​16-значным длинным двоичным числом. Следуя приведенному выше примеру, значение первого регистра 1, преобразованное в двоичное, будет 0000 0000 0000 0001, а значение второго регистра 3067 будет 0000 1011 1111 1011. Вы можете легко преобразовать числа из одной системы счисления в другую, используя любое онлайн-преобразование. инструмент:

Configuration examples modbus decimal to binary.png

Нули в начале добавляются для представления того факта, что числа выражены в 16-битном формате. Следующим шагом является добавление двух значений, но не в традиционном смысле. Вместо этого значение второго регистра должно действовать как расширение значения первого регистра или, проще говоря, значения должны складываться, как если бы они были строками, т.е. 0000 0000 0000 0001 + 0000 1011 1111 1011 = 0000 0000 0000 0001 0000 1011 1111 1011. Что здесь происходит, так это то, что в этой сумме значение первого регистра 1 не следует рассматривать как 1, а вместо 65536 (216), что является значением 17-й цифры 32-разрядное длинное двоичное число. Если вы преобразуете это значение обратно в десятичное, вы увидите, что мы получаем тот же ответ:

Configuration examples modbus binary to decimal.png

WAN IP-адрес
Давайте рассмотрим другой, более сложный пример, отправив запрос на IP-адрес WAN маршрутизатора. Если вы посмотрите на таблицу выше, вы увидите, что значение IP-адреса WAN содержится в 139-м и 140-м регистрах. Поэтому мы должны указать 139-й адрес и прочитать 2 регистра с этого адреса:

$ modbus read -w -p 12345 192.168.1.1 %MW139 2

Configuration examples modbus wan ip v2.png

Адрес IPv4 разделен на 4 сегмента. Каждый сегмент содержит 8 бит (или 1 байт) информации:

Configuration examples modbus binary ip v2.png

Таким образом, чтобы получить IP-адрес WAN из полученного ответа, нам нужно преобразовать значения обоих регистров в двоичные и разделить их на 8-битные сегменты. Давайте сделаем это со значениями из последнего примера:

% MW139 2692 и% MW140 30404, которые будут преобразованы в двоичные: 2692 → 0000 1010 1000 0100; 30404 → 0111 0110 1100 0100.

Как обсуждалось ранее, нам нужно разделить два числа на 8-битные сегменты, чтобы получить IP-адрес:

Configuration examples modbus ip reconstruction.png

Сила сигнала
Еще один другой пример - значения силы сигнала, потому что они отрицательные. Давайте рассмотрим пример этого, чтобы увидеть, как следует интерпретировать значения:

Configuration examples modbus signal strength.png

Чтобы изменить пение двоичного числа, вы должны инвертировать его, добавить 1 к нему. В случае уровня сигнала вам не нужны оба значения регистра, для этого требуется только второе значение (регистр 4), которое в нашем примере составляет 65477. При преобразовании в двоичное значение это: 65447 → 1111 1111 1100 0101. Далее мы его инвертируем и добавляем 1:


Примеры конфигурации modbus отрицательных двоичных файлов.png


Полученное нами значение равно 0000 0000 0011 1011. При преобразовании в десятичное число оно становится равным 59, поэтому окончательное значение равно 59.

Текст
Некоторые значения, такие как имя хоста, имя маршрутизатора, тип сети, представлены в виде текста в исходном виде, но хранятся в регистрах в виде чисел. Вы можете интерпретировать эти значения так же, как и все, что обсуждалось ранее (путем преобразования их в двоичный код, а затем в текст), но более простым способом было бы получить их в шестнадцатеричной форме и затем преобразовать их в текст. Для этого нам нужно добавить параметр -D в команду. Давайте сделаем это, запросив имя хоста маршрутизатора:

$ modbus read -D -w -p 12345 192.168.1.1 %MW007 16

Configuration examples modbus hostname example v2.png

Игнорировать первые 9 сегментов и последние сегменты, которые содержат только нули (выделены красным). Скопируйте ответ (выделен зеленым цветом) и вставьте его в преобразователь шестнадцатеричного в текст (ASCII):

Configuration examples modbus hex to text.png

Установка значений маршрутизатора
Демон Modbus также поддерживает настройку некоторых системных параметров. Для выполнения этой задачи используется команда записи Modbus. Параметры, связанные с системой, и способы их использования описаны ниже. Адрес регистра указывает, с какого регистра начинать запись необходимых значений. Все команды, кроме «Изменить APN», принимают только один входной параметр (подробнее об изменении APN можно узнать ниже).

Значение для установки адрес регистра значение регистра описание
Digital output 1 (DOUT1) (ON/OFF*) 201 1 | 0 Изменяет состояние выхода с открытым коллектором (OC)
Digital output 2 (DOUT2) (ON/OFF*) 202 1 | 0 Изменяет состояние релейного выхода
Switch WiFi (ON/OFF*) 203 1 | 0 Включает или выключает WiFi
Switch mobile data connection (ON/OFF*) 204 1 | 0 Включает или выключает мобильный интернет
Switch SIM card 205 1 | 2 | 0 Меняет активный слот сим карты
  • 1 -переключиться на SIM1
  • 2 -переключиься на SIM2
  • 0 - переключиться на другую сим карту с текущей (SIM1 → SIM2 or SIM2 → SIM1
Reboot 206 1 Перезагрузить роутер
Change APN 207 APN code

Изменения APN.
Количество входных регистров может варьироваться в зависимости от длины APN, но самый первый байт команды set APN обозначает номер SIM-карты, для которой устанавливается APN. Этот байт должен быть установлен в:
1 - установить APN для SIM1
2 - установить APN для SIM2

Как вы можете видеть, большинство значений 0 и 1, 0 означает ВЫКЛ и 1 означает ВКЛ. Например, если вы хотите выключить WiFi, используйте эту команду:

$ modbus write -w -p 12345 192.168.1.1 %MW203 0

Если же Вы хотите включить WiFi т используйте команду:

$ modbus write -w -p 12345 192.168.1.1 %MW203 1

Как видите, единственная разница - цифра в конце - 0 для ВЫКЛ, 1 для ВКЛ. То же самое верно для всех других параметров, которые принимают только два входных значения.

В случае переключения SIM-карты есть три значения - 0, 1 и 2. 1 использует первый слот SIM-карты, 2 - второй слот SIM-карты, а 0 - переключение с используемой SIM-карты на противоположную. Сим-карта. Например, чтобы инициировать переключение на вторую SIM-карту, команда должна выглядеть так:

$ modbus write -w -p 12345 192.168.1.1 %MW205 2


Функция перезагрузки принимает только одно значение: 1. Она просто перезагружает маршрутизатор. Чтобы инициировать перезагрузку, используйте эту команду:

$ modbus write -w -p 12345 192.168.1.1 %MW206 1


APN
APN является единственным параметром, который может принимать более одного входного значения. Для параметра APN количество входных регистров может варьироваться. Самый первый байт команды APN обозначает номер SIM-карты, для которой будет установлен APN. Этот байт должен быть установлен в 1 (для установки APN для SIM-карты № 1) или в 2 (для установки APN для SIM-карты № 2). Остальная часть строки должна вводиться по одному символу за раз. Каждый символ должен быть преобразован из ASCII (обычный текст) в десятичный.

В качестве примера попробуем изменить APN первой SIM-карты маршрутизатора на gprs.fix-ip.omnitel1.net:

$ modbus write -w -D -p 12345 192.168.1.1 %MW207 1 103 112 114 115 46 102 105 120 45 105 112 46 111 109 110 105 116 101 108 49 46 110 101 116


Значение первого байта выделено синим цветом, и в этом случае это означает, что значение APN должно быть изменено для первой SIM-карты. Значение самой строки APN выделено зеленым цветом. Используйте онлайн-конвертер ASCII в десятичное число для преобразования отдельных букв в десятичный код.

 

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

Войдите в службу, чтобы оставить комментарий.
На базе технологии Zendesk