vba串口通讯实时接收

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vba串口通讯实时接收相关的知识,希望对你有一定的参考价值。

我的问题是:
我用vba与串口通讯,发送 操作能实现,但接收总是不行,缓冲区达到设置的字符数但不会触发OnComm事件。请会的人帮我修改一下程序。初始化代码和OnComm代码如下。

'初始化用户窗体时初始化串口,并打开端口
Private Sub UserForm_Initialize()
On Error GoTo Err1:
Set mscomm1 = CreateObject("MSCOMMLib.MSComm.1")
mscomm1.CommPort = 3 '使用 COM3
mscomm1.Settings = "9600,N,8,1" '9600 波特,无奇偶校验,8 位数据,一个停止位
mscomm1.RThreshold = 1 '缓冲区有1个字节就产生OnComm事件
mscomm1.RTSEnable = True
mscomm1.InputLen = 0 '为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。
mscomm1.InputMode = comInputModeText 'Input以二进制形式取回用comInputModeBinary,以文本形式取回是(缺省项)
mscomm1.OutBufferCount = 0 '清空发送缓冲区
mscomm1.InBufferCount = 0 '清空接收缓冲区

If mscomm1.PortOpen = False Then
mscomm1.PortOpen = True
开关.Caption = "断开"
UserForm1.Caption = "当前状态:已连接"
End If
Exit Sub
Err1:
MsgBox "无法打开COM口或该COM口被占用!", vbInformation, "系统提示"
End Sub

'接收到数据时触发OnComm
Private Sub MSComm1_OnComm()
Select Case mscomm1.CommEvent
Case comEvReceive
Dim Buffer As Variant
mscomm1.InputLen = 0
mscomm1.InputMode = comInputModeText
接收区.Value = MSComml.Input
Case Else
End Select
End Sub

参考技术A Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case comEvReceive   ' 收到 RThreshold # of
            Dim s As String, s2 As String
            s = MSComm1.Input
            s2 = Trim(s)   's2就是接受到的数据
        Case Else
    End Select
End Sub

追问

我现在遇到的问题是不会触发oncomm(),是不是初始化时设置有那里不对?麻烦帮我检查一下。

追答

那你必须要调用MSComm1_OnComm这个过程,比如在某个按钮事件过程或在计时过程。

本回答被提问者采纳
参考技术B 真是高科技啊,无能为力了。追问

总有人会的,群众的力量。

Unity实战100例Unity串口通讯的消息接收解析和

目录

一.串口通信介绍

1.串口通信

2.名词介绍 

1.上位机:

2.下位机:

3.串行端口

以上是关于vba串口通讯实时接收的主要内容,如果未能解决你的问题,请参考以下文章

Android串口通讯

串口通讯

单片机模拟串口通讯,将串口接收到的数据原样发送,收到的数据长度不同。怎样判断数据接收完毕?

C # 如何实现PC的串口通讯(一台PC 双串口通讯),以下程序设计为啥不能发送接收,错在了哪里吗?

Unity实战100例Unity串口通讯的消息接收解析和

STM32串口通讯问题