?? libprl.bas
字號:
Attribute VB_Name = "LibPrl"
Option Explicit
Rem 當(dāng)抽油桿在泵處斷脫時,僅考慮桿柱靜載、慣性載荷與摩擦載荷,懸點載荷計算
Sub PrlBrokenRod_Cal(WellType As String, NcalWell As Integer, XWell() As Single, SetWell() As Single, FaiWell() As Single, _
twell As Single, _
nrod As Integer, drod() As Single, lrod() As Single, spr As Single, rpm As Single, _
dpump As Single, lpump As Single, SCrudeOil As Single, sp As Single, nw As Single, mu As Single, dtubei As Single, _
poil As Single, pcase As Single, hmove As Single, tanchor As String, _
Ncal As Integer, pr() As Single, vpr() As Single, apr() As Single, prl() As Single, _
PrlMax As Single, PrlMin As Single)
Dim k As Integer, i As Integer, j As Integer
Dim wr As Single, wrbar As Single, FL As Single
Dim arod As Single, srod As Single, qrod(5) As Single
Dim soil As Single, swater As Single, swo As Single, ps As Single, pd As Single
Dim f_boxing_cal As Single, p_boxing As Single, dprlj As Single
Dim scale_pump As Integer, gama As Single
Dim znr As Single
Dim XPump(2500) As Single, llpump(2500) As Single, fe_s(2500) As Single
soil = SCrudeOil
swater = 1000
swo = (1 - nw) * soil + nw * swater
wr = 0
For i = 1 To nrod
qrod(i) = pi / 4 * drod(i) ^ 2 * 7850 * 9.8 * 1.05
wr = wr + qrod(i) * lrod(i)
Next i
wrbar = wr * (1 - swo / 7850)
FL = wr * swo / 7850
For j = 0 To Ncal
pr(j) = Abs(pr(j))
XPump(j) = pr(j)
llpump(j) = -FL
Next j
Call Znr_Cal(spr, rpm, mu, drod(1), znr)
For j = 0 To Ncal
prl(j) = wrbar + wr * apr(j) / 9.8 * 1.2
dprlj = 0
For i = 1 To nrod
arod = pi / 4 * drod(i) ^ 2
srod = 7850
dprlj = dprlj + znr * srod * arod * lrod(i) * vpr(j)
Next i
prl(j) = prl(j) + dprlj
Next j
If Well_Type = "定向井" Then
Call PRL_Adding_Frt(WellType, NcalWell, XWell, SetWell, FaiWell, nrod, drod, lrod, _
Ncal, llpump, pr, vpr, apr, prl)
End If
Call PdCal(lpump, poil, nw, sp, SCrudeOil, pd)
ps = pd
scale_pump = 2
Call fe_slip(scale_pump, dpump, ps, pd, mu, Ncal, vpr, fe_s)
gama = 0.4
p_boxing = (1 + gama) * (1 - 2 * gama) / gama * poil * 2#
Call fe_boxing_cal(p_boxing, f_boxing_cal)
PrlMax = 0
PrlMin = 100000000
For j = 0 To Ncal
If vpr(j) >= 0 Then
prl(j) = prl(j) + fe_s(j) + f_boxing_cal
Else
prl(j) = prl(j) + fe_s(j) - f_boxing_cal
End If
If prl(j) > PrlMax Then PrlMax = prl(j)
If prl(j) < PrlMin Then PrlMin = prl(j)
Next j
End Sub
Rem 直井多級桿柱頂端下部桿柱在液體中的重量
Sub wrbar_cal(nrod As Integer, drod() As Single, lrod() As Single, nw As Single, SCrudeOil As Single, wrbar() As Single)
Dim i As Integer, j As Integer, qrod(5) As Single, swo As Single
Dim swater As Single, soil As Single
Dim pi As Single
pi = 3.14159265
swater = 1000
soil = SCrudeOil
swo = nw * swater + (1 - nw) * soil
For i = 1 To nrod
qrod(i) = pi / 4 * drod(i) ^ 2 * 7850 * 9.8 * 1.05
Next i
For i = 1 To nrod
wrbar(i) = 0
For j = i To nrod
wrbar(i) = wrbar(i) + qrod(j) * lrod(j)
Next j
wrbar(i) = wrbar(i) * (1 - swo / 7850)
Next i
End Sub
Rem 柱塞與泵筒之間摩擦力
Sub fe_slip(scale_pump As Integer, dpump As Single, ps As Single, pd As Single, mu As Single, _
jcal As Integer, vpr() As Single, fe_s() As Single)
Dim deltr0 As Single, dpump0 As Single
Dim va As Single, deltr As Single, lp As Single, efcl As Single, delt_p As Single
Dim j As Integer, ndp As Integer
Dim pi As Single
pi = 3.14159265
deltr0 = 0.075 * 0.001
If scale_pump = 1 Then
deltr0 = 0.0225 * 0.001
ElseIf scale_pump = 2 Then
deltr0 = 0.0475 * 0.001
Else
deltr0 = 0.075 * 0.001
End If
deltr = deltr0
lp = 0.8
efcl = 0.1
delt_p = pd - ps
For j = 0 To jcal
va = vpr(j)
fe_s(j) = pi * lp * dpump * (delt_p * deltr / 2 / lp + mu * va / deltr / Sqr(1 - efcl ^ 2))
fe_s(j) = Abs(fe_s(j))
Next j
End Sub
Rem 游動閥液體阻力
Sub fe_valve(dpump As Single, nw As Single, mu As Single, SCrudeOil As Single, _
jcal As Integer, vpr() As Single, fe_v() As Single)
Dim j As Integer
Dim dpump1 As Single, d0 As Single
Dim swo As Single, va As Single, fp As Single, f0 As Single
Dim re As Single, cdis As Single
Dim gama As Single, vliquid As Single, nv As Single, ndp As Single
Dim soil As Single, swater As Single
Dim pi As Single
pi = 3.14159265
dpump1 = dpump * 1000
If dpump1 <= 44 Then d0 = 23
If dpump1 >= 70 Then d0 = 41
If dpump1 >= 44 And dpump1 <= 70 Then
d0 = 23 + (41 - 23) / (70 - 44) * (dpump1 - 44)
End If
d0 = d0 * 0.001
swater = 1000
soil = SCrudeOil
swo = nw * swater + (1 - nw) * soil
fp = pi / 4 * dpump ^ 2
f0 = pi / 4 * d0 ^ 2
For j = 0 To jcal
va = vpr(j)
gama = mu / swo
vliquid = va * (dpump / d0) ^ 2
re = d0 * Abs(vliquid) / gama
If re <= 3 * 1000# Then
cdis = 0.1
Else
cdis = 0.1 + 0.3 / (24 * 1000# - 3000#) * (re - 3000#)
If cdis >= 0.5 Then cdis = 0.5
End If
nv = 2
fe_v(j) = nv / cdis ^ 2 * (fp / f0) ^ 2 * va ^ 2 / 2 * swo * fp
If vpr(j) >= 0 Then
fe_v(j) = 0
Else
fe_v(j) = Abs(fe_v(j))
End If
Next j
End Sub
Sub fe_boxing_cal(p_boxing As Single, f_boxing As Single)
Dim h_boxing As Single
Dim d_prl As Single, gama As Single, p As Single
Dim pi As Single
pi = 3.14159265
gama = 0.4
h_boxing = 100 * 0.001
d_prl = 28 * 0.001
p = gama / (1 + gama) / (1 - 2 * gama) * p_boxing
p = pi * d_prl * h_boxing * p
f_boxing = p * 0.07 '摩擦系數(shù)0.07
End Sub
Rem 計算阻尼系數(shù)
Sub Znr_Cal(spr As Single, rpm As Single, mu As Single, drod_cal As Single, znr As Single)
If Well_Type = "定向井" Then
znr = 0.6
Else
znr = 0.4
End If
If mu * 1000# <= 100 Then
znr = znr + 0.5 * mu / 0.1
Else
znr = znr + 0.5 + 0.5 * (mu - 0.1) / (2 - 0.1)
End If
If Well_Type = "定向井" Then
If znr >= 2# Then znr = 2#
Else
If znr >= 1.5 Then znr = 1.5
End If
znr = znr + 0.8 * (rpm / 12) ^ 2
End Sub
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -