Задача:
Задача: стоит задача опроса двух устройств, работающих по протоколу MODBUS и запись полученных значений в базу данных.
Предварительные требования:
Подразумевается, что:
Необходимо настроить коммуникационные параметры (рис.1). Обычно MODBUS устройства подключаются к компьютеру по интерфейсу RS485 с использованием специального конвертера. В этом случае необходимо дополнительно включить опцию поддержки этого интерфейса "Режим интерфейса RS485".
Рис.1 - Параметры связи
При опросе и считывание данных через MODBUS компьютер является мастером, а устройство ведомым. Это означает, что программа на компьютере отправляет запросы MODBUS, на которые устройство отвечает. Настроить отправку запросов можно с помощью модуля "MODBUS RTU" (рис. 2). Необходимо выбрать данный модуль на закладке "Запрос Анализ Фильтрация" и нажать на кнопку "Настроить" справа от имени модуля в списке.
Рис. 2 - Выбор модуля запроса и обработки данных
В появившемся окне (рис.3) необходимо добавить один или несколько запросов используя кнопку "Действие → Добавить новый запрос".
Рис. 3 - Добавление запросов в очередь
Назначение опций запроса понятно из их названия. Дополнительную информацию по опциям можно найти в файле справки по этому модулю (Пуск → Программы → Advanced Serial Data Logger → Справка).
Обратите внимание, что необходимо определить элементы ответа устройства и их формат. Без описания элементов ответа программа не сможет разобрать MODBUS пакет на составляющие части. Например, в примере на рис.3 считываются два регистра, расположенных по адресу 8214. Значение каждого регистра состоит из двух байт (16 бит). Итого в примере выше будут считаны 4 байта, начиная с адреса 8214. В зависимости от прошивки MODBUS устройства и карты регистров устройства эти байты можно трактовать по-разному.
Вариант 1 (рис. 3). Оба считываемых регистра имеют одинаковый тип данных. Каждое значение состоит из двух байт (2*8 = 16 бит).
Вариант 2 (рис. 4). Оба считываемых регистра имеют размер 16 бит, но разный тип данных (одно значение со знаком, другое нет).
Рис.4 - Вариант ответа
Вариант 3 (рис. 5). Одно значение имеет размер 16 бит и соответственно занимает один регистра, а другое значение 32 бита и занимает 2 регистра.
Рис. 5 - Вариант ответа
Вариант 4 (рис. 6). Необходимо считать два регистра, но они расположены в памяти устройства не по порядку, а между ними есть другие регистры (значения).
Через MODBUS можно за один раз считать около 100 регистров. Если "разрыв" между двумя нужными регистрами в памяти устройства не очень большой, то можно считать весь диапазон значений в одном запросе и потом выбрать из считанного массива данных только нужные значения. Иначе придется разбить запрос на два разных запроса с разными адресами. Ниже приведен пример для одного запроса. В памяти устройства нужные значения имеют адреса 8214 и 8218.
У второго элемента ответа указываем смещения в байтах относительно начала массива данных. В данном случае "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 |
Рис. 7 - Вариант запроса и ответа
Как записать данные в базу данных описано в следующих главах (ссылки ниже).