Смекни!
smekni.com

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

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

DimstrKeyAsString

‘ свойство “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 ‘ рекурсивныйвызовметодовявляетсянаилучшимспособомобработкииерархий

NextModule

EndSub

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

Значение 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

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)

If Module.PIHeading.Name = “Controller” Then

Set Controller = Module

LoadMfgData

LoadInstallationData

LoadAliasesIntoDisplay

EndIf

EndSub


Заключение

Разработанный в данном курсовом проекте модуль для контура управления “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 в год.