Связи S7 лет уже много. И многие про него знают тоже много. И даже много используют. Работать с ними весьма легко - создал S7 connection, разместил, где надо, функциональные блоки PUT/GET (самый простой вариант) или BSEND/BRECEIVE, выполнил download, и все - полный превед, знай только, контролируй состояние флагов NDR и Error.
Чаще всего оба коммуникационных партнера находятся в одной сети. А что делать, если CPU находятся в разных сетях Profinet? Или, еще круче, один участник обмена подключен к некоему промежуточному узлу по Profinet, а второй - к этому же промежуточному узлу по Profibus. Например, так:
Необходимо организовать обмен между PLC_1 и PLC_2. Только… напрямую они никак не соединены, зато оба подключены к PLC_3, но по разнородным каналам связи. Ситуация может быть иной, например — PLC_2 подключен к интерфейсу X2 PLC_1, а PLC_3 — к интерфейсу X1 PLC_1, и требуется организовать обмен между PLC_2 и PLC_3.
Задача решается даже проще, чем можно подумать. Нет необходимости программировать PLC_3 в качестве промежуточного звена обмена — достаточно воспользоваться функцией маршрутизации пакетов S7, которая неявно присутствует в TIA Portal'е: как PG пакетов, так и пакетов обмена данными.
Отвлечемся на минуту. Как работает S7 routing для пакетов PG (то есть, для возможности подключаться к ПЛК программатором)? Достаточно создать сетевую конфигурацию устройств и выполнить для каждого CPU прогрузку. После чего функция маршрутизации работает автоматически, нет необходимости размещать PC/PG в сетевой конфигурации, как это требовалось в классическом Step 7. Предположим, программатор подключен к сети PN_IE_1 (по Industrial Ethernet), и есть необходимость подключиться к PLC_1. В этом случае при выходе в online для диагностики или download необходимо указать тип интерфейса PG: PN_IE, сам сетевой интерфейс программатора, а в качестве пути подключения: сеть PN/IE_1 (сеть, к которой подключен программатор).
Вернемся к первоначальной задаче — организации связи между PLC_1 и PLC_2 по сконфигурированному S7-соединения с использованием механизма PUT/GET (для упрощения задачи только читаем данные, остальное — дело техники).
Открываем Devices&networks, нажимаем connections, выбираем S7 connection.
Нажимаем левой кнопкой мыши на интерфейс PLC_2 и тащим линию к интерфейсу X3 (profibus) контроллера PLC_1. Нажимаем на «Add S7 routed connection».
Наслаждаемся результатом на вкладке «Connections».
В настройках PLC_1 разрешаем доступ по методу PUT/GET.
Создаем на PLC_1 глобальный блок данных стандартного доступа (в настройках DB снять галочку Optimized block access в обязательном порядке!). В блоке данных создаем необходмые переменные (я создал одну… меньше не было смысла).
Для упрощения жизни копируем созданный DB1 из PLC_1 в PLC_2.
В OB1 PLC_2 создаем следующую гениальную программу:
Выполняем прогрузку всех PLC, поднимаем флаг GET_DB.Req для PLC_2, радуемся, довольные собой, уходим в закат.
Примечание. Обмен по механизму PUT/GET возможен не только для одной «атомарной» величины, но и для структур данных тоже. Максимально допустимый объем передаваемых данных зависит от типа CPU и приведен к онлайн-справке для соответствующих коммуникационных программных блоков.
Рассмотренные выше примеры — это маршрутизация пакетов PG (для подключения программатора, то есть, Step 7) и маршрутизированные соединения для обмена информацией. Есть и третий способ — маршрутизация HMI (OP) соединений. Немного усложняем схему:
Итого видим 3 соединения на 4 устройства (вопрос того, насколько это дичь и зачем она, остается нераскрытым). Обращаю внимание, что сейчас для того, чтобы связать HMI_1 и PLC_3 требуется уже два узла-маршрутизатора. В общем случае вывести информацию на одну панель со всех трех устройств без дополнительного программирования нельзя. Применяя S7 routing — можно. Действуем аналогично, нажимаем на окне Devices & Networks кнопку «Connections», выбираем «HMI Connection».
Соединяем HMI_1 и PLC_2, соединения создается автоматически. Соединяем HMI_1 и PLC_1, а далее PLC_3, в данном случае уже появляется меню Connect to subnet, где выбираем Add S7 routed connection, точно так же, как и ранее.
Все соединения созданы.
Далее вытаскиваем на экран тэги из всех трех контроллеров, компилируем, загружаем, проверяем.
Обращаю внимание, что функция PG-рутинга никуда не делась. Имея физическое подключение только к сети PN_IE_2 сохраняется возможность открыть онлайн, к примеру, контроллер PLC_3.