Разработка модуля для контура управления tic-104

Федеральное агентство по образованию

Филиал государственного образовательного учреждения высшего профессионального образования

















КУРСОВОЙ ПРОЕКТ

по курсу

«Автоматизация технологических процессов и производств»

Разработка модуля для контура управления tic-104 при помощи модуля PI-SDK инструментальной среды PI-System и программной среды Visual Basic























Стерлитамак 2011


Содержание



Введение

1. Краткая характеристика PI System и контура управления tic-104

2. Анализ и планирование требований к модулю “tic-104”

3. Проектирование модуля “tic-104”

4. Построение модуля “tic-104”

5. Внедрение модуля в приложение PI ProcessBook

Заключение




Введение



Актуальность проекта. Современный нефтеперерабатывающий завод представляет собой все более и более сложную систему, а значит, для обеспечения безопасного и эффективного производства необходимо учитывать и контролировать все возрастающее число различных технологических параметров. Кроме того, важно проводить планирование и прогнозирование дальнейшей деятельности как отдельной установки, так и нефтеперерабатывающий завод (НПЗ) в целом. Для решения всех этих задач применяются различные системы управления и контроля. Для ОАО «Салаватнефтеоргсинтез» выбрана система PI, которая позволяет проводить мониторинг производственного процесса в режиме реального времени как операторам установок, так и специалистам, находящимся в головном офисе Общества. Наличие открытой информации о работе как отдельной установки, так и всего НПЗ позволяет обеспечивать управление предприятием на всех уровнях: сотрудники НПЗ осуществляют контроль технологических дисциплин и режимов, а также проводят экспресс-анализ технологической ситуации; на уровне Общества отслеживается фактическое наличие и отгрузка продукции, ее качество, а также своевременно обнаруживаются возможные проблемы. Кроме того, система PI позволяет составлять ежедневный баланс производства, а также проводить план-факт анализ, оценку направления потерь и мобильную корректировку. Среди других целей ее внедрения можно отметить необходимость актуализации линейных моделей, повышение уровня безопасности производства, улучшение возможностей по анализу инцидентов, а также определение качественных показателей выходной продукции. Все вышеперечисленные факты доказывают актуальность рассматриваемой программной среды. 

PI-System является системой MES уровня. Являясь гибким инструментом для создания информационной системы производства, PI System позволяет при помощи интерфейсов получать данные от:

• распределенных систем управления (DCS);

• систем операторского контроля, сбора данных и управления (SCADA);

• непосредственно от контроллеров (PLC); 

• лабораторных систем (LIMS);

• устройств ручного ввода.

Цель проекта. Разработка модуля для контура управления tic-104 при помощи модуля PI-SDK инструментальной среды PI-System и программной среды Visual Basic.

Для достижения указанной цели в проекте поставлены и решены следующие задачи:

Проследить полный путь, который проходит информация.

Изучить модуль PI-SDK.

Создать модуль для контура управления tic-104 при помощи PI-SDK и Visual Basic для решения проблемы быстродействия системы.

Новизна и практическая ценность. Целью создания Модульной базы данных является упрощение доступа к данным временных рядов PI. Быстрота действия системы является в настоящее время одним из первоочередных критериев, по которым оценивается качество, востребованность и удобство системы. Также безусловная практическая ценность заключается в масштабируемости и надежности баз данных.

Внедрение проекта. Постоянно производятся усовершенствования и обновления оборудования, устраняются неисправности. Когда эти изменения приводят к изменениям в базах данных PI, существующие приложения могут перестать работать корректно. При замене контура управления могут потребоваться новый интерфейс и новый набор точек. Чтобы упростить внедрение изменений, модули должны уметь запоминать все сделанные ранее изменения.




Краткая характеристика PI System и контура управления tic-104



В данном проекте рассматривается самонастраивающийся терморегулятор (TIC), конфигурируемый для регулирования температуры в резервуаре.

По своей сути, это ПИД-регулятор. Как известно, ПИД-регулятор — это звено в контуре управления с обратной связью, используемое для поддержания заданного значения измеряемого параметра. ПИД-регулятор измеряет отклонение стабилизируемой величины от заданного значения (так называемой уставки) и генерирует управляющий сигнал, являющийся суммой трёх слагаемых, первое из которых пропорционально этому отклонению, второе пропорционально интегралу отклонения и третье пропорционально производной отклонения. На любом производстве используется множество ПИД-регуляторов. 

Множество простых методик настройки пропорционально-интегрально – дифференциальных (ПИД) контуров были автоматизированы и встроены в коммерческие регуляторы. Функции «самонастройки» по запросу повторяют операции, выполняемые квалифицированным инженером для настройки контура регулирования во время запуска системы. К тому же регуляторы с самонастройкой «на лету» могут продолжать обновлять константы настройки контуров уже после запуска системы в эксплуатацию. 

