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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值