Программная реализация межсетевого шлюза сетей Ethernet и PlcNet

Автор: Кангин Владимир Венедиктович, Ложкин Леонид Дидимович, Ямолдинов Дмитрий Николаевич

Журнал: Инфокоммуникационные технологии @ikt-psuti

Рубрика: Технологии компьютерных систем и сетей

Статья в выпуске: 2 т.9, 2011 года.

Бесплатный доступ

Статья посвящена вопросам обмена информацией между контроллерным и диспетчерским уровнями компьютерной распределенной системы управления (КРСУ). Контроллерный уровень образован набором контроллеров ADAM-5510, объединенных промышленной сетью PlcNet с возможностью ее сегментирования. Диспетчерский уровень образован совокупностью удаленных персональных компьютеров (УПК), в роли которых могут выступать персональные компьютеры, рабочие станции, промышленные станции, объединенные локальной сетью Ethernet. Показано, что проблема обмена информацией может быть решена путем использования программы, называемой TCP/IP-сервером. TCP/IP-сервер располагается на выделенном УПК-шлюзе. Разработаны архитектура TCP/IP-сервера и структура хранения данных. Разработана система запросов (команд), которые генерирует клиент и на которые реагирует TCP/IP-сервер.

Еще

Локальная сеть ethernet, промышленная сеть plcnet, тег, сегмент сети, межсетевой шлюз

Короткий адрес: https://sciup.org/140191468

IDR: 140191468

Текст научной статьи Программная реализация межсетевого шлюза сетей Ethernet и PlcNet

Введение. Постановка задачи

В современных компьютерных распределенных системах управления (КРСУ) обмен информацией между компьютерной техникой верхнего (диспетчерского) уровня и нижнего (контроллерного) уровня должен осуществляться через специально выделенный компьютер, называемый шлюзом (рис. 1). Диспетчерский уровень КРСУ образуют персональные компьютеры, промышленные компьютеры, рабочие станции. Все они условно обозначаются как удаленные персональные компьютеры (УПК) и объединяются локальной сетью. Как правило, для объединения УПК используется сеть Ethernet с протоколом TCP/IP. УПК объединяются с помощью коаксиального кабеля, волоконно-оптического кабеля или витой пары через сетевые платы.

Контроллерный уровень КРСУ в общем случае представляет собой один либо несколько сегментов промышленной сети, которая объединяет контроллеры. Контроллеры представляют собой микро-ЭВМ, специализирующиеся на приеме информации с датчиков технологического оборудования, математической и логической обработке этой информации и выводе управляющих сигналов на исполнительные механизмы технологического оборудования.

Программирование современных контроллеров ведется с помощью специального программного обеспечения, например, CodeSys, MultiProg, UltraLogik и др. В памяти каждого контроллера имеется своя управляющая программа, которая, как правило, выполняется циклически. Однако, кроме непосредственного управления технологическим оборудованием или технологическими процессами, контроллеры обязательно имеют аппаратные и программные ресурсы на передачу в промышленную сеть и прием из сети информации. Эта информация, как правило, используется на диспетчерском уровне для визуализации процессов, протекающих в объекте управления. Кроме этого, на диспетчерском уровне выполняется архивирование и документирование этой информации.

Рис. 1. Структура диспетчерского и контроллерного уровней КРСУ

Для определенности в качестве контроллеров будем рассматривать весьма распространенные ADAM-5510 фирмы Advantech, объединенные промышленной сетью PlcNet. Каждый сегмент сети может включать в себя до 32-х контроллеров ADAM-5510. Всего же вся сеть может содержать до 256 контроллеров. Сегменты промышленной сети PlcNet подключаются к УПК - сетевому шлюзу через COM-порты.

Требуется разработать программное обеспечение (приложение Windows) для УПК - сетевого шлюза, позволяющее передавать информацию от любого контроллера, подключенного к любому сегменту промышленной сети (см. рис. 1), к любому УПК, подключенному к локальной сети Ethernet. Для определенности назовем это приложение TCP/IP-сервером.

Структура TCP/IP-сервера

Прежде всего необходимо выделить задачи, которые должен выполнять TCP/IP-сервер. Их три (рис. 2):

  • -    обслуживать действия пользователя, работающего с TCP/IP-сервером, – интерфейс пользователя;

  • -    обслуживать запросы УПК на получение информации из контроллеров – интерфейс сети Ethernet;

  • -    обслуживать OPC-сервер – интерфейс OPC-сервера.

Последняя задача требует пояснений. Непосредственно прием информации от контроллеров контроллерного уровня в УПК-шлюз осуществляется с помощью OPC-сервера – программы, которая занимается опросом сетевых переменных тегов. Если в качестве промышленной сети используется PlcNet, то в качестве OPC-сервера можно использовать Fastwel PlcNet OPC Server фирмы Fastwel [1]. В качестве информации, циркулирующей в сети PlcNet, может быть любая информация, которой владеют контроллеры:

  • -    входные переменные – сигналы, поступающие с датчиков технологического оборудования;

  • -    промежуточные переменные – результаты математической и логической обработки входных переменных, но не использующиеся в качестве выходных переменных;

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

В системе программирования UltraLogik, которая используется для контроллеров ADAM-5510, любую переменную легко отправить в промышленную сеть PlcNet.

Рис. 2. Структура TCP/IP-сервера

Достаточно присвоить ей статус «Сетевая» [2]. Статус «Сетевая» присваивается переменным, которые действительно необходимы на диспетчерском уровне, который программно реализуется в виде SCADA-системы [3].

В промышленной сети переменные, имеющие статус «Сетевая» (сетевые переменные), циркулируют в виде тегов. OPC-сервер УПК-шлюза их принимает и хранит. Этот процесс происходит циклически. Интерфейс OPC-сервера и организует «выемку» информации из OPC-сервера и запоминание ее в своих собственных структурах, например динамических массивах тегов.

Структура динамического массива тегов Items

TCP/IP-сервер связывается с OPC-сервером и перекачивает информацию о тегах в свой динамический массив тегов Items (см. рис. 3). В этом случае TCP/IP-сервер и OPC-сервер вступают в клиент-серверные отношения, причем в роли клиента выступает TCP/IP-сервер, а в роли сервера – OPC-сервер. Оба сервера расположены на УПК-сетевом шлюзе. Поскольку количество тегов, запрашиваемых SCADA-системами, расположенными на диспетчерском уровне, заранее неизвестно, то мы должны использовать динамический массив, наращивая его по мере необходимости. Массив тегов, по сути, представляет массив записей с полями, отражающими различные параметры тега. Таких параметров шесть (см. рис. 3):

  • -    имя тега ItemName: String;

  • -    хэндл тега ItemHandle: OPCHANDLE;

  • -    тип тега ItemType: TVarType;

  • -    значение тега ItemValue: String;

  • -    качество передачи тега по сети ItemQuality: Word;

  • -    номер сегмента, которому принадлежит тег Segments: String.

Структура динамического массива сегментов Sgmt

Структура КРСУ практически определяет и структуру ресурсов TCP/IP-сервера, используемых для хранения информации. Разбиение всей сети на сегменты (см. рис. 1), каждый из которых имеет свое имя, хэндл и интерфейс, приводит к необходимости использования динамического массива сегментов Sgmt. Его структура приведена на рис. 4. С помощью интерфейса сегмента происходит его информационное взаимодействие с OPC-сервером. Поскольку заранее неизвестно, с какими сег- ментами промышленной сети будут работать SCADA-системы, расположенные на УПК сети Ethernet, то этот массив должен быть динамическим, то есть расширяться по мере необходимости.

Items [n]

Items [1]

Items [0]

имя тега

11 mN ame: String хэндл тега

ItemHandle:OPC Handle тип тега

ItemType:TVarType значение тега

ItemvalueName:String качество связи тега

11 emQuality: Word

Номер сегмента, содержащего тег

Рис. 3. Структура динамического массива тегов Items

Элементом массива является запись, имеющая три поля:

  • -    интерфейс Segment: IOPCItemMgt;

  • -    хэндл SegmentHandle: OPCHANDLE;

  • -    имя сегмента Sgt: String.

интерфейс сегмента

Segment: lOPCItemMgt хэндл сегмента

SegmentHandle:OPCHandle имя сегмента

Sgt: string

Рис. 4. Структура динамического массива сегментов Sgmt

Интерфейс пользователя