Хотя оба подхода нашли признание среди специалистов по АСУ ТП, самонастройка «по запросу» пользуется большей популярностью. С 80-х и начала 90-х годов, когда были проведены основные исследования, самонастройка стала ведущим направлением. 

Разработка осуществляется при помощи модуля PI-SDK программы PI-System. OSI Software, Inc. разрабатывает и поставляет Plant Information System, сокращенно PI System – семейство клиент/серверных и Web программных продуктов. PI System является инфраструктурой реального времени и используется в качестве одного из основных компонентов корпоративной информационной системы для интеграции и согласования данных, интеграции приложений и разнородных “островов” автоматизации (DCS, PLC, SCADA и т.д.). PI System дает возможность эффективно хранить, быстро обновлять и отображать, совместно использовать и анализировать как текущие, так и архивные данные.

Говоря в целом, PI System- это:

Это инструмент построения информационной системы производства реального времени для промышленных предприятий. PI System наилучшим образом обеспечивает сбор, хранение и представление в едином формате данных от различных SCADA-систем, DCS, ПЛК, устройств ручного ввода, заводских лабораторий и т. п. 

PI System предоставляет информацию о технологических процессах в реальном масштабе времени на уровень управления производством и бизнес-систем для специалистов среднего и верхнего звена предприятия.

PI System служит инструментом для анализа и оптимизации производственных процессов.

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

PI System внедрили такие крупные мировые компании, как Total, Shell, British Petroleum, Saudi Aramco, ExxonMobil, ChevronTexaco. PI System также внедрена во многих компаниях в СНГ и Странах Балтии .

Продукт PI-SDK является, по своей сути, иерархической объектной моделью, основанной на ActiveX-технологии фирмы Microsoft. 

PI-SDK (PI Software Development Kit) – пакет средств разработки программного обеспечения PI который представляет собой инструмент создания программ доступа к PI-серверам. Он состоит из встроенного ActiveX-сервера, элемента управления ActiveX и библиотек поддерживающих программ. Предшественником PI-SDK являлся так называемый интерфейс прикладного программирования PI-API (PI Application Programming Interface). 

PISDK не существует в виде отдельного процесса вне приложения. Вместо этого, он становится частью самого процесса, реализуемого в приложении.

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

В общем случае приложение получает доступ к объекту верхнего уровня иерархии либо при помощи создания нового объекта (C++), или по умолчанию (Visual Basic). Через этот объект верхнего уровня приложение получает доступ к другим объектам и коллекциям, которые, в свою очередь, открывают доступ к следующим объектам и коллекциям.

В корне этой схемы лежит объект PI-SDK. Этот объект обладает свойством, называемым Servers (Серверы), которое возвращает ссылку на коллекцию Servers. Коллекция Servers может возвращать ссылки на любой доступный в системе сервер-объект. Каждый объект Server может вернуть ссылки на целый ряд объектов, включая его коллекцию PIPoints (PI-точки), PI BatchDB (База данных производственных циклов) и PI ModuleDB (модульная база данных). Коллекция PIPoints может возвратить ссылки на различные объекты PIPoint, а те в свою очередь – на другие объекты, относящиеся к данному PIPoint. Коллекция PointAttributes (Атрибуты точки) объекта PIPoint обеспечивает доступ ко всей информации об этой точке, имеющейся в базе данных. Затененный объект Data обеспечивает доступ к архивной и текущей динамической информации для данного PIPoint. В текущей версии имеется только ограниченный доступ к данным. 

Пакет PI-SDK может быть использован в целом ряде сред программирования и во множестве прикладных областей. Первоначально он предназначался для обеспечения внутреннего интерфейса между PI-сервером и конечными пользовательскими приложениями. 

В зависимости от архитектуры приложения, PI-SDK можно вызвать из самого приложения, из некоторых объектов или приложений среднего уровня или через другие приложения, такие как Web-серверы. 

Так как PI-SDK может взаимодействовать с любыми программными оболочками, то для разработки модуля был выбран Visual Basic. 



2. Анализ и планирование требований к модулю “tic-104”



Для возможности использования разрабатываемого модуля необходимо следующее установленное программное обеспечение: Visual Basic и PI-System. Самонастраивающийся модуль tic-104, конфигурируемый для регулирования температуры в резервуаре, выполняет функции ПИД-регулятора, как было указано выше. 

Функции «самонастройки» по запросу повторяют операции, выполняемые квалифицированным инженером для настройки контура регулирования во время запуска системы. К тому же регуляторы с самонастройкой «на лету» могут продолжать обновлять константы настройки контуров уже после запуска системы в эксплуатацию. 

В связи с вышесказанным, можно выделить следующие функции разрабатываемого модуля:

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

Удобный интерфейс для настройки параметров: для настройки параметров всех модулей используется единый набор инструментальных средств с общим интерфейсом.

Человеко-машинный интерфейс. Функции обслуживания человеко-машинного интерфейса встроены в операционную систему контроллера. Эти функции позволяют существенно упростить программирование. Система или устройство человеко-машинного интерфейса запрашивает необходимые данные у контроллера, контроллер передает запрашиваемые данные с заданной периодичностью. Все операции по обмену данными выполняются автоматически под управлением операционной системы контроллера с использованием одинаковых символьных имен и общей базы данных.

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

Парольная защита: обеспечивает эффективную защиту программы от несанкционированного доступа, попыток копирования и модификации программы.

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



3. Проектирование модуля “tic-104” 



Целью создания Модульной базы данных (PI Module Database) является упрощение доступа к данным временных рядов PI. Типичной задачей при работе с архивом PI является нахождение связанных между собой точек, которые нужно использовать в приложении. Например, контуры управления с ПИД-регулятором включают в себя несколько точек PI. Для каждого атрибута контура требуется определенная точка из архива. 

Для контура “tic-104” требуется 7 точек PI: переменная процесса, уставка (set point), выход, коэффициент пропорциональности (proportional constant), константа интегрирования (integral constant), производная (derivative), и режим. Как видно, данный контур очень удобно представить в виде модуля. Создадим этот модуль при помощи Visual Basic.



4. Построение модуля “tic-104”

модуль контур база процесс

Модульная база данных. Главной входной точкой в PI-SDK и базы данных PI является объект PI-SDK Server. Для начала, мы создадим экземпляр Server и откроем сеанс связи с сервером с достаточными правами для изменения модульной базы данных.

Каждый Server имеет свойство PIModuleDB. Модули в PIModuleDB хранятся в коллекции PIModuleDB.PIModules. Эта коллекция существует в PI Server в виде базы данных, аналогичной Базе данных точек (PI Point Database). Коллекция PIModules является иерархичной структурой, представляющей модули; она аналогична структуре каталогов файловой системы. Добавим этот модуль не в корневую коллекцию, создадим модуль, который будет действовать в качестве “папки”, содержащей tic-104, после чего мы создадим модуль для tic-104. Вот соответствующий код на VB: 

Option Explicit

Dim Srv As Server

Dim Controllers As PIModule

Dim Tic104 As PIModule

Private Sub CreateTic104()

Set Srv = PISDK.Servers.DefaultServer

Srv.Open (“uid=piadmin”)

Set Controllers = Srv.PIModuleDB.PIModules.Add(“Controllers”)

Set Tic104 = Controllers.PIModules.Add(“tic-104”)

End Sub

На нашем сервере по умолчанию мы создали, на уровне корня, модуль под названием “Controllers.” Затем, в коллекции модулей этого контроллера мы создали модуль “tic-104.” 

Доступ к данным временных рядов PI (PIAliases). Цель состоит в том, чтобы "добраться" до данных. Для этого нам требуются ссылки на семь точек PI, которые составляют этот контроллер (рисунок 4.2). Каждый модуль имеет коллекцию, которая называется PIAliases. Эта коллекция состоит из объектов, каждый из которых имеет тип PIAlias. PIAlias обеспечивает ссылку на точку PI Point через удобное для употребления имя или псевдоним (alias). PI-SDK представляет точку PI через объект PIPoint. Вот код, который это выполняет:

Private Sub CreateTheAliases()

Dim pts(7) As PIPoint

Set Srv = PISDK.Servers.DefaultServer

Srv.Open (“uid=piadmin”)

Set Controllers = Srv.PIModuleDB.PIModules.Item(“Controllers”)

Set Tic104 = Controllers.PIModules.Item(“tic-104”)

‘Создаем ссылки на точки PI 

Set pts(1) = Srv.PIPoints.Item(“tic-104.pv”)

Set pts(2) = Srv.PIPoints.Item(“tic-104.sp”)

Set pts(3) = Srv.PIPoints.Item(“tic-104.o”)

Set pts(4) = Srv.PIPoints.Item(“tic-104.i”)

Set pts(5) = Srv.PIPoints.Item(“tic-104.p”)

Set pts(6) = Srv.PIPoints.Item(“tic-104.d”)

Set pts(7) = Srv.PIPoints.Item(“tic-104.m”)

‘Создаем псевдонимы в нашем модуле контроллера

Tic104.PIAliases.Add “ProcessVariable”, pts(1)

Tic104.PIAliases.Add “SetPoint”, pts(2)

Tic104.PIAliases.Add “Output”, pts(3)

Tic104.PIAliases.Add “Integral”, pts(4)

Tic104.PIAliases.Add “Proportion”, pts(5)

Tic104.PIAliases.Add “Derivative”, pts(6)

Tic104.PIAliases.Add “Mode”, pts(7)

End Sub

Теперь в нашем распоряжении имеется модуль, представляющий контур управления tic-104. Добавим этот модуль к модулю Controllers в целях улучшения организации модулей. Соответствующие точки PI связаны с модулем при помощи коллекции псевдонимов. Обычно, имеются и другие данные, которые требуется связать с контроллерами - например, номер модели производителя, ссылка на базу данных с технической информацией (maintenance database), а также информация по тонкой настройке (tuning). С этой целью, у каждого PIModule имеется коллекция PIProperties. Коллекция PIProperties может использоваться для хранения любых пользовательских данных или данных приложения вместе с модулем.

Свойства модуля (PI Properties). Коллекция PIProperties является иерархической коллекцией данных, связанных с модулями. Эта коллекция является местом, где хранятся данные о модуле. Коллекция PIProperties является коллекцией объектов типа PIProperty. Объект PIProperty имеет свойства Name (имя), Value (значение), а также свою собственную коллекцию PIProperties. В качестве Value можно использовать практически любую переменную типа VARIANT-- строки, числа, даты, хранимые процедуры, и даже двоичные объекты, например, изображения. Коллекции данных могут быть связаны с каждым объектом типа PIProperty при помощи коллекции PIProperties.

Итак, добавим к контроллеру дополнительные данные. Мы собираемся добавить информацию о производителе и некоторую информацию по настройке. Что касается производителя, мы добавим имя компании, адрес, номер модели и серийный номер. В качестве информации по настройке, мы укажем дату выполнения настройки, имя технолога и некоторые комментарии. Эти данные можно добавить непосредственно в коллекцию PIProperty модуля. Но поскольку PIProperties поддерживает создание иерархии, мы можем добавить эти данные более удачным с организационной точки зрения образом, для чего мы создадим две записи типа PIProperty -- одну для данных о производителе, другую - для данных о настройке. Затем мы добавим данные в соответствующие коллекции свойств. Вот код на Visual Basic, который выполняет описанные действия:

Private Sub CreateTheProperties()

Dim MfgData As PIProperty

Dim InstallationData As PIProperty

Dim Prop As PIProperty

Set Srv = PISDK.Servers.DefaultServer

Srv.Open (“uid=piadmin”)

Set Controllers = Srv.PIModuleDB.PIModules.Item(“Controllers”)

Set Tic104 = Controllers.PIModules.Item(“tic-104”)

Set MfgData = Tic104.PIProperties.Add(“Manufacturer Data”)

Set InstallationData = Tic104.PIProperties.Add(“Installation Data”)

Set Prop = MfgData.PIProperties.Add(“Name”, “Acme Controller, Inc.”)

Set Prop = MfgData.PIProperties.Add(“Model”, “ABC-4331”)

Set Prop = MfgData.PIProperties.Add(“Serial Number”, “102938475”)

Set Prop = InstallationData.PIProperties.Add(“Technician”, “John Doe”)

Set Prop = InstallationData.PIProperties.Add(“Comments”, “No problem.”)

End Sub

Интеграция с приложением. Теперь у нас имеется модуль, представляющий контроллер tic-104; мы можем легко обратиться к соответствующим временным рядам и метаданным. Но такая структура не имела бы особого практического значения, если к ней не могло бы обращаться приложение. Имеется много различных путей использования этих данных; например, они могут потребоваться приложению, которое предназначено для оценки состояния и технического обслуживания контроллера. Будущие версии PI ProcessBook будут поддерживать работу с Модульной базой данных PI; однако, уже сейчас мы можем работать с Module Data Base (MDB) в PI ProcessBook при помощи Visual Basic Application (VBA). Мы начнем с рассмотрения исходного экрана ProcessBook для tic-104 и усовершенствуем его таким образом, чтобы он мог выполнять загрузку из модуля.

Прежде всего, мы отобразим данные о производителе и об установке в экране PI ProcessBook. PI ProcessBook является OLE-контейнером, поэтому мы можем добавить два элемента управления ListView к этому экрану, и загрузить свойства (рисунок 4.4). Вот VBA-код, который поставляет данные в два элемента управления ListView и в экран PI ProcessBook:

Option Explicit

Dim Srv As Server

Dim Controllers As PIModule

Dim Controller As PIModule

Private Sub Display_Open()

Set Srv = PISDK.Servers.DefaultServer

Srv.Open “uid=piadmin”

Set Controllers = Srv.PIModuleDB.PIModules.Item(“controllers”)

Set Controller = Controllers.PIModules.Item(“tic-104”)

LoadMfgData

LoadInstallationData

End Sub

Private Sub LoadMfgData()

Dim MfgData As PIProperty

Dim Prop As PIProperty

Dim strEntry As String

Dim mItem As ListItem

Dim iIndex As Integer

lvwMfgData.ListItems.Clear

lvwMfgData.ColumnHeaders.Clear

lvwMfgData.ColumnHeaders.Add , , “Property”, lvwMfgData.Width * 3 / 16

lvwMfgData.ColumnHeaders.Add , , “Value”, lvwMfgData.Width * 12 / 16

lvwMfgData.View = lvwReport

Set MfgData = Controller.PIProperties.Item(“Manufacturer Data”)

iIndex = 1

For Each Prop In MfgData.PIProperties

strEntry = Prop.Name & “: “ & Prop.Value

Set mItem = lvwMfgData.ListItems.Add(iIndex, Prop.Name, Prop.Name)

iIndex = iIndex + 1

mItem.SubItems(1) = Prop.Value

Next Prop

End Sub

Private Sub LoadInstallationData()

Dim InstallationData As PIProperty

Dim Prop As PIProperty

Dim strEntry As String

Dim mItem As ListItem

Dim iIndex As Integer

lvwInstallationData.ListItems.Clear

lvwInstallationData.ColumnHeaders.Clear

lvwInstallationData.ColumnHeaders.Add , , “Property”, lvwInstallationData.Width * 3 / 16

lvwInstallationData.ColumnHeaders.Add , , “Value”, lvwInstallationData.Width * 12 / 16

lvwInstallationData.View = lvwReport

SetInstallationData = Controller.PIProperties.Item(“Installation Data”)

iIndex = 1

For Each Prop In InstallationData.PIProperties

strEntry = Prop.Name & “: “ & Prop.Value

Set mItem = lvwInstallationData.ListItems.Add(iIndex, Prop.Name, Prop.Name)

iIndex = iIndex + 1

mItem.SubItems(1) = Prop.Value

Next Prop

End Sub

Усовершенствуем наш модуль. Добавим тип контроллера к данным производителя, при этом новая информация отобразится при следующей загрузке экрана; никаких изменений в клиентском приложении при этом не потребуется.

Данный экран PI ProcessBook отображает стандартным образом работу контура управления, а также отображает имя производителя и информацию об установке. Для того, чтобы повторно использовать этот экран, нужно прежде всего добавить VBA-код, заменяющий использованные при конфигурировании экрана PI-точки, на операторы связи с Модульной базой данных. Для нужно задать свойства TagName или Trace объектов экрана. PI ProcessBook автоматически присваивает имена этим объектам. В режиме создания PI ProcessBook позволяет по правому щелчку мыши вывести свойства каждого объекта. Отображается имя объекта; можно также переименовать объект. Следующие VBA-функции извлекают соответствующие псевдонимы (alias) из модуля контроллера и и затем используют свойство datasource (источник данных) псевдонима для присвоения точке PI:

Private Sub LoadAliasesIntoTrend()

Dim Alias As PIAlias

Dim Pt As PIPoint

‘ Убрать существующие точки

While Trend.TraceCount <> 0

Trend.RemoveTrace 1

Wend

Set Alias = Controller.PIAliases.Item(“Output”)

Set Pt = Alias.DataSource

Trend.AddTrace Pt.Name

Set Alias = Controller.PIAliases.Item(“ProcessVariable”)

Set Pt = Alias.DataSource

Trend.AddTrace Pt.Name

Set Alias = Controller.PIAliases.Item(“Setpoint”)

Set Pt = Alias.DataSource

Trend.AddTrace Pt.Name

Trend.GetFormat().ShowTagName = True

End Sub

Private Sub LoadAliasesIntoBarChart()

Dim Alias As PIAlias

Dim Pt As PIPoint

Set Alias = Controller.PIAliases.Item(“ProcessVariable”)

Set Pt = Alias.DataSource

Bar.SetTagName (Pt.Name)

Set Alias = Controller.PIAliases.Item(“SetPoint”)

Set Pt = Alias.DataSource

Bar1.SetTagName (Pt.Name)

Set Alias = Controller.PIAliases.Item(“Output”)

Set Pt = Alias.DataSource

Bar4.SetTagName (Pt.Name)

End Sub

Private Sub LoadAliasesIntoValues()

Dim Alias As PIAlias

Dim Pt As PIPoint

Set Alias = Controller.PIAliases.Item(“Proportion”)

Set Pt = Alias.DataSource

Value.SetTagName (Pt.Name)

Set Alias = Controller.PIAliases.Item(“Integral”)

Set Pt = Alias.DataSource

Value2.SetTagName (Pt.Name)

Set Alias = Controller.PIAliases.Item(“Derivative”)

Set Pt = Alias.DataSource

Value3.SetTagName (Pt.Name)

Set Alias = Controller.PIAliases.Item(“Mode”)

Set Pt = Alias.DataSource

Value9.SetTagName (Pt.Name)

End Sub

Предположим, что нам потребовались дополнительные контроллеры (на работающих предприятиях обычно очень много контроллеров). Мы воспользуемся дополнительными точками-имитаторами и создадим еще 9 модулей контроллеров. Приведенный код легко соответствующим образом модифицировать, либо можно воспользоваться инструментом конфигурирования. После того, как контроллеры созданы, мы добавим элемент управления "pick list" (список выбора) к экрану PI ProcessBook. При загрузке экрана мы будем добавлять ссылки на все контроллеры.

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

Масштабируемость (PIHeadingSets). Модульная база данных PI обеспечивает механизм для присвоения имен категориям и задания рекомендуемого уровня в иерархии. Каждой категории можно присвоить PIHeading (заголовок). Объекты типа PIHeading группируются в объект PIHeadingSet. Поскольку не существует ограничений на схемы иерархий, то нет и ограничений на количество объектов  PIHeadingSet, которые можно сконфигурировать. Мы реализуем указанные группировки путем создания набора заголовков (heading set) и добавления 6 заголовков. Эти заголовки используются идентификации или присвоения меток модулям в данной схеме. Представим набор заголовков в виде таблицы:

Вот VB-код, который конфигурирует набор заголовков для данной схемы:

Private Sub cmdCreateHeadingSet_Click()

Dim Srv As Server

Dim HeadingSet As PIHeadingSet

Dim Heading As PIHeading

Set Srv = Servers.DefaultServer

Srv.Open

Set HeadingSet = Srv.PIModuleDB.PIHeadingSets.Add(“S-88 Equipment”, “S 88 equipment for example”)

Set Heading = HeadingSet.PIHeadings.Add(“Enterprise”, “S-88 Equipment definition”, 1)

Set Heading = HeadingSet.PIHeadings.Add(“Site”, “S-88 Equipment definition”, 2)

Set Heading = HeadingSet.PIHeadings.Add(“Area”, “S-88 Equipment definition”, 3)

Set Heading = HeadingSet.PIHeadings.Add(“Line”, “S-88 Equipment definition”, 4)

Set Heading = HeadingSet.PIHeadings.Add(“Unit”, “S-88 Equipment definition”, 5)

Set Heading = HeadingSet.PIHeadings.Add(“Controller”, “S-88 Equipment definition”, 6)

End Sub

Объект PIHeading имеет три свойства: name (имя), description (описание) и level (уровень). Имя обязательно должно быть уникальным внутри набора заголовков. Уровень указывает желаемую позицию в иерархии; причем чем меньше это число, тем выше объект находится в иерархии. Свойство level (уровень), однако, не задает жестко иерархию.

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

Далее приведен блок VB-кода, где мы создаем модули более высокого уровня, а затем добавляем контроллеры в модуль. Метод insert (вставить) позволяет сделать ссылку на существующий контроллер в коллекции PIModules другого модуля.

Dim Enterprise As PIModule

Dim Site As PIModule

Dim Area As PIModule

Dim Line As PIModule

Dim Unit As PIModule

Dim Controllers As PIModule

Dim Controller As PIModule

Set Srv = PISDK.Servers.DefaultServer

Srv.Open (“uid=piadmin”)

On Error Resume Next

Set Controllers = Srv.PIModuleDB.PIModules.Item(“Controllers”)

Set Enterprise = Srv.PIModuleDB.PIModules.Add(“Demo Enterprises”)

Set Site = Enterprise.PIModules.Add(“Cleveland”)

Set Area = Site.PIModules.Add(“Area C-1”)

Set Line = Area.PIModules.Add(“Line 4”)

Set Unit = Line.PIModules.Add(“R-401”)

Set Controller = Controllers.PIModules.Item(“tic-104”)

Unit.PIModules.Insert Controller

Set Controller = Controllers.PIModules.Item(“tic-105”)

Unit.PIModules.Insert Controller



5. Внедрение модуля в приложение PI ProcessBook 



Теперь, когда у нас имеется иерархическое представление оборудования, необходимо запрограммировать экран PI ProcessBook таким образом, чтобы он мог воспользоваться этой иерархией. Мы применим два подхода: 1) каскад из элементов управления типа "combo box"(комбинированный список выбора) 2) элемент управления Tree View (просмотр в виде дерева). В первом подходе мы используем combo box для сайта (site), зоны (area), линии (line), модуля (unit), и наконец, контроллеров. Изменение выбранных элементов в верхнем окне приведет обновлению нижних окон - в них появятся соответствующие модули.

Вот код VBA, который загружает элементы "combo box"; он вызывается при открытии экрана:

Private Sub LoadAllComboBoxes()

Dim i As Integer

For Each Site In Enterprise.PIModules

cboSites.AddItem Site.Name

Next Site

Set Site = Enterprise.PIModules.Item(1)

For Each Area In Site.PIModules

cboAreas.AddItem Area.Name

Next Area

Set Area = Site.PIModules.Item(1)

For Each Line In Area.PIModules

cboLines.AddItem Line.Name

Next Line

Set Line = Area.PIModules.Item(1)

For Each Unit In Line.PIModules

cboUnits.AddItem Unit.Name

Next Unit

Set Unit = Line.PIModules.Item(1)

For Each Controller In Unit.PIModules

cboControllers.AddItem Controller.Name

Next Controller

Set Controller = Unit.PIModules.Item(1)

cboSites.ListIndex = 0

cboAreas.ListIndex = 0

cboLines.ListIndex = 0

cboUnits.ListIndex = 0

cboControllers.ListIndex = 0

End Sub

Для каждого combo box имеется обработчик события выбора (select). Окна "combo box", находящиеся выше в иерархии, вызывают событие “select” у ближайшего снизу окна в иерархии. Это автоматически приводит к генерации последовательности событий выбора, что заставляет обновиться все окна, а вслед за ними, и экраны. Вот соответствующий код:

Private Sub cboControllers_Click()

Dim Reload As Boolean

Reload = False

If Controller Is Nothing Then

Reload = True

ElseIf cboControllers.Text <> Controller.Name Then

Reload = True

End If

If Reload Then

‘Set Controller = Controllers.PIModules.Item(cboControllers.Text)

Set Controller = Unit.PIModules.Item(cboControllers.Text)

LoadMfgData

LoadInstallationData

LoadAliasesIntoDisplay

End If

End Sub

Private Sub cboUnits_Click()

Dim Reload As Boolean

Reload = False

If Unit Is Nothing Then

Reload = True

ElseIf cboUnits.Text <> Unit.Name Then

Reload = True

End If

If Reload Then

Set Unit = Line.PIModules.Item(cboUnits.Text)

cboControllers.Clear

For Each Controller In Unit.PIModules

cboControllers.AddItem Controller.Name

Next Controller

If cboControllers.ListCount > 0 Then

cboControllers.ListIndex = 0

End If

End If

End Sub

Private Sub cboLines_Click()

Dim Reload As Boolean

Reload = False

If Line Is Nothing Then

Reload = True

ElseIf cboLines.Text <> Line.Name Then

Reload = True

End If

If Reload Then

Set Line = Area.PIModules.Item(cboLines.Text)

cboUnits.Clear

For Each Unit In Line.PIModules

cboUnits.AddItem Unit.Name

Next Unit

If cboUnits.ListCount > 0 Then

cboUnits.ListIndex = 0

Else

cboControllers.Clear

End If

End If

End Sub

Private Sub cboAreas_Click()

Dim Reload As Boolean

Reload = False

If Area Is Nothing Then

Reload = True

ElseIf Area.Name <> cboAreas.Text Then

Reload = True

End If

If Reload Then

Set Area = Site.PIModules.Item(cboAreas.Text)

cboLines.Clear

For Each Line In Area.PIModules

cboLines.AddItem Line.Name

Next Line

If cboLines.ListCount > 0 Then

cboLines.ListIndex = 0

Else

cboUnits.Clear

cboControllers.Clear

End If

End If

End Sub

Private Sub cboSites_Click()

If cboSites.Text <> Site.Name Then

Set Site = Enterprise.PIModules.Item(cboSites.Text)

cboAreas.Clear

For Each Area In Site.PIModules

cboAreas.AddItem Area.Name

Next Area

If cboAreas.ListCount > 0 Then

cboAreas.ListIndex = 0

Else

cboLines.Clear

cboUnits.Clear

cboControllers.Clear

End If

End If

End Sub

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

