Интеграция Lon в Simple Scada

от автора

Практическая схема подключения действующей Lon-сети к современной SCADA без замены контроллеров.

Название: Архитектура интеграции Lon в Simple-Scada - описание: Схема Lon → USB → TCP-шлюз → MasterOPC → Simple-Scada

Схема Lon → USB → TCP-шлюз → MasterOPC → Simple-Scada

Архитектура решения: Lon → USB → TCP → MasterOPC → Simple-Scada

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

В этой статье разберу решение, которое использовал на действующем объекте: Lon-интерфейс подключён по USB, работа с ним вынесена в отдельный TCP-шлюз, MasterOPC превращает ответы в обычные OPC-теги, а Simple-Scada отображает значения и отправляет команды записи.

Задача: сохранить уровень Lon и заменить диспетчеризацию

На объекте уже работала Lon-сеть с 24 контроллерами. Требовалось не вмешиваться в логику полевых устройств и не перекладывать шину, но вывести данные в Simple-Scada вместо Tac Vista. Практический набор требований получился таким:

1. циклически читать NVI и NVO разных контроллеров;

2. преобразовывать двоичные значения SNVT в инженерные единицы;

3. передавать в OPC не только значение, но и качество связи;

4. строить мнемосхемы, архивы и тренды в Simple-Scada;

5. записывать во входные переменные NVI;

6. подтверждать результат записи, а не только факт отправки пакета;

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

Низкоуровневую работу с Lon я вынес в отдельный сервис, а MasterOPC оставил ролью понятного для SCADA преобразователя: запросить данные по TCP, разобрать результат, обновить теги и обработать команду записи.

Архитектура решения

Обмен проходит через пять уровней:

Сеть Lon. Существующие контроллеры и их сетевые переменные NVI/NVO.

USB-интерфейс. Физическое подключение компьютера к Lon-сети через Lon Usb адаптер.

TCP-шлюз. Принимает запросы, выполняет операции через USB-интерфейс и возвращает данные вместе с диагностикой.

Журнал TCP шлюза

Журнал TCP шлюза

MasterOPC. Циклически опрашивает переменные, декодирует SNVT и публикует результат как OPC-теги. Запись идёт в обратном направлении.

Архитектура сервера MasterOPC

Архитектура сервера MasterOPC

Simple-Scada. Отображает мнемосхемы, тренды и архивы, а также позволяет оператору менять разрешённые уставки.

Simple Scada пример для одной вент установки

Simple Scada пример для одной вент установки

Разделение на уровни сильно упрощает диагностику. Если не отвечает контроллер, это видно на уровне Lon. Если оборвалось TCP-соединение, MasterOPC переводит соответствующие теги в плохое качество. Если OPC работает, но объект на мнемосхеме не меняется, проблему уже нужно искать в проекте Simple-Scada.

Что действительно нужно знать о переменной Lon

Понятное человеку имя вроде «Температура приточного воздуха» удобно в SCADA, но в сетевом запросе не участвует. Для обращения к переменной нужны адрес и её место в таблице узла; для получения осмысленного значения — ещё тип и длина данных.

Параметр

Зачем он нужен

Domain / Domain Index

Выбор нужного домена. Если интерфейс заранее включён в единственный домен, этот параметр можно хранить в общей конфигурации, а не в каждом теге.

Subnet и Node

Сетевой адрес контроллера.

NV Index

Положение сетевой переменной в таблице конкретного узла.

SNVT Index или тип

Правило декодирования и кодирования двоичных данных.

Размер данных

Проверка длины ответа; для стандартного SNVT обычно определяется по типу.

Имя и единица

Нужны оператору, MasterOPC и Simple-Scada, но не входят в Lon-пакет.

 

Минимум и достаточность. для отправки запроса к уже настроенному интерфейсу достаточно subnet, node и NV Index. Для корректного инженерного значения этого недостаточно: нужен SNVT или описание собственного типа и ожидаемая длина данных. Domain необходим на уровне конфигурации интерфейса, если используется несколько доменов.

Что добавляется при записи в NVI

