⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fuelpack.bas

📁 利用VB开发的针对Maxim-Dallas DS2770电量检测芯片
💻 BAS
字号:
Attribute VB_Name = "Fuel_Pack"
Public RARC, RAAC, RAE, RART, RSRC, RSAC, RSE, RSRT, TTFC, TAD, LMD As Double
Public LastACR, FL, SEL, AEL As Single
Public CB, BatteryID, ProtectionSave, StatusSave, RatedCapacity, TADLSB, TADMSB As Integer
Public CC(5) As Single
Public D1(5) As Single
Public D2(5) As Single
Public CBT(3) As Integer
Public CET(3) As Integer
Public DateCode(2) As Integer
Public Const FP0 As Integer = 0, FP1 As Integer = 1, FP2 As Integer = 2, FP3 As Integer = 3, FP4 As Integer = 4
Public Const EV As Single = 2.5
Public Const Version As String = "Version 1.3"
Public Sub FP(x As Integer)
Dim i, Error As Integer
Dim A, B As Single
If (x = FP0) Then
ReadRealTime
MakeCalculations
For i = 1 To 3
If (Temperature <= (i * 10)) Then Exit For
Next i
FL = fnl(CC(i - 1), CC(i), Temperature, i * 10)
SEL = fnl(D1(i - 1), D1(i), Temperature, i * 10)
AEL = fnl(D2(i - 1), D2(i), Temperature, i * 10)
If ((FL - AEL) = 0) Then
RARC = 0
RAAC = 0
Else
RAAC = ACR - AEL
RARC = RAAC / (FL - AEL)
End If
If ((FL - SEL) = 0) Then
RSRC = 0
RSAC = 0
Else
RSAC = ACR - SEL
RSRC = RSAC / (FL - SEL)
End If
RAE = (EV + Voltage) / 2 * RAAC * 3.6
RSE = (EV + Voltage) / 2 * RSAC * 3.6
If (FL - AEL - RAAC) > CB Then
If Temperature > 20 Then
A = CET(1) - ((CET(1) - CET(0)) / 20) * (Temperature - 20)
B = CBT(1) - ((CBT(1) - CBT(0)) / 20) * (Temperature - 20)
Else
A = CET(2) - ((CET(2) - CET(1)) / 20) * (Temperature)
B = CBT(2) - ((CBT(2) - CBT(1)) / 20) * (Temperature)
End If
If ((FL - AEL - CB) <> 0) Then
TTFC = B + ((A - B) / (FL - AEL - CB)) * (FL - AEL - RAAC - CB)
End If
Else
If Temperature > 20 Then
B = CBT(1) - ((CBT(1) - CBT(0)) / 20) * (Temperature - 20)
Else
B = CBT(2) - ((CBT(2) - CBT(1)) / 20) * (Temperature)
End If
If CB <> 0 Then
TTFC = (B / CB) * (FL - AEL - RAAC)
End If
End If
If (LastACR - ACR) > 20 Then
TAD = TAD + (LastACR - ACR)
If TAD < 0 Then
TAD = 0
End If
LastACR = ACR
ElseIf (ACR > LastACR) Then
LastACR = ACR
End If
ElseIf (x = FP1) Then
frmEvalKit.cmdReadTable_Click
For i = o To 4
If CC(i) <= D1(i) Then
MsgBox "Warning:  Fuel Gauging Data is not valid!"
frmEvalKit.cmdStartFuelGauging_Click
Exit For
End If
Next i
ReadRealTime
MakeCalculations
For i = 1 To 3
If (Temperature <= (i * 10)) Then Exit For
Next i
FL = fnl(CC(i - 1), CC(i), Temperature, i * 10)
SEL = fnl(D1(i - 1), D1(i), Temperature, i * 10)
AEL = fnl(D2(i - 1), D2(i), Temperature, i * 10)
ElseIf (x = FP2) Then
ACR = AEL
UpdateACR (ACR)
LastACR = ACR
TADLSB = (TAD / 20) And &HFF
TADMSB = ((TAD / 20) And &HFF00) / &H100
If TADMSB > &HFF Then
TADMSB = &HFF
End If
DataIn(TAD_ADDRESS) = TADMSB And &HFF
DataIn(TAD_ADDRESS + 1) = TADLSB And &HFF
WriteBytes TAD_ADDRESS, 2
ElseIf (x = FP3) Then
ACR = FL
UpdateACR (ACR)
LastACR = ACR
TADLSB = (TAD / 20) And &HFF
TADMSB = ((TAD / 20) And &HFF00) / &H100
If TADMSB > &HFF Then
TADMSB = &HFF
End If
DataIn(TAD_ADDRESS) = TADMSB And &HFF
DataIn(TAD_ADDRESS + 1) = TADLSB And &HFF
WriteBytes TAD_ADDRESS, 2
ElseIf (x = FP4) Then
Error = FL - ACR
For i = 0 To 4
CC(i) = CC(i) - Error
Next i
DataIn(32) = (CC(0) And &HFF00) / &H100
DataIn(33) = CC(0) And &HFF
DataIn(34) = (CC(1) - CC(0)) And &HFF
DataIn(35) = (CC(2) - CC(1)) And &HFF
DataIn(36) = (CC(3) - CC(2)) And &HFF
DataIn(37) = (CC(4) - CC(3)) And &HFF
FL = fnl(CC(1), CC(2), 23, 20)
AEL = fnl(D2(1), D2(2), 23, 20)
LMD = FL - AEL
DataIn(38) = (LMD / 10) And &HFF
WriteBytes 32, 7
End If
End Sub
Public Function fnl(A As Single, B As Single, c As Double, d As Single) As Single
fnl = (((B - A) * (c - d)) / 10) + B
End Function

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -