手机版

百科游戏 手游攻略

vb串口通信视频教程(vb串口通信程序实例)

百科 2025-12-29 10:02:10 手游攻略 阅读:4846次

大家好,今天来为大家解答vb串口通信视频教程这个问题的一些问题点,包括vb串口通信程序实例也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

VB串口通信

以前做工程用的,你修改一下,可能对你有用,你看看吧

'======================串口初始化=======================

PrivateSubComm_initial(PortAsByte,BaudRateAsString,ParityBitAsString,DataBitAsInteger,StopBitAsInteger)

OnErrorGoToErrorTrap

IfMSComm1.PortOpen=TrueThenMSComm1.PortOpen=False'串口若已打开,则先关闭

MSComm1.CommPort=Port'设置端口号

MSComm1.Settings=BaudRate&","&ParityBit&","&DataBit&","&StopBit'设置波特率、校验位、数据位、停止位

MSComm1.InBufferSize=1024'设置接收缓冲区为1024字节

MSComm1.OutBufferSize=4096'设置发送缓冲区为4096字节

MSComm1.InBufferCount=0'清空输入缓冲区

MSComm1.OutBufferCount=0'清空输出缓冲区

MSComm1.SThreshold=1'发送缓冲区被清空时,触发OnComm事件

MSComm1.RThreshold=1'接收缓冲区每接收到一字节数据时,触发OnComm事件

MSComm1.PortOpen=True'打开串口

IfMSComm1.PortOpen=TrueThen

txtstatus.Text="STATUS:"&cboport.Text&"OPEND,"&cbobps.Text&","&Left(CboParity.Text,1)&","&Cbobit.Text&","&cbostop.Text

Else

txtstatus.Text="STATUS:COMPortCloced"

EndIf

ExitSub

ErrorTrap:

SelectCaseErr.Number

CasecomPortAlreadyOpen

MsgBox"串口冲突,请更改串口号",48,"公司车辆管理系统"

CloseCom

CaseElse

MsgBox"没有发现此串口,请确认连接",48,"公司车辆管理系统"

CloseCom

EndSelect

Err.Clear

EndSub

PrivateSubcmdclose_Click()

CallCloseCom

EndSub

PrivateSubcmdset_Click()

CallComm_initial(Val(Mid(cboport.Text,4,1)),cbobps.Text,Left(CboParity.Text,1),Val(Cbobit.Text),Val(cbostop.Text))

EndSub

PrivateSubForm_Load()

CallComm_initial(Val(Mid(cboport.Text,4,1)),cbobps.Text,Left(CboParity.Text,1),Val(Cbobit.Text),Val(cbostop.Text))'串口初始化

MSComm1.InputMode=comInputModeText'通过文本方式读取数据

EndSub

'=========================数据接收子程序=========================

PrivateSubdataReceive()

DimstrByte()AsString'数据分割用数组

DimreceiveDataAsString'接收数据暂存

DimiAsInteger

If(MSComm1.InBufferCount>0)Then

receiveData=http://www.hnrlzysc.com/post/""'清接收数据暂存

receiveData=http://www.hnrlzysc.com/post/MSComm1.Input'接收数据

'txtreceive.Text=txtreceive&receiveData

'===============数据在相应文本框里显示=======

strByte=Split(receiveData)

Fori=0ToUBound(strByte)

txt1(i).Text=strByte(i)

Nexti

txt1(8).Text=Now

EndIf

EndSub

'====================OnComm事件===========================

PrivateSubMSComm1_OnComm()

SelectCaseMSComm1.CommEvent'设置oncomm事件,读取片机内存的值

CasecomEvReceive

CalldataReceive

CaseElse

EndSelect

EndSub

'====================关闭串口子程序=====================

PrivateSubCloseCom()

OnErrorGoToErr

IfMSComm1.PortOpen=TrueThenMSComm1.PortOpen=False'串口若已打开,则关闭

txtstatus.Text="STATUS:COMPortCloced"

Err:

EndSub

vb串口通信编程,请高手帮忙

按你提供的C2C7FAE1看为16进制数,其10进制值为-1027081503,如何处理成-99.99要看下位机是如何约定数据的来定.

Text1=&HC2C7FAE1或Text1=VAL(&HC2C7FAE1)

一般上下位机对数字值传递通常以16位二进制数字传递,而小数点不传递,仅乘一定倍率来实现.同时16位二进制数字按两个8位(ASCII码值)输送,上位机通过程序代码处理成10进制数.