В простейшем случае интерфейс пользователя должен позволять выполнение следующих действий (см. рис. 5):

  • -    задание имени OPC-сервера; в нашем случае это сервер Fastwel.PLCNetOPC;

  • -    запуск работы OPC-сервера – кнопка «ПУСК»;

  • -    останов работы OPC-сервера – кнопка «СТОП»;

  • -    останов работы приложения – кнопка «ВЫХОД»;

  • -    кнопка сворачивания окна приложения в трей – кнопка «СВЕРНУТЬ В ТРЕЙ» (см. рис. 6).

Рис. 5. Окно TCP/IP-сервера

Программная реализация интерфейса пользователя может быть представлена так, как это показано на рис. 7.

Она представлена следующими процедурами:

  • -    TMainForm.FormCreate – создание формы приложения и всех рабочих компонентов на ней; задание их свойств и определение событий, на которые они должны реагировать;

  • -    TMainForm.LabelClick – представляет собой реакцию приложения на щелчок мышью по одной из кнопок «ПУСК», «СТОП», «СВЕРНУТЬ В ТРЕЙ», «ВЫХОД»; использует для своей работы процедуру CreateTrayIcon, которая создает значок данного приложения и размещает его в трее;

JTCP/IP Server _

Рис. 6. Трей со значком TCP/IP-сервера

  • -    TMainForm.LabelMouseLeave – меняет цвет кнопки на голубой при выходе курсора мыши с ее поверхности;

  • -    TMainForm.LabelMouseEnter – меняет цвет кнопки на красный, когда курсор мыши входит в область кнопки;

  • -    TMainForm.FormClose – закрывает приложение и удаляет его значок в трее;

  • -    TMainForm.WMTRAYICONNOTIFY удаляет значок приложения из трея при двойном щелчке мышью по нему.

Процедуры TMainForm.FormClose и TMainForm. WMTRAYICONNOTIFY используют при своей работе процедуру DeleteTrayIcon (см. рис. 7).

Рис. 7. Программная реализация интерфейса пользователя

Интерфейс сети Ethernet

По сети Ethernet осуществляется взаимодействие TCP/IP-сервера с клиентами, расположенными на УПК. Клиенты посылают запросы TCP/IP-серверу, которые оформлены в виде информационных пакетов. При поступлении по сети Ethernet пакета запускается процедура TMainForm. IdTCPServer1.Execute (см. рис. 8).

Интерфейс сети Ethernet

Процедура

TMairiFonn.IdTCPServerl. Ex- -- ecute

----- Функция BooLToStr

Рис. 8.Программная реализация интерфейса сети

Ethernet

Она при своей работе использует функцию BoolToStr, предназначенную для преобразования переменных типа Boolean в строку. Процеду- ра TMainForm.IdTCPServer1.Execute выполняет следующие действия.

Если в тексте пакета содержится команда «Вернуть статус OPC-сервера», то в сеть отправляется строковая константа «false», если сервер выключен, и строковая константа «true», если сервер включен.

Если получена команда «Добавить сегмент», то из пакета читается его имя. Далее проверяется, имеется ли сегмент с таким именем в OPC-сервере. Если сегмент с таким именем в OPC-сервере имеется, то есть он активирован ранее каким-либо клиентом КРСУ, то обратно в сеть отправляется номер этого сегмента в массиве Sgmt. Если сегмента с таким именем нет, то выполняется операция по его активированию в OPC-сервере. Для этого разрешается работа таймера Timer2, и по первому его срабатыванию выполняется процедура TMainForm.Timer2 Timer, в которой и производится добавление (активирование) заданного сегмента в OPC-сервер. Затем процедура TMainForm.Timer2 Timer блокирует работу таймера Timer2. Необходимо отметить, что в случае добавления нового сегмента увеличивается на 1 длина динамического массива Sgmt. Добавленный в массив элемент становится текущим, и в его поле Sgt записывается имя нового сегмента. Операция по добавлению сегмента в OPC-сервер контролируется средствами Delphi и, в случае положительного исхода, в сеть отправляется номер последнего элемента массива Sgmt. Если операция по добавлению сегмента в OPC-сервер прошла неудачно (сегмент с таким именем реально отсутствует), то клиенту отправляется число –1.

