VB如何连续读取串口数据

VB如何连续读取串口数据,第1张

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

Option Explicit'强制变量声明

Private Sub Command1_Click() '发送

Dim number As Integer'定义整型

Dim outbyte(0) As Byte '定义字节数组

number = Val(Text1.Text)'转为数值型

outbyte(0) = CByte(number) '转化为慧迟字节型

MSComm1.OutBufferCount = 0 '清空发送缓冲区

MSComm1.Output = outbyte '发送

End Sub'结束

Private Sub Command2_Click()'按钮单击事件

MSComm1.PortOpen = False'关闭串口

Unload Form1'卸载form1

End Sub

Private Sub Form_Load()'窗体载入事件

MSComm1.CommPort = 1 '设置串口为com1

MSComm1.Settings = "9600,n,8,1" '通讯参数 波特率 奇偶校验 数据位 停止位

MSComm1.InputMode = comInputModeBinary '二进制接收

MSComm1.PortOpen = True '打开串口

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

MSComm1.RThreshold = 1 '缓冲区中接收到一个字符,就产生一次OnComm事件

End Sub

Private Sub MSComm1_OnComm() '有数据传送时触发

Dim indata As Variant'定义变量

Dim arr(0) As Byte'定义字节数组

Select Case MSComm1.CommEvent ''CommEvent属性:返回最近的通讯事件或错误。通过对它具体属性茄碧衫值的查询,我们就可以获得通讯事件和通 讯错误的完整信息。当其值是comEvReceive时表示接收到数据。

Case comEvReceive '有接收事件

indata = MSComm1.Input '接收到的数据存放到indata里

arr(0) = AscB(indata) '返回indata的值

Text2.Text = arr(0)'在text2中显示数据

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

End Select

End Sub

在窗体中添加颤腔

text1显示发送数据,

text2显示接收数据,

command1发送按钮,

mscomm1通讯控件,

该看懂了吧,再看不懂我没办法了,


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

原文地址:https://54852.com/yw/12360086.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存