求大神幫忙看看這個程式,輸入的十進制最后怎么轉換成16進制,串口通信怎么實作?目標指令碼如下:
FEFE FE 68 20 00 00 03 13 00 00 00 24 12 03 01 00 00 00 00 00 05 00 00 00 00 05 00 00 00 00 2C 0E 16
要求在第一列輸入的值如123456.78(最大為999999.99)轉換為78H 56H 34H 12H樣式并替換到00 00 00 00 05 00 00 00 00 05 00 00 00 00 2C之間(05 05 2C作為單位不變)并將指令發送到單片機,求大神幫忙分析一下錯誤,如何改正?
Private Sub Command2_Click()
Dim s As String, i As Integer, j As Integer, k As Integer, m(3) As Integer, a
s = Val(Text1.Text) * 100
j = Len(s)
For k = 0 To 7 - j Step 1
s = "0" & s
Next k
For i = 1 To Len(s) Step 2
Text5.Text = Text5.Text & Mid(s, Len(s) - i, 2) & " "
Next
m(3) = Mid(s, 1, 2)
Text6.Text = Val(m(3) \ 10) * 16 + Val(m(3) Mod 10)
' m(2) = Mid(s, 3, 2)
' m(1) = Mid(s, 5, 2)
' m(0) = Mid(s, 7, 2)
' a = Array(m(0), m(1), m(2), m(3))
' For i = 0 To 3
' Text6.Text = Text6.Text & " " & m(i) 'Text6 = Text6 & vbCrLf & m(0) & m(1) & m(2) & m(3)
' Next i
' s = Text2.Text * 100
' j = Len(s)
' For k = 0 To 7 - j Step 1
' s = "0" & s
' Next k
' For i = 1 To Len(s) Step 2
' Text6.Text = Text6.Text & Mid(s, Len(s) - i, 2) & " "
' Next
' s = Text3.Text * 100 '流量不能超過六位整數,考慮將*100去掉
' j = Len(s)
' For k = 0 To 7 - j Step 1
' s = "0" & s
' Next k
' For i = 1 To Len(s) Step 2
' Text7.Text = Text7.Text & Mid(s, Len(s) - i, 2) & " "
' Next
' Text4.Text = &H46&H45 &H46&H45 &H46&H45 &H46&H45 &H68 &H20 &HAA &HAA &HAA &HAA &HAA &HAA &HAA & vbCrLf & Text5.Text & " 05 " & Text6.Text & " 05 " & Text7.Text & " 2C 81 16"
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 3
MSComm1.Settings = "2400,N,8,1"
'MSComm1.InputMode = comInputModeText
MSComm1.InputLen = 1
MSComm1.RThreshold = 1
MSComm1.Output = cha$(46) + cha$(45)
'MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Dim buffer As String
buffer = MSComm1.Input
MSComm1.OutBufferCount = 0
End Sub
uj5u.com熱心網友回復:
參考:http://www.vbgood.com/thread-83700-1-1.htmluj5u.com熱心網友回復:
Option Explicit
Private Function Bytes2String(a() As Byte) As String
Dim s As String
Dim lCount As Long
Dim i As Long
lCount = UBound(a) + 1
s = Space$(lCount * 3)
For i = 0 To lCount - 1
Mid$(s, i * 3 + 1, 2) = Right$("0" & Hex(a(i)), 2)
Next
Bytes2String = s
End Function
Private Function String2Bytes(ByVal s As String) As Byte()
Dim a() As Byte
Dim lCount As Long
Dim i As Long
lCount = Len(s) \ 3
ReDim a(lCount - 1)
For i = 0 To lCount - 1
a(i) = CByte("&H" & Mid$(s, i * 3 + 1, 2))
Next
String2Bytes = a
End Function
Private Sub SetValue(aData() As Byte, ByVal index As Long, ByVal value As Double)
Dim s As String
s = Right$("0000000" & CStr(Int(value * 100)), 8)
aData(index + 0) = CByte("&H" & Mid$(s, 7, 2))
aData(index + 1) = CByte("&H" & Mid$(s, 5, 2))
aData(index + 2) = CByte("&H" & Mid$(s, 3, 2))
aData(index + 3) = CByte("&H" & Mid$(s, 1, 2))
End Sub
Private Sub Command2_Click()
Dim aData() As Byte
aData = String2Bytes("FE FE FE 68 20 00 00 03 13 00 00 00 24 12 03 01 00 00 00 00 00 05 00 00 00 00 05 00 00 00 00 2C 0E 16 ")
SetValue aData, 17, Val(Text1)
SetValue aData, 22, Val(Text2)
SetValue aData, 27, Val(Text3)
Text4 = Bytes2String(aData)
MSComm1.Output = aData
End Sub
下面是三個值分別為123456.78、3.777、98765432.1時的資料
FE FE FE 68 20 00 00 03 13 00 00 00 24 12 03 01 00 78 56 34 12 05 78 03 00 00 05 10 32 54 76 2C 0E 16
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/99683.html
標籤:VB基礎類
