📄 read_s7_300_real.bas
字号:
Attribute VB_Name = "Module1"
'*************************************************************************************
Public Function Read_S7_300_Real(DecimalInput As Long) As Double
'------------------十进制转二进制------------------------------------------------
Dim HighBit As Long '转换成二进制的最高位数
Dim AndResult As Long '相与后的结果
Dim BinaryString As String
Dim DecimalConvertBinary As String
Dim float_count(1024)
BinaryString = ""
HighBit = 1073741824
While (HighBit > 0.5) '
AndResult = HighBit And DecimalInput
If (AndResult <> 0) Then
BinaryString = BinaryString + "1"
Else
BinaryString = BinaryString + "0"
End If
HighBit = HighBit / 2 '每次右移一位
Wend
DecimalConvertBinary = BinaryString '存储的是二进制数的字符串
'******************************************************************************************
'-------------截取二进制位-----------------------------------------------------------------------------
Binary_String = Trim(DecimalConvertBinary)
BinaryStrLength = Len(Binary_String)
E_Binary_Length = BinaryStrLength - 23
E_Binary_Str = Left(Binary_String, E_Binary_Length)
E_Decimal = BinaryConvertDecimal(E_Binary_Str)
Exponent = E_Decimal - 127 '计算出的指数
Mantissa_Binary = Right(Binary_String, 23) '计算出的尾数
Mantissa = BinaryConvertDecimal(Mantissa_Binary)
'********************************************************************************************************
'---------------------------------------------------------------------------------------------
j = 1 'j
mm = 0
s1 = 0
While (j < 8388608)
k = j And Mantissa
If (k <> 0) Then
s1 = 1
Else
s1 = 0
End If
float_count(mm) = s1
mm = mm + 1
j = j * 2 '1,2,4,8,16,32,64,128,256...移动要相或的位数
Wend
x = float_count(0)
For Index = 1 To 23
x = Round(x / 2 + float_count(Index), 5)
Next Index
bb = Round(x, 5)
Read_S7_300_Real = (bb + 1) * 2 ^ Exponent
End Function
Public Function BinaryConvertDecimal(ByVal varString As String) As Long
Dim Slen As Long
Dim i As Long
Dim returnNum As Long
Slen = Len(varString)
For i = 0 To Slen - 1
returnNum = returnNum + Val(Mid(varString, i + 1, 1)) * (2 ^ (Slen - i - 1))
Next
BinaryConvertDecimal = returnNum
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -