- •Лабораторная работа №1
- •1.Схематическое изображение гидравлической модели с двумя закрытыми ёмкостями
- •2. Построение системы уравнений математического описания гидравлической системы
- •3. Информационная матица системы уравнений
- •4. Блок-схема гидравлической системы
- •5. Компьютерная программа на языке vba для расчета стационарного режима гидравлической системы
- •6. Расчётное исполнение модели
- •7. Выводы
4. Блок-схема гидравлической системы
P7 V1 V4
1 4
С Т А Р Т
Р1-Р6, К1-К7, НG Н,
g
8 7 F P9 V7 P8
11 10 2 5 11 H1 V2 V5
3 V3 V6 H1
(P7 P9 V1 V2
V4 V7
P10 V3 V5
V6)
6
H1
V1,V2,V3,V4,V5,V6,V7,P7,P9,P10
H1 P100
С Топ
12 13
H2
Рис.2 Блок-схема расчёта стационарного режима гидравлической системы.
При составлении данной блок-схемы использовалось два алгоритмических блока – стандартных алгоритма:
- метод половинного деления: алгоритмический блок (11) для определения Н1;
- вычисление корней квадратного уравнения: алгоритмические блоки (12), (13) для определения Н2 и Р10.
Топология гидравлической системы отображается вычислительными блоками слева от алгоритмического блока (11). Результатом расчета по вычислительным блокам (11), (10), (1), (2), (3), (8), (7), (4), (5), (6) является значение величины функции:
f = V7 – V4 – V5 – V6
которая используется стандартным модулем метода половинного деления в алгоритмическом блоке для определения уровня жидкости Н1 в первой емкости.
Первым шагом при составлении информационной матрицы – задаёмся начальным приближением переменной Н1. При этом определяем искомую величину Р9( уравнение для определения Р9 находится под номером (11) в построение системы уравнений математического описания гидравлической системы). Вторым шагом определяем Р7, при уже известных Р9 и Н1( уравнение 10). На 3-5 этапах решения определяем V1,V2,V3( уравнения 1,2,3). На 6-ом этапе находим V7, при уже известных V1,V2,V3 (уравнение 8). Шагом 7-10 является нахождение Р8,V4, V5,V6 ( уравнения 7,4,5,6). Шаг 12 и 13 помогает определить Р10 и Н2 посредством решения квадратного уравнения.
5. Компьютерная программа на языке vba для расчета стационарного режима гидравлической системы
Option Explicit
Option Base 1
Const np% = 10, nk% = 7, nv% = 13
Dim vm!(nk), v!(nk), ak!(nk), p!(np), hg!(2), h!(2)
Dim a!, b!, c!, e!, ro!, pn!, g!, x!
Dim i%, kl%, ipr%
Dim bu As Boolean
Public Sub stat()
ipr = 1
With Worksheets("Лист1")
' Высота емкостей (1-2) m
hg(1) = .Cells(4, 5): hg(2) = .Cells(5, 5)
'Плотность (кг/m3)
ro = .Cells(6, 5)
'Начальное давление (Мпа)
pn = .Cells(6, 9)
' Давление (1-6) /Мпа/
For i = 1 To 6: p(i) = .Cells(8, i + 4): Next i
' Коэф. пpопускной способности (1-7)
For i = 1 To 7: ak(i) = .Cells(9, i + 4): Next i
' Относительная локальная погpешность ( % )
e = .Cells(11, 6)
'вывод промежеточных результатов 0-нет, 1-частичный, 2-полный
kl = .Cells(10, 6)
End With
Worksheets("Лист2").Activate
Cells.Select
Selection.Clear
Range("a1").Select
If kl = 2 Then
Cells(ipr, 5) = "Промежуточный вывод": ipr = ipr + 1
Cells(ipr, 5) = "h": Cells(ipr, 6) = "p(7-9)": Cells(ipr, 7) = "vm": ipr = ipr + 1
End If
g = 9.815: e = e / 100: a = 0: b = hg(1) * (1 - e)
Call MPD(a, b, e, bu, x)
With Worksheets("Лист2")
If bu Then
a = ro * g * 0.000001: b = p(8) + ro * g * hg(2) * 0.000001
c = (p(8) - pn) * hg(2)
h(2) = (b - Sqr(b * b - 4 * a * c)) / 2 / a
p(10) = pn * hg(2) / (hg(2) - h(2))
For i = 1 To 7: vm(i) = v(i) * ro: Next i
.Cells(1, 1) = "РЕЗУЛЬТАТ"
.Cells(2, 1) = "h": .Cells(2, 2) = "p(7-10)": .Cells(2, 3) = "vm"
.Cells(3, 1) = h(1): .Cells(3, 2) = p(7): .Cells(3, 3) = vm(1)
.Cells(4, 1) = h(2): .Cells(4, 2) = p(8): .Cells(4, 3) = vm(2)
.Cells(5, 2) = p(9): .Cells(5, 3) = vm(3)
.Cells(6, 2) = p(10): .Cells(6, 3) = vm(4)
.Cells(7, 3) = vm(5)
.Cells(8, 3) = vm(6)
.Cells(9, 3) = vm(7)
Else
kl = 2
.Cells(1, 1) = "РЕШЕНИЯ НЕТ"
.Cells(2, 1) = "a": .Cells(2, 2) = "f(a)": .Cells(2, 3) = "b": .Cells(2, 4) = "f(b)"
.Cells(3, 1) = a
.Cells(ipr, 5) = "Промежуточный вывод a": ipr = ipr + 1
.Cells(ipr, 5) = "h": .Cells(ipr, 6) = "p(7-9)": .Cells(ipr, 7) = "vm": ipr = ipr + 1
.Cells(3, 2) = FUNC(a)
.Cells(3, 3) = b
.Cells(1, 5) = "Промежуточный вывод b": ipr = ipr + 1
.Cells(2, 5) = "h": .Cells(2, 6) = "p(7-9)": .Cells(2, 7) = "vm": ipr = ipr + 1
Cells(3, 4) = FUNC(b)
End If
End With
End Sub
Function FUNC(x!) As Single
Dim vm!(7), fx!
h(1) = x
p(9) = pn * hg(1) / (hg(1) - h(1))
p(7) = p(9) + ro * g * h(1) * 0.000001
v(1) = ak(1) * Sgn(p(1) - p(7)) * Sqr(Abs(p(1) - p(7)))
v(2) = ak(2) * Sgn(p(2) - p(7)) * Sqr(Abs(p(2) - p(7)))
v(3) = ak(3) * Sgn(p(3) - p(7)) * Sqr(Abs(p(3) - p(7)))
v(7) = (v(1) + v(2) + v(3)) * ro
p(8) = p(7) - Sgn(v(7)) * (v(7) / ak(7)) ^ 2
v(4) = ak(4) * Sgn(p(8) - p(4)) * Sqr(Abs(p(8) - p(4)))
v(5) = ak(5) * Sgn(p(8) - p(5)) * Sqr(Abs(p(8) - p(5)))
v(6) = ak(6) * Sgn(p(8) - p(6)) * Sqr(Abs(p(8) - p(6)))
fx = (v(7) - v(4) - v(5) - v(6)) * ro
For i = 1 To 7: vm(i) = v(i) * ro: Next i
If kl = 0 Then GoTo 400
If kl = 1 Then GoTo 300
Cells(ipr, 5) = h(1): Cells(ipr, 6) = p(7): Cells(ipr, 7) = vm(1): ipr = ipr + 1
Cells(ipr, 6) = p(8): Cells(ipr, 7) = vm(2): ipr = ipr + 1
Cells(ipr, 6) = p(9): Cells(ipr, 7) = vm(3): ipr = ipr + 1
Cells(ipr, 7) = vm(4): ipr = ipr + 1
Cells(ipr, 7) = vm(5): ipr = ipr + 1
Cells(ipr, 7) = vm(6): ipr = ipr + 1
Cells(ipr, 7) = vm(7): ipr = ipr + 1
300: Cells(ipr, 5) = "x = ": Cells(ipr, 6) = x: Cells(ipr, 7) = " fx = ": Cells(ipr, 8) = fx: ipr = ipr + 1
400: FUNC = fx
End Function
Sub MPD(a!, b!, eps!, bu As Boolean, xcon!)
Dim fa!, fb!, x!, fx!
fa = FUNC(a): fb = FUNC(b)
If fa * fb > 0 Then: bu = False: GoTo 100
Do
x = (a + b) / 2: fx = FUNC(x)
If fx * fa < 0 Then b = x Else a = x
Loop While Abs(a - b) > eps
xcon = Abs(a + b) / 2: bu = True
100:
End Sub
Sub auto_open()
Worksheets("Лист1").Activate
End Sub
Пояснения команд V. Basic:
Option Base 1 – задание нужного минимального значения индекса в начале программы. Константа определяет минимальное значение индекса, то есть 1;
Const – присвоение какой-либо величине постоянное значение( в данной программе фиксируемое количество р, v и к );
Dim – используется для объявления переменной, область действия которой ограничевается процедурой, которой она объявлена или модулем ( ! – действительное короткое, % - целое короткое );
Public Sub stat() – представляет собой самостоятельную програмную еденицу с уникальным именем, благодаря которой она может быть вызвана и выполнена
.Cells(7, 3) = vm(5) – оператор ввода в ячейку определённого значения ;
End Sub - окончание выполнения программы;
For i = 1 To 7: vm(i) = v(i) * ro: Next i – данной командой обеспечивается организация повторений, если их количество известно заранее. Если 17, то выполняется серия команд (1),
если значение «i» станет больше значения выражения 7, то выполняется серия команд (2).
Call MPD(a, b, e, bu, x) – значения фактических параметров (a, b, e, bu, x) присваиваются соответствующим формальным параметрам ;
If kl = 2 Then – оператор ветвления по условиям ( если kl равно 2, то выполняется группа операторов :Cells(ipr, 5) = "Промежуточный вывод": ipr = ipr + 1
Cells(ipr, 5) = "h": Cells(ipr, 6) = "p(7-9)": Cells(ipr, 7) = "vm": ipr = ipr + 1);
Do - оператор цикла
x = (a + b) / 2: fx = FUNC(x)
If fx * fa < 0 Then b = x Else a = x
Loop While Abs(a - b) > eps
xcon = Abs(a + b) / 2: bu = True
если условие Abs(a - b) > eps истина, то выполняется группа операторов:
x = (a + b) / 2: fx = FUNC(x)
If fx * fa < 0 Then b = x Else a = x
если условие не выполнимо, то:
xcon = Abs(a + b) / 2: bu = True