Запись данных в устройство MODBUS
Описание задачи:
Есть задача записи сигнала тревоги в контроллер, когда ранее считанное значение превышает заданный лимит.
Требования:
Подразумевается, что:
Вы настроили параметры связи в вашем устройстве:
- MODBUS TCP - IP адрес, маску подсети, адрес шлюза. Вы должны задать статический IP адрес в устройстве.
- MODBUS RTU - скорость передачи данных и количество бит данных.
Решение:
1. Создайте новую конфигурацию в главном окне программы, кликнув на кнопке с "зеленым плюсом" (рис. 1). В данном примере приведены настройки подключения для MODBUS TCP. Если ваше устройство использует протокол MODBUS RTU, то посмотрите тут. Если вы уже настроили подключение ранее, то переходите к шагу №4.
![Настройки соединения IP](/serial-data-logger/tutorials/modbus-write/connection1.png)
Рис. 1. Настройки соединения IP
2. Перейдите к странице: Модули - Запрос Анализ Фильтрация. Выберите "MODBUS TCP" или "MODBUS RTU" из списков. Затем кликните на кнопке "Настроить".
![Выбор модуля MODBUS](/serial-data-logger/tutorials/modbus-write/modbus-setup1.png)
Рис. 2. Выбор модуля MODBUS
3. Кликните на кнопке "Действия - Добавить запрос", и добавьте запрос для чтения данных (рис. 3). В вашем приложении, вы должны настроить свои параметры запроса: адрес устройства, функция, адрес, количество регистров, элементы ответа.
![Добавление запроса для чтения данных](/serial-data-logger/tutorials/modbus-write/modbus-setup2.png)
Рис. 3. Добавление запроса для чтения данных
4. Кликните по "Действие - Добавить запрос" снова и добавьте запрос, который будет записывать данные (рис. 4). Код функции MODBUS должен быть:
- 6 (запись одного регистра) - если нужно записать значение, которое занимает в памяти контроллера или устройства один регистр (2 байта). Для примера, это могут быть типы данных word, uint16, int16, decimal16.
- 16 (запись нескольких регистров) - если вы хотите записать значение, которое занимает несколько регистров (dword, uint32, int32, decimal32, float и т.п.).
Выберите метод запроса "Событие". Затем укажите "WRITE" в качестве идентификатора события. Вы можете использовать другой идентификатор, но тогда измените его в настройках ниже.
Группа "Элементы ответа" в данном случае определяет состав и тип отправляемых данных. Именно значение из поля "Значение по умолчанию" и будет отправлено в устройство.
![Добавление запроса для записи данных](/serial-data-logger/tutorials/modbus-write/modbus-setup3.png)
Рис. 4. Добавление запроса для записи данных
5. Настройте любой один модуль из трех ниже для генерации события "WRITE" при заданных условиях.
5.1. Expressions - это простой модуль, но позволяет выполнить все необходимые операции с помощью одного выражения (рис. 5, 6). Выражение в этом примере сравнивает значение "VALUE" из считываемых данных (из запроса "Read data" рис.3), и генерируется событие, если значение больше 100.
![Модуль Expressions](/serial-data-logger/tutorials/modbus-write/filter1.png)
Рис. 5. Модуль Expressions
SEND_EVENT_IF(VALUE > 100, 'WRITE')
![Выражение](/serial-data-logger/tutorials/modbus-write/filter2.png)
Рис. 6. Выражение
5.2. Script execute - это самый гибкий модуль. Он позволяет реализовать любую логику, но он требует знание языка программирования (рис. 7, 8). Этот скрипт также отправляет событие, если значение "VALUE" больше 100.
![Модуль Script Execute](/serial-data-logger/tutorials/modbus-write/filter3.png)
Рис. 7. Модуль Script Execute
const name = 'VALUE';
var v: variant;
begin
if IsVariableDefined(name) then
begin
v := GetVariable(name);
if v > 100 then
SendEvent('WRITE');
end;
end.
![Скрипт](/serial-data-logger/tutorials/modbus-write/filter4.png)
Рис. 8. Скрипт
5.3. Events generator - это самый простой модуль, но он оперирует только с текстовыми значениями, поэтому он может проверить значение только на равенство. (рис. 9, 10).
![Модуль Events generator](/serial-data-logger/tutorials/modbus-write/filter5.png)
Рис. 9. Модуль Events generator
![Правило](/serial-data-logger/tutorials/modbus-write/filter6.png)
Рис. 10. Правило
6. Кликните на кнопке "OK" и сохраните все настройки.
7. Теперь, модуль MODBUS опрашивает устройство и обрабатывает входящие данные. Модуль фильтрации данных анализирует принятое значение, и при необходимости генерирует событие, которые затем обрабатывается модулем MODBUS.
Расширенная настройка
Модуль "Script Execute" может передать одно или несколько поименованных значений вместе с генерируемым событием. Например, вы можете передать записываемое значение и адрес MODBUS, куда нужно записать данные.
ADDRESS - адрес для записи данных (может отсутствовать). Если это значение присутствует, то оно перекрывает значение адреса в памяти, заданное в настройках запроса MODBUS.
VALUE - значение для записи (может отсутствовать). Модуль MODBUS ищет элемент ответа с соответствующим именем "VALUE", и если он найден, то использует значение из события вместо значение по умолчанию.
const name = 'VALUE';
var v: variant;
begin
if IsVariableDefined(name) then
begin
v := GetVariable(name);
if v > 100 then
SendEventEx('WRITE'
['ADDRESS', 1,
'VALUE', 2]
);
end;
end.
Сопутствующие статьи:
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.
BACNET/IP