重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

vb点虐 串口显示的简单介绍

在vb点虐 中如何使用dundas控件把串口中发送的数据即时显示出来

n = SerialPort1.BytesToRead '读取字节数 If n 0 Then '若字节数大于0.则执行以下操作

创新互联服务项目包括咸阳网站建设、咸阳网站制作、咸阳网页制作以及咸阳网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,咸阳网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到咸阳省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

ReDim rc(n) '重新定义rc的长度,(之前有定义过)

strrc = 0 '变量类型为字符串(string),一开始使它为0

For i = 1 To n

rc(i) = SerialPort1.ReadByte ‘读取数据

strrc += CStr(Hex(rc(i))) '这里Hex 函数 返回表示数的十六进制值的字符串

'CStr 函数 返回已被转换为字符串子类型的变体的表达式。

Next

TextBox1.Text = strrc '将strrc的值付给TextBox1.Text即可

End If

使用vb点虐 接收大量串口数据时,界面卡顿

上位机软件接收大量数据并显示,会造成界面卡顿,可采用双缓冲技术,即将数据存到内存,再将其绘制到界面,比将数据直接绘制到界面要省很多时间

添加在子进程里面,就加在你批量传输代码里的每一个传输后面,也就是大批量中的每传输一个数据就暂停一下,而不是每一个大批量才暂停一下。

VB点虐 串口传送回数据处理的问题

使用委托方式处理:

Public Class Form1

Dim mSTR As String

Dim strData As String

Dim strDat As String

Dim mRecvByte() As Byte

Dim Hexsj As String

Dim form2 As Form

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

Dim mSize As Integer = Me.SerialPort1.BytesToRead

ReDim mRecvByte(mSize - 1)

SerialPort1.Read(mRecvByte, 0, mSize)

BeginInvoke(New EventHandler(AddressOf ONMLoadA), SerialPort1.BytesToRead()) '使用委托方式显示接收到的字符串

End Sub

Sub ONMLoadA(ByVal sender As System.Object, ByVal e As System.EventArgs) '委托

strDat = ""

TextBox1.Text = ""

Dim i As Integer

For i = 0 To UBound(mRecvByte) 'mSize - 1

strData = strData  IIf(mRecvByte(i)  15, Hex(mRecvByte(i)), "0"  Hex(mRecvByte(i)))  " "

Next

Dim sj As Byte

For i = 1 To Len(strData) Step 3 '处理为ASCII字符

sj = Val("H"  Mid(strData, i, 2))

If sj  32 Or sj  128 Then '当接收字节中有Chr(0)时,其后字符被切割

strDat = strDat  "."

Else

strDat = strDat  Chr(sj)

End If

Next

TextBox1.Text = strDat '显示字符

TextBox2.Text = strData '显示为16进制

TextBox3.Text = Len(strData) / 3

End Sub

vb点虐 怎么用事件触发的方式读取串口数据

首先:

textbox里没有显示,是因为SerialPort1和TextBox2不是同一线程创建的,需要跨线程操作。需要用到委托,这样才能显示出来。

其次:

我觉得用串口的接收数据事件更好一些。

下面代码供参考:

'----------------------

'串口接收数据事件,其实比用定时器更好,

'触发事件的条件可以自己在form_load中设置ReceivedBytesThreshold属性数值,默认为ReceivedBytesThreshold=1

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

Dim strRecvData As String = ""

strRecvData = SerialPort1.ReadExisting

Call disPlayComData(strRecvData)

End Sub

Delegate Sub callback(ByVal strT As String) '定义委托

Sub showString(ByVal comdata As String) '显示结果

Me.TextBox1.Text = "结果:" comdata

End Sub

Sub disPlayComData(ByVal strTmp As String) '判定是否为跨线程

If Me.TextBox1.InvokeRequired Then

Dim d As New callback(AddressOf showString)

Me.Invoke(d, New Object() {strTmp})

Else

Me.TextBox1.Text = strTmp

End If

End Sub


网站栏目:vb点虐 串口显示的简单介绍
链接分享:http://cqcxhl.com/article/ddsdcds.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP