Разработка модуля для контура управления 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).
PI SDK не существует в виде отдельного процесса вне приложения. Вместо этого, он становится частью самого процесса, реализуемого в приложении.
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.sub>Items(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.sub>Items(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 sub>Node As Node
Dim strKey As String
‘ свойство “Key” узла должно быть уникальным. Поскольку модули могут одновременно присутствовать в нескольких разных местах,
‘ нельзя полагаться на уникальный идентификатор модуля. По этой причине мы добавим целое число к уникальному ID
For Each Module In Modules
i = i + 1
strKey = Module.UniqueID & “-“ & i
Set sub>Node = tvwEnterprise.nodes.Add(ParentNode, tvwChild, strKey, Module.Name)
LoadTreeViewNodes Module.PIModules, sub>Node, 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 в год.