Система управления программным комплексом для автоматизации расчётов трубопроводных систем

Автоматизация расчёта параметров сетей трубопроводов по годам на основе прогнозных показателей добычи и закачки с применением программного продукта Pipesim и технологии OpenLink, Microsoft Excel. Определение плановой себестоимости и эффективности.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 25.05.2012
Размер файла 4,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Данное помещение относится к категории Д (наличие твердых сгораемых вещей). [18]

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

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

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

Если возгорание произошло в электроустановке, для его устранения должны использоваться огнетушители углекислотные типа ОУ-2, или порошковые типа ОП-5.

План эвакуации помещения. В котором производилась дипломная работа представлен на рисунке 25.

Рисунок 25 План эвакуации

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

6.5 Охрана окружающей среды

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

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

В этот комплекс мероприятий входят:

§ создание и внедрение новых процессов получения продукции с образованием наименьшего количества отходов;

§ разработка различных типов бессточных технологических систем и водооборотных циклов на базе способов очистки сточных вод;

§ разработка систем переработки отходов производства во вторичные материальные ресурсы;

§ создание территориально-промышленных комплексов, имеющих замкнутую структуру материальных потоков сырья и отходов внутри комплекса.

Одна из самых серьезных проблем, связанных с разработкой данного проекта - это потребление электроэнергии. Увеличение количества компьютерных систем, внедряемых в производственную сферу, приводит к увеличению объема потребляемой электроэнергии, что влечет за собой увеличение мощностей электростанций и их количества. И то, и другое содействует нарушению экологической обстановки. Рост энергопотребления приводит к такому экологическому нарушению, как изменение климата - накопление углекислого газа в атмосфере Земли (парниковый эффект).

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

Заключение

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

1. программный комплекс для моделирования трубопроводных сетей - PIPESIM

2. технология OpenLink

3. язык программирования Visual Basic For Applications (VBA)

Возвращаясь к целям, поставленным перед нами можно сказать, что расчёт параметров сетей трубопроводов по годам на основе прогнозных показателей добычи и закачки был автоматизирован с применением программного продукта Pipesim и технологии OpenLink, Excel. В процессе разработки были разработаны требования к будущему программному продукту. Итоговый вариант системы управления программным комплексом в полной мере удовлетворяет требованиям пользователя к системе.

Скорость совершения определенного объема работ уменьшилась по сравнению с показателем времени до использования системы. За счет автоматизации удалось отслеживать значения для всех участков трубопроводной сети на все периоды. Полнота информации позволяет принимать более эффективные и взвешенные технических решений при проектировании трубопроводных систем.

Данный программный продукт принят к использованию отделом рационального использования газа "ТомскНИПИнефть" (приложение Г).

Список использованной литературы

1. "Open Link References Manual", - Houston: Schlumberger, 2008. - 103 p.

2. Baker Jardine. "PIPESIM 2000 (User Guide)", - Houston: Schlumberger, 2000. - 219 р.

3. Томский научно-исследовательский и проектный институт нефти и газа. [Электронный ресурс]. - Режим доступа: http://www.tomsknipineft.ru/, свободный. - Загл. с экрана.

4. Г. Буч, Д. Рамбо, А. Джекобсон "Язык UML Руководство пользователя (Перевод с английского).

5. Уэнди Боггс, Майкл Боггс, "UML и Rational Rose Mastering UML With Rational Rose" - : Лори, 2008. - 600 стр.

6. Уроки PIPESIM. Руководство мануал инструкция. [Электронный ресурс]. - Режим доступа: http://pipesim.ru/, свободный. - Загл. с экрана.

7. Гладкий А.А., Чиртик А.А. "Excel. Трюки и эффекты." - Спб.: Питер, 2006. - 368 стр.

8. Справочник Visual Basic for Applications. [Электронный ресурс]. - Режим доступа: http://vba-help.ru/, свободный. - Загл. с экрана.

9. Форумы GotDotNet.ru. [Электронный ресурс]. - Режим доступа: http://www.gotdotnet.ru/forums/, свободный. - Загл. с экрана.

10. Schlumberger Information Solutions (SIS). [Электронный ресурс]. - Режим доступа: http://www.slb.ru/sis/pipesim/, свободный. - Загл. с экрана.

11. Организация и планирование производства. Методические указания по организационно-экономическим вопросам к выпускной квалификационной работе для студентов ЭФФ, АВТФ всех специальностей очной и заочной форм обучения. - Томск: Изд-во ТПУ, 2004. - 52 стр.

12. Методические указания по разработке раздела "Производственная и экологическая безопасность" выпускной квалификационной работы для студентов всех форм обучения /Сост. М.Э. Гусельников, В.Н. Извеков, Н.В. Крепша, В.Ф. Панин. - Томск: Изд-во ТПУ, 2006. - 42 стр.

13. СанПиН 2.2.2.542-96 "Гигиенические требования к видеодисплейным терминалам, персональным электронно-вычислительным машинам и организации работы" (утв. от 14 июля 1996 г. №14).

14. СанПиН 2.2.4.548-96. "Гигиенические требования к микроклимату производственных помещений".

15. СанПиН 2.2.1/2.1.1.1278-03 " Гигиенические требования к естественному, искусственному и совмещенному освещению жилых и общественных зданий".

16. ГОСТ 12.2.032-78: Система стандартов безопасности труда. Рабочее место при выполнении работ сидя. Общие эргономические требования.

17. ГОСТ 21889-76 Система "Человек-машина". Кресло человека-оператора. Общие эргономические требования.

18. Система нормативных документов Государственной противопожарной службы МВД России "Нормы государственной противопожарной службы МВД России". Определение категорий помещений и зданий по взрывопожарной и пожарной опасности. НПБ 105-95, Главное управление государственной противопожарной службы МВД России, - Москва 1996.

19. Howard Smith, Peter Fingar, "Business Process management: The Third Wave", 2002.

20. Silich VA, Silich MP "Business process reengineering", tutorial, - Tomsk: 2006 - 202 p.

Приложения

Приложение А

Рисунок Б.1

Рисунок Б.2

Приложение Б

Процедура FlowCor (n) 105

Процедура Prop () 107

Процедура BOProp () 108

Процедура CProp () 116

Процедура Group (period) 118

Функция newFile (filename, period) As String118

Процедура Branch_out (plcfile, period, current) 119

Процедура Output (filename, period) 132

Функции для работы с периодами136

Процедура Boundary_Click () 139

Процедура-событие AfteRun_Click () 141

Функция Result (filename, period) As Boolean141

Процедуры запуска модели146

Процедуры установки значений для модели черной нефти146

Процедуры установки значений для моделей смеси150

Процедура SetSink (filename, period) 154

Процедура Sink_page () 159

Процедура SourceComp () 162

Процедура SourceBO () 166

Процедура FirstNew ()

Sub FirstNew ()

`подключение к библиотеке

Dim INetModel As New NET32COMLib. INetModel

`объявление переменных процедуры

Dim filename As String, s

Dim tip As Integer, indx, q, e, f

Dim row As Long, kol, kl, l, r

Dim count As Long

Dim m As Integer

Dim file As String

`открываем доступ к файлу модели

filename = Sheets (1). Range ("A1")

INetModel. OpenModel filename

`определяем тип модели

tip = INetModel. FluidModelType

row = 1

If tip = 0 Then

`определяем количество периодов

Dim period As Integer

period = periodi ()

Dim klac As Integer

klac = period

`считываем все объекты типа Source в модели

INetModel. GetNameList 2, objname, count

Sheets (1). Range ("E5"). Font. Bold = True

Sheets (1). Range ("E5") = "Calculated periods: "

Sheets (1). Range ("F5") = "0"

'применение параметров к модели

'для BlackOil Model

For r = 1 To period

m = 1

Dim p As Integer

`создаем новую директорию и копируем туда файл модели

file = newFile (filename, r)

SetBO file, 11, 4, r `устанавливаем значения для модели в целом

For p = 0 To count - 1 `определяем ячейку описания источника

Do While Sheets (2). Cells (m, 1) <> objname (p)

m = m + 1

Loop

If Sheets (2). Cells (m, 1) = objname (p) Then

SetSBO file, m, 1, r `устанавливаем значения для источников

m = 1

End If

Next

SetSink file, r `устанавливаем значения для стоков модели

Run_Click file `запуско расчета

Dim OK As Boolean

OK = Result (file, r) `считываем результаты моделирования для источников

If OK = False Then

GoTo Line1

End If

Output file, r`считываем результаты моделирования для участков сети

Branch_out file, periodi (), r `считывание профиля моделирования

Sheets (1). Range ("F5") = r

Next

If period > 2 Then

Group period `группируем результаты, если больше 2 периодов

End If

End If

'Compositional Model

If tip = 1 Then

Dim years As Integer

`считываем все источники сети

INetModel. GetNameList 2, objname, count

years = per () `определяем количество заданных периодов

Dim z As Integer

For z = 1 To years

m = 1

file = newFile (filename, z) `создаем файл в новой рабочей директории

If periodiCO (21, 1, 1) <> 0 Then

SetCO file, 20, 1, z `устанавливаем значения для модели газа в целом

End If

Dim x As Integer

For x = 0 To count - 1 `поиск ячейки описания источников

Do While Sheets (2). Cells (m, 1) <> objname (x)

m = m + 1

Loop

If Sheets (2). Cells (m, 1) = objname (x) Then

If periodiCO (m + 1, 1,2) <> 0 Then

SetSCO file, m, 1, z`установка значений для источников

End If

m = 1

End If

Next

SetSink file, z `установка значений стоков

Run_Click file`запуск модели на расчет

Dim OKey As Boolean

OK = Result (file, z) `расчет результатов для источников

If OK = False Then

GoTo Line1

End If

Output file, z`расчет результатов для участков сети

Branch_out file, years, z`вывод профиля

If years > 2 Then

Group years`группировка результатов

End If

Sheets (1). Range ("F5") = z

Next

Line1: End If

End Sub

Процедура FlowCor (n)

Sub FlowCor (n)

`открываем доступ к библиотекам

Dim INetModel As New NET32COMLib. INetModel

Dim FlowCorr As New FLOWCORRELATIONCOMLib. CIFlowCorrelation

Dim filename As String

filename = Sheets (1). Range ("A1") `открываем доступ к файлу модели

INetModel. OpenModel filename

Set FlowCorr = INetModel. FlowCorrelation `создаем специальный объект

`форматирование ячеек

Sheets (1). Cells (n, 1). Font. Bold = True

Sheets (1). Cells (n, 1). Font. Size = 16

Sheets (1). Cells (n, 1). Interior. Color = RGB (131, 111, 255)

Sheets (1). Cells (n,

2). Interior. Color = RGB (131, 111, 255)

Sheets (1). Cells (n, 1) = "Flow Correlations"

Sheets (1). Cells (n + 1, 1). Font. Bold = True

Sheets (1). Cells (n + 1, 1). Font. Italic = True

Sheets (1). Cells (n + 1, 1) = "Horizontal Flow (Mutiphase)"

`считывание параметров

Sheets (1). Cells (n + 2, 1) = "Source"

Sheets (1). Cells (n + 2,2) = FlowCorr. GetHorizontalSourceName

Dim cn As String

cn = FlowCorr. GetHorizontalCorrelationName

Sheets (1). Cells (n + 3, 1) = "Correlation"

Select Case cn

Case "BBO"

Sheets (1). Cells (n + 3,2) = "Beggs and Brill Original"

Case "BBOTD"

Sheets (1). Cells (n + 3,2) = "Beggs and Brill, Taitel Dukler map"

Case "BBR"

Sheets (1). Cells (n + 3,2) = "Beggs and Brill Revised"

Case "BBRTD"

Sheets (1). Cells (n + 3,2) = "Beggs and Brill Revised, Taitel Dukler map"

Case "BJA"

Sheets (1). Cells (n + 3,2) = "Baker Jardine Revised"

Case "DKAGAD"

Sheets (1). Cells (n + 3,2) = "Dukler, AGA & Flangon"

Case "DKAGAF"

Sheets (1). Cells (n + 3,2) = "Dukler, AGA & Flangon"

Case "DR"

Sheets (1). Cells (n + 3,2) = "Duns & Ros"

Case "DRTD"

Sheets (1). Cells (n + 3,2) = "Duns & Ros, Taitel Dukler map"

Case "LOCKMAR"

Sheets (1). Cells (n + 3,2) = "Lockhart & Martinelli"

Case "LOCKMARTD"

Sheets (1). Range ("B28") = "Lockhart & Martinelli, Taitel Dukler map"

Case "MB"

Sheets (1). Cells (n + 3,2) = "Muckherjee & Brill"

Case "NOSLIP"

Sheets (1). Cells (n + 3,2) = "No slip assumptation"

Case "OLIEMANS"

Sheets (1). Cells (n + 3,2) = "Oliemans"

Case "XIAO"

Sheets (1). Cells (n + 3,2) = "Xiao"

End Select

Sheets (1). Cells (n + 4, 1) = "Friction Factor"

Sheets (1). Cells (n + 4,2) = FlowCorr. HorizontalFrictionFactor

Sheets (1). Cells (n + 5, 1) = "Holdup Factor"

Sheets (1). Cells (n + 5,2) = FlowCorr. HorizontalHoldup

Sheets (1). Cells (n + 6, 1). Font. Bold = True

Sheets (1). Cells (n + 6, 1). Font. Italic = True

Sheets (1). Cells (n + 6, 1) = "Single Phase"

Sheets (1). Cells (n + 7, 1) = "Correlation"

Sheets (1). Cells (n + 7,2) = FlowCorr. SinglePhaseCorrelation

End Sub

Процедура Prop ()

Sub Prop ()

'подключение к библиотеке

Dim INetModel As New NET32COMLib. INetModel

'Open model. Type of model

Dim filename As String

Dim errorStr As String

Dim tip As Integer

filename = Range ("A1")

INetModel. OpenModel filename

INetModel. GetLastError errorStr

tip = INetModel. FluidModelType

If tip = 0 Then

Sheets (1). Range ("B3") = "BlackOil Model"

BOProp'метод считывание параметров сети

End If

If tip = 1 Then

Sheets (1). Range ("B3") = "Compositional Model"

CProp 'метод считывание параметров сети

End If

End Sub

Процедура BOProp ()

Sub BOProp ()

'доступ к бибилиотеке

Dim INetModel As New NET32COMLib. INetModel

Dim filename As String

Dim errorStr As String

Dim typ As Long

Dim pr As Double

Dim tmp As Double

'форматирование ячеек подписи

filename = Range ("A1")

'Sheets (1). Range ("F12: W16"). Interior. Color = RGB (224, 255, 255)

Sheets (1). Range ("D10"). Font. Bold = True

Sheets (1). Range ("D10"). Font. Size = 16

Range ("D10: E10"). Interior. Color = RGB (131, 111, 255)

Sheets (1). Range ("D10") = "Black Oil Propeties"

Sheets (1). Range ("D11"). Font. Bold = True

Sheets (1). Range ("D11"). Font. Italic = True

Sheets (1). Range ("D11") = "Stock Tank Propeties"

'открыть доступ к файлу модели

INetModel. OpenModel filename

INetModel. GetLastError errorStr

'Parametrs of model

Dim BlackOil As New FLUIDMODELCOMLib. IBlackOil

Dim gt As Integer

'создание специального объекта

Set BlackOil = INetModel. BlackOilDefault

'считывание параметров

Sheets (1). Range ("D12") = "Watercut (%)"

Sheets (1). Range ("E12") = BlackOil. Watercut

Range ("E12: AA12"). Interior. Color = RGB (224, 255, 255)

Sheets (1). Range ("D13") = "DOD (" & Sheets ("Units"). Cells (56,4) & ")"

Sheets (1). Range ("E13") = 141.5/ (BlackOil. API + 131.5) * 1000

Range ("E13: AA13"). Interior. Color = RGB (224, 255, 255)

Sheets (1). Range ("D14") = "WaterSG"

Sheets (1). Range ("E14") = BlackOil. WaterSG

Range ("E14: AA14"). Interior. Color = RGB (224, 255, 255)

Sheets (1). Range ("D15") = "GasSG"

Sheets (1). Range ("E15") = BlackOil. GasSG

Range ("E15: AA15"). Interior. Color = RGB (224, 255, 255)

gt = BlackOil. GOR_Type

If gt = 0 Then

Sheets (1). Range ("D16") = "GLR (" & Sheets ("Units"). Range ("D20") & ")"

Sheets (1). Range ("E16") = BlackOil. GLR_SI * Sheets ("Units"). Range ("C20")

Range ("E16: AA16"). Interior. Color = RGB (224, 255, 255)

End If

If gt = 1 Then

Sheets (1). Range ("D16") = "GOR (" & Sheets ("Units"). Range ("D23") & ")"

Sheets (1). Range ("E16") = BlackOil. GOR_SI * Sheets ("Units"). Range ("C23")

Range ("E16: AA16"). Interior. Color = RGB (224, 255, 255)

End If

If gt = 2 Then

Sheets (1). Range ("D16") = "LGR (" & Sheets ("Units"). Range ("D26") & ")"

Sheets (1). Range ("E16") = BlackOil. LGR_SI * Sheets ("Units"). Range ("C26")

Range ("E16: AA16"). Interior. Color = RGB (224, 255, 255)

End If

If gt = 3 Then

Sheets (1). Range ("D16") = "OGR (" & Sheets ("Units"). Range ("D17") & ")"

Sheets (1). Range ("E16") = BlackOil. OGR_SI * Sheets ("Units"). Range ("C17")

Range ("E16: AA16"). Interior. Color = RGB (224, 255, 255)

End If

' Correlation

Sheets (1). Range ("D17"). Font. Bold = True

Sheets (1). Range ("D17"). Font. Italic = True

Sheets (1). Range ("D17") = "Solution Gas Correlation"

Sheets (1). Range ("D18") = "Rs and Pb"

typ = BlackOil. SolutionGasCorrelation

If typ = 0 Then

Sheets (1). Range ("E18") = "Lasater"

End If

If typ = 1 Then

Sheets (1). Range ("E18") = "Standing"

End If

If typ = 2 Then

Sheets (1). Range ("E18") = "Vazquez and Beggs"

End If

If typ = 3 Then

Sheets (1). Range ("E18") = "Glaso"

End If

If typ = 4 Then

Sheets (1). Range ("E18") = "Kartoatmodjo"

End If

Sheets (1). Range ("D19"). Font. Bold = True

Sheets (1). Range ("D19"). Font. Italic = True

Sheets (1). Range ("D19") = "Calibration Data at Bubble Point"

BlackOil. GetBubblePointCalibration pr, tmp

Sheets (1). Range ("D20") = "Pressure (" & Sheets ("Units"). Range ("D5") & ")"

If pr <> - 7777 Then

Sheets (1). Range ("E20") = pr * Sheets ("Units"). Range ("C5")

End If

Sheets (1). Range ("D21") = "Temperature (" & Sheets ("Units"). Range ("D2") & ")"

If tmp <> - 7777 Then

Sheets (1). Range ("E21") = (tmp - 32) * 5/9

End If

Sheets (1). Range ("A10"). Font. Bold = True

Sheets (1). Range ("A10"). Font. Size = 16

Range ("A10: B10"). Interior. Color = RGB (131, 111, 255)

Sheets (1). Range ("A10") = "Viscosity Data"

Dim Visc As New FLUIDMODELCOMLib. ViscosityData

Sheets (1). Range ("A11"). Font. Bold = True

Sheets (1). Range ("A11"). Font. Italic = True

Sheets (1). Range ("A11") = "Dead Oil Viscosity"

Dim doc As Long

doc = Visc. DeadOilCorr

Sheets (1). Range ("A12") = "Correlation"

Select Case doc

Case 0

Sheets (1). Range ("B12") = "Beggs & Robinson"

Case 1

Sheets (1). Range ("B12") = "Glaso"

Case 2

Sheets (1). Range ("B12") = "Kartoatmodjo"

Case 3

Sheets (1). Range ("B12") = "De Ghetto et al. "

Case 4

Sheets (1). Range ("B12") = "Hossain"

Case 5

Sheets (1). Range ("B12") = "Elsharkawy"

Case 6

Sheets (1). Range ("B12") = "Petrosky-Farshad"

Case 7

Sheets (1). Range ("B12") = "user-specified 2 points"

Case 8

Sheets (1). Range ("B12") = "user-supplied table"

End Select

`Viscosity

Dim t1 As Double

Dim t2 As Double

Dim v1 As Double

Dim v2 As Double

Dim tu As String

Dim vu As String

Visc. GetDOPoints t1, t2, tu, v1, v2, vu

Sheets (1). Range ("A13"). Font. Bold = True

Sheets (1). Range ("A13") = "Temperature (" + tu + ")"

Sheets (1). Range ("A14") = t1

Sheets (1). Range ("A15") = t2

Sheets (1). Range ("B13"). Font. Bold = True

Sheets (1). Range ("B13") = "Viscosity ()"

Sheets (1). Range ("B14") = v1

Sheets (1). Range ("B15") = v2

Sheets (1). Range ("A16"). Font. Bold = True

Sheets (1). Range ("A16"). Font. Italic = True

Sheets (1). Range ("A16") = "Live Oil Viscosity"

Dim loc As Long

loc = Visc. LiveOilCorr

Select Case loc

Case 0

Sheets (1). Range ("B17") = "Beggs & Robinson"

Case 1

Sheets (1). Range ("B17") = "Chew & Connally"

Case 2

Sheets (1). Range ("B17") = "Kartoatmodjo"

Case 3

Sheets (1). Range ("B17") = "Khan"

Case 4

Sheets (1). Range ("B17") = "De Ghetto et al. "

Case 5

Sheets (1). Range ("B17") = "Hossain"

Case 6

Sheets (1). Range ("B17") = "Elsharkawyor"

Case 7

Sheets (1). Range ("B17") = "Petrosky-Farshad"

End Select

Sheets (1). Range ("A18"). Font. Bold = True

Sheets (1). Range ("A18"). Font. Italic = True

Sheets (1). Range ("A18") = "Undersaturated Oil Viscosity"

Dim ouv As Long

ouv = Visc. UsatOilViscosity

Select Case ouv

Case 0

Sheets (1). Range ("B19") = "Vasquez&Beggs"

Case 1

Sheets (1). Range ("B19") = "Kouzel"

Case 2

Sheets (1). Range ("B19") = "Kartoatmodjo"

Case 3

Sheets (1). Range ("B19") = "Khan"

Case 4

Sheets (1). Range ("B19") = "De Ghetto et al. "

Case 5

Sheets (1). Range ("B19") = "Hossain"

Case 6

Sheets (1). Range ("B19") = "Elsharkawyor"

Case 7

Sheets (1). Range ("B19") = "Bergman & Sutton"

Case 8

Sheets (1). Range ("B19") = "Petrosky-Farshad"

Case 9

Sheets (1). Range ("B19") = "none"

End Select

Sheets (1). Range ("A20"). Font. Bold = True

Sheets (1). Range ("A20"). Font. Italic = True

Sheets (1). Range ("A20") = "Liquid Viscosity calculation Method"

Dim ev As Long

ev = Visc. EmulViscosity

Sheets (1). Range ("A21") = "Emulsion Viscosity Method"

Select Case ev

Case 0

Sheets (1). Range ("B21") = "Continuous phase"

Case 1

Sheets (1). Range ("B21") = "Volume ratio"

Case 2

Sheets (1). Range ("B21") = "Pipesim Original Woelflin Loose Emulsion"

Case 3

Sheets (1). Range ("B21") = "Woelflin Loose Emulsion"

Case 4

Sheets (1). Range ("B21") = "Woelflin Medium Emulsion"

Case 5

Sheets (1). Range ("B21") = "Woelflin Tight Emulsion"

Case 6

Sheets (1). Range ("B21") = "Brinkman"

Case 7

Sheets (1). Range ("B21") = "Vand with Vand coefficients"

Case 8

Sheets (1). Range ("B21") = "Vand with Barnea & Mizrahi coefficients"

Case 9

Sheets (1). Range ("B21") = "Vand with user-supplied coefficients"

Case 10

Sheets (1). Range ("B21") = "Richardson"

Case 11

Sheets (1). Range ("B21") = "Leviton & Leighton"

Case 12

Sheets (1). Range ("B21") = "User-supplied table"

End Select

End Sub

Процедура CProp ()

Sub CProp ()

`Открыт доступ к библиотекам

Dim INetModel As New NET32COMLib. INetModel

Dim filename As String

Dim errorStr As String

filename = Range ("A1")

`рабочие переменные

Dim coun As Long

Dim chyd As Long

Dim caqu As Long

Dim all As Variant, hyd, aqu, mol

Dim k As Integer, l, m

`открыт доступ к файлу модели

INetModel. OpenModel filename

INetModel. GetLastError errorStr

`специальный объект

Dim Composition As New FLUIDMODELCOMLib. ICompositional

Set Composition = INetModel.compositionDefault

coun = Composition. GetComponentList (all, hyd, aqu, chyd, caqu)

Composition. GetMolarList mol

`форматирование информационных ячеек

Sheets (1). Cells (20, 1). Font. Bold = True

Sheets (1). Cells (20, 1). Font. Size = 16

Range ("A20: B20"). Interior. Color = RGB (131, 111, 255)

Sheets (1). Cells (20, 1) = "Compositional Properties"

`считывание списков элементов и их молярных долей

Sheets (1). Cells (21, 1). Font. Bold = True

Sheets (1). Cells (21, 1). Font. Italic = True

Sheets (1). Cells (21, 1) = "Hydrocarbons"

For k = 0 To chyd - 1

Sheets (1). Cells (22 + k, 1) = hyd (k)

Sheets (1). Cells (22 + k,

2) = mol (k)

Range (Sheets (1). Cells (22 + k,

2), Sheets (1). Cells (22 + k, 34)). Interior. Color = RGB (224, 255, 255)

Next

`считывание воды и ее содержание

Sheets (1). Cells (21 + chyd + 1, 1). Font. Bold = True

Sheets (1). Cells (21 + chyd + 1, 1). Font. Italic = True

Sheets (1). Cells (21 + chyd + 1, 1) = "Aqueous"

For l = 0 To caqu - 1

Sheets (1). Cells (22 + chyd + 1, 1) = aqu (l)

Sheets (1). Cells (22 + chyd + 1,2) = mol (chyd + l)

Range (Sheets (1). Cells (22 + chyd + 1,2), Sheets (1). Cells (22 + chyd + 1, 34)). Interior. Color = RGB (224, 255, 255)

Next

End Sub

Процедура Group (period)

Sub Group (period)

`метод группировки столбов от числа периодов

Dim m As Integer

m = 1

For m = 0 To 15

Range (Sheets (7). Columns (4 + period * m), Sheets (7). Columns (4 + period - 2 + period * m)). Group

Range (Sheets (7). Columns (4 + period * m), Sheets (7). Columns (4 + period - 2 + period * m)). EntireColumn. Hidden = True

Next

End Sub

Функция newFile (filename, period) As String

Function newFile (filename, period) As String

`объявление ячейки с полным именем файла

Dim l As String

l = StrReverse (filename)

Dim ind As Integer

ind = InStr (1, l, "\")

Dim one As String

one = Left (filename, Len (filename) - ind + 1)

Dim two As String

two = one + Trim (Str (period))

Dim three As String

three = Right (filename, ind - 1)

Dim fso

Set fso = CreateObject ("Scripting. FileSystemObject")

If Dir (two, vbDirectory) <> "" Then

Set f = fso. GetFolder (two)

f. Delete

End If

MkDir two`создание новой рабочей директории

`Копирование файла в директорию

fso. CopyFile filename, Trim (two + "\"), OverwriteExisting

newFile = Trim (two + "\" + three)

End Function

Процедура Branch_out (plcfile, period, current)

Sub Branch_out (plcfile, period, current)

`доступ к библиотеке

Dim INet As New NET32COMLib. INetModel

Dim filename As String

Dim count As Long

Dim col As Integer

col = 1

filename = Sheets (1). Range ("A1")

INet. OpenModel filename

Sheets (7). name = "Profiles Plot"

Sheets (7). Columns. AutoFit

period = period - 1

INet. GetNameList 5, arr, count

For Each SourceName In arr

`доступ к библиотеке

Dim PltReaderObj As New WELLCURVELib. PerformCurve

Dim tempfile

tempfile = plcfile

'sourceName

Sheets (7). Cells (col, 1) = SourceName

Sheets (7). Cells (col, 1). Interior. Color = RGB (131, 111, 255)

Do

pos = InStr (1, tempfile, "\", 1)

tempfile = Right (tempfile, Len (tempfile) - pos)

Loop While pos > 0

If (Len (tempfile) > 0) Then

plcfile = Left (plcfile, Len (plcfile) - Len (tempfile))

plcfile = plcfile + SourceName +". plc"

If (PltReaderObj. OpenWellFile (plcfile)) Then

'distance

Dim distance

distance = PltReaderObj. GetColumnVariableDataAt ("Total Distance")

Dim Lower, Upper, i

Lower = LBound (distance (0), 1)

Upper = UBound (distance (0), 1)

Sheets (7). Cells (col + Lower,

2) = "Distance (" & Sheets ("Units"). Cells (29,4) & ")"

Sheets (7). Cells (col + Lower,

2). Interior. Color = RGB (224, 255, 255)

For i = Lower To Upper - 1

If distance (0) (i) > 0 Then

Sheets (7). Cells (col + i + 1,2) = distance (0) (i) * Sheets ("Units"). Cells (29,3)

End If

Next

'pressure

Dim pressure

pressure = PltReaderObj. GetColumnVariableDataAt ("Pressure")

Dim LowerO, UpperO, ind

LowerO = LBound (pressure (0), 1)

UpperO = UBound (pressure (0), 1)

Sheets (7). Cells (col + LowerO, 2 + current) = "Pressure (" & Sheets ("Units"). Cells (5,4) & ")"

Sheets (7). Cells (col + LowerO, 2 + current). Interior. Color = RGB (224, 255, 255)

For ind = LowerO To UpperO - 1

If pressure (0) (ind) * Sheets ("Units"). Cells (5,3) > 0 Then

Sheets (7). Cells (col + ind + 1, 2 + current) = pressure (0) (ind) * Sheets ("Units"). Cells (5,3)

End If

Next

'Liquid holdup

Dim holdup

holdup = PltReaderObj. GetColumnVariableDataAt ("Liquid holdup")

Dim Lower1, Upper1, indx

Lower1 = LBound (holdup (0), 1)

Upper1 = UBound (holdup (0), 1)

Sheets (7). Cells (col + Lower1, 3 + current + period) = "Liquid holdup"

Sheets (7). Cells (col + Lower1, 3 + current + period). Interior. Color = RGB (224, 255, 255)

For indx = Lower1 To Upper1 - 1

If holdup (0) (indx) > 0 Then

Sheets (7). Cells (col + indx + 1, 3 + current + period) = holdup (0) (indx)

End If

Next

'Liquid velocity

Dim velocity

velocity = PltReaderObj. GetColumnVariableDataAt ("Liquid velocity")

Dim Lower2, Upper2, ind1

Lower2 = LBound (velocity (0), 1)

Upper2 = UBound (velocity (0), 1)

Sheets (7). Cells (col + Lower2, 4 + current + period * 2) = "Liquid velocity (" & Sheets ("Units"). Cells (32,4) & ")"

Sheets (7). Cells (col + Lower2, 4 + current + period * 2). Interior. Color = RGB (224, 255, 255)

For ind1 = Lower2 To Upper2 - 1

If velocity (0) (ind1) > 0 Then

Sheets (7). Cells (col + ind1 + 1, 4 + current + period * 2) = velocity (0) (ind1) * Sheets ("Units"). Cells (32,3)

End If

Next

'Gas velocity

Dim gasvel

gasvel = PltReaderObj. GetColumnVariableDataAt ("Gas velocity")

Dim Lower3, Upper3, ind3

Lower3 = LBound (gasvel (0), 1)

Upper3 = UBound (gasvel (0), 1)

Sheets (7). Cells (col + Lower3, 5 + current + period * 3) = "Gas velocity (" & Sheets ("Units"). Cells (32,4) & ")"

Sheets (7). Cells (col + Lower3, 5 + current + period * 3). Interior. Color = RGB (224, 255, 255)

For ind3 = Lower3 To Upper3 - 1

If gasvel (0) (ind3) > 0 Then

Sheets (7). Cells (col + ind3 + 1, 5 + current + period * 3) = gasvel (0) (ind3) * Sheets ("Units"). Cells (32,3)

End If

Next

'Fluid mean velocity

Dim Fluidmean

Fluidmean = PltReaderObj. GetColumnVariableDataAt ("Fluid mean velocity")

Dim Lower4, Upper4, ind4

Lower4 = LBound (Fluidmean (0), 1)

Upper4 = UBound (Fluidmean (0), 1)

Sheets (7). Cells (col + Lower4, 6 + current + period * 4) = "Fluid mean velocity (" & Sheets ("Units"). Cells (32,4) & ")"

Sheets (7). Cells (col + Lower4, 6 + current + period * 4). Interior. Color = RGB (224, 255, 255)

For ind4 = Lower4 To Upper4 - 1

If Fluidmean (0) (ind4) > 0 Then

Sheets (7). Cells (col + ind4 + 1, 6 + current + period * 4) = Fluidmean (0) (ind4) * Sheets ("Units"). Cells (32,3)

End If

Next

'Hydrostatic head

Dim Hydrostatic

Hydrostatic = PltReaderObj. GetColumnVariableDataAt ("Hydrostatic head")

Dim Lower5, Upper5, ind5

Lower5 = LBound (Hydrostatic (0), 1)

Upper5 = UBound (Hydrostatic (0), 1)

Sheets (7). Cells (col + Lower5, 7 + current + period * 5) = "Hydrostatic head (" & Sheets ("Units"). Cells (35,4) & ")"

Sheets (7). Cells (col + Lower5, 7 + current + period * 5). Interior. Color = RGB (224, 255, 255)

For ind5 = Lower5 To Upper5 - 1

If Hydrostatic (0) (ind5) > 0 Then

Sheets (7). Cells (col + ind5 + 1, 7 + current + period * 5) = Hydrostatic (0) (ind5) * Sheets ("Units"). Cells (35,3)

End If

Next

'Mass flowrate

Dim Massflowrate

Massflowrate = PltReaderObj. GetColumnVariableDataAt ("Mass flowrate")

Dim Lower6, Upper6, ind6

Lower6 = LBound (Massflowrate (0), 1)

Upper6 = UBound (Massflowrate (0), 1)

Sheets (7). Cells (col + Lower6, 8 + current + period * 6) = "Mass flowrate (" & Sheets ("Units"). Cells (38,4) & ")"

Sheets (7). Cells (col + Lower6, 8 + current + period * 6). Interior. Color = RGB (224, 255, 255)

For ind6 = Lower6 To Upper6 - 1

If Massflowrate (0) (ind6) > 0 Then

Sheets (7). Cells (col + ind6 + 1, 8 + current + period * 6) = Massflowrate (0) (ind6) * Sheets ("Units"). Cells (38,3)

End If

Next

'Flowing liquid Volume flowrate

Dim flvf

flvf = PltReaderObj. GetColumnVariableDataAt ("Flowing liquid Volume flowrate")

Dim Lower7, Upper7, ind7

Lower7 = LBound (flvf (0), 1)

Upper7 = UBound (flvf (0), 1)

Sheets (7). Cells (col + Lower7, 9 + current + period * 7) = "Flowing liquid Volume flowrate (" & Sheets ("Units"). Cells (41,4) & ")"

Sheets (7). Cells (col + Lower7, 9 + current + period * 7). Interior. Color = RGB (224, 255, 255)

For ind7 = Lower7 To Upper7 - 1

If flvf (0) (ind7) > 0 Then

Sheets (7). Cells (col + ind7 + 1, 9 + current + period * 7) = flvf (0) (ind7) * Sheets ("Units"). Cells (41,3)

End If

Next

'Flowing gas flowrate

Dim fgf

fgf = PltReaderObj. GetColumnVariableDataAt ("Flowing gas flowrate")

Dim Lower8, Upper8, ind8

Lower8 = LBound (fgf (0), 1)

Upper8 = UBound (fgf (0), 1)

Sheets (7). Cells (col + Lower8, 10 + current + period * 8) = "Flowing gas flowrate (" & Sheets ("Units"). Cells (44,4) & ")"

Sheets (7). Cells (col + Lower8, 10 + current + period * 8). Interior. Color = RGB (224, 255, 255)

For ind8 = Lower8 To Upper8 - 1

If fgf (0) (ind8) > 0 Then

Sheets (7). Cells (col + ind8 + 1, 10 + current + period * 8) = fgf (0) (ind8) * Sheets ("Units"). Cells (44,3)

End If

Next

'Flowing gas Volume flowrate

Dim fgvf

fgvf = PltReaderObj. GetColumnVariableDataAt ("Flowing gas Volume flowrate")

Dim Lower9, Upper9, ind9

Lower9 = LBound (fgvf (0), 1)

Upper9 = UBound (fgvf (0), 1)

Sheets (7). Cells (col + Lower9, 11 + current + period * 9) = "Flowing gas Volume flowrate (" & Sheets ("Units"). Cells (44,4) & ")"

Sheets (7). Cells (col + Lower9, 11 + current + period * 9). Interior. Color = RGB (224, 255, 255)

For ind9 = Lower9 To Upper9 - 1

If fgvf (0) (ind9) > 0 Then

Sheets (7). Cells (col + ind9 + 1, 11 + current + period * 9) = fgvf (0) (ind9) * Sheets ("Units"). Cells (44,3)

End If

Next

'Flowing oil Volume flowrate

Dim fovf

fovf = PltReaderObj. GetColumnVariableDataAt ("Flowing oil Volume flowrate")

Dim Lower10, Upper10, ind10

Lower10 = LBound (fovf (0), 1)

Upper10 = UBound (fovf (0), 1)

Sheets (7). Cells (col + Lower10, 12 + current + period * 10) = "Flowing oil Volume flowrate (" & Sheets ("Units"). Cells (47,4) & ")"

Sheets (7). Cells (col + Lower10, 12 + current + period * 10). Interior. Color = RGB (224, 255, 255)

For ind10 = Lower10 To Upper10 - 1

If fovf (0) (ind10) > 0 Then

Sheets (7). Cells (col + ind10 + 1, 12 + current + period * 10) = fovf (0) (ind10) * Sheets ("Units"). Cells (47,3)

End If

Next

' Flowing Watercut

Dim fw

fw = PltReaderObj. GetColumnVariableDataAt ("Flowing Watercut")

Dim Lower11, Upper11, ind11

Lower11 = LBound (fw (0), 1)

Upper11 = UBound (fw (0), 1)

Sheets (7). Cells (col + Lower11, 13 + current + period * 11) = "Flowing Watercut"

Sheets (7). Cells (col + Lower11, 13 + current + period * 11). Interior. Color = RGB (224, 255, 255)

For ind11 = Lower11 To Upper11 - 1

If fw (0) (ind11) > 0 Then

Sheets (7). Cells (col + ind11 + 1, 13 + current + period * 11) = fw (0) (ind11)

End If

Next

'Mean slug volume

Dim msv

msv = PltReaderObj. GetColumnVariableDataAt ("Mean Slug Volume")

Dim Lower12, Upper12, ind12

Lower12 = LBound (msv (0), 1)

Upper12 = UBound (msv (0), 1)

Sheets (7). Cells (col + Lower12, 14 + current + period * 12) = "Mean slug volume (" & Sheets ("Units"). Cells (50,4) & ")"

Sheets (7). Cells (col + Lower12, 14 + current + period * 12). Interior. Color = RGB (224, 255, 255)

For ind12 = Lower12 To Upper12 - 1

If msv (0) (ind12) > 0 Then

Sheets (7). Cells (col + ind12 + 1, 14 + current + period * 12) = msv (0) (ind12) * Sheets ("Units"). Cells (50,3)

End If

Next

'Mean slug length

Dim msl

msl = PltReaderObj. GetColumnVariableDataAt ("Mean Slug Length")

Dim Lower13, Upper13, ind13

Lower13 = LBound (msl (0), 1)

Upper13 = UBound (msl (0), 1)

Sheets (7). Cells (col + Lower13, 15 + current + period * 13) = "Mean slug length (" & Sheets ("Units"). Cells (53,4) & ")"

Sheets (7). Cells (col + Lower13, 15 + current + period * 13). Interior. Color = RGB (224, 255, 255)

For ind13 = Lower13 To Upper13 - 1

If msl (0) (ind13) > 0 Then

Sheets (7). Cells (col + ind13 + 1, 15 + current + period * 13) = msl (0) (ind13) * Sheets ("Units"). Cells (53,3)

End If

Next

'Mean slug frequency

Dim msf

msf = PltReaderObj. GetColumnVariableDataAt ("Mean Slug Frequency")

Dim Lower14, Upper14, ind14

Lower14 = LBound (msf (0), 1)

Upper14 = UBound (msf (0), 1)

Sheets (7). Cells (col + Lower14, 16 + current + period * 14) = "Mean slug frequency (1/m)"

Sheets (7). Cells (col + Lower14, 16 + current + period * 14). Interior. Color = RGB (224, 255, 255)

For ind14 = Lower14 To Upper14 - 1

If msf (0) (ind14) > 0 Then

Sheets (7). Cells (col + ind14 + 1, 16 + current + period * 14) = msf (0) (ind14)

End If

Next

'Friction pressure gradient

Dim fpg

fpg = PltReaderObj. GetColumnVariableDataAt ("Friction pressure gradient")

Dim Lower15, Upper15, ind15

Lower15 = LBound (fpg (0), 1)

Upper15 = UBound (fpg (0), 1)

Sheets (7). Cells (col + Lower15, 17 + current + period * 15) = "Friction pressure gradient"

Sheets (7). Cells (col + Lower15, 17 + current + period * 15). Interior. Color = RGB (224, 255, 255)

For ind15 = Lower15 To Upper15 - 1

If fpg (0) (ind15) > 0 Then

Sheets (7). Cells (col + ind15 + 1, 17 + current + period * 15) = fpg (0) (ind15)

End If

Next

'Errosional velocity

Dim ev

ev = PltReaderObj. GetColumnVariableDataAt ("Erosional Velocity")

Dim Lower17, Upper17, ind17

Lower17 = LBound (ev (0), 1)

Upper17 = UBound (ev (0), 1)

Sheets (7). Cells (col + Lower17, 18 + current + period * 16) = "Erosional Velocity (" & Sheets ("Units"). Cells (32,4) & ")"

Sheets (7). Cells (col + Lower17, 18 + current + period * 16). Interior. Color = RGB (224, 255, 255)

For ind17 = Lower17 To Upper17 - 1

If ev (0) (ind17) > 0 Then

Sheets (7). Cells (col + ind17 + 1, 18 + current + period * 16) = ev (0) (ind17) * Sheets ("Units"). Cells (32,3)

End If

Next

PltReaderObj. CloseWellFile

End If

End If

col = col + Upper + 2

Next

'End If

End Sub

Процедура Output (filename, period)

Sub Output (filename, period)

`доступ к библиотеке

Dim INetModel As New NET32COMLib. INetModel

Dim Results As New PNSREADERLib. PNSCom

'Sheets (5). Cells. Clear

`

Открыть доступ к файлу модели

Dim fn As String

fn = Sheets (1). Cells (1, 1)

INetModel. OpenModel fn

`доступ к файлу с результатами расчетов

pos = InStr (1, filename,". bpn", 1)

If (pos > 0) Then

filename = Left (filename, pos)

filename = filename + "pns"

End If

`Рабочие переменные

Dim param (7) As String

Dim count As Long

Dim objname As Variant

Dim indx As Integer, k

`объявление элементов массива с единицами изменерия

param (1) = "Pressure (" & Sheets ("Units"). Range ("D5") & ")"

param (2) = "Temperature (" & Sheets ("Units"). Range ("D2") & ")"

param (3) = "Mass Rate (" & Sheets ("Units"). Range ("D14") & ")"

param (4) = "Liquid rate (" & Sheets ("Units"). Range ("D11") & ")"

param (5) = "Gas Rate (" & Sheets ("Units"). Range ("D8") & ")"

param (6) = "GLR (" & Sheets ("Units"). Range ("D20") & ")"

param (7) = "Water Cut (%)"

k = 1

If (Results. ReadPnsFile (filename)) Then

Dim p As Integer

For p = 1 To 7

Sheets (5). Cells (k, 1) = param (p)

Sheets (5). Cells (k, 1). Font. Bold = True

Sheets (5). Cells (k, 1). Interior. Color = RGB (131, 111, 255)

INetModel. GetNameList 2, objname, count `список источников

k = k + 1

`имя исчтоника

For indx = 0 To count - 1

Sheets (5). Cells (k, 1) = objname (indx)

s = Sheets (5). Cells (k, 1)

`индекс источника

Dim index As Long

index = Results. GetNodeIndex (s)

Dim temp As Long

Select Case p

`Pressure

Case 1

temp = Results. GetNodeVariableValue (index, "Pressure")

If temp <> - 7777 Then

Sheets (5). Cells (k, 1 + period) = temp * Sheets ("Units"). Range ("C5")

k = k + 1

Else

Sheets (5). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`Temperature

Case 2

temp = Results. GetNodeVariableValue (index, "Temperature")

If temp <> - 7777 Then

Sheets (5). Cells (k, 1 + period) = (temp - 32) * 5/9

k = k + 1

Else

Sheets (5). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`MassRate

Case 3

temp = Results. GetNodeVariableValue (index, "MassRate")

If temp <> - 7777 Then

Sheets (5). Cells (k, 1 + period) = temp * Sheets ("Units"). Range ("C14")

k = k + 1

Else

