我用串口调试助手每1000MS发送一个16进制的数如“01 02 0A AB 00 01 03 5C”.但我接收的时候,就没有了中间带字母的内容。请大家指点一下,我在学如何用MScomm接收数据。
Dim datatemp(1000) As Single
Dim num As Integer '用于存储采样个数
Dim temp As Integer '仪表号循环变量
Dim bytSend(1 To 8) As BytePrivate Sub CmdStart_Click()
Timer1.Enabled = True
End SubPrivate Sub CmdStop_Click()
Timer1.Enabled = False
End SubPrivate Sub Form_Load()
MSComm1.CommPort = 4
MSComm1.InputMode = comInputModeBinary
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
End Sub
'获取存储器测量值并显示
'每发送一条指令触发下面事件,并返回数据串
Private Sub MSComm1_OnComm()
Dim Inbyte() As Byte
Dim buffer As String
Dim datatemp2a, datatemp2b As String
Dim datdtemp2 As String
If num > 199 Then Call renew
Select Case MSComm1.CommEvent
Case comEvReceive
Inbyte = MSComm1.Input
For i = 0 To UBound(Inbyte)
If Len(Hex(Inbyte(i))) = 1 Then
buffer = buffer + "0" + Hex(Inbyte(i)) + Chr(32)
Else
buffte = buffte + Hex(Inbyte(i))
End If 'buffer = buffer + Hex(Inbyte(i)) + Chr(32)
Text1.Text = buffer
Next i
Case comEvSend
'Call Timer2_Timer
End Select
End Sub'每隔1000ms向9个测量仪发送读数据指令
Private Sub Timer1_Timer()
temp = temp + 1
If temp > 9 Then temp = 0
End Sub
'发送需要知道的测量设备的地址+读命令+寄存器地址+读的长度+CRC16校验
Sub order_num()
If temp = 1 Then
bytSend(1) = &H1
bytSend(2) = &H3
bytSend(3) = &H0
bytSend(4) = &H0
bytSend(5) = &H0
bytSend(6) = &H6
bytSend(7) = &HC5
bytSend(8) = &HC8
MSComm1.Output = bytSend
ElseIf temp = 2 Then
bytSend(1) = &H2
bytSend(7) = &HC5 'CRC16校验低位
bytSend(8) = &HFB 'CRC16校验高位
MSComm1.Output = bytSend
ElseIf temp = 3 Then
bytSend(1) = &H3
bytSend(7) = &HC4
bytSend(8) = &H2A
MSComm1.Output = bytSend
ElseIf temp = 4 Then
bytSend(1) = &H4
bytSend(7) = &HC5
bytSend(8) = &H9D
MSComm1.Output = bytSend
ElseIf temp = 5 Then
bytSend(1) = &H5
bytSend(7) = &HC4
bytSend(8) = &H4C
MSComm1.Output = bytSend
ElseIf temp = 6 Then
bytSend(1) = &H6
bytSend(7) = &HC4
bytSend(8) = &H7F
MSComm1.Output = bytSend
ElseIf temp = 7 Then
bytSend(1) = &H7
bytSend(7) = &HC5
bytSend(8) = &HAE
MSComm1.Output = bytSend
ElseIf temp = 8 Then
bytSend(1) = &H8
bytSend(7) = &HC5
bytSend(8) = &H51
MSComm1.Output = bytSend
ElseIf temp = 9 Then
bytSend(1) = &H9
bytSend(7) = &HC5
bytSend(8) = &HC8
MSComm1.Output = bytSend
Else
Exit Sub
End If
End Sub
'接收到一组数据后,即清空Private Sub Timer2_Timer()
buffer = ""
End Sub
Dim datatemp(1000) As Single
Dim num As Integer '用于存储采样个数
Dim temp As Integer '仪表号循环变量
Dim bytSend(1 To 8) As BytePrivate Sub CmdStart_Click()
Timer1.Enabled = True
End SubPrivate Sub CmdStop_Click()
Timer1.Enabled = False
End SubPrivate Sub Form_Load()
MSComm1.CommPort = 4
MSComm1.InputMode = comInputModeBinary
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
End Sub
'获取存储器测量值并显示
'每发送一条指令触发下面事件,并返回数据串
Private Sub MSComm1_OnComm()
Dim Inbyte() As Byte
Dim buffer As String
Dim datatemp2a, datatemp2b As String
Dim datdtemp2 As String
If num > 199 Then Call renew
Select Case MSComm1.CommEvent
Case comEvReceive
Inbyte = MSComm1.Input
For i = 0 To UBound(Inbyte)
If Len(Hex(Inbyte(i))) = 1 Then
buffer = buffer + "0" + Hex(Inbyte(i)) + Chr(32)
Else
buffte = buffte + Hex(Inbyte(i))
End If 'buffer = buffer + Hex(Inbyte(i)) + Chr(32)
Text1.Text = buffer
Next i
Case comEvSend
'Call Timer2_Timer
End Select
End Sub'每隔1000ms向9个测量仪发送读数据指令
Private Sub Timer1_Timer()
temp = temp + 1
If temp > 9 Then temp = 0
End Sub
'发送需要知道的测量设备的地址+读命令+寄存器地址+读的长度+CRC16校验
Sub order_num()
If temp = 1 Then
bytSend(1) = &H1
bytSend(2) = &H3
bytSend(3) = &H0
bytSend(4) = &H0
bytSend(5) = &H0
bytSend(6) = &H6
bytSend(7) = &HC5
bytSend(8) = &HC8
MSComm1.Output = bytSend
ElseIf temp = 2 Then
bytSend(1) = &H2
bytSend(7) = &HC5 'CRC16校验低位
bytSend(8) = &HFB 'CRC16校验高位
MSComm1.Output = bytSend
ElseIf temp = 3 Then
bytSend(1) = &H3
bytSend(7) = &HC4
bytSend(8) = &H2A
MSComm1.Output = bytSend
ElseIf temp = 4 Then
bytSend(1) = &H4
bytSend(7) = &HC5
bytSend(8) = &H9D
MSComm1.Output = bytSend
ElseIf temp = 5 Then
bytSend(1) = &H5
bytSend(7) = &HC4
bytSend(8) = &H4C
MSComm1.Output = bytSend
ElseIf temp = 6 Then
bytSend(1) = &H6
bytSend(7) = &HC4
bytSend(8) = &H7F
MSComm1.Output = bytSend
ElseIf temp = 7 Then
bytSend(1) = &H7
bytSend(7) = &HC5
bytSend(8) = &HAE
MSComm1.Output = bytSend
ElseIf temp = 8 Then
bytSend(1) = &H8
bytSend(7) = &HC5
bytSend(8) = &H51
MSComm1.Output = bytSend
ElseIf temp = 9 Then
bytSend(1) = &H9
bytSend(7) = &HC5
bytSend(8) = &HC8
MSComm1.Output = bytSend
Else
Exit Sub
End If
End Sub
'接收到一组数据后,即清空Private Sub Timer2_Timer()
buffer = ""
End Sub
这句改为:comInputModeText