串口通信的问题
本人初学者,,下面是一段16进制接收的函数。。
Private Sub hexReceive()
On Error GoTo Err
Dim receiveArr() As Byte
Dim receiveData As String ' 数据暂存
Dim Counter As Integer ' 接收数据个数计数器
Dim i As Integer ' 循环变量
Dim z As Integer
If (MSComm.InBufferCount > 0) Then
Counter = MSComm.InBufferCount ' 读取接收数据个数
receiveData = "" ' 清缓冲
receiveArr = MSComm.Input ' 数据放入数组
For i = 0 To (Counter - 1) Step 1 ' 数据格式处理
If (receiveArr(i) < 16) Then
receiveData = receiveData & "0" + Hex(receiveArr(i)) & Space(1) ' 小于16,前面加0
Else
receiveData = receiveData & Hex(receiveArr(i)) & Space(1) ' 加空格显示
End If
Next i
Txtreceive.Text = Txtreceive.Text + receiveData & vbCrLf
End If
text1.text=receiveArr(32)
我用串口调试软件发了:FF 01 3C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 00 01 00 00 00 00 00 01 00 01 00 02 01 数据,,text1.text显示的内容是空,但是Txtreceive.Text接收到的是完整数据
请大家帮忙看下~
[解决办法]
LZ:你想Text1.text = receiveArr(32),实际做不到,可以将接收形成的16进制字符的最后2字符转换为10进制值西安市于Text1.texT
对你的接收代码放MSComm1_OnComm中,修改部分代码,
- VB code
Option Explicit Dim receiveData As String ' 数据暂存Private Sub Form_Load() MSComm1.InputMode = comInputModeBinary MSComm1.RThreshold = 1 MSComm1.PortOpen = True Txtreceive = "" Text1 = ""End SubPrivate Sub MSComm1_OnComm() Dim receiveArr() As Byte Dim i As Integer ' 循环变量 Dim z As Integer Select Case MSComm1.CommEvent Case 2 receiveArr = MSComm1.Input ' 数据放入数组 For i = 0 To UBound(receiveArr) ' 数据格式处理 If Len(Hex(receiveArr(i))) = 1 Then receiveData = receiveData & "0" + Hex(receiveArr(i)) '& Space(1) ' 小于16,前面加0 Else receiveData = receiveData & Hex(receiveArr(i)) '& Space(1) ' 加空格显示 End If Next i Text1.Text = Val("&H" & Mid(receiveData, 65, 2)) Txtreceive.Text = receiveData & vbCrLf End SelectEnd Sub