Запись сложнее чтения. Нельзя взять NV Index и подставить его в пакет обновления как selector: это разные сущности. NV Index указывает позицию переменной в таблице узла, а selector хранится в конфигурации сетевой переменной и используется в сообщении обновления.

Для надёжной записи нужно знать или получить из конфигурации NVI:

  • selector — идентификатор сетевой переменной в сообщении обновления;

  • direction — переменная должна иметь направление Input;

  • priority и authentication — флаги, с которыми настроен обмен;

  • service type — в моём случае использовался подтверждаемый сервис ACKD;

  • address entry — адресная запись, если она участвует в настроенной привязке;

  • SNVT и длину — чтобы закодировать значение в правильный набор байтов;

Рабочая последовательность записи выглядит так:

  • обратиться к устройству по адресу subnet/node;

  • по NV Index прочитать конфигурацию переменной;

  • проверить направление Input;

  • извлечь selector и флаги передачи;

  • закодировать инженерное значение согласно SNVT;

  • отправить обновление с подтверждением;

  • прочитать переменную повторно и сравнить результат.

Последний шаг принципиален: подтверждение транспортного обмена ещё не означает, что в устройстве уже находится нужное инженерное значение. Контрольное чтение отделяет состояние «пакет отправлен» от результата «устройство действительно приняло новое значение».

Как организованы теги в MasterOPC

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

1. Subnet, Node — адрес контроллера;

2. NvIndex — индекс переменной;

3. SnvtIndex — правило декодирования;

4. Value — инженерное значение для OPC;

5. Raw — исходные байты ответа;

6. Quality — качество результата;

7. Status — состояние последней операции;

8. LastUpdate — время последнего успешного чтения;

Для записи используется отдельная группа WriteNvi. В ней нужны адрес узла, NV Index, SNVT, требуемое значение и разрешение запуска. Результат операции возвращается в двух видах: краткий машинный статус и подробная диагностическая строка.

1. WriteNvi.Value — значение, введённое оператором.

2. WriteNvi.Execute — запуск операции записи.

3. WriteNvi.Status — краткий статус: BUSY, OK_VERIFIED, TIMEOUT и т. п..

4. WriteNvi.Result — подробности: selector, направление, сервис, адресная запись и исходные байты.

Simple-Scada сначала записывает новое значение в Value, затем устанавливает Execute. Скрипт MasterOPC фиксирует параметры, выполняет операцию один раз и сам сбрасывает Execute в ноль. Благодаря этому команда не повторяется на каждом цикле скрипта.

Как выглядит подтверждённая запись

После исправления процедуры записи журнал стал содержать не только общий результат, но и параметры, из которых был собран пакет:

WriteNvi.Execute = 0
WriteNvi.Status  = OK_VERIFIED
WriteNvi.Result  = Значение записано и подтверждено;
                   selector=0x3FFD dir=Input priority=0
                   auth=0 service=ACKD addr=15 turnaround=0
                   raw=3F FD 0F

Статус OK_VERIFIED означает, что конфигурация NVI прочитана, selector получен автоматически, пакет сформирован с нужными флагами, обмен подтверждён, а новое значение проверено повторным чтением.

Что получилось

Связка Lon → USB → TCP → MasterOPC → Simple-Scada позволила сохранить действующую полевую сеть и заменить только верхний уровень. В результате система циклически читает переменные 24 устройств, декодирует SNVT, передаёт значения и качество по OPC, строит архивы и тренды и записывает уставки в NVI с автоматическим получением selector и проверкой результата.

Главный практический вывод: для интеграции Lon недостаточно передать сырые байты в OPC. Надёжное решение должно знать адрес узла, индекс и тип переменной, учитывать её конфигурацию при записи и всегда отделять значение от качества связи.

Архитектура не привязана к конкретной мнемосхеме. После публикации тегов тот же нижний уровень можно использовать для вентиляции, холодоснабжения, тепловых пунктов и других инженерных систем, где продолжает работать оборудование Lon.

Материал основан на собственных наблюдениях при локальной интеграции законно эксплуатируемого оборудования. Названия Lon, LonWorks, MasterOPC и Simple-Scada используются только для идентификации описываемых технологий.

ссылка на оригинал статьи https://habr.com/ru/articles/1060978/