Несмотря на солидный список поддерживаемых «из коробки» протоколов, применение классического 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.
Традиционно, как и с любой коммуникацией, начинаем работу с добавления драйвера в систему. Добавляем драйвер OPC DA Client с номером 2.
Этот драйвер не запустится с первого раза, так как требует настройки в конфигурационном файле проекта, это нормально.
Далее открываем System Management и находим там драйвера OPC.
Добавляем новый сервер кнопкой "Создать":
Тут мы получаем список установленных серверов в системе. В настоящей заметке рассматривается только локальное подключение к OPC, а вопросы проброса DCOM и использование удаленных OPC-серверов остается далеко за рамками. Прошу обратить внимание, что если искомый сервер отсутствует в списке, но вы абсолютно уверены, что он установлен, то надо проанализировать - от какого пользователя запущен сервер, а от какого - WinCC OA.
Выбираем сервер Lectus, нам сразу предлагается имя внутренней точки данных для этого соединения.
Далее появляется отличная подсказка.
Начнем со второго шага, окроем конфиг-файл, добавим в него секцию opc и указанную выше строку:
Расстановку бит качества тэга на основании данных OPC я проигнорирую. Первый шаг, настройка сервера в этой панеле, сводится к переходу на вкладку группы и конфигурацию группы VALUE. По сути, это та же группа опроса, ее надо сделать активной. Дополнительно я указываю всегда читать данные непосредственно с устройства. По умолчанию источником данных служит кэш, а сама группа неактивна.
Последний шаг - это запуск OPC DA клиента
После чего мы видим, что соединение с OPC-сервером установилось, да и сам OPC-сервер запустился автоматически. Нюансов в реализации OPC всегда множество, и я не берусь гарантировать, что все сервера должны запускаться автоматически, но с Lectus именно так.
Очень кратко настройки самого Lectus. Node - это мой локальный сервер Modbus TCP.
Последний шаг - настройка точки данных в модуле para. Заводим точки данных MyRegister типа ExampleDP_Int, добавляем и настраиваем конфиг address, как OPC Client.
Сервер Lectus мы ранее настроили в Управлении Системой. Там же настроили и группу опроса VALUE. Node.Item1 задано в сервере Lectus, для доступа ко всем тэгам текущего сервера OPC у нас есть соответствующая кнопка:
Не забываем, что адресный конфиг надо сделать активным, выставив соответствующую галочку внизу. Теперь переходим на конфиг original и смотрим значение.
Это соответствует заданному в сервере Modbus значению.
Если вернуться в адресный конфиг и изменить «права» доступа на чтение/запись, то получится и задать значение регистра хранения. На этом скрине я изменил «направление».
Теперь задаю значение 667
Это значение изменилось и в сервере Modbus