📄 write_s7_300_real.bas
字号:
Attribute VB_Name = "Module3"
Public Function Write_S7_300_Real(ByVal Input_Real As Single) As Byte()
Dim Exponent As Integer
Dim Return_Array_real(10) As Byte
While (Input_Real > 1)
Input_Real = Input_Real / 2
Temp_Exponent = Temp_Exponent + 1
Wend
Mantissa = Input_Real * 2 '尾数
Exponent = Temp_Exponent - 1 + 127 '指数
Binary_Exponent = DecimalConvertBinary(Exponent)
Mantissa_String = Trim(Mantissa)
Digitis = Len(Mantissa_String) - 2 '长度减去小数点和小数点前面的数
ppp = Right(Mantissa_String, Digitis) '将小数点后的数取出
Real_Convert_Binary = ppp / 10 ^ Digitis
'-------------------------------------------------------------------------------
s = ""
Index = 1
For Index = 1 To 23
Real_Convert_Binary = Real_Convert_Binary * 2
If Real_Convert_Binary > 1 Then
s = s + "1"
Real_Convert_Binary = Real_Convert_Binary - 1
Else
s = s + "0"
End If
Next Index
Temp_Real_Convert_Binary_String = s
Real_Convert_Binary_String = Binary_Exponent + Temp_Real_Convert_Binary_String
'--------------------------------------------------------------------------------
Binary_String = Trim(Real_Convert_Binary_String)
BinaryStrLength = Len(Binary_String)
Third_EightBit = Right(Binary_String, 8) '第三个八位
Temp1 = Right(Binary_String, 16)
Second_EightBit = Left(Temp1, 8) '第二个八位
Temp2 = Right(Binary_String, 24)
First_EightBit = Left(Temp2, 8) '第一个八位
HighEightBit_Length = BinaryStrLength - 24
Zero_EightBit = Left(Binary_String, HighEightBit_Length) '第零个八位
'--------------------------------------------------------------------------------------
Return_Array_real(0) = BinaryConvertDecimal(Zero_EightBit)
Return_Array_real(1) = BinaryConvertDecimal(First_EightBit)
Return_Array_real(2) = BinaryConvertDecimal(Second_EightBit)
Return_Array_real(3) = BinaryConvertDecimal(Third_EightBit)
Write_S7_300_Real = Return_Array_real
End Function
Public Function DecimalConvertBinary(DecimalInput As Integer) As String
'------------------十进制转二进制------------------------------------------------
Dim HighBit As Long '转换成二进制的最高位数
Dim AndResult As Long '相与后的结果
Dim BinaryString As String
BinaryString = ""
HighBit = 256
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 '存储的是二进制数的字符串
'******************************************************************************************
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 + -