Введение
При разработке автоматизированных систем часто возникает задача передачи информации с одного контроллера на другой. Осуществляется это с помощью специализированных промышленных сетей. На сегодняшний день спектр таких сетей довольно широк (CAN, FIP, PROFIBUS, ControlNet, DH+, Modbus RTU, Modbus TCP/IP, Modbus Plus, Genius, DirectNet, DeviceNet, INTERBUS, SDS, AS-i, HART и ещё несколько десятков протоколов).Протокол Modbus и одноимённая сеть являются самыми распространёнными в мире. Несмотря на свой возраст (стандартом де-факто Modbus стал ещё в 1979 году), Modbus не только не устарел, но, наоборот, существенно возросло количество новых разработок и объём организационной поддержки этого протокола. Миллионы Modbus-устройств по всему миру продолжают успешно работать [1].
Преимуществами Modbus являются отсутствие необходимости в специальных интерфейсных контроллерах (PROFIBUS и CAN требуют для своей реализации заказных микросхем), простота программной реализации и элегантность принципов функционирования. Всё это снижает затраты на освоение стандарта как системными интеграторами, так и разработчиками контроллерного оборудования. Высокая степень открытости протокола обеспечивается бесплатными текстами стандартов, которые можно скачать с сайта www.modbus.org.
Протокол привлекает простотой логики и независимостью от типа интерфейса (RS-232, RS-422, RS-485 или же токовая петля 20 мА). Modbus работает по принципу Master/Slave (ведущий/ведомый). Конфигурация на основе этого протокола предполагает наличие одного Master-узла и до 247 Slave-узлов. Только Master инициирует циклы обмена данными.
Modbus поддерживает 4 типа данных:
- Discrete Inputs – один бит, доступен только для чтения;
- Coils – один бит, доступен для чтения и записи;
- Input Registers – 16-битовый беззнаковый или знаковый тип, доступен только для чтения;
- Holding Registers – 16-битовый беззнаковый или знаковый тип, доступен для чтения и записи.
В данной статье будет рассмотрен обмен данными между контроллерами с помощью протокола Modbus TCP.
Modbus TCP – это сетевой протокол обмена данными, который представляет собой симбиоз RTU-спецификации протокола и Ethernet TCP/IP. Наряду с RTU и Plus, Modbus TCP использует тот же прикладной уровень сетевой модели, где и достигается совместимость на уровне обработки данных. Протокол TCP/IP устроен по принципу «клиент–сервер». Для обмена данными клиент открывает сеанс связи с сервером, указывая его адрес.
Многие производители выпускают процессорные модули, которые могут работать как в режиме приёма данных, так и передачи. Так, контроллер WAGO 750-880 использует для передачи данных протокол Modbus TCP на базе сети Ethernet и оснащён двумя портами RJ-45. Контроллер может работать как в режиме Master, так и в режиме Slave. Рассмотрим задачу организации передачи данных с одного контроллера на другой, при этом один из них работает в режиме Master, другой – в режиме Slave.
Эту задачу будем решать с помощью специальной библиотеки ModbusEthernet_04.lib [2].
Подключение устройств
Для организации передачи данных один из контроллеров (Master) необходимо подключить в сеть Ethernet, для этого нужно использовать один из портов Ethernet, другой порт задействуем для связи с подчинённым контроллером (рис. 1).
Оба контроллера имеют одинаковую конфигурацию:
- 750-880 – программируемый контроллер узла сети Ethernet TCP/IP 10/100 Mбит/с;
- 750-1405 – 16-канальный модуль дискретного ввода, 24 В;
- 750-1504 – 16-канальный модуль дискретного вывода, 24 В, 0,5 A;
- 750-454 – 2-канальный модуль аналогового ввода, дифференциальный, 4–20 мА;
- 750-560 – 2-канальный модуль аналогового вывода, 0–10 В;
- 750-600 – оконечный модуль.
Для организации работы контроллера в режиме Master можно воспользоваться библиотекой ModbusEthernet_04.lib, входящей в пакет адаптации CODESYS для WAGO. После установки пакета адаптации библиотеку можно найти в директории C:\Program Files\WAGO Software\CoDeSys V2.3\Targets\WAGO\Libraries\Application.
Программа для контроллера, работающего в режиме Slave
Для управления физическими выходами системы WAGO необходимо дополнительно настроить Modbus-переменные контроллера в качестве посредников между физическими каналами и переменными верхнего уровня. Создадим эти переменные. Последовательность действий:1. Откройте PLC Configuration на вкладке Resources и разверните ветку K-bus.
2. Нажмите правой кнопкой мыши на Flag Variables и выберите Edit.
3. В открывшемся окне создайте переменные Flag для дискретных и аналоговых каналов, как показано на рис. 2.

