Обмен Клиент-Серверными Данными Между Двумя Плк Серии S7-1500 По Протоколу Opc Ua

При написании заметки были использованы следующие материалы: 1. Создание клиентов OPC UA с .

NET и вспомогательным классом 2. Клиентская библиотека OPC UA 3. Онлайн-помощь Шаг 7 Professional V15.1 4. SIMATIC S7-1500, ET 200MP, ET 200SP, ET 200AL, ET 200pro Связь.

Руководство по функциям (10/2018 A5E03735815-AG) 5. Здравый смысл Протокол OPC UA ( https://ru.wikipedia.org/wiki/OPC_UA ) впервые появился в контроллерах Simatic во второй версии прошивки и в Step 7 версии 14. Тогда контроллер можно было настроить только как OPC UA сервер, то есть ПЛК мог отвечать на запросы и отправлять данные, но не мог сам инициировать общение и опросить других участников сети.

Ситуация радикально меняется в ноябре-декабре 2018 года с выходом прошивки 2.6 и Step 7 версии 15.1. Становится возможным настроить ЦП как клиент OPC UA. А это, в свою очередь, дает нам возможность организовать безопасный межмашинный (контроллер-контроллер) канал обмена информацией.

И это важно (о существовании Secure OUC я тоже знаю, но OUC — это обмен данными в свободном формате, которого достаточно для небольших объемов, но отсутствие строгого формата данных накладывает свой отпечаток.

).

Большинство протоколов полевого уровня для промышленности были разработаны в прошлом веке и рассчитаны в первую очередь на честных людей.

Только время идет, честных людей становится меньше, злодеев больше, поэтому обмен данными надо максимально скрывать, шифровать, защищать паролем, прикрывать сертификатами, а в ответ всем посторонним показывать оскорбительные жесты и говорить неприличные слова.

Итак, настройка контроллера (S7-1512 FW2.6) в качестве OPC UA сервера.

Во время некоторых манипуляций на портале TIA, таких как включение глобальных настроек безопасности, среда выдает вам предупреждения, а иногда даже окна с сообщениями с угрозами.

Я не стал на этом акцентировать внимание в описании, поэтому просто нажмите ОК и согласитесь со всем.

  1. По умолчанию OPC UA отключен в настройках, поэтому зайдите в свойства CPU, найдите ветку OPC UA → Server → General и активируйте OPC UA Server.


Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

2. Использование OPC UA в контроллерах Simatic требует покупки лицензии, поэтому покупаем лицензию, переходим в свойства Runtime Licenses → OPC UA и задаем тип приобретаемой лицензии.

Лицензии на серию 1500 бывают трех типов: малые, средние и большие, в зависимости от типа ЦП.

S7-1510 и S7-1512 требуют «маленького».



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

3. При желании можно задать имя приложения для сервера OPC UA, порт и временные интервалы.

Я установил минимальные интервалы выборки и публикации.

Стоит помнить, что уменьшение интервалов увеличивает нагрузку на процессор.

Имя приложения и номер порта остались по умолчанию.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

4. Базовая настройка завершена.

Компилируем и загружаем ПЛК.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

5. Пришло время проверить, работает ли он вообще.

Запускаем программу OPC UA Client (ее можно скачать с SIOS по первым двум ссылкам в начале заметки).

Я установил IP-адрес моего контроллера 192.168.43.10 и нажал кнопку «Получить конечные точки».

Я получаю возможные «точки входа»

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Перехожу к самому первому варианту, без сертификатов, без шифрования, без пароля, нажимаю «Подключиться к выбранным конечным точкам» и перехожу на вкладку «Обзор узлов».

Программа управления котельной загружается в контроллер, нахожу одну переменную (Узел или узел – так в протоколе называется «тег» или «переменная»)

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

В правой верхней части есть строка Node id (идентификатор узла или «адрес переменной»), выделите ее мышкой и нажмите Ctrl-C

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Я перехожу на вкладку «Чтение/запись», вставляю скопированный идентификатор узла и нажимаю кнопку «Читать».



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Получаю считанное значение переменной равное 3. Действительно, все совпадает, насосы отопительного контура должны чередоваться в третий день недели, и именно эта цифра заносится в переменную DayOfWeek блока данных OKPumpsAuto. Я закрываю программу.

Базовый функционал есть и он работает. Но этого недостаточно.

Теперь OPC UA сервер настроен в режиме «заходи, кто хочешь, бери, что хочешь».

Необходимо добавить немного безопасности.

6. Включите «глобальные настройки безопасности» в свойствах ЦП, Защита и безопасность → Диспетчер сертификатов, установите флажок «Использовать глобальные настройки…»

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

7. В навигации по всему проекту находим Настройки безопасности → Настройки.

Смело нажимайте кнопку «Защитить этот проект».

Действие необратимо.

Снять защиту с проекта больше нельзя будет. Дело в том, что оффлайн-проект будет содержать сертификаты серверной и клиентской машин; их необходимо защищать, чтобы избежать кражи.

После нажатия кнопки Защитить система предложит создать администратора проекта:

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Теперь любое открытие проекта ТИА Портал потребует ввода логина и пароля.

Помимо администратора проекта, конечно, можно и нужно создавать пользователей с меньшими правами.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

8. После того, как мы активировали глобальные настройки безопасности, нам необходимо вручную восстановить сертификат контроллера.

В дальнейшем лучше, конечно, сразу защитить проект, создать администратора проекта и задать контроллерам «глобальные настройки безопасности», но эта заметка носит частично общеобразовательный характер.

Возвращаемся к настройкам ЦП, ищем OPC UA → Сервер → Безопасность.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Нажмите кнопку «…» рядом с надписью «Сертификат сервера», а в появившемся окне нажмите кнопку «Добавить новый».



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Создаем новый сертификат устройства, все значения остаются по умолчанию.

Сертификат, судя по всему, подписан серьезной организацией! В итоге все становится так:

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Теперь предлагаю скомпилировать проект, загрузить его в ПЛК и проверить программой, как работает связь.

Фактически, в результате последних изменений в настройках уровень безопасности не увеличился ни на йоту.

Все это было лишь подготовительным процессом.

Потихоньку подходит время приступить к настройке контроллера, который будет играть роль OPC UA-клиента, проверять обмен данными, а затем закрывать все бреши в безопасности.

Но сначала вам необходимо загрузить xml-файл с описанием всех тегов (узлов) контроллера сервера.

Формируется этот файл достаточно просто - система выбирает только те переменные, которые отмечены флагом Доступно из HMI/OPC UA и разрешает их запись, если установлен флаг Доступно для записи из HMI/OPC UA. В этом случае блок данных также должен быть доступен через OPC UA (доступно по умолчанию).

Например:

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Для экспорта снова зайдите в настройки ЦП и найдите OPC UA → Сервер → Экспорт, нажмите кнопку «Экспортировать XML-файл OPC UA».



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Перейдем к настройкам клиента OPC UA, то есть той стороны обмена, которая будет инициировать связь, запрашивать и записывать переменные.

Моя клиентская часть — S7-1510 с прошивкой FW2.6. 9. Добавляю в проект контроллер и сразу активирую глобальные настройки безопасности.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

10. Активируйте клиент OPC UA.

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

11. Активируйте лицензию OPC UA.

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

12. Я генерирую сертификат для этого второго клиентского контроллера.

В дальнейшем контроллер сервера и контроллер клиента обменяются (с моей помощью) своими сертификатами, и подключение незнакомых устройств будет запрещено.

В свойствах ЦП заходим в раздел «Защита и безопасность», нажимаем «Добавить новый».

в таблице «Сертификаты устройств» в появившейся пустой строке нажимаем на кнопку «…», в появившемся окне нажимаем «Добавить новый», наблюдаем уже знакомое окно создания нового подписанного сертификата:

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

В поле использования я дополнительно указал, что сертификат используется для OPC UA Client; по умолчанию у меня был установлен Tls. 13. Теперь самое интересное: настройка клиентского интерфейса, а точнее, настройка соединения с сервером и создание наборов данных для чтения и/или записи.

В структуре проекта второй (клиентский) контроллер: PLC_2 → Связь OPC UA → Клиентские интерфейсы → Добавить новый клиентский интерфейс.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Нажмите кнопку «Импортировать интерфейс» и загрузите ранее экспортированный XML-файл.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Теперь все узлы контроллера сервера открыты.

Так как задача носит образовательный характер, то потребуется немного — достаточно посчитать 4 переменные блока OKPumpsAuto.

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Для этого я создаю Readlist и перетаскиваю интересующие меня переменные из правой части экрана в левую.

Конечно, в боевых задачах список чтения может быть длиннее.

Разумеется, в боевых задачах будет не только чтение, но и запись переменных.

В этой заметке я ограничился одним прочтением.

В результате мы получаем следующее:

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Итого мы создали один интерфейс, состоящий из одного списка чтения.

Набор данных для чтения готов.

Но чего-то не хватает; вам еще нужно настроить само интерфейсное соединение.

Для этого откройте вкладку «Свойства» внизу экрана.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Необходимо прописать IP-адрес сервера, в моем случае 192.168.43.10.

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

На странице «Безопасность» выберите ранее созданный сертификат клиента и пока больше ничего не меняйте.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Создание и заполнение клиентского интерфейса привело к автоматическому созданию двух блоков данных: Клиентский интерфейс_1_Данные и Клиентский интерфейс_1_Конфигурация.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Давайте посмотрим на блок данных; там уже указаны переменные, которые мы планируем читать.

Чертовски удобно.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

14. Теперь нужно написать программу, которая установит соединение с OPC UA сервером, подготовит канал связи, прочитает информацию и закроет соединение.

Программа предназначена исключительно для демонстрационных целей; в боевых задачах должно писаться иначе.

Онлайн-справка по вызываемым блокам содержит всю необходимую информацию.

Еще есть пример на языке SCL, более подходящий для промышленного использования, но не такой понятный, как в моем случае.

В проект добавлены следующие переменные-маркеры

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Ищем функцию OPC_UA_Connect и перетаскиваем ее в сеть OB1

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Я оставил имя блока экземпляра по умолчанию.

Что приятно, что у этого вызова есть графический конфигуратор, как, например, у вызовов S7-связи в TIA Portal или вызова ПИД-регулятора.

Этот конфигуратор экономит массу времени, и это не может не радовать.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Останется только выбрать только созданный клиентский интерфейс (он всего один) и привязать блок вспомогательными переменными.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Для лучшего понимания вот скриншот онлайн-справки по Шагу 7. Именно в таком порядке вам необходимо совершить вызовы (минимум три), прежде чем начать чтение/запись данных.

Любой вызов выполняется по нарастающему фронту входа Req. Я записываю успех или неудачу вызова (без сброса, только вручную) в переменных с именем Done или err.

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Сейчас я предоставляю скриншоты всех сетей программы после того, как я последовательно сделал запрос на выполнение функциональных блоков.

Как видите, бит запроса req установлен в значение true (блок обрабатывается только по нарастающему фронту), биты успешного выполнения (done) установлены в значение true. Если ни для Done, ни для error установлено значение true, а ConnectionID первого вызова остается равным нулю, значит, что-то было сделано неправильно.

Например, используется неправильная конечная точка сервера или сертификат установлен неправильно.

Эти вызовы должны вызываться последовательно один за другим.

Я взвел биты руками и посмотрел на результат звонка, а уже потом перешел к следующему.

Очевидно, что полноценная программа должна автоматически совершать вызов и переходить к следующему шагу в зависимости от результата текущего.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Сеть 4 — самая важная, это цепочка чтения данных с сервера.

Все было сделано ради него.

Остальные сети вызывают функциональные блоки, чтобы закрыть соединение и освободить ресурсы.

Я им еще не звонил.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

В результате вызова сети 4 в блоке данных DB2 появились следующие данные:

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

15. На данный момент два контроллера общаются по протоколу OPC UA, цель практически достигнута.

Но не полностью.

Настройки безопасности по-прежнему находятся на уровне «бери, что хочешь».

Я могу легко подключиться к программе OPC UA Client и читать/записывать все возможные данные.

Давайте ограничим круг общения этих ПЛК, пусть они «дружат» только друг с другом.

Заходим в контроллер сервера, свойства ЦП, OPC UA → Сервер → Безопасность → Безопасный канал, удаляем политику «Нет безопасности» с Конечных точек.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Прокрутите вниз до «Надежные клиенты».

Добавьте сертификат контроллера клиента (PLC_2).

Снимите флажок Автоматически принимать сертификаты клиентов во время выполнения.

Сервер теперь не будет взаимодействовать ни с кем, кроме клиентского ПЛК.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Заходим в Аутентификацию пользователя, запрещаем гостевой доступ, создаем логин/пароль для доступа пользователя: user1/password1.

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Загрузка серверного ПЛК.

Возвращаемся к клиентскому ПЛК, открываем Интерфейс Клиента, вкладка Конфигурация, выбираем Безопасность, задаем режим и политику безопасности в поле Общие:

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Прокрутите вниз, выберите тип аутентификации - пользователь и пароль, укажите имя пользователя user1, пароль пароль1. Снимите флажок Автоматически принимать сертификат сервера во время выполнения.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Нажимаем на зеленую стрелку, сразу переходим на другую вкладку настроек, ищем там поле «сертификаты партнерских устройств» и добавляем в него сертификат сервера

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Компилируем и загружаем клиентский ПЛК (PLC_2), открываем мониторинг OB1 и последовательно вручную выполняем блоки в сетях 1.4. Если все сделано правильно, то все блоки будут работать успешно, и данные будут успешно считываться в DB2. 16. Остается только проверить, пустит ли контроллер сервера кого-нибудь еще.

Запускаем OPC UA Client и пробуем подключиться.

Возвращается список конечных точек.

Подключаемся с помощью Basic256 SignAndEncrypt, указав логин user1 и пароль pass1.

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Предлагается проверить сертификат сервера, принимаем его

Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

Но соединение не устанавливается, сервер не принимает сертификат «левого» клиента.



Обмен клиент-серверными данными между двумя ПЛК серии S7-1500 по протоколу OPC UA

В целом, поставленная цель достигнута.

На уровне ПЛК настроен безопасный обмен данными, то есть «горизонтальное» взаимодействие.

Теги: #Программирование микроконтроллеров #Промышленное программирование #ПЛК #siemens #opc #контроллер ПЛК #simatic

Вместе с данным постом часто просматривают: