189 8069 5689

vb.net得到串口数量,vb串口通信

怎么实现用VB.NET把从单片机串口接收到的一个数组中的每个数依次分给不同的文本框显示出来?

这样写是错误的。

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、成都网站设计、定海网络推广、重庆小程序开发、定海网络营销、定海企业策划、定海品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供定海建站搭建服务,24小时服务热线:028-86922220,官方网址:www.cdcxhl.com

dim rcv as byte()=new byte(2){}

for i as integer =0 to 2

rcv(i)=serialPort.ReadExisting

next

TextBox1.Text = rcv(0)

TextBox2.Text = rcv(1)

TextBox3.Text = rcv(2)

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

首先:

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.NET向串口发送16进制的数的方法

应该是你的转换格式不正确,下面代码就是将文本框中以一个空格隔开的十六进制转为字节的代码,文本框中数字格式为:01 02 03

Dim TestArray() As String = Split(TextBox1.Text)

Dim hexBytes() As Byte

ReDim hexBytes(TestArray.Length - 1)

Dim i As Integer

For i = 0 To TestArray.Length - 1

hexBytes(i) = Val("h" TestArray(i))

Next

SerialPort.Write(hexBytes, 0, hexBytes.Length)

如果有问题可以再联系。

怎样在vb中自动检测到可用串口号的具体程序代码

vb.net的话

For

Each

sp

As

String

In

My.Computer.Ports.SerialPortNames

cbxport.Items.Add(sp)

Next

vb6.0的话要调用API查看串口相关信息存在的注册表。

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM

通过读注册表的方法获得串口数量,当然也可以获得串口号了。

Option

Explicit

Private

Declare

Function

RegOpenKey

Lib

"advapi32.dll

"

Alias

"RegOpenKeyA

"

(ByVal

hKey

As

Long,

ByVal

lpSubKey

As

String,

phkResult

As

Long)

As

Long

Private

Declare

Function

RegQueryInfoKey

Lib

"advapi32.dll

"

Alias

"RegQueryInfoKeyA

"

(ByVal

hKey

As

Long,

ByVal

lpClass

As

String,

lpcbClass

As

Long,

ByVal

lpReserved

As

Long,

lpcSubKeys

As

Long,

lpcbMaxSubKeyLen

As

Long,

lpcbMaxClassLen

As

Long,

lpcValues

As

Long,

lpcbMaxValueNameLen

As

Long,

lpcbMaxValueLen

As

Long,

lpcbSecurityDescriptor

As

Long,

lpftLastWriteTime

As

Long)

As

Long

Private

Const

HKEY_LOCAL_MACHINE

=

H80000002

'

获得当前系统的

COM

口的数量

Function

GetCOMCount()

As

Integer

Dim

ret

As

Long,

cntCOM

As

Long

RegOpenKey

HKEY_LOCAL_MACHINE,

"HARDWARE\DEVICEMAP\SERIALCOMM

",

ret

RegQueryInfoKey

ret,

"

",

0,

0,

0,

0,

0,

cntCOM,

0,

0,

0,

GetCOMCount

=

cntCOM

End

Function

Private

Sub

Command1_Click()

MsgBox

"您的机器有

"

GetCOMCount

"

个串口。

",

vbOKOnly,

"串口数量

"

End

Sub

VB.NET接收串口数据问题

不知道你是不是用51单片机往串口发数据,是的话那是因为51的SBUF最多存放8个字节,所以你发12个字节会分成两次发完。还有在接收的时候最好定义好通信协议,比如加一个侦头,一个侦尾,通过这两个字节的内容来接收数据。

老兄,提问还是给点悬赏分嘛,不要吝啬哪点分,知识是无价的,你给得越多,回答你的人才会越多。

VB.NET中,串口接收数大量数据时如果执行SerialPort.close动作,程序会卡死在这里

对同一个串口的操作应该放在单个线程里,你的程序应该将串口接收和串口关闭的执行都放在一个线程里进行,这样在接收数据的间隙就可以正常执行close动作。而不会造成两个线程都在操作串口。


当前文章:vb.net得到串口数量,vb串口通信
文章转载:http://cdxtjz.cn/article/hsggej.html

其他资讯