vb怎样读取串口数据并进行处理?

vb怎样读取串口数据并进行处理?,第1张

VB6.0可使用MsComm控件实现串口通信。按通信协议和数据帧规约接收和处理数据。

MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

MSComm 控件提供下列两种处理通讯的方式:

事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在 Carrier Detect (CD) 或

Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm

事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent

属性。

在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。

尽管 MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。

未见串口打开语句,你的MSComm1_OnComm事件代码有些冲突,你究竟想以二进制接收还是以ASCII码接收:

Private Sub MSComm1_OnComm()

''

Dim Buffer As Variant

Select Case MSComm1.CommEvent

Case comEvReceive

MSComm1.InputLen = 0

MSComm1.InputMode = comInputModeBinary‘此处及后3句用前2句不用后2句,反之亦然

Buffer = MSComm1.Input

MSComm1.InputMode = comInputModeText

Buffer = AscB(MSComm1.Input)

Text1.Text = Buffer

Case Else

End Select

''

End Sub

VB6.0MsComm控件可以利用OnComm事件连续获取来自外设发送的信号。

基于:

1)MsComm控件的RThreshold 属性不为0和恰当的接收代码。

2)使用电脑主板物理COM口或PCI多串口卡上的COM口COM,这样的COM口是全双工的,发送与接收不会冲突。

3)高质量的接收代码和符合通信协议和数据帧规约的接收处理代码。

实例代码:

Private Sub Form_Load()

    MSComm1.InputMode = comInputModeBinary      '采用二进制传输

    MSComm1.InBufferCount = 0   '清空接受缓冲区

    MSComm1.OutBufferCount = 0  '清空传输缓冲区

    MSComm1.RThreshold = 1      '产生MSComm事件

    MSComm1.InBufferSize = 1024

    TxtSend = ""

    TxtSend = ""

    txtReceive = ""

    Text2 = ""

End Sub

Private Sub MSComm1_OnComm() '接收数据

    Dim strBuff As String

    Select Case MSComm1.CommEvent

        Case 2

            MSComm1.InputLen = 0

            strBuff = MSComm1.Input

            BytReceived() = strBuff

            jieshou

            lenInput = Len(strData)

            Text2 = lenInput \ 2

            '数据处理代码

    End Select

End Sub

Public Function jieshou() '接收数据处理为16进制

    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

    txtReceive = strData

End Function


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10800599.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存