В программе необходимо присвоить значения переменных Flag выходным физическим каналам. Вы можете использовать адреса переменных или их имена. Пример присвоения показан на рис. 3, где do1, do2, do3 – имена выходных дискретных каналов, ao1 – имя аналогового канала.

Программа для контроллера, работающего в режиме Master
Добавим в проект контроллера, работающего в режиме Master, библиотеку ModbusEthernet_04.lib, при этом автоматически будут добавлены ещё две библиотеки: Ethernet.lib* и mod_com.lib* (рис. 4).
В этой библиотеке будем использовать функциональный блок ETHER-NET_MODBUSMASTER_UDP (рис. 5).

В табл. 1 и 2 приведены входные и выходные параметры блока соответственно.


Для использования блока ETHERNET_MODBUSMASTER_UDP объявим в программе переменные, как показано в листинге 1.

На рис. 6 показан код проекта на языке LD.

Обратите внимание на необходимость использования функционального блока с дополнительным входом EN. Для этого при добавлении блока в программу необходимо выбрать пункт меню Box with EN.
Согласно таблицам распределения Modbus-адресов контроллера WAGO 750-880, приведённым в документации [3] (можно загрузить с технического портала https://tp.prosoft.ru/ или с сайта компании WAGO), адресация флаговых переменных начинается с адреса 12288, поэтому начальное значение StartWrite_ADDRESS зададим равным 12288.
Для чтения аппаратных входов подчинённого контроллера начальное значение переменной StartREAD_ADDRESS лежит в диапазоне 0…255 для аналоговых и 0…511 для дискретных переменных. Для чтения аппаратных выходов начальное значение переменной StartREAD_ADDRESS лежит в диапазоне 256…511 для аналоговых и 512…1023 для дискретных переменных.

На рис. 7 показан результат работы программы в режиме исполнения. В первый элемент массива InData записываются данные входных каналов аналогового модуля 750-454, во второй – дискретного 750-1405. Первый элемент массива OutData записывает значения в дискретный модуль вывода 750-1504, второй – в модуль аналогового вывода 750-560.
В рассмотренном примере аналоговые и дискретные входные данные считываются в один массив InData, что, возможно, не очень удобно. Для разделения этих данных можно использовать несколько экземпляров функционального блока ETHERNET_MODBUSMASTER_UDP с разными кодами функции Modbus (входной параметр bFUNCTION_CODE). Аналогично можно поступить и с выходными данными.
Заключение
Приведённый пример наглядно показывает, насколько просто можно организовать связь между двумя ПЛК WAGO по протоколу Modbus. А наличие специализированных библиотек делает данный процесс интуитивно понятным, не требующим лишних и точных действий от разработчика. ●Литература
- Денисенко В.В. Протоколы и сети Modbus и Modbus TCP // Современные технологии автоматизации. – 2010. – № 4.
- ModbusEthernet_04.lib [Электронный ресурс] // Сайт компании WAGO. – Режим доступа : http://www.wago.us/appnoteadmin/libraries23/ModbusEthernet_04/
public/ModbusEthernet_04_en.pdf. - WAGO-I/O-SYSTEM 750 Ethernet Programmable Fieldbus Controller 750-880, 750-880/025-000 : Manual [Электронный ресурс] // Сайт компании WAGO. – Режим доступа : http://www.wago.us/media/us/collection/products/gamechanger/
m07500880_00000000_0en.pdf.
Телефон: (495) 234-0636
E-mail: info@prosoft.ru
Если вам понравился материал, кликните значок - вы поможете нам узнать, каким статьям и новостям следует отдавать предпочтение. Если вы хотите обсудить материал - не стесняйтесь оставлять свои комментарии : возможно, они будут полезны другим нашим читателям!