百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

怎么用VB.NET进行串口通信-四川成都软件开发定制APP编程

yuyutoo 2024-10-12 01:33 7 浏览 0 评论

文-沙鸥-2018.11.9

1,前言

前一段时间一位认识的朋友找到我,知道我这里是做工控自动化、电路板、控制器、仪器仪表、软件APP开发定制的(业务QQ2531263726),于是跟我说要把一个指纹模块和他们公司的触摸屏结合起来做成一个系统,发来了资料看了一下,这个指纹模块可以用串口和USB与上位机通信,为了做起来简单一些优先选择串口通信。朋友请求先在电脑上和指纹模块把数据调通,那么我就计划先写个电脑桌面小软件测试一下,找到几年前做的一个项目,是用VB.NET做的上位机软件,里面有串口通信模块例程可以参考。

那么,本文就介绍一下怎么在VB.NET中使用串口控件与下位机电路板通信。

2,使用VB.NET串口的总体技术梗概和实现流程

VB.NET有一个控件叫做SerialPort,在左边的toolbox里面把它拖拽到窗体,并对SerialPort控件进行配置和调用就能使用电脑进行串口通信。

?串口的一般配置和使用的流程

3,一点一点详细介绍串口操作和例程

开弓第一步,先用手将弓拉开,把左侧工具栏的SerialPort控件拖拽放置到窗体里面,一般SerialPort控件会自动定位到窗体的下方。

3.1 引入命名空间

Imports System

Imports System.IO.Ports

这两行代码将VB.NET串口开发必要的函数引入本工程文件里面。

3.2 读取和选择串口号

‘功能:读取计算机串口,并将可用的串口号显示在一个下拉列表框里面

Sub GetSerialPortNames()

For Each sp As String In My.Computer.Ports.SerialPortNames

ComboBox1.Items.Add(sp) 'CompList是一个下列表框控件,显示计算机可用的串口号

Next

If ComboBox1.Items.Count >= 1 Then

ComboBox1.SelectedIndex() = 0 '

ComboBox1.Text = ComboBox1.SelectedItem.ToString

Else

MsgBox("请插入USB转串口线!", MsgBoxStyle.Information, "提示!")’假如是笔记本等没有串口的计算机,那么就需要买一根USB转串口线

End

End If

End Sub

以上程序就实现了将计算机上可以使用的串口号显示在软件界面的一个下拉列表框里面,假如计算机没有串口,可以使用USB转串口线,如没有插入,会提示你"请插入USB转串口线!"。

3.3 串口设置

串口在使用前需要进行一下配置,包括串口号、波特率、数据位、停止位、缓冲区大小等参数设置。

'功能:串口设置

Sub PortStart()

If SerialPort1.IsOpen Then SerialPort1.Close()

SerialPort1.PortName = ComboBox1.SelectedItem.ToString '计算机串口设置,可以使用下列表框选择

SerialPort1.BaudRate = 9600 '波特率设置

SerialPort1.DataBits = 8 '数据位设置

SerialPort1.StopBits = StopBits.One '停止位设置

SerialPort1.ReadBufferSize = 256 '设置输入缓冲区大小为?字节

SerialPort1.DtrEnable = True

SerialPort1.ReadTimeout = 500 '超时时间

SerialPort1.NewLine = vbCrLf '行结束符号

End Sub

3.4 打开串口

'功能:打开串口

Sub PortOpen()

If Not SerialPort1.IsOpen Then ''假如串口关着的,那么就打开串口

Try

Call PortStart()

SerialPort1.Open()

Catch ex As UnauthorizedAccessException

MsgBox("串口被占用或串口错误!", MsgBoxStyle.Information, "提示!")

End Try

End If

End Sub

把串口配置好后,就可以打开串口,进行后续的数据收发。

3.5 串口收发数据

?串口发送数据

Sub send(ByVal send_dat As Byte)

Dim senddata(0) As Byte

senddata(0) = send_dat

Try

SerialPort1.Write(senddata, 0, senddata.Length)

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

End Sub

以上程序段实现了串口数据发送,将待发送的数据存在数组senddata中,执行指令即可发送数据。

?串口接收数据

串口接收数据有两种方式,一种是中断接收方式,另一种是定时查询接收的方式。

>>中断接收方式

'触发接收事件

Public Sub Sp_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

Me.Invoke(New EventHandler(AddressOf Sp_Receiving)) '调用接收数据函数

End Sub

'接收数据

Private Sub Sp_Receiving(ByVal sender As Object, ByVal e As EventArgs)

Dim strIncoming As String

Try

receivebytes.Text = Str(Val(receivebytes.Text) + SerialPort1.BytesToRead)

If SerialPort1.BytesToRead > 0 Then

Threading.Thread.Sleep(100) '添加的延时

strIncoming = SerialPort1.ReadExisting.ToString '读取缓冲区中的数据

SerialPort1.DiscardInBuffer()

receivebox.Text = strIncoming

End If

Catch ex As Exception

MessageBox.Show(ex.Message)

End Try

End Su

>>定时查询接收方式

‘定时扫描串口接收数据

Dim ReceivedLen As Integer

Dim i As Integer

If SerialPort1.IsOpen Then ‘假如串口是打开的

If SerialPort1.BytesToRead > 0 Then ‘假如串口接收到数据字节不为0

ReceivedLen = SerialPort1.BytesToRead‘一次接收到的数据字节数

Dim inx(ReceivedLen) As Byte

SerialPort1.Read(inx, 0, inx.Length) ‘读取数据到数组inx中,读取索引从0到inx.Length之间的数据

End If

End If

3.6 关闭串口

'关闭à串口

Sub PortClose()

Try

SerialPort1.Close()

DrawCircle(New Point(400 * circle_X, 15 * circle_Y), 10 * circle_X, Brushes.Red)

Catch ex As Exception

MsgBox("串口未打开或串口异常!", MsgBoxStyle.Information, "提示!")

End Try

End Sub

使用完之后,关闭串口。

4,小结

以上本文就介绍了用VB.NET进行串口通信的一般流程和部分相关程序段,在实际过程中需要补充一些其他的控件和代码,就能实现一个完整的工程应用。

更多精彩,欢迎关注微信公众号“永珂在线”。

【参考】

vb.net利用SerialPort进行读取串口操作

https://blog.csdn.net/u011788252/article/details/53637993

相关推荐

VBA中利用Instr函数(vba int函数)

【分享成果,随喜正能量】每一个在你的生命里出现的人,都有原因,喜欢你的人给了你温暖和勇气,你喜欢的人让你学会了爱和自持,你不喜欢的人教会你宽容与尊重,不喜欢你的人让你自省与成长。。...

Insta360 Link体验:支持4K画质,一款使用场景丰富的AI云台摄像头

记者|王公逸伴随直播、线上会议需求的兴起,网络直播的需求愈发增大,8月2日,影石Insta360正式推出全新产品:Insta360Link,这是一款AI智能云台摄像头。从产品形态来说,Insta3...

VBA技术资料MF299:利用Instr进行文本查找

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VB...

Fabric.js 拖放元素进画布 - 掘金

本文简介点赞+关注+收藏=学会了学习Fabric.js,我的建议是看文档不如看demo。本文实现的功能:将元素拖进到画布中并生成对应的图形或图片。效果如下图所示:...

Vue3为什么推荐使用ref而不是reactive

为什么推荐使用ref而不是reactivereactive本身具有很大局限性导致使用过程需要额外注意,如果忽视这些问题将对开发造成不小的麻烦;ref更像是vue2时代optionapi的data的替...

Fabric.js 样式不更新怎么办?(js更改样式)

本文简介带尬猴,我嗨德育处主任不知道你有没有遇到过在使用Fabric.js时无意中一些骚操作修改了元素的样式,但刷新画布却没更新元素样式?如果你也遇到同样的问题的话,可以尝试使用本文的方法。...

Fabric.js 修改画布交互方式到底有什么用?

本文简介点赞+关注+收藏=学会了fabric.js为我们提供了很多厉害的方法。今天要搞明白的一个东西是canvas.interactive。官方文档对canvas.interact...

Rust Web编程:第五章 在浏览器上显示内容

我们现在正处于可以构建一个Web应用程序的阶段,该应用程序可以使用不同的方法和数据管理一系列HTTP请求。这很有用,特别是当我们为微服务构建服务器时。然而,我们也希望非程序员能够与我们的应...

Fabric.js 自由绘制椭圆 - 掘金(canvas画椭圆)

本文简介点赞+关注+收藏=学会了本文讲解在Fabric.js中如何自由绘制椭圆形,如果你还不了解Fabric.js,可以查阅《Fabric.js从入门到精通》。效果如下图所示...

手把手教你实现JS手搓"防抖"优化代码——专业的事用专业的方法!

前言在我们前端编程中,假如我们要给后端发送请求,万一手抖多点了几次,多发送了几遍怎么办?解决方案:防抖!这种事就要交给我们专业的“防抖”先生来处理!今天,我们就来教大家手搓“防抖”...

详解虚拟DOM与Diff算法(虚拟dom一定比实际dom快吗)

vue的虚拟DOM,Diff算法,其中一些关键的地方从别处搬运了一些图进行说明(感谢制图的大佬),也包含比较详细的源码解读。...

走进 React Fiber 的世界(我走进你的世界手势舞视频)

文/阿里淘系F(x)Team-冷卉Fiber设计思想Fiber是对React核心算法的重构,facebook团队使用两年多的时间去重构React的核心算法,在React16以上...

前端新一代框架 Svelte 火了!十个场景带你简单认识它!

近几年听到的主流框架都是Vue、React、Angular,但其实有一个框架在国外非常火,用起来也是很方便,那就是...

借助DeepSeek实现了一个PDF阅读器

1、简介使用pdf.js库加载和显示PDF文件。实现了翻页、缩放功能。提供了基本的错误处理。功能特点:支持选择本地PDF文件。可以逐页查看PDF内容。支持放大缩小功能。界面简洁,易于使...

DeepSeek代码之旅1:卫星地图标记方法之——html语言的实现

最近遇到一个任务,具体功能如下:1、调用高德地图API,图层为卫星图层,根据需要标记兴趣点;2、标记完成后可以保存兴趣点,便于下次加载历史兴趣点。...

取消回复欢迎 发表评论: