Несмотря на солидный список поддерживаемых «из коробки» протоколов, применение классического OPC-сервера все еще сохраняет свою актуальность, даже принимая во внимание возможность разработки кастомного драйвера.
Для обеспечения связи с оборудованием при использовании сервера OPC нам так же необходимо добавлять в систему драйвер. Рассмотрим на примере драйвера OPC DA (data access, простой обмен данными). В качестве сервера OPC в данном примере используется широко известный Lectus, который по протоколу Modbus TCP будет связываться с локальным программным сервером Modbus TCP. Напоминаю, что сервер - это тот, кто отвечает на запросы. Клиент эти самые запросы генерирует.
Итого, в этой связке у нас получается по 2 клиента и по 2 сервера:
драйвер OPC DA является клиентом OPC для сервера Lectus;
Lectus является сервером OPC для драйвера и одновременно клиентом Modbus TCP для внешнего устройства, с которым мы организовываем связь;
сервером протокола Modbus выступает отдельная прогамма, установленная локально.
Проект уже создан, версия 3.18.
![](https://habrastorage.org/getpro/habr/upload_files/356/f4b/2d1/356f4b2d178171e5e7941288a3e1821a.jpeg)
Традиционно, как и с любой коммуникацией, начинаем работу с добавления драйвера в систему. Добавляем драйвер OPC DA Client с номером 2.
![](https://habrastorage.org/getpro/habr/upload_files/143/b73/790/143b73790805ed834a53fc6753611371.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/285/d5d/3e6/285d5d3e6d2283734a16887b50b58a8f.jpeg)
Этот драйвер не запустится с первого раза, так как требует настройки в конфигурационном файле проекта, это нормально.
![](https://habrastorage.org/getpro/habr/upload_files/8e5/c30/835/8e5c30835fc77199f99f79a9a6094e7a.jpeg)
Далее открываем System Management и находим там драйвера OPC.
![](https://habrastorage.org/getpro/habr/upload_files/3c7/e20/884/3c7e20884ffcf1019edcd984b1339687.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/42b/dde/991/42bdde991695c65051b7a2063f9d7e93.jpeg)
Добавляем новый сервер кнопкой "Создать":
![](https://habrastorage.org/getpro/habr/upload_files/f9b/db2/029/f9bdb2029780f99a7c5ec3ddd56e525f.jpeg)
Тут мы получаем список установленных серверов в системе. В настоящей заметке рассматривается только локальное подключение к OPC, а вопросы проброса DCOM и использование удаленных OPC-серверов остается далеко за рамками. Прошу обратить внимание, что если искомый сервер отсутствует в списке, но вы абсолютно уверены, что он установлен, то надо проанализировать - от какого пользователя запущен сервер, а от какого - WinCC OA.
![](https://habrastorage.org/getpro/habr/upload_files/07b/e2a/c0d/07be2ac0deb5ce7b8d70eb243eae2a52.jpeg)
Выбираем сервер Lectus, нам сразу предлагается имя внутренней точки данных для этого соединения.
![](https://habrastorage.org/getpro/habr/upload_files/2f3/491/fab/2f3491fabce12404f689884e6e03fe40.jpeg)
Далее появляется отличная подсказка.
![](https://habrastorage.org/getpro/habr/upload_files/514/9b8/3f1/5149b83f1429b9f52733e32d72fcdc23.jpeg)
Начнем со второго шага, окроем конфиг-файл, добавим в него секцию opc и указанную выше строку:
![](https://habrastorage.org/getpro/habr/upload_files/80d/50e/f04/80d50ef04b7090b0576c2a9446a5b480.jpeg)
Расстановку бит качества тэга на основании данных OPC я проигнорирую. Первый шаг, настройка сервера в этой панеле, сводится к переходу на вкладку группы и конфигурацию группы VALUE. По сути, это та же группа опроса, ее надо сделать активной. Дополнительно я указываю всегда читать данные непосредственно с устройства. По умолчанию источником данных служит кэш, а сама группа неактивна.
![](https://habrastorage.org/getpro/habr/upload_files/8a0/e92/d3c/8a0e92d3c2bd377f70d1b5a5b18106f5.jpeg)
Последний шаг - это запуск OPC DA клиента
![](https://habrastorage.org/getpro/habr/upload_files/33b/139/f23/33b139f231c3003559f959ae8f9f7dbe.jpeg)
После чего мы видим, что соединение с OPC-сервером установилось, да и сам OPC-сервер запустился автоматически. Нюансов в реализации OPC всегда множество, и я не берусь гарантировать, что все сервера должны запускаться автоматически, но с Lectus именно так.
![](https://habrastorage.org/getpro/habr/upload_files/ff9/bf0/867/ff9bf08676d669a121f0c0daac9426dd.jpeg)
Очень кратко настройки самого Lectus. Node - это мой локальный сервер Modbus TCP.
![](https://habrastorage.org/getpro/habr/upload_files/e6f/949/51f/e6f94951f51a022b70f864cbdaf0c87c.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/e01/a45/a20/e01a45a2028517e23b41344ca724b456.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/4da/38e/cd6/4da38ecd6c9f1608177d669165386791.jpeg)
![](https://habrastorage.org/getpro/habr/upload_files/8e9/00e/2f2/8e900e2f2bc20f271feeb02328775239.jpeg)
Последний шаг - настройка точки данных в модуле para. Заводим точки данных MyRegister типа ExampleDP_Int, добавляем и настраиваем конфиг address, как OPC Client.
![](https://habrastorage.org/getpro/habr/upload_files/93c/e52/8e7/93ce528e7fcacc6c9ff5f75ad75df64f.jpeg)
Сервер Lectus мы ранее настроили в Управлении Системой. Там же настроили и группу опроса VALUE. Node.Item1 задано в сервере Lectus, для доступа ко всем тэгам текущего сервера OPC у нас есть соответствующая кнопка:
![](https://habrastorage.org/getpro/habr/upload_files/c9c/5a0/eb9/c9c5a0eb902ac3ca4efe282f81a77435.jpeg)
Не забываем, что адресный конфиг надо сделать активным, выставив соответствующую галочку внизу. Теперь переходим на конфиг original и смотрим значение.
![](https://habrastorage.org/getpro/habr/upload_files/21a/5ab/a5e/21a5aba5ed5feba88722181ddbc17a33.jpeg)
Это соответствует заданному в сервере Modbus значению.
![](https://habrastorage.org/getpro/habr/upload_files/cda/b47/d8f/cdab47d8f01badfeba76a515806cb0bb.jpeg)
Если вернуться в адресный конфиг и изменить «права» доступа на чтение/запись, то получится и задать значение регистра хранения. На этом скрине я изменил «направление».
![](https://habrastorage.org/getpro/habr/upload_files/72c/198/50e/72c19850e72114459a1c52051386df41.jpeg)
Теперь задаю значение 667
![](https://habrastorage.org/getpro/habr/upload_files/0d8/3c9/ca9/0d83c9ca9727fe99b4b0da9c3cd93c3c.jpeg)
Это значение изменилось и в сервере Modbus
![](https://habrastorage.org/getpro/habr/upload_files/dda/afa/344/ddaafa344a1849b6ebc5bac7fc673f3d.jpeg)