Если в пакете получена команда «Добавить тег», то из пакета читается его имя и номер сегмента, в который тег должен быть добавлен. Если массив тегов Items пуст, то клиенту отправляется число –1. Если массив тегов Items содержит какие-то элементы, то среди них начинается поиск тега по его имени ItemName. Если тег с заданным именем имеется, т.е. активирован ранее каким-либо клиентом, то клиенту, выполняющему запрос, по сети передается номер этого тега в массиве Items. Если тега с заданным именем в массиве Items нет, то выполняются следующие действия:

  • -    на единицу увеличивается значение переменной, хранящей число активированных тегов в OPC-сервере;

  • -    на единицу увеличивается длина динамического массива Items;

  • -    запись имени тега и номера сегмента, в который он помещается, в массив Items;

  • -    присвоение тегу, записанному в массив Items, начального значения «0»;

  • -    новый тег становится текущим;

  • -    разрешается работа таймера Timer2;

  • -    ожидается окончание работы таймера; после однократного выполнения процедуры TMainForm.Timer2Timer в OPC-сервер добавляется тег с заданным именем в заданном сегменте;

  • -    если операция по добавлению заданного тега в заданный сегмент OPC-сервера прошла неудачно, то выполняется «откат», заключающийся в уменьшении на единицу числа активных тегов, длины динамического массива Items и отправление в адрес клиента по сети числа – 1;

  • -    если операция по добавлению нового тега в OPC-сервер прошла успешно, то в адрес клиента передается его номер в массиве Items.

Если в адрес TCP/IP-сервера по сети Ethernet пришла команда «Отправить значение тега», то выполняются следующие действия:

  • -    из пришедшего пакета читается номер этого тега в массиве Items;

  • -    в адрес клиента отправляется его значение ItemValue.

Интерфейс OPC-сервера

Рассматривая интерфейс сети Ethernet, нельзя не отметить, что принимаемые от клиента, расположенного на УПК, пакеты могут содержать одну из четырех команд: «Вернуть статус OPC-сервера», «Добавить сегмент», «Добавить тег», «Отправить значение тега». Все эти команды требуют обращения к OPC-серверу. Обслуживание этих команд – запросов представляет собой задачу, которою и должен решать интерфейс OPC-сервера.

Рис. 9. Программная реализация интерфейса OPC-сервера

Программная реализация интерфейса OPC-сервера приведена на рис. 9.

Интерфейс обслуживают процедуры TMainForm.Timer1Timer и TMainForm. Timer2Timer. Работа процедуры TMainForm. Timer2Timer была рассмотрена выше. Она активирует (добавляет) в OPC-сервере сегмент или тег с заданными именами при условии, конечно, что они реально существуют.

Процедура TMainForm.Timer1Timer выполняется регулярно. Ее задача заключается в сборе информации из сети PlcNet, то есть из OPC-сервера. По мере чтения значений из OPC-сервера происходит заполнение обновленными данными динамического массива тегов Items. Представленный TCP/IP-сервер успешно эксплуатируется в ряде проектов.

Выводы

  • 1.    Показано, что проблема передачи информации из сети PlcNet в сеть Ethernet может быть решена программным образом путем установки на одном из УПК-шлюзов TCP/IP-сервера. TCP/IP-сервер организует клиент-серверные отношения с OPC-сервером и со SCADA-системами, расположенными на УПК.

  • 2.    Показано, что TCP/IP-сервер должен состоять из трех программных компонентов-интерфейсов: пользователя, сети Ethernet, OPC-сервера. Разработана их программная архитектура.

  • 3.    Разработаны структуры хранения данных в TCP/IP-сервере. Это два динамических массива: массив сегментов Sgmt и массив тегов Items, причем они используются совместно интерфейсом сети Ethernet и интерфейсом OPC-сервера.

Список литературы Программная реализация межсетевого шлюза сетей Ethernet и PlcNet

  • Кангин В.В., Ложкин Л.Д., Ямолдинов Д.Н. Обмен информацией в промышленной сети PLCNet//ИКТ, Т.8, №3, 2010. -С.49-54.
  • Кангин В.В., Кангин М.В., Ямолдинов Д.Н. Программные аспекты проектирования SCADA-систем. Н. Новгород: Изд. НГТУ, 2007. -259 с.
  • Кангин В.В., Кангин М.В., Ямолдинов Д.Н. Проектирование SCADA-систем. Н. Новгород: Изд. НГТУ, 2010. -568 с.
Статья научная