百科游戏 手游攻略
大家好,今天来为大家解答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串口通信程序实例问题对您有所帮助,还望关注下本站哦!
- 最近发表