/>Федеральноеагентство по образованию
Филиалгосударственного образовательного учреждения высшего профессиональногообразования
КУРСОВОЙПРОЕКТ
покурсу
«Автоматизациятехнологических процессов и производств»
Разработкамодуля для контура управления 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.
Для достижения указанной цели в проекте поставлены и решеныследующие задачи:
1. Проследить полный путь, который проходит информация.
2. Изучить модуль PI-SDK.
3. Создать модуль для контура управления tic-104 припомощи PI-SDK и Visual Basic для решения проблемы быстродействия системы.
Новизна и практическая ценность. Целью создания Модульной базы данныхявляется упрощение доступа к данным временных рядов PI. Быстрота действия системы является в настоящее время однимиз первоочередных критериев, по которым оценивается качество, востребованностьи удобство системы. Также безусловная практическая ценность заключается вмасштабируемости и надежности баз данных.
Внедрениепроекта. Постоянно производятся усовершенствования иобновления оборудования, устраняются неисправности. Когда эти измененияприводят к изменениям в базах данных PI, существующие приложения могутперестать работать корректно. При замене контура управления могут потребоватьсяновый интерфейс и новый набор точек. Чтобы упростить внедрение изменений,модули должны уметь запоминать все сделанные ранее изменения.
/>1. Краткаяхарактеристика PISystemи контура управленияtic-104
Вданном проекте рассматривается самонастраивающийся терморегулятор (TIC), конфигурируемыйдля регулирования температуры в резервуаре.
Посвоей сути, это ПИД-регулятор. Как известно, ПИД-регулятор — это звено вконтуре управления с обратной связью, используемое для поддержания заданногозначения измеряемого параметра. ПИД-регулятор измеряет отклонениестабилизируемой величины от заданного значения (так называемой уставки) игенерирует управляющий сигнал, являющийся суммой трёх слагаемых, первое изкоторых пропорционально этому отклонению, второе пропорционально интегралуотклонения и третье пропорционально производной отклонения. На любомпроизводстве используется множество ПИД-регуляторов.
Множествопростых методик настройки пропорционально-интегрально – дифференциальных (ПИД)контуров были автоматизированы и встроены в коммерческие регуляторы. Функции«самонастройки» по запросу повторяют операции, выполняемые квалифицированныминженером для настройки контура регулирования во время запуска системы. К томуже регуляторы с самонастройкой «на лету» могут продолжать обновлять константынастройки контуров уже после запуска системы в эксплуатацию.
Хотяоба подхода нашли признание среди специалистов по АСУ ТП, самонастройка «позапросу» пользуется большей популярностью. С 80-х и начала 90-х годов, когдабыли проведены основные исследования, самонастройка стала ведущим направлением.
Разработкаосуществляется при помощи модуля PI-SDKпрограммы PI-System. OSI Software, Inc. разрабатывает и поставляет PlantInformation System, сокращенно PI System – семейство клиент/серверных и Webпрограммных продуктов. PI System является инфраструктурой реального времени ииспользуется в качестве одного из основных компонентов корпоративнойинформационной системы для интеграции и согласования данных, интеграцииприложений и разнородных “островов” автоматизации (DCS, PLC, SCADA и т.д.). PISystem дает возможность эффективно хранить, быстро обновлять и отображать,совместно использовать и анализировать как текущие, так и архивные данные.
Говоря в целом, PISystem- это:
l Этоинструмент построения информационной системы производства реального времени дляпромышленных предприятий. PI System наилучшим образом обеспечивает сбор,хранение и представление в едином формате данных от различных SCADA-систем,DCS, ПЛК, устройств ручного ввода, заводских лабораторий и т. п.
l PISystem предоставляет информацию о технологических процессах в реальном масштабевремени на уровень управления производством и бизнес-систем для специалистовсреднего и верхнего звена предприятия.
l PISystem служит инструментом для анализа и оптимизации производственныхпроцессов.
PISystem используется вразличных отраслях промышленности таких, как химия, нефтегазовая, фармацевтика,пищевая, целлюлозно-бумажная, энергетика. Его применяют крупные компании,которым требуется быстрая окупаемость их инвестиций в автоматизациюпроизводства, а также быстрый ввод в действие, простота применения и высокийдоход по инвестициям.
PISystem внедрили такие крупныемировые компании, как Total,Shell, BritishPetroleum, SaudiAramco, ExxonMobil,ChevronTexaco. PISystem также внедрена вомногих компаниях в СНГ и Странах Балтии .
Продукт PI-SDKявляется, по своей сути, иерархической объектной моделью, основанной наActiveX-технологии фирмы Microsoft.
PI-SDK(PI Software Development Kit) – пакет средств разработки программногообеспечения PI который представляет собой инструмент создания программ доступак PI-серверам. Он состоит из встроенного ActiveX-сервера, элемента управленияActiveX и библиотек поддерживающих программ. Предшественником PI-SDK являлсятак называемый интерфейс прикладного программирования PI-API (PI ApplicationProgramming 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: переменная процесса, уставка (setpoint), выход, коэффициент пропорциональности (proportional constant),константа интегрирования (integral constant), производная (derivative), ирежим. Как видно, данный контур очень удобно представить в виде модуля.Создадим этот модуль при помощи Visual Basic.4. Построение модуля “tic-104”
модульконтур база процесс
Модульнаябаза данных. Главной входнойточкой в PI-SDK и базы данных PI является объект PI-SDK Server. Для начала, мысоздадим экземпляр Server и откроем сеанс связи с сервером с достаточнымиправами для изменения модульной базы данных.
Каждый Server имеет свойство PIModuleDB.Модули в PIModuleDB хранятся в коллекции PIModuleDB.PIModules. Эта коллекциясуществует в PI Server в виде базы данных, аналогичной Базе данных точек (PIPoint Database). Коллекция PIModules является иерархичной структурой,представляющей модули; она аналогична структуре каталогов файловой системы. Добавимэтот модуль не в корневую коллекцию, создадим модуль, который будет действоватьв качестве “папки”, содержащей tic-104, после чего мы создадим модуль дляtic-104. Вот соответствующийкоднаVB:
Option Explicit
Dim Srv As Server
Dim Controllers AsPIModule
Dim Tic104 As PIModule
Private SubCreateTic104()
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)
EndSub
Теперь в нашем распоряжении имеетсямодуль, представляющий контур управления 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 AsPIProperty
Dim InstallationData AsPIProperty
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.”)
EndSub
Интеграцияс приложением. Теперь у насимеется модуль, представляющий контроллер tic-104; мы можем легко обратиться ксоответствующим временным рядам и метаданным. Но такая структура не имела быособого практического значения, если к ней не могло бы обращаться приложение.Имеется много различных путей использования этих данных; например, они могутпотребоваться приложению, которое предназначено для оценки состояния итехнического обслуживания контроллера. Будущие версии PI ProcessBook будутподдерживать работу с Модульной базой данных PI; однако, уже сейчас мы можемработать с ModuleData Base(MDB) в PI ProcessBook при помощи VisualBasic 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 AsPIModule
Dim Controller AsPIModule
Private SubDisplay_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 SubLoadMfgData()
Dim MfgData AsPIProperty
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 InMfgData.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 SubLoadInstallationData()
Dim InstallationData AsPIProperty
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 InInstallationData.PIProperties
strEntry = Prop.Name& “: “ & Prop.Value
Set mItem =lvwInstallationData.ListItems.Add(iIndex, Prop.Name, Prop.Name)
iIndex = iIndex + 1
mItem.SubItems(1) =Prop.Value
NextProp
EndSub
Усовершенствуем наш модуль. Добавимтип контроллера к данным производителя, при этом новая информация отобразитсяпри следующей загрузке экрана; никаких изменений в клиентском приложении приэтом не потребуется.
Данный экран PI ProcessBookотображает стандартным образом работу контура управления, а также отображаетимя производителя и информацию об установке. Для того, чтобы повторноиспользовать этот экран, нужно прежде всего добавить VBA-код, заменяющийиспользованные при конфигурировании экрана PI-точки, на операторы связи сМодульной базой данных. Для нужно задать свойства TagName или Trace объектовэкрана. PI ProcessBook автоматически присваивает имена этим объектам. В режимесоздания PI ProcessBook позволяет по правому щелчку мыши вывести свойствакаждого объекта. Отображается имя объекта; можно также переименовать объект.Следующие VBA-функции извлекают соответствующие псевдонимы (alias) из модуляконтроллера и и затем используют свойство datasource (источник данных)псевдонима для присвоения точке PI:
Private Sub LoadAliasesIntoTrend()
Dim Alias As PIAlias
DimPt AsPIPoint
‘ Убрать существующие точки
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 SubLoadAliasesIntoBarChart()
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 SubLoadAliasesIntoValues()
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)
EndSub
Предположим, что нам потребовалисьдополнительные контроллеры (на работающих предприятиях обычно очень многоконтроллеров). Мы воспользуемся дополнительными точками-имитаторами и создадимеще 9 модулей контроллеров. Приведенный код легко соответствующим образоммодифицировать, либо можно воспользоваться инструментом конфигурирования. Послетого, как контроллеры созданы, мы добавим элемент управления «picklist» (список выбора) к экрану PI ProcessBook. При загрузке экрана мыбудем добавлять ссылки на все контроллеры.
/>Масштабируемость ииерархия. Для того, чтобыиспользовать несколько контроллеров в одной группе, необходимамасштабируемость. Масштабируемое решение состоит в том, чтобы организоватьмодули в более глубокую иерархию. Начиная с контроллеров и двигаясь«вверх», мы построим всю иерархию в соответствии со следующимподходом.
/>/>/>Масштабируемость(PIHeadingSets). Модульнаябаза данных PI обеспечивает механизм для присвоения имен категориям и заданиярекомендуемого уровня в иерархии. Каждой категории можно присвоить PIHeading(заголовок). Объекты типа PIHeading группируются в объект PIHeadingSet. Посколькуне существует ограничений на схемы иерархий, то нет и ограничений на количествообъектов PIHeadingSet,которые можно сконфигурировать. Мы реализуем указанные группировки путемсоздания набора заголовков (heading set) и добавления 6 заголовков. Эти заголовкииспользуются идентификации или присвоения меток модулям в данной схеме.Представим набор заголовков в виде таблицы:
Вот VB-код, который конфигурируетнабор заголовков для данной схемы:
Private SubcmdCreateHeadingSet_Click()
Dim Srv As Server
Dim HeadingSet AsPIHeadingSet
Dim Heading AsPIHeading
Set Srv =Servers.DefaultServer
Srv.Open
Set HeadingSet =Srv.PIModuleDB.PIHeadingSets.Add(“S-88 Equipment”, “S 88 equipment forexample”)
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 AsPIModule
Dim Controller AsPIModule
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.InsertController
Set Controller =Controllers.PIModules.Item(“tic-105”)
Unit.PIModules.Insert Controller
/>/>/>5. ВнедрениемодулявприложениеPI ProcessBook
Теперь, когда у нас имеетсяиерархическое представление оборудования, необходимо запрограммировать экран PIProcessBook таким образом, чтобы он мог воспользоваться этой иерархией. Мыприменим два подхода: 1) каскад из элементов управления типа «combobox»(комбинированный список выбора) 2) элемент управления Tree View(просмотр в виде дерева). В первом подходе мы используем combo box для сайта(site), зоны (area), линии (line), модуля (unit), и наконец, контроллеров.Изменение выбранных элементов в верхнем окне приведет обновлению нижних окон — в них появятся соответствующие модули.
Вот код VBA, который загружаетэлементы «combo box»; он вызывается при открытии экрана:
Private Sub LoadAllComboBoxes()
Dim i As Integer
For Each Site InEnterprise.PIModules
cboSites.AddItemSite.Name
Next Site
Set Site =Enterprise.PIModules.Item(1)
For Each Area InSite.PIModules
cboAreas.AddItemArea.Name
Next Area
Set Area = Site.PIModules.Item(1)
For Each Line InArea.PIModules
cboLines.AddItemLine.Name
Next Line
Set Line =Area.PIModules.Item(1)
For Each Unit InLine.PIModules
cboUnits.AddItemUnit.Name
Next Unit
Set Unit =Line.PIModules.Item(1)
For Each Controller InUnit.PIModules
cboControllers.AddItemController.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 IsNothing Then
Reload = True
ElseIfcboControllers.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 SubcboUnits_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 InUnit.PIModules
cboControllers.AddItemController.Name
Next Controller
IfcboControllers.ListCount > 0 Then
cboControllers.ListIndex= 0
End If
End If
End Sub
Private SubcboLines_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 InLine.PIModules
cboUnits.AddItemUnit.Name
Next Unit
If cboUnits.ListCount> 0 Then
cboUnits.ListIndex = 0
Else
cboControllers.Clear
End If
End If
End Sub
Private SubcboAreas_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 InArea.PIModules
cboLines.AddItemLine.Name
Next Line
If cboLines.ListCount> 0 Then
cboLines.ListIndex = 0
Else
cboUnits.Clear
cboControllers.Clear
End If
End If
End Sub
Private SubcboSites_Click()
If cboSites.Text Site.Name Then
Set Site =Enterprise.PIModules.Item(cboSites.Text)
cboAreas.Clear
For Each Area InSite.PIModules
cboAreas.AddItemArea.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 AsNode
Dim i As Long
tvwEnterprise.nodes.Clear
tvwEnterprise.Sorted =False
Set EnterpriseNode =tvwEnterprise.nodes.Add(,, “Enterprise”, “Enterprise”)
LoadTreeViewNodesEnterprise.PIModules, EnterpriseNode, i
EnterpriseNode.Expanded= True
End Sub
Private SubLoadTreeViewNodes(Modules As PIModules, ParentNode As Node, i As Long)
Dim Module As PIModule
Dim SubNode As Node
DimstrKey AsString
‘ свойство “Key”узла должно быть уникальным. Поскольку модули могут одновременно присутствоватьв нескольких разных местах,
‘ нельзя полагаться на уникальныйидентификатор модуля. По этой причине мы добавим целое число к уникальному ID
For Each Module InModules
i = i + 1
strKey =Module.UniqueID & “-“ & i
Set SubNode =tvwEnterprise.nodes.Add(ParentNode, tvwChild, strKey, Module.Name)
LoadTreeViewNodesModule.PIModules, SubNode, i ‘ рекурсивныйвызовметодовявляетсянаилучшимспособомобработкииерархий
NextModule
EndSub
Большую часть работы выполняет код,обрабатывающий выбор узла. Этот код должен найти модуль, связанный с даннымузлом, и затем обновить экран, если это контроллер.
Значение node.text совпадает сименем модуля. Используемый метод заключается в том, чтобы пройти вверх поиерархии к родителям узла, создавая массив узлов, а затем пройти вниз помассиву, используя свойство node.text, чтобы получить элемент модуля. Другойспособ, который можно было бы здесь применить, состоит в том, чтобы хранитькаждый модуль в этом дереве. Однако, этот подход не очень хорошомасштабируется.
Вот код, который это выполняет:
Private SubtvwEnterprise_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
WhileTrue
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)
IfModule.PIHeading.Name = “Controller” Then
Set Controller = Module
LoadMfgData
LoadInstallationData
LoadAliasesIntoDisplay
EndIf
EndSub
Заключение
Разработанныйв данном курсовом проекте модуль для контура управления “tic-104” позволяет быстро и безопасноустранить расхождение между технологическим параметром и ставкой, однакоустановление в контроллере необходимого баланса между скоростью выхода назадание и мягкостью работы требует определенного умения и опыта. Функции«самонастройки» по запросу повторяют операции, выполняемые квалифицированныминженером для настройки контура регулирования во время запуска системы. К томуже регуляторы с самонастройкой «на лету» могут продолжать обновлять константынастройки контуров уже после запуска системы в эксплуатацию.
Модуль “tic-104” разработан с помощью VisualBasic для контура управления температурой в резервуаре. В модуле учтены масштабируемостьи иерархичность. Это означает, что для остальных контроллеров, участвующих впроцессе, не нужно разрабатывать аналогичные модули, достаточно ввести ихпараметры в существующий модуль. Этот факт подчеркивает практическую ценностьразработки.
Данный модульиспользуется в составе системы PI System. Эта система широко применяется вкрупных мировых компаниях, таких как Лукойл, Газпром, Юкос, Сибур и многиедругие. PI System разработан фирмой OSI Software GmbH (Германия), в России с2000 года.
Наконец, говоряо финансовом вопросе, достаточно привести несколько цифр. Стоимость внедренияпроекта PI в среднем составляет $ 100000 – 500 000. А экономия складывается изсовокупности различных факторов. Допустим, если ранее состав нефти определялсятолько в лаборатории с помощью длительного анализа, то благодаря PI Systemудается оперативно, с помощью виртуального анализа показать поставщику реальноекачество сырья. Было подсчитано, что за счет этого удалось сэкономить около $200000.Общая экономия от автоматизации отчетов составила $ 44 000 в год. Общая экономияна обслуживании насосов позволяет экономить в сумме $ 100000.
В целомэкономисты компании посчитали, что однократная экономия составила $ 1 500 000,а регулярная экономия (задокументированная) составляет около $ 300 000 в год.