Маршрутизируемые S7-коммуникации в Simatic S7‑1200/1500: обмен через Profinet и Profibus без лишнего кода
Время чтения: 15 минут
Сложность: Средняя
Применяемое ПО: TIA Portal (начиная с V13)
Оборудование: Simatic S7‑1200, S7‑1500, панели HMI, сети Profinet и Profibus
Содержание
- Проблема: обмен данными между контроллерами в разных сетях
- Что такое S7-маршрутизация (Routing)
- Маршрутизация PG-пакетов (программатор)
- Маршрутизация S7-соединений (обмен данными)
- Маршрутизация HMI-соединений (визуализация)
- Условия для работы маршрутизации
- Сценарий 1: маршрутизация PG (подключение программатора к удалённому ПЛК)
- Сценарий 2: обмен данными между PLC_1 и PLC_2 через PLC_3 (Profinet ↔ Profibus)
- Шаг 1. Создание маршрутизированного S7-соединения
- Шаг 2. Разрешение PUT/GET на целевом контроллере
- Шаг 3. Создание неоптимизированного блока данных (DB)
- Шаг 4. Программирование функции GET на стороне клиента
- Шаг 5. Загрузка и проверка
- Сценарий 3: маршрутизация HMI-соединений (одна панель — три контроллера)
- Создание HMI-соединений с маршрутизацией
- Привязка тегов на панели
- Типичные ошибки и способы их устранения
- Оптимизированный доступ в DB
- Не разрешён PUT/GET
- Неправильный выбор интерфейса при создании соединения
- Заключение: возможности и ограничения маршрутизации
1. Проблема: обмен данными между контроллерами в разных сетях
В классических проектах S7-коммуникация (через PUT/GET, BSEND/BRECEIVE или S7-connection) настраивается между двумя контроллерами, находящимися в одной физической сети (например, оба в Profinet, оба в Profibus). Однако на практике часто встречаются конфигурации, где:
- Контроллеры подключены к разным интерфейсам одного промежуточного ПЛК (например, PLC_1 на Profinet, PLC_2 на Profibus, а PLC_3 соединяет их).
- Требуется организовать обмен между PLC_1 и PLC_2, но напрямую они не связаны.
- Необходимо, чтобы одна панель HMI отображала данные с трёх контроллеров, разнесённых по разным сетям.
Классическое решение — запрограммировать промежуточный контроллер (PLC_3) как ретранслятор: принять данные от PLC_1, сохранить, переслать в PLC_2. Это требует дополнительного кода, памяти и времени разработки.
Альтернатива, предлагаемая Siemens — использовать встроенную маршрутизацию S7-пакетов. Она работает на уровне операционной системы контроллера и не требует программирования ретрансляции.

2. Что такое S7-маршрутизация (Routing)
S7-маршрутизация — это способность контроллера Siemens перенаправлять пакеты между своими сетевыми интерфейсами (Profinet, Profibus, MPI, Industrial Ethernet) без участия пользовательской программы.
Существует три типа маршрутизации в TIA Portal:
| Тип | Назначение | Пример |
|---|---|---|
| PG‑маршрутизация | Подключение программатора (Step 7, TIA Portal) к контроллеру, находящемуся в другой подсети | PG на Profinet, PLC на Profibus |
| S7‑соединения (обмен данными) | Прямой обмен между двумя контроллерами через один или несколько промежуточных узлов | PLC_1 (Profinet) ↔ PLC_2 (Profibus) через PLC_3 |
| HMI‑маршрутизация | Подключение панели оператора к нескольким контроллерам в разных сетях через один узел | HMI на Profinet, PLC_2 на Profinet, PLC_3 на Profibus |
Все типы настраиваются в TIA Portal через графический редактор Networks — без написания кода ретрансляции.
3. Условия для работы маршрутизации
Чтобы маршрутизация работала, необходимо:
- Все устройства должны быть в одном проекте TIA Portal с корректно заданной топологией сетей.
- Для каждого контроллера должна быть выполнена загрузка конфигурации (Download) — при этом в контроллер записываются таблицы маршрутизации.
- Промежуточные контроллеры должны быть включены и иметь работающие интерфейсы.
- Для S7-соединений с PUT/GET необходимо разрешить доступ по PUT/GET в свойствах CPU (см. раздел 5.2).
- Блоки данных, участвующие в обмене, должны иметь неоптимизированный доступ (снять галочку «Optimized block access»).
4. Сценарий 1: маршрутизация PG (подключение программатора к удалённому ПЛК)

Самый простой пример. Предположим, программатор (PG) подключён к сети PN_IE_1 (Profinet), а целевой контроллер PLC_1 подключён к сети PN_IE_2 (другой Profinet) через промежуточный маршрутизатор (например, PLC_3). TIA Portal позволяет подключиться к PLC_1, не меняя физического подключения кабеля.

Настройка:
- Постройте в TIA Portal сетевую топологию: PG → сеть PN_IE_1 → PLC_3 (два интерфейса) → сеть PN_IE_2 → PLC_1.
- Загрузите конфигурацию во все ПЛК.
- В TIA Portal при попытке подключиться к PLC_1 выберите:
- Тип интерфейса PG: PN/IE
- Сетевой интерфейс ПК: (выберите активный адаптер)
- Путь подключения: укажите сеть PN_IE_1 (ту, к которой физически подключен PG).
- TIA Portal автоматически использует маршрутизацию через PLC_3.
Никаких дополнительных действий в программе не требуется.
5. Сценарий 2: обмен данными между PLC_1 и PLC_2 через PLC_3 (Profinet ↔ Profibus)

Исходные данные:
- PLC_1 подключён к интерфейсу Profinet (PN/IE) промежуточного контроллера PLC_3.
- PLC_2 подключён к интерфейсу Profibus (DP) того же PLC_3.
- Требуется настроить S7-соединение между PLC_1 и PLC_2 для чтения данных (через PUT/GET).
5.1. Шаг 1. Создание маршрутизированного S7-соединения

- Откройте Devices & Networks → вкладка Network.
- Нажмите кнопку Connections (или перейдите в режим редактирования соединений).
- Выберите тип S7 connection.
- Кликните левой кнопкой мыши на интерфейсе PLC_2 (например, Profinet или Profibus — тот, который физически подключён к PLC_3) и, не отпуская кнопку, перетащите линию к интерфейсу PLC_3, который ведёт к PLC_1 (например, интерфейс X3 для Profibus или X1 для Profinet).
- В появившемся меню выберите Add S7 routed connection.

TIA Portal автоматически создаст соединение, в котором будет указан маршрут через PLC_3.
5.2. Шаг 2. Разрешение PUT/GET на целевом контроллере
Для того чтобы PLC_1 (или PLC_2) мог использовать функции PUT/GET, необходимо в свойствах каждого участвующего CPU разрешить этот механизм.
- В дереве проекта выберите CPU (например, PLC_1).
- Откройте Properties → Protection & Security → Connection mechanisms.
- Поставьте галочку «Permit access with PUT/GET communication from remote partner».
- Повторите для PLC_2.

5.3. Шаг 3. Создание неоптимизированного блока данных (DB)
Важно: DB, к которому обращается GET/PUT, не должен иметь оптимизированный доступ.
- Создайте глобальный блок данных, например, DB1.
- Откройте его свойства → Attributes → снимите галочку Optimized block access.
- Создайте переменные (например, массив, структуру или просто один элемент типа REAL/INT/WORD).
- При желании скопируйте этот DB из PLC_1 в PLC_2 (чтобы структура совпадала).

5.4. Шаг 4. Программирование функции GET на стороне клиента
Допустим, PLC_2 будет читать данные из DB1 PLC_1.
В OB1 PLC_2 добавьте вызов блока GET (из библиотеки Communication → S7 Communication).
Параметры настройки:
| Параметр | Значение | Пояснение |
|---|---|---|
| REQ | (флаг, например M0.0) | Подайте TRUE для непрерывного чтения |
| ID | (идентификатор из созданного соединения) | Указывается в свойствах соединения (например, W#16#1) |
| ADDR_1 | P#DB1.DBX0.0 BYTE <длина> | Адрес в удалённом PLC (PLC_1) |
| RD_1 | P#DB1.DBX0.0 BYTE <длина> | Адрес в локальном PLC (PLC_2) |
Пример для SCL:
scl
CALL "GET" ( REQ := true, ID := W#16#1, DONE => #doneFlag, ERROR => #errorFlag, STATUS => #statusWord, ADDR_1 := P#DB1.DBX0.0 INT 1, RD_1 := P#DB1.DBX0.0 INT 1 );
5.5. Шаг 5. Загрузка и проверка
- Загрузите конфигурацию и программу во все три контроллера (PLC_1, PLC_2, PLC_3). Это важно, потому что таблицы маршрутизации загружаются в каждый CPU.
- Установите флаг REQ в TRUE.
- Наблюдайте, как значение из DB1 PLC_1 появляется в DB1 PLC_2.
6. Сценарий 3: маршрутизация HMI-соединений (одна панель — три контроллера)
Задача: панель HMI подключена к сети PN_IE_2 (Profinet), где находятся PLC_2 и PLC_3. Однако PLC_1 находится в другой сети (PN_IE_1), доступ к которой возможен только через PLC_2 или PLC_3. Требуется отображать данные на HMI со всех трёх контроллеров.

6.1. Создание HMI-соединений с маршрутизацией
- В Devices & Networks переключитесь в режим Connections.
- Выберите тип HMI Connection.
- Сначала создайте прямое соединение между HMI_1 и PLC_2 (доступно в одной сети). TIA Portal создаст его автоматически.
- Затем создайте соединение между HMI_1 и PLC_3. Оно тоже будет прямым (если HMI_1 и PLC_3 в одной сети).
- Наконец, создайте соединение между HMI_1 и PLC_1:
- Кликните на интерфейсе HMI_1 (или на линии) и перетащите к интерфейсу PLC_1.
- Появится меню Connect to subnet → выберите Add S7 routed connection.
- TIA Portal предложит выбрать маршрут (например, через PLC_2 или PLC_3). Подтвердите.

В результате в таблице соединений появятся три HMI-соединения, одно из которых — маршрутизированное.

6.2. Привязка тегов на панели
- В редакторе HMI создайте теги, выбрав для каждого нужное соединение (HMI_1 ↔ PLC_1, HMI_1 ↔ PLC_2, HMI_1 ↔ PLC_3).
- Выведите их на экран (например, числовые поля).
- Загрузите проект в HMI и во все контроллеры.
Результат: панель будет отображать актуальные данные со всех трёх контроллеров, даже если они физически находятся в разных сетях. При этом промежуточные контроллеры не требуют специальной программы для ретрансляции.
7. Типичные ошибки и способы их устранения
7.1. Ошибка: «Optimized block access» для DB в PUT/GET
Симптом: Блок GET/PUT возвращает ошибку, данные не передаются.
Причина: Блок данных, на который указывает ADDR_1 или RD_1, имеет оптимизированный доступ.
Решение: Откройте свойства DB → снимите галочку «Optimized block access» → перекомпилируйте и загрузите DB.
7.2. Ошибка: PUT/GET не разрешён на целевом CPU
Симптом: Функция GET возвращает ошибку 0x83 (или подобную), STATUS указывает на отказ в доступе.
Решение: В свойствах CPU → Protection & Security → Connection mechanisms → включите «Permit access with PUT/GET communication from remote partner».
7.3. Ошибка: S7-соединение не устанавливается (красная линия)
Симптом: В онлайн-режиме соединение подсвечивается красным.
Причина: Не загружена конфигурация во все промежуточные контроллеры, или неверно выбран интерфейс при создании соединения.
Решение:
- Убедитесь, что загрузка выполнена для всех узлов (PLC_1, PLC_2, PLC_3).
- При создании соединения тяните линию от конечного устройства (PLC_2) к интерфейсу маршрутизатора (PLC_3), который ведёт к другому конечному устройству.
7.4. Ошибка: HMI не видит теги удалённого контроллера
Симптом: При попытке добавить тег из PLC_1 через маршрутизацию список переменных пуст.
Решение:
- Проверьте, что для HMI-соединения выбран тип «Add S7 routed connection».
- Убедитесь, что все контроллеры имеют загруженную конфигурацию и включены.
- В свойствах HMI-соединения проверьте, что указан правильный маршрут (например, через PLC_2).
8. Заключение: возможности и ограничения маршрутизации
S7-маршрутизация — мощный механизм, позволяющий существенно упростить проекты с распределённой сетевой топологией. Она особенно полезна при модернизации, когда новые контроллеры (Profinet) добавляются к существующей Profibus-линии.
Преимущества:
- Не требует написания кода ретрансляции.
- Прозрачна для программиста (работает на уровне операционной системы).
- Поддерживает все типы соединений: PG, S7, HMI.
- Работает как для S7-1200, так и для S7-1500.
Ограничения:
- Маршрутизация возможна только через контроллеры Siemens (S7-300, S7-400, S7-1200, S7-1500) с поддержкой нескольких интерфейсов.
- Необходимо загружать конфигурацию во все промежуточные узлы.
- Блоки данных для PUT/GET должны быть неоптимизированными.
Итог: Используйте маршрутизацию везде, где требуется связать устройства в разных сетях без дополнительного программирования. Это сэкономит часы разработки и отладки.