Sheets (5). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`LiquidRate

Case 4

temp = Results. GetNodeVariableValue (index, "LiquidRate")

If temp <> - 7777 Then

Sheets (5). Cells (k, 1 + period) = temp * Sheets ("Units"). Range ("C11")

k = k + 1

Else

Sheets (5). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`GasRate

Case 5

temp = Results. GetNodeVariableValue (index, "GasRate")

If temp <> - 7777 Then

Sheets (5). Cells (k, 1 + period) = temp * Sheets ("Units"). Range ("C8")

k = k + 1

Else

Sheets (5). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`GLR

Case 6

temp = Results. GetNodeVariableValue (index, "GLR")

If temp <> - 7777 Then

Sheets (5). Cells (k, 1 + period) = temp * Sheets ("Units"). Range ("C20")

k = k + 1

Else

Sheets (5). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`Water Cut

Case 7

temp = Results. GetNodeVariableValue (index, "Water Cut")

If temp <> - 7777 Then

Sheets (5). Cells (k, 1 + period) = temp

k = k + 1

Else

Sheets (5). Cells (k, 1 + period) = "unset"

k = k + 1

End If

End Select

Next

k = k + 1

Next

End If

End Sub

Функции для работы с периодами

Function periodiBO (rows, coulmns, sh) As Integer

Dim number As Integer

number = 1

periodiBO = 0

If Sheets (sh). Cells (rows + number, coulmns + number) <> "" Then

Do While Sheets (sh). Cells (rows + 1, coulmns + number) <> ""

periodiBO = periodiBO + 1

number = number + 1

Loop

End If

End Function

Function periodiCO (rows, coulmns, sh) As Integer

Dim number As Integer

number = 1

periodiCO = 0

Do While Sheets (sh). Cells (rows + 1, coulmns + number) <> ""

periodiCO = periodiCO + 1

number = number + 1

Loop

End Function

Function periodi () As Integer

Dim INetModel As New NET32COMLib. INetModel

Dim count As Long

Dim cnt As Long

filename = Sheets (1). Range ("A1")

INetModel. OpenModel filename

'Opredelenie periodov

Dim period () As Integer

l = 1

INetModel. GetNameList 2, objname, count

INetModel. GetNameList 3, objnm, cnt

ReDim period (1 To count + cnt + 1)

period (1) = periodiBO (11, 4, 1)

For kl = 0 To count - 1

Do While Sheets (2). Cells (l, 1) <> objname (kl)

l = l + 1

Loop

If Sheets (2). Cells (l, 1) = objname (kl) Then

period (kl + 2) = periodiBO (l, 1,2)

l = 1

End If

Next

For kl = 0 To cnt - 1

Do While Sheets (3). Cells (l, 1) <> objnm (kl)

l = l + 1

Loop

If Sheets (3). Cells (l, 1) = objnm (kl) Then

period (kl + count + 2) = periodiBO (l, 1,2)

l = 1

End If

Next

periodi = period (1)

For kl = 2 To count + 1 + cnt

If period (kl) <= periodi Then

periodi = period (kl)

End If

Next

End Function

Function per () As Integer

Dim INetModel As New NET32COMLib. INetModel

Dim count As Long

filename = Sheets (1). Range ("A1")

INetModel. OpenModel filename

'Opredelenie periodov

Dim period As New Collection

l = 1

INetModel. GetNameList 2, objname, count

period. Add periodiCO (21, 1, 1)

For kl = 0 To count - 1

Do While Sheets (2). Cells (l, 1) <> objname (kl)

l = l + 1

Loop

If Sheets (2). Cells (l, 1) = objname (kl) Then

period. Add periodiCO (l + 1, 1,2)

l = 1

End If

Next

Dim t As Integer

For kl = 1 To period. count

If period (kl) <> 0 Then

per = period (kl)

If period (kl) <= per Then

per = period (kl)

End If

End If

Next

End Function

Процедура Boundary_Click ()

Sub Boundary_Click ()

`доступ к библиотеке

Dim INetModel As New NET32COMLib. INetModel

`форматирование ячеей с надписями и подсказками

Range ("filename"). Interior. Color = RGB (131, 111, 255)

Range ("A5"). Interior. Color = RGB (224, 255, 255)

Range ("B5") = "-Cells for new values"

'Open model. Type of model

Dim filename As String

Dim errorStr As String

Dim tip As Integer

`форматирование страниц файла

Sheets (2). name = "Sources"

Sheets (2). Cells. Clear

Sheets (3). name = "Sinks"

Sheets (3). Cells. Clear

Sheets (4). name = "Branch_Out"

Sheets (4). Cells. Clear

Sheets (5). name = "Source_Out"

Sheets (5). Cells. Clear

Sheets (1). Range ("F5") = 0

`открыт доступ к файлу модели

filename = Range ("A1")

INetModel. OpenModel filename

INetModel. GetLastError errorStr

Sheets (1). name = "Main"

Sheets (1). Range ("A10: AA40"). Clear

'Boundary Conditions

`рабочие пееменные

Dim count As Long, lastcount, inx

Dim objname As Variant, lis

Dim s As String

Dim pres As Double, pess

Dim temp As Double, tempe

Dim d As Double

Dim l As Long

Dim coun As Long

Dim chyd As Long

Dim caqu As Long

Dim all As Variant, hyd, aqu, mol

Dim k As Integer, ll, m, p

Dim w As Integer

w = 1

tip = INetModel. FluidModelType`определяем тип модели

If tip = 0 Then

SourceBO`считывание для источников

FlowCor 25

End If

If tip = 1 Then

SourceComp `считывание для источников

FlowCor 11

End If

Prop `вызов метода считывания параметров для модели в целом

Sink_page`вызов метода считывания параметров стоков

End Sub

Процедура-событие AfteRun_Click ()

Sub AfteRun_Click ()

`ячейка и с именем файла

Dim filename As String

filename = Sheets (1). Range ("A1")

Dim OK As Boolean

OK = Result (filename, 1) `вызов процедуры считывания результатов

Dim flnm As String

flnm = Sheets (1). Range ("A1")

Output flnm, 1 `вызов процедуры с результатами для участков сети

Branch_out flnm, 1, 1`вызов процедуры с профилем сети

End Sub

Функция Result (filename, period) As Boolean

Function Result (filename, period) As Boolean

`доступ к библиотекам

Dim INetModel As New NET32COMLib. INetModel

Dim Results As New PNSREADERLib. PNSCom

'Sheets (4). Cells. Clear

`доступ к файлу модели открыт

INetModel. OpenModel filename

`путь к файлу с результатами расчетов

pos = InStr (1, filename,". bpn", 1)

If (pos > 0) Then

filename = Left (filename, pos)

filename = filename + "pns"

End If

`рабочие переменные

Dim param (7) As String

Dim count As Long

Dim objname As Variant

Dim indx As Integer, k

`массив параметров с единицами изменения

param (1) = "Pressure (" & Sheets ("Units"). Range ("D5") & ")"

param (2) = "Temperature (" & Sheets ("Units"). Range ("D2") & ")"

param (3) = "Mass Rate (" & Sheets ("Units"). Range ("D14") & ")"

param (4) = "Liquid rate (" & Sheets ("Units"). Range ("D11") & ")"

param (5) = "Gas Rate (" & Sheets ("Units"). Range ("D8") & ")"

param (6) = "GLR (" & Sheets ("Units"). Range ("D20") & ")"

param (7) = "Water Cut (%)"

'param (8) = "Max Pres"

k = 1

`считывание результатов

If (Results. ReadPnsFile (filename)) Then

Dim p As Integer

For p = 1 To 7

`имя параметра

Sheets (4). Cells (k, 1) = param (p)

Sheets (4). Cells (k, 1). Font. Bold = True

Sheets (4). Cells (k, 1). Interior. Color = RGB (131, 111, 255)

INetModel. GetNameList 5, objname, count

k = k + 1

For indx = 0 To count - 1

`имя участка сети

Sheets (4). Cells (k, 1) = objname (indx)

s = Sheets (4). Cells (k, 1)

`индекс участка сети

Dim index As Long

index = Results. GetBranchIndex (s)

Dim temp As Long

Select Case p

`Pressure

Case 1

temp = Results. GetBranchInVariableValue (index, "Pressure")

If temp <> - 7777 Then

Sheets (4). Cells (k, 1 + period) = temp * Sheets ("Units"). Range ("C5")

k = k + 1

Else

Sheets (4). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`Temperature

Case 2

temp = Results. GetBranchOutVariableValue (index, "Temperature")

If temp <> - 7777 Then

Sheets (4). Cells (k, 1 + period) = (temp - 32) * 5/9

k = k + 1

Else

Sheets (4). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`MassRate

Case 3

temp = Results. GetBranchOutVariableValue (index, "MassRate")

If temp <> - 7777 Then

Sheets (4). Cells (k, 1 + period) = temp * Sheets ("Units"). Range ("C14")

k = k + 1

Else

Sheets (4). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`LiquidRate

Case 4

temp = Results. GetBranchOutVariableValue (index, "LiquidRate")

If temp <> - 7777 Then

Sheets (4). Cells (k, 1 + period) = temp * Sheets ("Units"). Range ("C11")

k = k + 1

Else

Sheets (4). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`GasRate

Case 5

temp = Results. GetBranchOutVariableValue (index, "GasRate")

If temp <> - 7777 Then

Sheets (4). Cells (k, 1 + period) = temp * Sheets ("Units"). Range ("C8")

k = k + 1

Else

Sheets (4). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`GLR

Case 6

temp = Results. GetBranchOutVariableValue (index, "GLR")

If temp <> - 7777 Then

Sheets (4). Cells (k, 1 + period) = temp * Sheets ("Units"). Range ("C20")

k = k + 1

Else

Sheets (4). Cells (k, 1 + period) = "unset"

k = k + 1

End If

`Water Cut

Case 7

temp = Results. GetBranchOutVariableValue (index, "Water Cut")

If temp <> - 7777 Then

Sheets (4). Cells (k, 1 + period) = temp

k = k + 1

Else

Sheets (4). Cells (k, 1 + period) = "unset"

k = k + 1

End If

End Select

Next

k = k + 1

Next

Result = True

Else

MsgBox "Error! Result file is empty!"

Result = False

End If

End Function

Процедуры запуска модели

Sub Run_Button ()

Dim filename As String

filename = Sheets (1). Range ("A1")

Run_Click (filename) `вызов метода на запуск модели

End Sub

Sub Run_Click (filename)

'Zapusk modeli

Dim INetModel As New NET32COMLib. INetModel

INetModel. OpenModel filename

INetModel.runNetwork2 False, "-B"

bRunning = INetModel. GetIsModelRunning

If bRunning Then

Range ("F3") = "Simulating. "

End If

While bRunning = True

bRunning = INetModel. GetIsModelRunning

newHour = Hour (Now ())

newMinute = Minute (Now ())

newSecond = Second (Now ()) + 1

waitTime = TimeSerial (newHour, newMinute, newSecond)

Application. Wait waitTime

Wend

Sheets (1). Range ("F3") = "Finished. "

End Sub

Процедуры установки значений для модели черной нефти

Sub SetBO (filename, n, m, period)

`доступ к библиотекам

Dim INetModel As New NET32COMLib. INetModel

Dim BlackOil As New FLUIDMODELCOMLib. IBlackOil

Dim gt As Integer

Dim OK As Boolean

`доступ к файлу модели

INetModel. OpenModel filename

Set BlackOil = INetModel. BlackOilDefault

`устновка параметров в нужных единицах измерения

BlackOil. name = "default"

BlackOil. Watercut = Sheets (1). Cells (n + 1, m + period)

BlackOil. API = (141.5 * 1000/Sheets (1). Cells (n + 2, m + period)) - 131.5

BlackOil. WaterSG = Sheets (1). Cells (n + 3, m + period)

BlackOil. GasSG = Sheets (1). Cells (n + 4, m + period)

gt = BlackOil. GOR_Type

If gt = 0 Then

BlackOil. GLR_SI = Sheets (1). Cells (n + 5, m + period)

End If

If gt = 1 Then

BlackOil. GOR_SI = Sheets (1). Cells (n + 5, m + period)

End If

If gt = 2 Then

BlackOil. LGR_SI = Sheets (1). Cells (n + 5, m + period)

End If

If gt = 3 Then

BlackOil. OGR_SI = Sheets (1). Cells (n + 5, m + period)

End If

INetModel. BlackOilDefault = BlackOil

OK = INetModel. SaveModel (filename)

End Sub

Sub SetSBO (filename, n, m, period)

`доступ к бибилиотекам

Dim INetModel As New NET32COMLib. INetModel

Dim BlackOil As New FLUIDMODELCOMLib. IBlackOil

Dim Over As New NET32COMLib. FluidModel


Подобные документы

  • Описание разработанной подсистемы автоматизации, алгоритм ее работы. Структуры базы данных и составных частей подсистемы. Затраты на разработку программного продукта и эффект от внедрения подсистемы. Руководство по работе с программным комплексом.

    дипломная работа [3,0 M], добавлен 02.02.2009

  • Разработка модуля автоматизации продажи автозапчастей. Проектирование информационной системы на основе базы данных в среде Microsoft SQL Server 2008. Структуры диалога и программного обеспечения. Описание запросов и отчетов к БД. Создание средств защиты.

    курсовая работа [1,1 M], добавлен 10.12.2014

  • Основные возможности программного пакета Microsoft Excel, его популярность среди бухгалтеров и экономистов. Использование математических, статистических и логических функций. Определение частоты наступления событий. Особенности ранжирования данных.

    презентация [1,1 M], добавлен 22.10.2015

  • Исследование возможности автоматизации забора и анализа статистических данных из различных систем. Разработка удобного и масштабируемого программного продукта для автоматизации построения маркетинговых отчетов. Защита внутрикорпоративной информации.

    дипломная работа [3,0 M], добавлен 28.01.2014

  • Проблемы автоматизации менеджмента в турфирмах для повышения эффективности систем управления и безопасности, расширения числа клиентов, решения маркетинговых задач. Внедрение компьютерных систем бронирования на примере Fidelio Hotel Management System.

    курсовая работа [268,3 K], добавлен 07.01.2015

  • Характеристика программного продукта Microsoft Outlook 2000. Принципы работы с редактором электронных таблиц Microsoft Excel и текстового редактора Microsoft Word. Методические указания при работе с СУБД Access. Анализ системы управления базами данных.

    контрольная работа [116,3 K], добавлен 13.11.2010

  • Технология формирования исходной матрицы числовой экономико-математической модели на основе заданной информации. Алгоритм решения задачи программным комплексом на примере использования Excel. Процедура возврата результатов решения в электронную таблицу.

    методичка [38,4 K], добавлен 05.07.2010

  • Порядок контроля и приемки программного продукта, предназначенного для автоматизации процесса анализа эффективности инвестиций и капитальных вложений. Состав входной и выходной информации. Описание функций программного комплекса. Руководство пользователя.

    курсовая работа [436,8 K], добавлен 28.05.2013

  • Определение параметров линейной зависимости из графика. Метод парных точек. Метод наименьших квадратов. Блок-схема программного комплекса в Microsoft Visual Studio и Microsoft Excel. Инструкция пользователя, скриншоты. Общий вид программного кода.

    курсовая работа [2,1 M], добавлен 29.11.2014

  • Понятие и специфика автоматизированных систем. Описание методики разработки программы для автоматизации. Ее тестирование и отладка. Внедрение АС в работу предприятия. Расчет экономического эффекта от разработки и реализации программного продукта.

    дипломная работа [1,4 M], добавлен 23.06.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.