Мы продолжаем анализировать коммуникационные возможности системы WinCC OA. Но на этот раз мы рассмотрим подключение к Siemens PXC12 (он же автоматизация зданий) «гражданского» контроллера автоматизации по протоколу Bacnet, который был разработан специально для автоматизации зданий.
Я никогда не работал с ним, но он очень интересный. Во-первых, данные здесь представлены в виде набора стандартных структур (или «объектов», как сейчас модно говорить, хотя с точки зрения объектно-ориентированного программирования они вовсе не являются объектами). Например, AI0.HiLimit или «аналоговый вход 0», верхний предел измерения. Во-вторых, если я все правильно понимаю, это реализовано сразу для IP и последовательных каналов. В-третьих, протокол предоставляет «шлюзы», через которые можно построить сеть разнородных устройств Bacnet, используя разную «физику».
Этот пример иллюстрирует простейшее соединение Bacnet. Одно устройство по протоколу TCP/IP, без шлюзов. Объектная лицензия Bacnet не используется. Готовое приложение WinCC OA Bacnet не используется (находится в каталоге установки):
У меня нет ни среды разработки, ни прикладного ПО для этого контроллера, я знаю только IP-адрес: 192.168.0.10. Сначала я настраиваю один из проводных интерфейсов на своем компьютере и проверяю обычный пинг.

Вы также можете найти бесплатную программу Еще один bacnet explorer (сокращенно yabe, но я буду называть ее еще одним терминалом bacnet Ultimate, просто ради искусства) и просмотреть полные данные моего автомата. Хорошая программа, благодаря которой вы сможете, указав только интерфейс ПК, который «наблюдает» за бэкнет-сетью, получить доступное в сети устройство, его бэкнет-идентификатор, порт и список его переменных.

Теперь приступим к настоящей работе. Не забудьте закрыть ябэ. Теперь мы будем подключаться к тому же порту, что и yabe. Когда ябэ активен, все может пойти не так. Напоминаю, что это самый простой пример, поэтому мы не рассматриваем диапазоны портов, открытых на ПЛК для подключения, у нас все примитивно. Вроде сначала добавляем драйвер в консоль, но нет. Для некоторых драйверов существует «нулевой» шаг, который называется «добавить строки в основной файл конфигурации проекта).
Добавляем следующее (помните, что последняя строка файла должна быть пустой).
[bacnet]
net = 1 "IP" "" "" 47808 "" 0 120 0

Что означает эта строка конфигурации — добро пожаловать в документацию драйвера. Скажу, что этого достаточно для штатного подключения к автомату. Что ж, теперь можно добавить драйвер в консоль. Естественно, указав номер драйвера с опцией -num X, где X в нашем случае будет 2.

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

Следующим шагом является открытие модуля управления системой и установка соединения с контроллером по нужному протоколу.

Все, что вам нужно ввести, это идентификатор устройства, который мы задаем в программе yabe (которую, напомню, в этот момент лучше всего закрыть).
Ставим галочку Active, применяем и… ничего не происходит.


Мы пытаемся изменить настройки привязки адресов с динамических на статические.

Все равно не работает, статус подключения офлайн. Кажется, ничего не работает. Пойдем. Не так быстро! Напомним, что некоторые драйверы нашей SCADA сигнализируют о наличии соединения только после настройки конфигурации адресов хотя бы одной точки данных. Например модбас. Такое впечатление, что это правило распространяется на всех пилотов, у которых номер пилота в системе не указан в параметрах соединения, а только в параметрах datapoint. Оставим эту интересную теорию в стороне и откроем модуль para, создадим датапойнт типа ExampleDP (мне они очень нравятся для тестирования связи) и настроим его адресную конфигурацию.

Не забываем указать номер драйвера (2), выбрать тип объекта – аналоговый вход, номер объекта – 1 (это можно прочитать в ябэ), свойство объекта – верхний предел измерения. Почему бы не сообщить значение? Потому что сигнал не отключен. Помните, что вам также необходимо создать группу опроса и сделать ее активной. Делаем настройку адреса активной и подключение появляется. Это видно и по значению сигнала в пара, и по записи в свойствах подключения, и в системном журнале.



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

После перезагрузки соединение установилось.

За кулисами я провел два эксперимента.
В первом я оставил динамическую привязку в настройках соединения, создал конфигурацию адреса датапойнта, и все заработало.

Второй аналогичен первому, только параметры подключения были со статической привязкой. Оба опыта осуществлялись посредством создания нового проекта. В обоих случаях соединение появилось только после настройки первой точки данных, quota errat demostrandum!