MSComm 控件的Input 属性及InputMode 属性探究

来源:百度文库 编辑:神马文学网 时间:2024/04/27 22:43:27
最近对MSComm 控件的Input 属性研究得出一些观点,提供给各位关心串口通信的爱好者。
当设置MSComm 控件的InputMode 属性为comInputModeText时,串口是按返回接收到的ASCII码在MSComm 控件转换成Unicode码。
以下代码可揭示上述结论:
Option Explicit
Dim strData As Variant
Private Sub Command1_Click()
Text2 = ""
End Sub
Private Sub Form_Load()
Text1 = ""
Text2 = ""
MSComm1.CommPort = 1
MSComm1.InputMode = comInputModeText '数据通过 Input 属性以文本形式取回。
MSComm1.RThreshold = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
MSComm1.InputLen = 1
End Sub
Private Sub MsComm1_OnComm() '接收数据
Dim BytReceived() As Byte
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
Text1 = ""
Text3 = MSComm1.InBufferCount '接收缓冲区的字节数
strBuff = MSComm1.Input '
BytReceived() = strBuff '
Dim i As Integer
For i = 0 To UBound(BytReceived)
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next
'数据处理代码
Dim sj As String
sj = Right(strData, 2) & Left(strData, 2)
Text1 = strData
Text2 = Text2 & ChrW(Val("&H" & sj))
strData = ""
End Select
End Sub
注意上述代码中设置MSComm 控件的InputMode 属性为comInputModeText,而接收是按2进制Byte字节的数组取出。
用一串口调试程序发送文本字节,单个汉字或单个ASCII字符(英文字母或0-9数字),你会发现,接收到汉字时MSComm1.InBufferCount值为2,接收A-Z(a-z,0-9)时MSComm1.InBufferCount值为1。同时Text2中显示分别是调试串口程序发送的单个汉字或单个ASCII字符(英文字母或0-9数字)。
当设置MSComm 控件的InputMode 属性为comInputModeBinary时,串口是按返回一数据组的二进制数据(Byte)字节的数组,但MSComm1.Input可赋值给一个String变量strBuff,在转赋值给Byte数组BytReceived(),而不会出现歧义,其接收代码如下:
Option Explicit
Dim strData As String
Private Sub Form_Load()
Text1 = ""
Text2 = ""
MSComm1.CommPort = 1
MSComm1.InputMode = comInputModeBinary '数据通过 Input 属性以文本形式取回。
MSComm1.RThreshold = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm() '接收数据
Dim BytReceived() As Byte
Dim strBuff As String
Select Case MSComm1.CommEvent
Case 2
MSComm1.InputLen = 0
Text1 = ""
Text2 = ""
Text3 = MSComm1.InBufferCount
strBuff = MSComm1.Input
BytReceived() = strBuff
Dim i As Integer
For i = 0 To UBound(BytReceived)
If Len(Hex(BytReceived(i))) = 1 Then
strData = strData & "0" & Hex(BytReceived(i))
Else
strData = strData & Hex(BytReceived(i))
End If
Next
Dim sj As String
sj = strData
Text1 = sj
Text2 = Chr(Val("&H" & sj))
strData = ""
'数据处理代码
End Select
End Sub
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zdingyun/archive/2008/09/23/2969936.aspx