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

来源:百度文库 编辑:九乡新闻网 时间:2024/05/02 15:01:52
MSComm 控件的Input 属性及InputMode 属性探究
最近对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 = 1End 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 SelectEnd 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 StringPrivate Sub Form_Load()    Text1 = ""    Text2 = ""    MSComm1.CommPort = 1    MSComm1.InputMode = comInputModeBinary '数据通过 Input 属性以文本形式取回。    MSComm1.RThreshold = 1    MSComm1.Settings = "9600,N,8,1"    MSComm1.PortOpen = TrueEnd 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 SelectEnd Sub 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zdingyun/archive/2008/09/23/2969936.aspx