Advanced Serial Data Logger

Trust In Confidence!

Для Win2000 - Windows 10 (2016) (Server, x86, x64). Последняя версия: 4.3.6 build 1113. 22 ноября 2018.


Опрос устройств MODBUS RTU/TCP: Настройка сервера сбора данных

Задача:

Задача: стоит задача опроса двух устройств, работающих по протоколу MODBUS и запись полученных значений в базу данных.

Предварительные требования:

  • Professional, Enterprise или пробная версия одного из наших логгеров (Advanced Serial Data Logger или Advanced TCP Data Logger).
  • Модуль MODBUS RTU, ASCII или TCP. Модуль MODBUS TCP имеет смысл использовать только совместно с Advanced TCP Data Logger.

Подразумевается, что:

  1. Вы ранее работали с устройствами c MODBUS.
  2. Вам известны адреса регистров, в которых хранятся необходимые данные.
  3. Вам известны коммуникационные параметры для связи с устройствами (скорость, количество бит данных и т.п.).

Скачайте и установите наше ПО

Скачать Advanced Serial Data Logger

Advanced Serial Data Logger вы можете скачать здесь. Модули могут быть скачены отдельно.

Настройка порта

Необходимо настроить коммуникационные параметры (рис.1). Обычно MODBUS устройства подключаются к компьютеру по интерфейсу RS485 с использованием специального конвертера. В этом случае необходимо дополнительно включить опцию поддержки этого интерфейса "Режим интерфейса RS485".

Параметры связи
Рис.1 - Параметры связи

Настройка опроса данных через MODBUS

При опросе и считывание данных через MODBUS компьютер является мастером, а устройство ведомым. Это означает, что программа на компьютере отправляет запросы MODBUS, на которые устройство отвечает. Настроить отправку запросов можно с помощью модуля "MODBUS RTU" (рис. 2). Необходимо выбрать данный модуль на закладке "Запрос Анализ Фильтрация" и нажать на кнопку "Настроить" справа от имени модуля в списке.

Выбор модуля запроса и обработки данных
Рис. 2 - Выбор модуля запроса и обработки данных

В появившемся окне (рис.3) необходимо добавить один или несколько запросов используя кнопку "Действие → Добавить новый запрос".

Добавление запросов в очередь
Рис. 3 - Добавление запросов в очередь

Назначение опций запроса понятно из их названия. Дополнительную информацию по опциям можно найти в файле справки по этому модулю (Пуск → Программы → Advanced Serial Data Logger → Справка).

Обратите внимание, что необходимо определить элементы ответа устройства и их формат. Без описания элементов ответа программа не сможет разобрать MODBUS пакет на составляющие части. Например, в примере на рис.3 считываются два регистра, расположенных по адресу 8214. Значение каждого регистра состоит из двух байт (16 бит). Итого в примере выше будут считаны 4 байта, начиная с адреса 8214. В зависимости от прошивки MODBUS устройства и карты регистров устройства эти байты можно трактовать по-разному.

Вариант 1 (рис. 3). Оба считываемых регистра имеют одинаковый тип данных. Каждое значение состоит из двух байт (2*8 = 16 бит).

  1. В поле "Имя" задаем базовое имя для каждого значения: VALUE;
  2. В поле "Количество" задаем количество значений: 2;
  3. Выбираем опцию "Добавлять счетчик к имени": программа автоматически добавит порядковый номер 1 и 2 к базовому имени. В результате получившиеся значения будут иметь имя VALUE1 и VALUE2.
  4. В поле "Тип данных" выбираем тип данных, в зависимости от количества бит данных;
  5. Ставим галочку "Число без знака", если значение беззнаковое.

Вариант 2 (рис. 4). Оба считываемых регистра имеют размер 16 бит, но разный тип данных (одно значение со знаком, другое нет).

  1. Добавляем два элемента ответа. Для этого выбираем в дереве "Элементы ответа" и нажимаем "Действие → Добавить ответ".
  2. В поле "Имя" задаем базовое имя для каждого значения: VALUE1 или VALUE2;
  3. В поле "Количество" задаем количество значений: 1;
  4. Отключаем опцию "Добавлять счетчик к имени", поскольку полное имя задано в поле "Имя". В результате получившиеся значения будут иметь имя VALUE1 и VALUE2.
  5. В поле "Тип данных" выбираем свой тип данных для каждого элемента ответа;
  6. Ставим/снимаем галочку "Число без знака" для значения.

