MODBUS в базу: Запись данных в две разные таблицы
Скачайте бесплатную пробную версию! Она позволяет попробовать все возможности! Модули можно скачать отдельно тут.
Описание проблемы:
У меня есть база данных с двумя таблицами. Одна таблица хранит текущие данные, а вторая таблица должна сохранять архивные данные (киловатты в час)
Примечание: данный метод позволяет записывать данные больше чем в две таблицы, если вам это требуется.
Требования:
Подразумевается что:
Вы настроили параметры связи на устройстве:
- MODBUS TCP - IP адрес, маску подсети, шлюз. Вы должные присвоить статический IP вашему устройству.
- MODBUS RTU - скорость передачи данных и количество бит данных.
Решение:
1. Вы должны добавить два запроса MODBUS в очередь запросов, которые будут считывать необходимые данные (рис. 1-3). Один запрос должен содержать все текущие данные, а другие запросы должны возвращать архивные данные. Вы можете использовать разный интервал опроса для этих запросов. Как составлять очередь запросов можно прочитать тут.
![Модуль MODBUS](/serial-data-logger/tutorials/modbus-to-two-tables/modbus-queue1.png)
Рис. 1. Модуль MODBUS.
![Запрос MODBUS №1](/serial-data-logger/tutorials/modbus-to-two-tables/modbus-queue2.png)
Рис. 2. Запрос MODBUS №1.
![Запрос MODBUS №2](/serial-data-logger/tutorials/modbus-to-two-tables/modbus-queue3.png)
Рис. 3. Запрос MODBUS №2.
2. Создайте две таблицы в вашей базе данных. Мы пропустили шаги по созданию самой базы данных, пользователя и выдачу прав на запись этому пользователю.
PHASE_1_CURENT - эта колонка будет хранить текущее значение электрического тока для соответствующей фазы.
KWH - эта колонка будет хранить значение потребленной энергии.
DATE_TIME_STAMP - эта колонка будет хранить метку времени, соответствующую моменту чтения данных.
3. Включите и настройте модуль Expressions (рис. 4-5). Данный модуль будет контролировать адрес регистра в ответе и генерировать соответствующее событие. При генерации события, модуль будет добавлять к нему все считанные данные. Далее, модуль экспорта данных будет выполнять SQL запрос и передавать данные в качестве параметров.
![Модуль Expressions](/serial-data-logger/tutorials/modbus-to-two-tables/expressions1.png)
Рис. 4. Модуль Expressions.
![Выражения обработки данных](/serial-data-logger/tutorials/modbus-to-two-tables/expressions2.png)
Рис. 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](/serial-data-logger/tutorials/modbus-to-two-tables/data-export1.png)
Рис. 6. Модуль SQL Database Pro.
Пожалуйста, проверьте, что вы связали параметры SQL запроса с необходимыми значениями MODBUS (поле Переменная парсера) и выбрали верный тип данных. Тип данных должен соответствовать типу данных колонки в таблицы. При этом, модуль может автоматически преобразовывать некоторые типы данных (например, целые числа → вещественно число float или double).
![SQL запрос для события CURRENT](/serial-data-logger/tutorials/modbus-to-two-tables/data-export2.png)
Рис. 7. SQL запрос для события CURRENT.
![SQL запрос для события KWH](/serial-data-logger/tutorials/modbus-to-two-tables/data-export3.png)
Рис. 8. SQL запрос для события KWH.
5. Кликните "OK" для сохранения всех настроек.
6. Проверьте статус операции записи в базу данных при поступлении новых данных (рис. 9).
![Сообщение об успешной операции](/serial-data-logger/tutorials/modbus-to-two-tables/log-msg.png)
Рис. 9. Сообщение об успешной операции.
Сопутствующие статьи:
MODBUS RTU, MODBUS ASCII, MODBUS/TCP
- Чтение данных со счетчиков и анализаторов энергии через MODBUS (простой метод)
- Совместимые с Sunspec анализаторы, инверторы, счетчики MODBUS (простой метод)
- Опрос устройств MODBUS RTU/TCP: Настройка сервера сбора данных (MODBUS RTU, MODBUS TCP, запросы, элементы ответа).
- Как проверить, что программа отправляет запросы и получает ответы?
- Как просматривать значения регистров, а не пакеты MODBUS?
- Как проверить, что программа правильно интерпретирует получаемые ответы?
- Как просматривать значения регистров MODBUS в более наглядной форме (графики, индикаторы и т.п.)?
- Как объединить данные из двух запросов?
- Как правильно организовать опрос большого количества устройств?
- Копирование настроек Simply MODBUS RTU Master наш логгер.
- Копирование настроек из утилиты MODBUS Poll.
- Контроль состояния ячейки памяти (coil input) PLC контроллера через MODBUS TCP (парсер MODBUS, скрипты, генерация и обработка событий).
- MODBUS в MSSQL: Запись значений регистров MODBUS раздельные колонки в таблице
- MODBUS в MySQL: Запись данных MODBUS в БД MySQL
- Запись данных MODBUS в другую базу данных SQL
- MODBUS в базу: Запись данных в две разные таблицы.
- MODBUS в базу: Запись данных в две разные БД, делая полную копию данных.
- Sentron PAC 3200: Чтение и запись со счетчика электроэнергии через MODBUS TCP
- Запись данных в устройство MODBUS
- SQL в MODBUS: Отправка значений из базы данных в MODBUS.
IEC 62056-21