bg

MODBUS в базу: Запись данных в две разные таблицы

Скачайте бесплатную пробную версию! Она позволяет попробовать все возможности! Модули можно скачать отдельно тут.

Описание проблемы:

У меня есть база данных с двумя таблицами. Одна таблица хранит текущие данные, а вторая таблица должна сохранять архивные данные (киловатты в час)

Примечание: данный метод позволяет записывать данные больше чем в две таблицы, если вам это требуется.

Требования:

  • Advanced Serial Data Logger Professional, Enterprise, или пробная версия для MODBUS RTU.
  • Advanced TCP/IP Data Logger Professional, Enterprise, или пробная версия для MODBUS/TCP.
  • Модуль экспорта данных SQL Database Pro (полная или пробная версия). Этот модуль входит в стандартный инсталляционный пакет.
  • Модуль фильтрации данных "Expressions". Он также присутствует в стандартном инсталляционном пакете.

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

Вы настроили параметры связи на устройстве:

  • MODBUS TCP - IP адрес, маску подсети, шлюз. Вы должные присвоить статический IP вашему устройству.
  • MODBUS RTU - скорость передачи данных и количество бит данных.

Решение:

1. Вы должны добавить два запроса MODBUS в очередь запросов, которые будут считывать необходимые данные (рис. 1-3). Один запрос должен содержать все текущие данные, а другие запросы должны возвращать архивные данные. Вы можете использовать разный интервал опроса для этих запросов. Как составлять очередь запросов можно прочитать тут.

Модуль MODBUS
Рис. 1. Модуль MODBUS.

Запрос MODBUS №1
Рис. 2. Запрос MODBUS №1.

Запрос MODBUS №2
Рис. 3. Запрос MODBUS №2.

2. Создайте две таблицы в вашей базе данных. Мы пропустили шаги по созданию самой базы данных, пользователя и выдачу прав на запись этому пользователю.


CREATE TABLE IF NOT EXISTS modbus_phase_current (
 DATE_TIME_STAMP DATETIME,
 PHASE_1_CURENT double DEFAULT NULL,
 PHASE_2_CURENT double DEFAULT NULL,
 PHASE_3_CURENT double DEFAULT NULL
) ENGINE=InnoDB;

CREATE TABLE IF NOT EXISTS modbus_kwh (
 DATE_TIME_STAMP DATETIME,
 KWH double DEFAULT NULL
) ENGINE=InnoDB;


CREATE TABLE [dbo].[modbus_phase_current] (
 [DATE_TIME_STAMP] datetime,
 [PHASE_1_CURENT] float NULL,
 [PHASE_2_CURENT] float NULL,
 [PHASE_3_CURENT] float NULL
)  ON [PRIMARY];

CREATE TABLE [dbo].[modbus_kwh] (
 [DATE_TIME_STAMP] datetime,
 [KWH] float NULL
) ON [PRIMARY];
 

PHASE_1_CURENT - эта колонка будет хранить текущее значение электрического тока для соответствующей фазы.

KWH - эта колонка будет хранить значение потребленной энергии.

DATE_TIME_STAMP - эта колонка будет хранить метку времени, соответствующую моменту чтения данных.

3. Включите и настройте модуль Expressions (рис. 4-5). Данный модуль будет контролировать адрес регистра в ответе и генерировать соответствующее событие. При генерации события, модуль будет добавлять к нему все считанные данные. Далее, модуль экспорта данных будет выполнять SQL запрос и передавать данные в качестве параметров.

Модуль Expressions
Рис. 4. Модуль Expressions.

Выражения обработки данных
Рис. 5. Выражения обработки данных.

Ниже приведен текст выражений с картинки выше:

SEND_EVENT_IF(MODBUS_ADDRESS=100, 'KWH')
SEND_EVENT_IF(MODBUS_ADDRESS=0, 'CURRENT')

4. Включите модуль SQL Database Pro (рис. 6-8). Мы пропустили процедуру настройки параметров подключения, которая уже описана в другом примере.

Вы должны добавить два SQL запроса в очередь для двух генерируемых событий. Пожалуйста, обратите внимание, на поля "Выполнять запрос" и "Идентификатор события" в настройках модуля.

Модуль SQL Database Pro
Рис. 6. Модуль SQL Database Pro.

Пожалуйста, проверьте, что вы связали параметры SQL запроса с необходимыми значениями MODBUS (поле Переменная парсера) и выбрали верный тип данных. Тип данных должен соответствовать типу данных колонки в таблицы. При этом, модуль может автоматически преобразовывать некоторые типы данных (например, целые числа → вещественно число float или double).

SQL запрос для события CURRENT
Рис. 7. SQL запрос для события CURRENT.

SQL запрос для события KWH
Рис. 8. SQL запрос для события KWH.

5. Кликните "OK" для сохранения всех настроек.

6. Проверьте статус операции записи в базу данных при поступлении новых данных (рис. 9).

Сообщение об успешной операции
Рис. 9. Сообщение об успешной операции.

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

MODBUS RTU, MODBUS ASCII, MODBUS/TCP

IEC 62056-21