Вариант ответа
Рис.4 - Вариант ответа

Вариант 3 (рис. 5). Одно значение имеет размер 16 бит и соответственно занимает один регистра, а другое значение 32 бита и занимает 2 регистра.

  1. Добавляем два элемента ответа. Для этого выбираем в дереве "Элементы ответа" и нажимаем "Действие → Добавить ответ".
  2. В поле "Имя" задаем базовое имя для каждого значения: VALUE1 или VALUE2;
  3. В поле "Количество" задаем количество значений: 1;
  4. Отключаем опцию "Добавлять счетчик к имени", поскольку полное имя задано в поле "Имя". В результате получившиеся значения будут иметь имя VALUE1 и VALUE2.
  5. В поле "Тип данных" выбираем свой тип данных для каждого элемента ответа;
  6. Ставим/снимаем галочку "Число без знака" для значения.

Вариант ответа
Рис. 5 - Вариант ответа

Вариант 4 (рис. 6). Необходимо считать два регистра, но они расположены в памяти устройства не по порядку, а между ними есть другие регистры (значения).
Через MODBUS можно за один раз считать около 100 регистров. Если "разрыв" между двумя нужными регистрами в памяти устройства не очень большой, то можно считать весь диапазон значений в одном запросе и потом выбрать из считанного массива данных только нужные значения. Иначе придется разбить запрос на два разных запроса с разными адресами. Ниже приведен пример для одного запроса. В памяти устройства нужные значения имеют адреса 8214 и 8218.

  1. Добавляем запрос и указываем в свойствах запроса считывать пять регистров, начиная с 8214.
  2. Добавляем два элемента ответа. Для этого выбираем в дереве "Элементы ответа" и нажимаем "Действие → Добавить ответ".
  3. В поле "Имя" задаем базовое имя для каждого значения: VALUE1 или VALUE2;
  4. В поле "Количество" задаем количество значений: 1;
  5. Отключаем опцию "Добавлять счетчик к имени", поскольку полное имя задано в поле "Имя". В результате получившиеся значения будут иметь имя VALUE1 и VALUE2.
  6. В поле "Тип данных" выбираем свой тип данных для каждого элемента ответа;
  7. Ставим/снимаем галочку "Число без знака" для значения.

У второго элемента ответа указываем смещения в байтах относительно начала массива данных. В данном случае "8" означает, что нужно пропустить 4 регистра, каждый из которых занимает два байта. В предыдущих примерах мы указывали "-1" в качестве смещения. В этом случае программа рассчитывала смещение автоматически в зависимости от количества данных предыдущих элементов ответа.

Вариант запроса и ответа
Рис. 6 - Вариант запроса и ответа

Вариант 5 (рис. 7). Необходимо считать значения аналоговых входов и выходов, согласно карты регистров MODBUS ниже:

Адрес

Имя

Описание

0003

ain1

Аналоговый вход №1

0004

ain2

Аналоговый вход №2

0005

ain3

Аналоговый вход №3

0006

ain4

Аналоговый вход №4

0007

dot

Цифровые выходы (16 бит, 0 если не установлен)

0008

aot1

Аналоговый выход №1

0009

aot2

Аналоговый выход №2

0010

aot3

Аналоговый выход №3

0011

aot4

Аналоговый выход №4

  1. Добавляем запрос и указываем в свойствах запроса считывать девять регистров, начиная с 0003.
  2. Добавляем два элемента ответа. Для этого выбираем в дереве "Элементы ответа" и нажимаем "Действие → Добавить ответ".
  3. В поле "Имя" задаем базовое имя для каждого значения: ain или aot;
  4. В поле "Количество" задаем количество значений: 4;
  5. Включаем опцию "Добавлять счетчик к имени". В результате получившиеся значения будут иметь имя AIN1- AIN4 и AOT1- AOT4.
  6. В поле "Тип данных" выбираем свой тип данных для каждого элемента ответа: Decimal 16 bit;
  7. У второго элемента ответа указываем смещения в байтах относительно начала массива данных. В данном случае "10" означает, что нужно пропустить 5 регистров, каждый из которых занимает два байта.

Вариант запроса и ответа
Рис. 7 - Вариант запроса и ответа

Как записать данные в базу данных описано в следующих главах (ссылки ниже).

Сопутствующие статьи:

MODBUS RTU, MODBUS ASCII, MODBUS/TCP