Система управления программным комплексом для автоматизации расчётов трубопроводных систем
Автоматизация расчёта параметров сетей трубопроводов по годам на основе прогнозных показателей добычи и закачки с применением программного продукта 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