使用VB编写串口通信中遇到的小问题

时间:2022-01-08 17:37:14
想通过串口通信软件以16进制的数据方式和外界设备进行通信,目前就是将Text控件中的内容通过MSComm发出去,但是由于Text中的内容是文本字符型怎样变为16进制发出去呢?还有MSComm控件说OUTPUT可以用二进制方式,但我在使用时为什么只能向MSComm.Output中放入字符型数据呢?

12 个解决方案

#1


也就是这句话不明白,“发送二进制数据,必须传递一个包含字节数组的 Variant 到 Output 属性。”

#2


Public Function HexToArr(Str As String) As Byte()
    Dim C As Integer, i As Integer, Arr() As Byte, CH As String
    On Error GoTo hErr
    C = Len(Str) \ 2 - 1
    ReDim Arr(C)
    For i = 0 To C
        CH = Mid(Str, i * 2 + 1, 2)
        Arr(i) = CByte("&H" & CH)
    Next
    HexToArr = Arr
hErr:
End Function

MSComm1.Output=HexToArr("AABBCC")

#3


引用 2 楼 bakw 的回复:
Public Function HexToArr(Str As String) As Byte()
    Dim C As Integer, i As Integer, Arr() As Byte, CH As String
    On Error GoTo hErr
    C = Len(Str) \ 2 - 1
    ReDim Arr(C)
    For i = 0 To C
        CH = Mid(Str, i * 2 + 1, 2)
        Arr(i) = CByte("&H" & CH)
    Next
    HexToArr = Arr
hErr:
End Function

MSComm1.Output=HexToArr("AABBCC")


谢谢bakw的帮助,正在自学VB中准备写一个串口通小软件,以后还有很多问题可能向您请教!

#5


推荐使用portmon软件辅助调试串口通信程序。

#6


如果你是直接发文本串的话你可以
MSComm1.Output = StrConv(Text1.Text,vbNarrow)
直接这样送出去

#7


dim arr() as byte
dim s as string
s="发送内容"
arr=strconv(s,vbfromunicode)    '字符串转字节数组
s=strconv(arr,vbunicode)        '字节数组转字符串

#8


引用 楼主 huhaomcu 的回复:
想通过串口通信软件以16进制的数据方式和外界设备进行通信,目前就是将Text控件中的内容通过MSComm发出去,但是由于Text中的内容是文本字符型怎样变为16进制发出去呢?还有MSComm控件说OUTPUT可以用二进制方式,但我在使用时为什么只能向MSComm.Output中放入字符型数据呢?


串口调试软件

#9


引用 4 楼 Veron_04 的回复:
http://download.csdn.net/detail/veron_04/4037248

这个程序有一个不好的地方,不能自动的搜索我PC机上存在的串口设备端口

#10


引用 2 楼 bakw 的回复:
Public Function HexToArr(Str As String) As Byte()
    Dim C As Integer, i As Integer, Arr() As Byte, CH As String
    On Error GoTo hErr
    C = Len(Str) \ 2 - 1
    ReDim Arr(C)
    For i = 0 To C
        CH = Mid(Str, i * 2 + 1, 2)
        Arr(i) = CByte("&H" & CH)
    Next
    HexToArr = Arr
hErr:
End Function

MSComm1.Output=HexToArr("AABBCC")


这是怎么回事啊,VB怎么说“实时错误,无效的属性值”?
  Dim Arr As Byte
  Arr = CByte("&H" & 11)
  MSComm1.Output = Arr
使用VB编写串口通信中遇到的小问题

#11



这要看你允许在 TextBox 中输入的字符集或者说字符串编码格式是什么了。

如果你允许输入的是字母、数字甚至汉字,那就应该用文本方式输出。

如果你允许输入的是十六进制字符串,就可以用二进制方式输出。输出前,将十六进制字符串转换成 Byte 数组。

“以16进制的数据方式和外界设备进行通信”是个伪命题。数据线上传输的只能是二进制编码,也就是用高低电平表示的 0 和 1。

#12


引用 10 楼 huhaomcu 的回复:
Quote: 引用 2 楼 bakw 的回复:

Public Function HexToArr(Str As String) As Byte()
    Dim C As Integer, i As Integer, Arr() As Byte, CH As String
    On Error GoTo hErr
    C = Len(Str) \ 2 - 1
    ReDim Arr(C)
    For i = 0 To C
        CH = Mid(Str, i * 2 + 1, 2)
        Arr(i) = CByte("&H" & CH)
    Next
    HexToArr = Arr
hErr:
End Function

MSComm1.Output=HexToArr("AABBCC")


这是怎么回事啊,VB怎么说“实时错误,无效的属性值”?
  Dim Arr As Byte
  Arr = CByte("&H" & 11)
  MSComm1.Output = Arr
使用VB编写串口通信中遇到的小问题




'你还是用这行代码吧,我最前面提到的方法是用16进制字符串的,下边这个方法是发送文本的.
MSComm1.Output = StrConv(Text1.Text,vbNarrow)

