【VB.NET】使用SerialPort进行串口通信

在使用VB.NET作为开发语言的时候,在针对串口进行操作的时候,可以考虑使用微软提供的官方接口SerialPort进行开发。首先是导入相关头文件。

Imports System.IO.Ports

之后定义相关串口操作对象,并对其先关参数进行设定。笔者此处设置均是读取配置txt,而对其使用字符串进行设置也是可以的。

    Public WithEvents spone As New SerialPort '串口操作对象
    Public Sub Serial_Portpara() '设置串口参数 配置文本文件
        Dim lines As String()
        lines = IO.File.ReadAllLines("./config.txt")
        spone.BaudRate = Val(Mid(lines(0), 10, lines(0).Length - 8)) '波特率
        spone.PortName = Mid(mechinelistbox.Text, mechinelistbox.Text.Length - 4, 4) '串口名称
        spone.DataBits = Mid(lines(1), 10, lines(1).Length - 8) '数据位
        spone.StopBits = Mid(lines(2), 10, lines(2).Length - 8) '停止位
        spone.Parity = Mid(lines(3), 8, lines(3).Length - 7) '校验位
        spone.DtrEnable = Mid(lines(4), 11, lines(4).Length - 9)
        spone.RtsEnable = Mid(lines(5), 11, lines(5).Length - 9)
    End Sub

我们在对串口对象进行设置完成之后,使用它进行连接以及断开连接的操作了。其中,open以及close都是串口对象自带的函数。当进行open函数之后,程序就可以通过串口进行通信,而断开之后就无法进行通信了。所以,在程序开发的过程中,需要注意端口开关顺序的问题。

    Public Sub link() '连接函数
        Serial_Portpara()
        Try
            spone.Open() '打开串口
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
    Public Sub dislink() '断开函数
        Try
            spone.Close() '关闭串口
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

在开启串口对象之后就需要进行发送数据,以及接收数据两项操作。首先,接收相关数据,完成这一功能需要两个函数。一个是进行数据接收逻辑操作的函数,另一个则是开启新的线程监听消息的函数。

    Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles spone.DataReceived '接受函数
        Me.BeginInvoke(New EventHandler(AddressOf Sp_Receiving)) '调用接收数据函数
    End Sub

这个函数主要负责开启一个新的线程,运行接收数据的函数。根据spone的接收函数不同,我们可以接收以byte数组作为返回信息,也可以接收以字符串作为返回信息。下文使用的是将缓冲区的数据按照字符串的方式进行处理,之后根据协议操作符进行不同的操作。

    Public Sub Sp_Receiving(ByVal sender As Object, ByVal e As EventArgs) '接受函数响应逻辑
        Dim strIncoming As String '读取字符串 定义下位机ID 变量 以及比特数组
        Dim operation As String
        Dim num As String
        Dim i As Integer = 0
        Try '读取数值
            If spone.BytesToRead > 0 Then
                num = spone.BytesToRead
                strIncoming = spone.ReadExisting.ToString
                operation = Mid(strIncoming, 5, 2) '获取状态的值 
                End If
                Select Case CInt(operation) '根据数值记性响应逻辑 进行处理
                    Case 1
                    '相关操作
                    Case 2
                    '相关操作
                End Select
                spone.DiscardInBuffer()
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message) '把其他的情况进行抛出
        End Try
    End Sub

最后是关于串口发送数据,这部分比较简单,只需要把需要向下传递的byte数组以及想要发送的起始地址以及终止地址发送就可以了。

        Try
            dbpage.spone.Write(sendvalue, 0, sendvalue.Length)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

注意要点:在串口开发中,一般使用16进制进行数据操作。要注意在数据交换之中的大小端问题,以及传输与接收数据的格式。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值