При написании заметки были использованы следующие материалы: 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, таких как включение глобальных настроек безопасности, среда выдает вам предупреждения, а иногда даже окна с сообщениями с угрозами.
Я не стал на этом акцентировать внимание в описании, поэтому просто нажмите ОК и согласитесь со всем.
- По умолчанию OPC UA отключен в настройках, поэтому зайдите в свойства CPU, найдите ветку OPC UA → Server → General и активируйте OPC UA Server.
2. Использование OPC UA в контроллерах Simatic требует покупки лицензии, поэтому покупаем лицензию, переходим в свойства Runtime Licenses → OPC UA и задаем тип приобретаемой лицензии.
Лицензии на серию 1500 бывают трех типов: малые, средние и большие, в зависимости от типа ЦП.
S7-1510 и S7-1512 требуют «маленького».
3. При желании можно задать имя приложения для сервера OPC UA, порт и временные интервалы.
Я установил минимальные интервалы выборки и публикации.
Стоит помнить, что уменьшение интервалов увеличивает нагрузку на процессор.
Имя приложения и номер порта остались по умолчанию.
4. Базовая настройка завершена.
Компилируем и загружаем ПЛК.
5. Пришло время проверить, работает ли он вообще.
Запускаем программу OPC UA Client (ее можно скачать с SIOS по первым двум ссылкам в начале заметки).
Я установил IP-адрес моего контроллера 192.168.43.10 и нажал кнопку «Получить конечные точки».
Я получаю возможные «точки входа»
Перехожу к самому первому варианту, без сертификатов, без шифрования, без пароля, нажимаю «Подключиться к выбранным конечным точкам» и перехожу на вкладку «Обзор узлов».
Программа управления котельной загружается в контроллер, нахожу одну переменную (Узел или узел – так в протоколе называется «тег» или «переменная»)
В правой верхней части есть строка Node id (идентификатор узла или «адрес переменной»), выделите ее мышкой и нажмите Ctrl-C
Я перехожу на вкладку «Чтение/запись», вставляю скопированный идентификатор узла и нажимаю кнопку «Читать».
Получаю считанное значение переменной равное 3. Действительно, все совпадает, насосы отопительного контура должны чередоваться в третий день недели, и именно эта цифра заносится в переменную DayOfWeek блока данных OKPumpsAuto. Я закрываю программу.
Базовый функционал есть и он работает. Но этого недостаточно.
Теперь OPC UA сервер настроен в режиме «заходи, кто хочешь, бери, что хочешь».
Необходимо добавить немного безопасности.
6. Включите «глобальные настройки безопасности» в свойствах ЦП, Защита и безопасность → Диспетчер сертификатов, установите флажок «Использовать глобальные настройки…»
7. В навигации по всему проекту находим Настройки безопасности → Настройки.
Смело нажимайте кнопку «Защитить этот проект».
Действие необратимо.
Снять защиту с проекта больше нельзя будет. Дело в том, что оффлайн-проект будет содержать сертификаты серверной и клиентской машин; их необходимо защищать, чтобы избежать кражи.
После нажатия кнопки Защитить система предложит создать администратора проекта:
Теперь любое открытие проекта ТИА Портал потребует ввода логина и пароля.
Помимо администратора проекта, конечно, можно и нужно создавать пользователей с меньшими правами.
8. После того, как мы активировали глобальные настройки безопасности, нам необходимо вручную восстановить сертификат контроллера.
В дальнейшем лучше, конечно, сразу защитить проект, создать администратора проекта и задать контроллерам «глобальные настройки безопасности», но эта заметка носит частично общеобразовательный характер.
Возвращаемся к настройкам ЦП, ищем OPC UA → Сервер → Безопасность.
Нажмите кнопку «…» рядом с надписью «Сертификат сервера», а в появившемся окне нажмите кнопку «Добавить новый».
Создаем новый сертификат устройства, все значения остаются по умолчанию.
Сертификат, судя по всему, подписан серьезной организацией! В итоге все становится так:
Теперь предлагаю скомпилировать проект, загрузить его в ПЛК и проверить программой, как работает связь.
Фактически, в результате последних изменений в настройках уровень безопасности не увеличился ни на йоту.
Все это было лишь подготовительным процессом.
Потихоньку подходит время приступить к настройке контроллера, который будет играть роль OPC UA-клиента, проверять обмен данными, а затем закрывать все бреши в безопасности.
Но сначала вам необходимо загрузить xml-файл с описанием всех тегов (узлов) контроллера сервера.
Формируется этот файл достаточно просто - система выбирает только те переменные, которые отмечены флагом Доступно из HMI/OPC UA и разрешает их запись, если установлен флаг Доступно для записи из HMI/OPC UA. В этом случае блок данных также должен быть доступен через OPC UA (доступно по умолчанию).
Например:
Для экспорта снова зайдите в настройки ЦП и найдите OPC UA → Сервер → Экспорт, нажмите кнопку «Экспортировать XML-файл OPC UA».
Перейдем к настройкам клиента OPC UA, то есть той стороны обмена, которая будет инициировать связь, запрашивать и записывать переменные.
Моя клиентская часть — S7-1510 с прошивкой FW2.6. 9. Добавляю в проект контроллер и сразу активирую глобальные настройки безопасности.
10. Активируйте клиент OPC UA.
11. Активируйте лицензию OPC UA.
12. Я генерирую сертификат для этого второго клиентского контроллера.
В дальнейшем контроллер сервера и контроллер клиента обменяются (с моей помощью) своими сертификатами, и подключение незнакомых устройств будет запрещено.
В свойствах ЦП заходим в раздел «Защита и безопасность», нажимаем «Добавить новый».
в таблице «Сертификаты устройств» в появившейся пустой строке нажимаем на кнопку «…», в появившемся окне нажимаем «Добавить новый», наблюдаем уже знакомое окно создания нового подписанного сертификата:
В поле использования я дополнительно указал, что сертификат используется для OPC UA Client; по умолчанию у меня был установлен Tls. 13. Теперь самое интересное: настройка клиентского интерфейса, а точнее, настройка соединения с сервером и создание наборов данных для чтения и/или записи.
В структуре проекта второй (клиентский) контроллер: PLC_2 → Связь OPC UA → Клиентские интерфейсы → Добавить новый клиентский интерфейс.
Нажмите кнопку «Импортировать интерфейс» и загрузите ранее экспортированный XML-файл.
Теперь все узлы контроллера сервера открыты.
Так как задача носит образовательный характер, то потребуется немного — достаточно посчитать 4 переменные блока OKPumpsAuto.
Для этого я создаю Readlist и перетаскиваю интересующие меня переменные из правой части экрана в левую.
Конечно, в боевых задачах список чтения может быть длиннее.
Разумеется, в боевых задачах будет не только чтение, но и запись переменных.
В этой заметке я ограничился одним прочтением.
В результате мы получаем следующее:
Итого мы создали один интерфейс, состоящий из одного списка чтения.
Набор данных для чтения готов.
Но чего-то не хватает; вам еще нужно настроить само интерфейсное соединение.
Для этого откройте вкладку «Свойства» внизу экрана.
Необходимо прописать IP-адрес сервера, в моем случае 192.168.43.10.
На странице «Безопасность» выберите ранее созданный сертификат клиента и пока больше ничего не меняйте.
Создание и заполнение клиентского интерфейса привело к автоматическому созданию двух блоков данных: Клиентский интерфейс_1_Данные и Клиентский интерфейс_1_Конфигурация.
Давайте посмотрим на блок данных; там уже указаны переменные, которые мы планируем читать.
Чертовски удобно.
14. Теперь нужно написать программу, которая установит соединение с OPC UA сервером, подготовит канал связи, прочитает информацию и закроет соединение.
Программа предназначена исключительно для демонстрационных целей; в боевых задачах должно писаться иначе.
Онлайн-справка по вызываемым блокам содержит всю необходимую информацию.
Еще есть пример на языке SCL, более подходящий для промышленного использования, но не такой понятный, как в моем случае.
В проект добавлены следующие переменные-маркеры
Ищем функцию OPC_UA_Connect и перетаскиваем ее в сеть OB1
Я оставил имя блока экземпляра по умолчанию.
Что приятно, что у этого вызова есть графический конфигуратор, как, например, у вызовов S7-связи в TIA Portal или вызова ПИД-регулятора.
Этот конфигуратор экономит массу времени, и это не может не радовать.
Останется только выбрать только созданный клиентский интерфейс (он всего один) и привязать блок вспомогательными переменными.
Для лучшего понимания вот скриншот онлайн-справки по Шагу 7. Именно в таком порядке вам необходимо совершить вызовы (минимум три), прежде чем начать чтение/запись данных.
Любой вызов выполняется по нарастающему фронту входа Req. Я записываю успех или неудачу вызова (без сброса, только вручную) в переменных с именем Done или err.
Сейчас я предоставляю скриншоты всех сетей программы после того, как я последовательно сделал запрос на выполнение функциональных блоков.
Как видите, бит запроса req установлен в значение true (блок обрабатывается только по нарастающему фронту), биты успешного выполнения (done) установлены в значение true. Если ни для Done, ни для error установлено значение true, а ConnectionID первого вызова остается равным нулю, значит, что-то было сделано неправильно.
Например, используется неправильная конечная точка сервера или сертификат установлен неправильно.
Эти вызовы должны вызываться последовательно один за другим.
Я взвел биты руками и посмотрел на результат звонка, а уже потом перешел к следующему.
Очевидно, что полноценная программа должна автоматически совершать вызов и переходить к следующему шагу в зависимости от результата текущего.
Сеть 4 — самая важная, это цепочка чтения данных с сервера.
Все было сделано ради него.
Остальные сети вызывают функциональные блоки, чтобы закрыть соединение и освободить ресурсы.
Я им еще не звонил.
В результате вызова сети 4 в блоке данных DB2 появились следующие данные:
15. На данный момент два контроллера общаются по протоколу OPC UA, цель практически достигнута.
Но не полностью.
Настройки безопасности по-прежнему находятся на уровне «бери, что хочешь».
Я могу легко подключиться к программе OPC UA Client и читать/записывать все возможные данные.
Давайте ограничим круг общения этих ПЛК, пусть они «дружат» только друг с другом.
Заходим в контроллер сервера, свойства ЦП, OPC UA → Сервер → Безопасность → Безопасный канал, удаляем политику «Нет безопасности» с Конечных точек.
Прокрутите вниз до «Надежные клиенты».
Добавьте сертификат контроллера клиента (PLC_2).
Снимите флажок Автоматически принимать сертификаты клиентов во время выполнения.
Сервер теперь не будет взаимодействовать ни с кем, кроме клиентского ПЛК.
Заходим в Аутентификацию пользователя, запрещаем гостевой доступ, создаем логин/пароль для доступа пользователя: user1/password1.
Загрузка серверного ПЛК.
Возвращаемся к клиентскому ПЛК, открываем Интерфейс Клиента, вкладка Конфигурация, выбираем Безопасность, задаем режим и политику безопасности в поле Общие:
Прокрутите вниз, выберите тип аутентификации - пользователь и пароль, укажите имя пользователя user1, пароль пароль1. Снимите флажок Автоматически принимать сертификат сервера во время выполнения.
Нажимаем на зеленую стрелку, сразу переходим на другую вкладку настроек, ищем там поле «сертификаты партнерских устройств» и добавляем в него сертификат сервера
Компилируем и загружаем клиентский ПЛК (PLC_2), открываем мониторинг OB1 и последовательно вручную выполняем блоки в сетях 1.4. Если все сделано правильно, то все блоки будут работать успешно, и данные будут успешно считываться в DB2. 16. Остается только проверить, пустит ли контроллер сервера кого-нибудь еще.
Запускаем OPC UA Client и пробуем подключиться.
Возвращается список конечных точек.
Подключаемся с помощью Basic256 SignAndEncrypt, указав логин user1 и пароль pass1.
Предлагается проверить сертификат сервера, принимаем его
Но соединение не устанавливается, сервер не принимает сертификат «левого» клиента.
В целом, поставленная цель достигнута.
На уровне ПЛК настроен безопасный обмен данными, то есть «горизонтальное» взаимодействие.
Теги: #Программирование микроконтроллеров #Промышленное программирование #ПЛК #siemens #opc #контроллер ПЛК #simatic
-
Использование Радиочастотных Модулей
19 Oct, 24 -
Cisco Call Manager И Skype Connect
19 Oct, 24 -
Bskyb Запускает Конкурента Itunes И Spotify
19 Oct, 24