+ -
当前位置:首页 → 问答吧 → VB MSCOMM控件读取16进制字串显示乱码问题,急!!!各位大哥,高手,前辈,老鸟们帮帮小弟啊!!!谢谢!!!

VB MSCOMM控件读取16进制字串显示乱码问题,急!!!各位大哥,高手,前辈,老鸟们帮帮小弟啊!!!谢谢!!!

时间:2011-10-31

来源:互联网

我想用MSCOMM控件读取PLC传过来的一组16进制字串,并显示在text1.text里,MSCOMM属性的设置为:
COM:port2
settings:19200,n,8,1(PLC的波特率为19200)
RThreshold:1
问题来了.........
当我分别以InputMode:comInputMdetext或者comIptModebinary读取时
text1.text显示的均是乱码。
comInputMdetext时显示乱码为:r、!之类的
comIptModebinary时显示乱码为:?、e之类的
具体代码如下,前辈们请帮忙解决这个问题啊,小弟在此谢谢了!!!!!
Dim send() As Byte, rev() As Byte, indata As Variant
Private Sub Command1_Click()
ReDim send(1 To 8) As Byte
send(1) = &H1
send(2) = &H3
send(3) = &H0
send(4) = &H14
send(5) = &H0
send(6) = &H10
send(7) = &H4
send(8) = &H2
MSComm1.Output = send()
Text1.Text = MSComm1.Input
End Sub
Private Sub Command2_Click()
MSComm1.PortOpen = False
End Sub
Private Sub Form_Load()
MSComm1.PortOpen = True
End Sub

作者: my6024305   发布时间: 2011-10-31

作者: Veron_04   发布时间: 2011-10-31


你想显示什么?

作者: of123   发布时间: 2011-10-31

VB code

Dim send() As Byte, rev() As Byte, indata As Variant
Private Sub Command1_Click()
ReDim send(1 To 8) As Byte
send(1) = &H1
send(2) = &H3
send(3) = &H0
send(4) = &H14
send(5) = &H0
send(6) = &H10
send(7) = &H4
send(8) = &H2
MSComm1.Output = send()
Sleep 20    '等待20ms,以便串口通信数据交换完成
Text1.Text = MSComm1.Input
End Sub
Private Sub Command2_Click()
MSComm1.PortOpen = False
End Sub
Private Sub Form_Load()
MSComm1.PortOpen = True
End Sub

作者: Veron_04   发布时间: 2011-10-31

我利用下面的代码,已经可以接收到串口的数据,且TEXT里没乱码了,但是这段代码中
str字符变量的长度会一直递加,有没有好的解决办法,使每次显示的时候不累加上次的
读值?
MSComm1.InputMode = comInputModeBinary
ReDim InData(MSComm1.InBufferCount)
InData = MSComm1.Input
For i = 0 To UBound(InData)
  If Len(Hex(InData(i))) = 1 Then
  str = str & "0" & Hex(InData(i)) & " "
  Else
  str = str & Hex(InData(i)) & " "
  End If
Next

作者: my6024305   发布时间: 2011-10-31

在发出命令后停顿一段时间是非常必要的
VB code

MSComm1.output=...
Sleep 30
MSComm1.InputMode = comInputModeBinary
ReDim InData(MSComm1.InBufferCount)
InData = MSComm1.Input
For i = 0 To UBound(InData)
  If Len(Hex(InData(i))) = 1 Then
  str = str & "0" & Hex(InData(i)) & " "
  Else
  str = str & Hex(InData(i)) & " "
  End If
Next

作者: Veron_04   发布时间: 2011-10-31

Do Until Len(str) < 8
  str = Mid(str, 8)
Loop
For i = 0 To UBound(InData)
  If Len(Hex(InData(i))) = 1 Then
  str = str & "0" & Hex(InData(i)) & " "
  Else
  str = str & Hex(InData(i)) & " "
  End If
Next

作者: of123   发布时间: 2011-10-31