Связи S7 лет уже много. И многие про него знают тоже много. И даже много используют. Работать с ними весьма легко - создал S7 connection, разместил, где надо, функциональные блоки PUT/GET (самый простой вариант) или BSEND/BRECEIVE, выполнил download, и все - полный превед, знай только, контролируй состояние флагов NDR и Error.
Чаще всего оба коммуникационных партнера находятся в одной сети. А что делать, если CPU находятся в разных сетях Profinet? Или, еще круче, один участник обмена подключен к некоему промежуточному узлу по Profinet, а второй - к этому же промежуточному узлу по Profibus. Например, так:
![Как организовать обмен между PLC_1 и PLC_2? Как организовать обмен между PLC_1 и PLC_2?](https://habrastorage.org/getpro/habr/upload_files/e32/a53/2c5/e32a532c53f9163d16679f1b81c8bff8.jpeg)
Необходимо организовать обмен между 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 (сеть, к которой подключен программатор).
![Подключение к удаленному контроллеру по Profibus через Profinet Подключение к удаленному контроллеру по Profibus через Profinet](https://habrastorage.org/getpro/habr/upload_files/a47/bb8/e3f/a47bb8e3f460680d32773c8e42611995.jpeg)
![S7 routing работает автоматически S7 routing работает автоматически](https://habrastorage.org/getpro/habr/upload_files/fa8/11e/a92/fa811ea926eb95e5eca3650faea8035e.jpeg)
Вернемся к первоначальной задаче — организации связи между PLC_1 и PLC_2 по сконфигурированному S7-соединения с использованием механизма PUT/GET (для упрощения задачи только читаем данные, остальное — дело техники).
Открываем Devices&networks, нажимаем connections, выбираем S7 connection.
![](https://habrastorage.org/getpro/habr/upload_files/c21/a9f/455/c21a9f455fcd6ad1486323bc1a17493e.jpeg)
Нажимаем левой кнопкой мыши на интерфейс PLC_2 и тащим линию к интерфейсу X3 (profibus) контроллера PLC_1. Нажимаем на «Add S7 routed connection».
![](https://habrastorage.org/getpro/habr/upload_files/4ed/ce3/e40/4edce3e408a52ebd9a2ee5db107e80ee.jpeg)
Наслаждаемся результатом на вкладке «Connections».
![](https://habrastorage.org/getpro/habr/upload_files/fa0/fcf/7d4/fa0fcf7d4e086059a29a6830ea1d4295.jpeg)
В настройках PLC_1 разрешаем доступ по методу PUT/GET.
![Функциональные блоки PUT/GET требуют дополнительного разрешения Функциональные блоки PUT/GET требуют дополнительного разрешения](https://habrastorage.org/getpro/habr/upload_files/b2e/2b3/b37/b2e2b3b379a6598b411213a36a56798e.jpeg)
Создаем на PLC_1 глобальный блок данных стандартного доступа (в настройках DB снять галочку Optimized block access в обязательном порядке!). В блоке данных создаем необходмые переменные (я создал одну… меньше не было смысла).
![Только стандартный доступ, оптимизированный не допускается Только стандартный доступ, оптимизированный не допускается](https://habrastorage.org/getpro/habr/upload_files/049/ff5/f66/049ff5f663667b513303c3e4de0ce0b0.jpeg)
Для упрощения жизни копируем созданный DB1 из PLC_1 в PLC_2.
В OB1 PLC_2 создаем следующую гениальную программу:
![Гениальная программа Гениальная программа](https://habrastorage.org/getpro/habr/upload_files/54c/02f/ed7/54c02fed74d41a70c7a010eab7530129.jpeg)
![Вкладка Configuration FB Get Вкладка Configuration FB Get](https://habrastorage.org/getpro/habr/upload_files/183/bdb/d09/183bdbd09d37def59c9e3b3003e4b214.jpeg)
Выполняем прогрузку всех PLC, поднимаем флаг GET_DB.Req для PLC_2, радуемся, довольные собой, уходим в закат.
![Блок данных контроллера PLC_1 Блок данных контроллера PLC_1](https://habrastorage.org/getpro/habr/upload_files/b4b/263/801/b4b2638017f65ffd593bc0d5d555954c.jpeg)
![OB1 контроллера PLC_2 OB1 контроллера PLC_2](https://habrastorage.org/getpro/habr/upload_files/ac6/6c2/fe8/ac66c2fe8e2f4ed29407f5a23066f429.jpeg)
Примечание. Обмен по механизму PUT/GET возможен не только для одной «атомарной» величины, но и для структур данных тоже. Максимально допустимый объем передаваемых данных зависит от типа CPU и приведен к онлайн-справке для соответствующих коммуникационных программных блоков.
Рассмотренные выше примеры — это маршрутизация пакетов PG (для подключения программатора, то есть, Step 7) и маршрутизированные соединения для обмена информацией. Есть и третий способ — маршрутизация HMI (OP) соединений. Немного усложняем схему:
![](https://habrastorage.org/getpro/habr/upload_files/f65/b20/2f5/f65b202f503abb64a7fb3b18cad771ff.jpeg)
Итого видим 3 соединения на 4 устройства (вопрос того, насколько это дичь и зачем она, остается нераскрытым). Обращаю внимание, что сейчас для того, чтобы связать HMI_1 и PLC_3 требуется уже два узла-маршрутизатора. В общем случае вывести информацию на одну панель со всех трех устройств без дополнительного программирования нельзя. Применяя S7 routing — можно. Действуем аналогично, нажимаем на окне Devices & Networks кнопку «Connections», выбираем «HMI Connection».
![](https://habrastorage.org/getpro/habr/upload_files/0da/531/24a/0da53124ab1aa711b41a037bd93ef5d4.jpeg)
Соединяем HMI_1 и PLC_2, соединения создается автоматически. Соединяем HMI_1 и PLC_1, а далее PLC_3, в данном случае уже появляется меню Connect to subnet, где выбираем Add S7 routed connection, точно так же, как и ранее.
![](https://habrastorage.org/getpro/habr/upload_files/042/9e1/134/0429e11346b4cfaf7fc80c294d0248cf.jpeg)
Все соединения созданы.
![](https://habrastorage.org/getpro/habr/upload_files/3fa/f78/9f3/3faf789f312e2ebc0ade9ec268240429.jpeg)
Далее вытаскиваем на экран тэги из всех трех контроллеров, компилируем, загружаем, проверяем.
![Вся сборка целиком Вся сборка целиком](https://habrastorage.org/getpro/habr/upload_files/99c/65b/041/99c65b04103da9b339755e72e7b71488.jpeg)
![Циферки-то обновляются Циферки-то обновляются](https://habrastorage.org/getpro/habr/upload_files/e06/67b/2dc/e0667b2dcdcea5e532426e874db74ca3.jpeg)
Обращаю внимание, что функция PG-рутинга никуда не делась. Имея физическое подключение только к сети PN_IE_2 сохраняется возможность открыть онлайн, к примеру, контроллер PLC_3.
![](https://habrastorage.org/getpro/habr/upload_files/b48/fab/447/b48fab447a7ac1ffea4e05d34ae4aeb7.jpeg)