Найти в Дзене
Владимир

Данные из счётчика Меркурий в контроллер Simatic

S7-1200 и VR007.4
S7-1200 и VR007.4

Продолжаю дружить различные устройства с Siemens Simatic S7-1200. Сегодня очередь дошла до счётчиков электроэнергии Меркурий. Напрямую общаться со счётчиком смысла особого нет, так как имеются недорогие специализированные серверы российского производства VR007.4. Немного по подробнее почему я сказал слово сервер.

Считаю что тут уместен такой же подход как уже много лет классифицируют устройства связи в Modbus: шлюз Modbus TCP — Modbus RTU это когда каждый запрос от каждого отдельного устройства обрабатывается индивидуально, сервер Modbus TCP — Modbus RTU это когда запросы проверяются на истечение «времени актуальности» и только если время актуальности превышено запрос транслируется в сеть Modbus RTU, а если нет то спрашивающему отдаётся значение от запроса имевшего место ранее, то есть без трансляции в сеть Modbus RTU. Таким образом вероятность отказа в обслуживании уменьшается, правда за счёт некоторого запаздывания. К классу устройств сбора и передачи данных (УСПД) устройство VR007.4 не относиться так как не производит никаких вычислений со значениями параметров полученных от счётчиков Меркурий. А УСПД «умеют» вычислять суммы по группам счётчиков и т.п. Устройство VR007.4 опрашивая счётчики Меркурий работает аналогично серверу Modbus TCP — Modbus RTU за одним исключением: оно не оценивает ретроспективу запросов, а действует в полной уверенности что данные обязательно кому-то понадобятся. Поэтому считаю правильным называть устройство VR007.4 сервером счётчиков электроэнергии Меркурий. К одному серверу VR007.4 можно подключить до 50 счётчиков Меркурий 230...236. В последнее время появился новый класс устройств на границе хозяйственной ответственности АСУТП и ИТ которые так и называют промышленные пограничные серверы (industrial edge server - IES) Что если так: "IES VR007.4 Меркурий", звучит? Однако это решать производителю, сам же производитель VR007.4 называет это устройство роутером, видимо по привычке или потому что собран он на основе мощного (CPU 2х1.8 ГГц) роутера. Как и положено пограничному устройству, работоспособность VR007.4 могут беспрепятственно контролировать хозяйствующие субъекты с обоих сторон границы хозяйственной ответственности. Для этого VR007.4 соответствующую возможность. Даже две возможности, VR007.4 может работать как MQTT издатель и отвечает на небольшой, но вполне достаточный, перечень GET запросов в ответ на которые передаёт информацию с опрашиваемых им счётчиков.

Для получения информации о мгновенных/накопленных значениях в контроллер Simatic будет использоваться вторая возможность.

Зачем информация может понадобиться контроллеру управляющему производственной линией? По значения мгновенного тока и реактивности можно оценить работает ли оборудование «в полную силу» то есть, есть ли резерв? Или наоборот может стоит «расслабиться», сбавить обороты. Такой регулятор с положительной обратной связью или как сейчас модно выражаться супервизор может существенно повысить эффективность использования оборудования.

Особенность всех промышленных контроллеров, не только Simatic, это необходимость рачительного отношения к вычислительным ресурсам, памяти, количеству вложений вызов, нагрузке каналов связи, наглядности прикладной программы для минимизации времени поиска проблем при сбоях. А отсюда и жёсткий контроль типов данных. Всё это накладывает свой отпечаток на стиль программирования, поэтому отклонения от принципа DRY (don’t repeat yourself) бывают оправданы. (тут пишущие на JS падают в обморок)

Как подключить счётчик Меркурий к VR007.4 хорошо описано в инструкции на счётчик и собственно VR007.4 повторяться не буду, но чтобы никого не удивляли некоторые значения переменных прочитанные из счётчика на приведённых здесь скриншотах скажу об этом. На момент отладки программы Simatic в моём распоряжении был счётчик Меркурий-233, трёхфазный, а сеть в офисном помещении однофазная. Идти в цех и писать программу под малоприятные звуки оборудования не было желания. Вот именно поэтому.

Итак подключили, прописали IP-шники как надо. В заводской поставке VR007.4 имеет странную сетевую конфигурацию, но мне она не нужна ибо я подключаю устройство на правах простого хоста. Поэтому: меняем пароль на свой, меняем название устройства на нужное, указываем свои NTP и удаляем те что там были, разделяем интерфейсы, удаляем беспроводную конфигурацию имеющуюся и задаём новую если предполагается подключение устройства к сети по WiFi или не задаём ничего, удаляем с интерфейсовзоны firewall, переключаем протокол на DHCP клиент, лизу делаем статической в той сети куда он будет подключен и запоминаем этот IP.

Для понимания работы, если кто-то желает достичь понимания, устанавливаем программы Wireshark, Packet sender, Net Assistant. В адресную строку копируем текст GET запроса, изменяем IP на запомненный, номер счётчика на тот который прописали про настройке VR007.4 согласно инструкции. Нажимаем Enter и наблюдаем в ответ значения в окне браузера. Если посмотреть на отправленный браузером запрос Wireshark-ом то можно увидеть кроме «полезного» много чего «лишнего». Что лишнее, а что полезное легко понять обложившись книгами в библиотекекопируя запрос из Wireshark в Net Assistant и отправляя запрос из него.

-2

В запросе от контроллера прописано только «полезное» по причинам указанным ранее. Далее всё просто контроллер посылает запрос в ответ получает данные со счётчика при последнем его опросе VR007.4 из которых контроллер выбирает только «полезное» в соответствующую структуру. Кто-то их называет классами, кто-то type, но поскольку в Simatic применено сокращение struct то я, применительно к Simatic буду называть структура.

Если счётчиков несколько, то для общения с каждым из них может использоваться один и тот же функиональный блок (FB), но все блоки данных (DB) должны быть персональными. То есть _1, _2, _3 и т. д. FB кроме структуры полученных данных на выходе имеет две булевые переменные длительностью 1 цикл контролера. Одна из них говорит что какие-то данные получены, а другая сигнализирует о наличии ошибки. Продуктивное общение это когда данные получены и при этом нет ошибки. Это надо иметь в виду.

-3

На приведённом скриншоте всё хорошо видно. «Очищенный» GET запрос, «сырые» данные ответа на него, структура со значениями параметров из счётчика. То есть переменные пригодные для последующих глубокомысленных вычислений.

Остаётся только пожелать всем успеха от применения результата этих глубокомысленных вычислений. Для пущей уверенности в этом выкладываю проект в TIA16.3. Экспортировать source code если FB написан на двух языках, в данном случает это так, на LAD и SCL, TIA не даёт. Но не стоит унывать, есть варианты через библиотеку, а если понизить версию TIA надо то экспортировать source code по отдельности разделив LAD и SCL в отдельные FB и потом собрать обратно.

В следующей публикации буду дружить VR007.4 с Node-RED и положим полученные данные базу данных.

Проект в TIA16.3 тут.