Продолжаем разбирать коммуникационные возможности системы WinCC OA. Но этот раз рассмотрим подключение к контроллеру «гражданской» автоматизации (AKA автоматизация зданий) Siemens PXC12 по протоколу Bacnet, который и был разработан аккурат для автоматизации зданий.

С ним я никогда не работал, но он очень интересный. Во-первых, данные тут представлены в виде набора стандартных структур (или «объектов», как это ныне модно говорить, хотя с точки зрения объектно-ориентированного программирования, это никакие не объекты). Например AI0.HiLimit, или же «аналоговый вход 0».верхний предел измерения. Во-вторых, если я все правильно понял, он реализован сразу и для IP, и для последовательных каналов. В-третьих, в протоколе предусмотрены некие «шлюзы», благодаря которым можно построить сеть разнородных устройств Bacnet с применением разной «физики».

Данный пример демонстрирует простейшее подключение по Bacnet. Одно устройство по протоколу TCP/IP, никаких шлюзов. Не используется лицензия объектов Bacnet. Не используется готовое WinCC OA Bacnet Application (расположена в установочной директории):

WinCC OA Fun. Драйвер Bacnet., изображение №1

Ни среды разработки, ни прикладного ПО для этого контроллера у меня нет, мне известен только ip-адрес: 192.168.0.10. Для начала настраиваю один из проводных интерфейсов своего компьютера и проверяю обычный ping.

WinCC OA Fun. Драйвер Bacnet., изображение №2

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

WinCC OA Fun. Драйвер Bacnet., изображение №3

Теперь приступаем к реальной работе. Не забудьте только закрыть yabe. Мы же сейчас будем подключаться к тому же порту, что и yabe. При активном yabe что-то может пойти не так. Напоминаю, что это простейший пример, поэтому диапазоны портов, открытые на ПЛК для коннекта, не рассматриваем, у нас все примитивно. Казалось бы, в первую очередь добавляем драйвер в консоль, но нет. Для некоторых драйверов есть «нулевой» шаг, который называется «добавить строчки в главный config-файл проекта).

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

[bacnet]
net = 1 "IP" "" "" 47808 "" 0 120 0
WinCC OA Fun. Драйвер Bacnet., изображение №4

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

WinCC OA Fun. Драйвер Bacnet., изображение №5

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

WinCC OA Fun. Драйвер Bacnet., изображение №6

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

WinCC OA Fun. Драйвер Bacnet., изображение №7

Все, что надо ввести - это ID устройство, которое мы определили в программе yabe (которую, напомню, лучше к этому моменту закрыть).

Ставим галочку Active, применяем и… ничего не происходит.

WinCC OA Fun. Драйвер Bacnet., изображение №8
WinCC OA Fun. Драйвер Bacnet., изображение №9

Пробуем изменить настройки привязки адреса с динамики на статику.

WinCC OA Fun. Драйвер Bacnet., изображение №10

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

WinCC OA Fun. Драйвер Bacnet., изображение №11

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

WinCC OA Fun. Драйвер Bacnet., изображение №12
WinCC OA Fun. Драйвер Bacnet., изображение №13
WinCC OA Fun. Драйвер Bacnet., изображение №14

Еще один эксперимент. Перейдем от статических настроек коннекта к динамическим. Сменим настройку, заглушим проект целиком и даже перегрузим ПЛК, тем самым постаравшись добиться максимальной чистоты эксперимента.

WinCC OA Fun. Драйвер Bacnet., изображение №15

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

WinCC OA Fun. Драйвер Bacnet., изображение №16

«За кадром» я провел два эксперимента.

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

WinCC OA Fun. Драйвер Bacnet., изображение №17

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

Комментарии (0)