串口传送数据实质是传送ASCII码,如是8位二进制数据,其ASCII码值(10进制)为0-255。用二进制表示为00000000-11111111

16进制表示为00-FF

传送数据大于255,则用16位二进制(即2字节ASCII码组成)。10进制范围-32768到+32767。

如有小数,则应由上下位机约定,不进行发送。

串口通信中数制转换必须相当重视。

以上是以二进制方式收发数据。

也可直接以ASCII码的文本方式发送数据,而字节量大。

vb串口通信程序实例

我也是自己摸索开发出来的每一款VBtoCOM通讯,有具体的思路如下:

给你推荐一个工具“com串口测试工具ComToneV1.0中文绿色版”

1、打开你的噪音计的测试软件,调整好串口号、通讯频率等等,我用温度计举例说明。

开始查询后有返回数值,这个Receive:就是返回的数值000304012200004b05,

打开串口监视精灵,监视软件的com口事件:

这里面的Write是测试软件发出的查询指令,read是设备返回的数据指令

PrivateSubCommand1_Click()'发送指令

IfNotMSComm1.PortOpenThen

MSComm1.CommPort=7'串口为7

MSComm1.Settings="9600,n,8,1"

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

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

MSComm1.InputMode=comInputModeBinary'二进制接收

MSComm1.InputLen=0'读取接收缓冲区的所有字符

MSComm1.PortOpen=True'打开串口

MSComm1.RTSEnable=False'置为发送状态

EndIf

Dimpu()AsByte

DimstrdataAsString

Dimcrc_js()AsByte

ReDimpu(7)'这个数组是8位的查询指令

pu(0)="&H00"'温度计地址

pu(1)="&H03"'查询指令

pu(2)="&H00"'2、3为温度计地址

pu(3)="&H00"'2、3为温度计地址

pu(4)="&H00"'4、5为读取寄存器长度

pu(5)="&H02"'4、5为读取寄存器长度

pu(6)="&HC5"'6、7为CRC校验码因为我们不知道设备的CRC校验规则所以用测试软件产生的校验码

pu(7)="&HDA"'6、7为CRC校验码

MSComm1.Output=pu

'不做任何事情,仅仅允许其它应用程序处理它们的事件。

DoEvents

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

MSComm1.RThreshold=9'所要接收的数据长度,我们通过COM检测精灵看到了回传数据一共是9字节

MSComm1.RTSEnable=True'转为接收状态

EndSub

PrivateSubCommand2_Click()

Timer1.Enabled=False

EndSub

PrivateSubForm_Unload(CancelAsInteger)

IfMSComm1.PortOpenThen

MSComm1.PortOpen=False'关闭串口

EndIf

Timer1.Enabled=False

EndSub

PrivateSubMSComm1_OnComm()'COM事件

DimPA()AsByte

DimPBAsString

SelectCaseMSComm1.CommEvent

CasecomEvReceive

MSComm1.InputLen=0'读取接收缓冲区的所有字符

PB=MSComm1.Input

PA()=PB

Fori=0ToUBound(PA())

'Print"PA("&i&")";PA(i)

IfLen(Hex(PA(i)))=1Then

strdata=http://www.hnrlzysc.com/post/strdata&"0"&Hex(PA(i))

Else

strdata=http://www.hnrlzysc.com/post/strdata&Hex(PA(i))

EndIf

Next

'回传的数据串:000304012600000AC4,这9字节根据通讯协议我们进行拆分

'00为协议内回传机号,03为读命令,04为返回的数据长度0126为我要的温度数据为十六进制表达,下面我进行数据处理

wd=CLng("&H"&Left(Right(strdata,12),4))/10&"℃"'根据通讯协议换算成温度

Text1=Text1&vbCrLf&strdata&""&wd

strdata=http://www.hnrlzysc.com/post/""

MSComm1.PortOpen=False'关闭串口

EndSelect

EndSub

PrivateSubTimer1_Timer()

CallCommand1_Click

EndSub

这是我的测试结果。

下面是通讯协议

这个是我的软件用检测精灵检测的结果

好了,文章到这里就结束啦,如果本次分享的vb串口通信视频教程和vb串口通信程序实例问题对您有所帮助,还望关注下本站哦!

本文链接:https://bk.89qw.com/a-1087941

最近发表
网站分类