Первый шаг состоит в том, чтобы при загрузке экрана загрузить модули в элемент управления – дерево. В данном примере будет загружена вся структура. В усовершенствованном варианте можно было бы загружать нижние узлы дерева в тот момент, когда они выбираются. Иерархические структуры данных можно загружать при помощи рекурсивного кода (re-entrant code) – то есть функций, которые вызывают сами себя. Вот код, который загружает модули в элемент управления "tree view":

Private Sub LoadTreeView()

Dim EnterpriseNode As Node

Dim i As Long

tvwEnterprise.nodes.Clear

tvwEnterprise.Sorted = False

Set EnterpriseNode = tvwEnterprise.nodes.Add(, , “Enterprise”, “Enterprise”)

LoadTreeViewNodes Enterprise.PIModules, EnterpriseNode, i

EnterpriseNode.Expanded = True

End Sub

Private Sub LoadTreeViewNodes(Modules As PIModules, ParentNode As Node, i As Long)

Dim Module As PIModule

Dim SubNode As Node

Dim strKey As String

‘ свойство “Key” узла должно быть уникальным. Поскольку модули могут одновременно присутствовать в нескольких разных местах,

‘ нельзя полагаться на уникальный идентификатор модуля. По этой причине мы добавим целое число к уникальному ID

For Each Module In Modules

i = i + 1

strKey = Module.UniqueID & “-“ & i

Set SubNode = tvwEnterprise.nodes.Add(ParentNode, tvwChild, strKey, Module.Name)

LoadTreeViewNodes Module.PIModules, SubNode, i ‘ рекурсивный вызов методов является наилучшим способом обработки иерархий

Next Module

End Sub

Большую часть работы выполняет код, обрабатывающий выбор узла. Этот код должен найти модуль, связанный с данным узлом, и затем обновить экран, если это контроллер. 

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

Вот код, который это выполняет:

Private Sub tvwEnterprise_NodeClick(ByVal Node As MSComctlLib.Node)

Dim Module As PIModule

Dim i As Long

Dim ParentNodes(20) As Node

i = 1

Set ParentNodes(i) = Node.Parent

On Error GoTo Done

While True

i = i + 1

‘ следующая строка приведет к ошибке после нахождения последнего родителя, после чего произойдет переход к метке “Done” 

Set ParentNodes(i) = ParentNodes(i - 1).Parent

Wend

Done:

i = i - 3 ‘ спускаемся вниз от enterprise

Set Module = Enterprise

While i >= 1

‘ Используем массив узлов, чтобы пройти вниз по иерархии

Set Module = Module.PIModules.Item(ParentNodes(i).Text)

i = i - 1

Wend

Set Module = Module.PIModules.Item(Node.Text)

If Module.PIHeading.Name = “Controller” Then

Set Controller = Module

LoadMfgData

LoadInstallationData

LoadAliasesIntoDisplay

End If

End Sub




Заключение



Разработанный в данном курсовом проекте модуль для контура управления “tic-104” позволяет быстро и безопасно устранить расхождение между технологическим параметром и ставкой, однако установление в контроллере необходимого баланса между скоростью выхода на задание и мягкостью работы требует определенного умения и опыта. Функции «самонастройки» по запросу повторяют операции, выполняемые квалифицированным инженером для настройки контура регулирования во время запуска системы. К тому же регуляторы с самонастройкой «на лету» могут продолжать обновлять константы настройки контуров уже после запуска системы в эксплуатацию. 

Модуль “tic-104” разработан с помощью Visual Basic для контура управления температурой в резервуаре. В модуле учтены масштабируемость и иерархичность. Это означает, что для остальных контроллеров, участвующих в процессе, не нужно разрабатывать аналогичные модули, достаточно ввести их параметры в существующий модуль. Этот факт подчеркивает практическую ценность разработки.

Данный модуль используется в составе системы PI System. Эта система широко применяется в крупных мировых компаниях, таких как Лукойл, Газпром, Юкос, Сибур и многие другие. PI System разработан фирмой OSI Software GmbH (Германия), в России с 2000 года.

Наконец, говоря о финансовом вопросе, достаточно привести несколько цифр. Стоимость внедрения проекта PI в среднем составляет $ 100000 – 500 000. А экономия складывается из совокупности различных факторов. Допустим, если ранее состав нефти определялся только в лаборатории с помощью длительного анализа, то благодаря PI System удается оперативно, с помощью виртуального анализа показать поставщику реальное качество сырья. Было подсчитано, что за счет этого удалось сэкономить около $200000. Общая экономия от автоматизации отчетов составила $ 44 000 в год. Общая экономия на обслуживании насосов позволяет экономить в сумме $ 100000.

В целом экономисты компании посчитали, что однократная экономия составила $ 1 500 000, а регулярная экономия (задокументированная) составляет около $ 300 000 в год.