'你这个最好用数组
  Dim Arr() As Byte'声明成动态数组
  Redim Arr(0)'重新定义数组边界,Arr(0)表示只有一个元素的数组
  Arr(0) = CByte("&H" & "11")'十六进制串是字符串形式的,11最好加引号
  MSComm1.Output = Arr

#1


也就是这句话不明白,“发送二进制数据,必须传递一个包含字节数组的 Variant 到 Output 属性。”

#2


Public Function HexToArr(Str As String) As Byte()
    Dim C As Integer, i As Integer, Arr() As Byte, CH As String
    On Error GoTo hErr
    C = Len(Str) \ 2 - 1
    ReDim Arr(C)
    For i = 0 To C
        CH = Mid(Str, i * 2 + 1, 2)
        Arr(i) = CByte("&H" & CH)
    Next
    HexToArr = Arr
hErr:
End Function

MSComm1.Output=HexToArr("AABBCC")

#3


引用 2 楼 bakw 的回复:
Public Function HexToArr(Str As String) As Byte()
    Dim C As Integer, i As Integer, Arr() As Byte, CH As String
    On Error GoTo hErr
    C = Len(Str) \ 2 - 1
    ReDim Arr(C)
    For i = 0 To C
        CH = Mid(Str, i * 2 + 1, 2)
        Arr(i) = CByte("&H" & CH)
    Next
    HexToArr = Arr
hErr:
End Function

MSComm1.Output=HexToArr("AABBCC")


谢谢bakw的帮助,正在自学VB中准备写一个串口通小软件,以后还有很多问题可能向您请教!

#4


#5


推荐使用portmon软件辅助调试串口通信程序。

#6


如果你是直接发文本串的话你可以
MSComm1.Output = StrConv(Text1.Text,vbNarrow)
直接这样送出去

#7


dim arr() as byte
dim s as string
s="发送内容"
arr=strconv(s,vbfromunicode)    '字符串转字节数组
s=strconv(arr,vbunicode)        '字节数组转字符串

#8


引用 楼主 huhaomcu 的回复:
想通过串口通信软件以16进制的数据方式和外界设备进行通信,目前就是将Text控件中的内容通过MSComm发出去,但是由于Text中的内容是文本字符型怎样变为16进制发出去呢?还有MSComm控件说OUTPUT可以用二进制方式,但我在使用时为什么只能向MSComm.Output中放入字符型数据呢?


串口调试软件

#9


引用 4 楼 Veron_04 的回复:
http://download.csdn.net/detail/veron_04/4037248

这个程序有一个不好的地方,不能自动的搜索我PC机上存在的串口设备端口

#10


引用 2 楼 bakw 的回复:
Public Function HexToArr(Str As String) As Byte()
    Dim C As Integer, i As Integer, Arr() As Byte, CH As String
    On Error GoTo hErr
    C = Len(Str) \ 2 - 1
    ReDim Arr(C)
    For i = 0 To C
        CH = Mid(Str, i * 2 + 1, 2)
        Arr(i) = CByte("&H" & CH)
    Next
    HexToArr = Arr
hErr:
End Function

MSComm1.Output=HexToArr("AABBCC")


这是怎么回事啊,VB怎么说“实时错误,无效的属性值”?
  Dim Arr As Byte
  Arr = CByte("&H" & 11)
  MSComm1.Output = Arr
使用VB编写串口通信中遇到的小问题

#11



这要看你允许在 TextBox 中输入的字符集或者说字符串编码格式是什么了。

如果你允许输入的是字母、数字甚至汉字,那就应该用文本方式输出。

如果你允许输入的是十六进制字符串,就可以用二进制方式输出。输出前,将十六进制字符串转换成 Byte 数组。

“以16进制的数据方式和外界设备进行通信”是个伪命题。数据线上传输的只能是二进制编码,也就是用高低电平表示的 0 和 1。

#12


引用 10 楼 huhaomcu 的回复:
Quote: 引用 2 楼 bakw 的回复:

Public Function HexToArr(Str As String) As Byte()
    Dim C As Integer, i As Integer, Arr() As Byte, CH As String
    On Error GoTo hErr
    C = Len(Str) \ 2 - 1
    ReDim Arr(C)
    For i = 0 To C
        CH = Mid(Str, i * 2 + 1, 2)
        Arr(i) = CByte("&H" & CH)
    Next
    HexToArr = Arr
hErr:
End Function

MSComm1.Output=HexToArr("AABBCC")


这是怎么回事啊,VB怎么说“实时错误,无效的属性值”?
  Dim Arr As Byte
  Arr = CByte("&H" & 11)
  MSComm1.Output = Arr
使用VB编写串口通信中遇到的小问题




'你还是用这行代码吧,我最前面提到的方法是用16进制字符串的,下边这个方法是发送文本的.
MSComm1.Output = StrConv(Text1.Text,vbNarrow)

'你这个最好用数组
  Dim Arr() As Byte'声明成动态数组
  Redim Arr(0)'重新定义数组边界,Arr(0)表示只有一个元素的数组
  Arr(0) = CByte("&H" & "11")'十六进制串是字符串形式的,11最好加引号
  MSComm1.Output = Arr