Скачиваний:
63
Добавлен:
13.02.2015
Размер:
141.82 Кб
Скачать

4. Составление блок-схемы алгоритма расчета стационарного режима простой гидравлической системы.

5.Написание (изменение) компьютерной программы для расчета стационарного режима простой гидравлической системы.

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)

'Нач.давление (Mna)

pn = Cells(6, 9)

'Давление (1-6) /Mna/

For i = 1 To 6: p(i) = .Cells(8, i + 4): Next i

'Коэффициент пропускной способности (1-7)

For i = 1 To 7: ak(i) = .Cells(9, i + 4): Next i

'Относительная лок. погрешность (%)

e = .Cells(11, 6)

'Вывод промежуточных результатов, 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(10) + ro * g * hg(2) * 0.000001

c = (p(10) - 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) = "промежуточный вывод": 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(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.00001

v(1) = ak(1) * Sgn(p(1) - p(7)) * Sqr(Abs(p(1) - p(7)))

v(2) = v(1)

p(8) = p(7) - Sgn(v(2)) * (v(2) / ak(2)) ^ 2

v(3) = ak(3) * Sgn(p(8) - p(2)) * Sqr(Abs(p(8) - p(2)))

v(4) = ak(4) * Sgn(p(8) - p(3)) * Sqr(Abs(p(8) - p(3)))

v(5) = ak(5) * Sgn(p(8) - p(4)) * Sqr(Abs(p(8) - p(4)))

v(6) = ak(6) * Sgn(p(8) - p(5)) * Sqr(Abs(p(8) - p(5)))

v(7) = ak(7) * Sgn(p(8) - p(6)) * Sqr(Abs(p(8) - p(6)))

fx = (v(2) - v(3) - v(4) - v(5) - v(6) - v(7)) * 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