?? calculatekey.bas
字號:
Attribute VB_Name = "CalculateKEY"
Function XiaoChuxiaoshudian(BCDD As String, XiaoShuGeShu As Byte) As String
Dim ts() As String
Dim st As String
Dim redata As Long
'redata = Val(BCDstring)
Dim BCDstring As String
BCDstring = Trim(BCDD)
ts = Split(BCDstring, ".")
If UBound(ts) = 0 Then
ggggg1:
ts(0) = ts(0) & "0"
XiaoShuGeShu = XiaoShuGeShu - 1
If XiaoShuGeShu = 0 Then
XiaoChuxiaoshudian = ts(0)
Exit Function
End If
GoTo ggggg1
End If
ggggg:
If Len(ts(1)) < XiaoShuGeShu Then
ts(1) = ts(1) & "0"
GoTo ggggg
End If
BCDstring = ts(0) & ts(1) '消除小數點
XiaoChuxiaoshudian = BCDstring
'Dim i As Byte
'Dim datalen As Byte
'datalen = Len(BCDstring) '獲取
'redata = 0
'For i = 0 To datalen - 1
'st = Mid(ts(0), i, 1) '取
'Next i
End Function
Function Cal_main(Comm As String)
Dim i As Byte
Dim j As Byte
Dim M_OLD As Long '舊值
Dim TST As Long '測試值
Dim STD As Long '標準值
Dim M_NEW As Long '新值
Dim datad(3) As Byte
Dim NUM As Byte
For i = 0 To 11
If Comm = BiaoWei(i).Comm Then
Exit For
End If
Next i
NUM = i
For i = 0 To ZongHangShu - 1
If JiaoZhengCanShu(i, 3) = AdjustOperate(AdOpNUM1 - 1) Then
M_OLD = StringHexToLong(JiaoZhengCanShu(i, 7 + 2 * NUM))
If M_OLD >= 0 Then '原值已經取出
Select Case JiaoZhengCanShu(i, 0) '根據相關的獲取
Case "A相電壓補償系數" '取A相電壓
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).Voltage(0), 2))
STD = StandMeterData.Voltage(0)
Case "A相諧波電壓補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).HarmonicWave(0), 2))
STD = StandMeterData.Voltage(0)
Case "B相電壓補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).Voltage(1), 2))
STD = StandMeterData.Voltage(1)
Case "B相諧波電壓補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).HarmonicWave(1), 2))
STD = StandMeterData.Voltage(1)
Case "C相電壓補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).Voltage(2), 2))
STD = StandMeterData.Voltage(2)
Case "C相諧波電壓補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).HarmonicWave(2), 2))
STD = StandMeterData.Voltage(2)
Case "A相電流補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).Current(0), 3))
STD = StandMeterData.Current(0)
Case "A相諧波電流補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).HarmonicWave(3), 3))
STD = StandMeterData.Current(0)
Case "B相電流補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).Current(1), 3))
STD = StandMeterData.Current(0)
Case "B相諧波電流補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).HarmonicWave(3), 3))
STD = StandMeterData.Current(0)
Case "C相電流補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).Current(2), 3))
STD = StandMeterData.Current(0)
Case "C相諧波電流補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).HarmonicWave(3), 3))
STD = StandMeterData.Current(0)
Case "零序電流"
Case "A相功率補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).Power(1), 4))
STD = StandMeterData.Power(1)
Case "B相功率補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).Power(2), 4))
STD = StandMeterData.Power(2)
Case "C相功率補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).Power(3), 4))
STD = StandMeterData.Power(3)
Case "A相相角補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).PF(1), 3))
STD = StandMeterData.PF(1)
Case "B相相角補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).PF(2), 3))
STD = StandMeterData.PF(2)
Case "C相相角補償系數"
TST = Val(XiaoChuxiaoshudian(MeterData(NUM).PF(3), 3))
STD = StandMeterData.PF(3)
End Select
Select Case JiaoZhengCanShu(i, 6)
Case 1
M_NEW = DianYaBuChangXiShu(M_OLD, STD, TST)
Case 2
M_NEW = DianLiuBuChangXiShu(M_OLD, STD, TST)
Case 3
M_NEW = GongLvBuChangXiShu(M_OLD, STD, TST)
Case 4
M_NEW = GongLvYinShuBuChangXiShu(M_OLD, STD, TST)
End Select
'If M_NEW > 0 Then
JiaoZhengCanShu(i, 7 + 2 * NUM + 1) = LongToStringHex(M_NEW, 2, datad)
' Form1.MSFlexGrid2.Col = 4
' Form1.MSFlexGrid2.Row = i + 1
' Form1.MSFlexGrid2.CellAlignment = 1
' Form1.MSFlexGrid2.Text = JiaoZhengCanShu(i, 5)
'Else
' JiaoZhengCanShu(i, 5) = "??"
' Form1.MSFlexGrid2.Col = 4
' Form1.MSFlexGrid2.Row = i + 1
' Form1.MSFlexGrid2.CellAlignment = 1
' Form1.MSFlexGrid2.Text = "??"
'End If
End If
End If
Next i
End Function
Function LongToStringHex(daaa As Long, GeShu As Byte, datat() As Byte) As String
Dim temp As Long
Dim rest As String
rest = ""
If GeShu = 3 Then
temp = daaa And &HFF0000
temp = temp / &H10000
datat(2) = temp And &HFF
rest = HextoString(datat(2))
End If
temp = daaa And &HFFFF
temp = temp And &HFF00
temp = temp / &H100
datat(1) = temp And &HFF
rest = rest & HextoString(datat(1))
temp = daaa And &HFF
datat(0) = temp And &HFF
rest = rest & HextoString(datat(0))
LongToStringHex = rest
End Function
'M_NEW= M_OLD*(V_STD / V_TST)計算電壓補償系數
Function DianYaBuChangXiShu(M_OLD As Long, V_STD As Long, V_TST As Long) As Long
Dim M_NEW As Long
If V_TST = 0 Then
'DianYaBuChangXiShu = 0
DianYaBuChangXiShu = M_OLD
Exit Function
End If
M_NEW = M_OLD * (V_STD / V_TST)
DianYaBuChangXiShu = M_NEW
End Function
'M_NEW= M_OLD*(A_STD / A_TST)'電流補償系數
Function DianLiuBuChangXiShu(M_OLD As Long, A_STD As Long, A_TST As Long) As Long
Dim M_NEW As Long
If A_TST = 0 Then
'DianLiuBuChangXiShu = 0
DianLiuBuChangXiShu = M_OLD
Exit Function
End If
M_NEW = M_OLD * (A_STD / A_TST)
DianLiuBuChangXiShu = M_NEW
End Function
'M_NEW= M_OLD*(P_STD / P_TST)'功率補償系數
Function GongLvBuChangXiShu(M_OLD As Long, P_STD As Long, P_TST As Long) As Long
Dim M_NEW As Long
If P_TST = 0 Then
'GongLvBuChangXiShu = 0
GongLvBuChangXiShu = M_OLD
Exit Function
End If
M_NEW = M_OLD * (P_STD / P_TST)
GongLvBuChangXiShu = M_NEW
End Function
'M_NEW= M_OLD - 50000*( PF_STD - PF_TST )'功率因數
Function GongLvYinShuBuChangXiShu(M_OLD As Long, PF_STD As Long, PF_TST As Long) As Long
Dim M_NEW As Long
If M_OLD And &H8000 = &H8000 Then
M_OLD = &H10000 - M_OLD
M_OLD = 0 - M_OLD
End If
If PF_TST = 1 Then 'TST = 1
GongLvYinShuBuChangXiShu = 0
Exit Function
End If
If PF_TST = PF_STD Then
M_NEW = M_OLD
Else
M_NEW = M_OLD - 74500 * (PF_STD - PF_TST) / 1000
End If
If M_NEW < 0 Then
M_NEW = &H10000 + M_NEW
End If
GongLvYinShuBuChangXiShu = M_NEW
End Function
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -