分享

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

 trgal 2010-11-19
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 = 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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多