vb向串口发送一串16进制的指令,实现通信

wanglinlin19910202 2015-03-28 06:37:35
求大神帮忙看看这个程序,输入的十进制最后怎么转换成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
...全文
405 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-03-30
  • 打赏
  • 举报
回复
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 

zdingyun 2015-03-29
  • 打赏
  • 举报
回复

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