VB串口通信程序设计典型实例修Word格式.docx

上传人:b****2 文档编号:3176202 上传时间:2023-05-01 格式:DOCX 页数:56 大小:504.81KB
下载 相关 举报
VB串口通信程序设计典型实例修Word格式.docx_第1页
第1页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第2页
第2页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第3页
第3页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第4页
第4页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第5页
第5页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第6页
第6页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第7页
第7页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第8页
第8页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第9页
第9页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第10页
第10页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第11页
第11页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第12页
第12页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第13页
第13页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第14页
第14页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第15页
第15页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第16页
第16页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第17页
第17页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第18页
第18页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第19页
第19页 / 共56页
VB串口通信程序设计典型实例修Word格式.docx_第20页
第20页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

VB串口通信程序设计典型实例修Word格式.docx

《VB串口通信程序设计典型实例修Word格式.docx》由会员分享,可在线阅读,更多相关《VB串口通信程序设计典型实例修Word格式.docx(56页珍藏版)》请在冰点文库上搜索。

VB串口通信程序设计典型实例修Word格式.docx

2.程序界面设计

向空白窗体添加各种控件,以完成预定的各种功能。

开始一个项目的设计时,VB的工具箱中会有许多默认的控件让设计者予以选用,这些原本就出现在工具箱中的控件是内置控件,它提供了一些基本的系统设计组件给设计者,但功能比较特别的控件就不会出现在其中,如用来设计串口通信功能的控件MSComm就不在其中。

(1)添加串口通信控件MSComm。

由于VB的串行通信组件并不会主动出现在工具箱里中,当我们需要MSComm控件时,首先要把它加入到工具箱中。

让MSComm控件出现在工具箱中的步骤如下。

选择“工程”菜单下的“部件…”子菜单,在弹出的“部件”对话框中,在“控件”选项卡属性中选中“MicrosoftCommControl6.0”复选框,单击“确定”按钮后,在工具箱中就出现了一个形似“电话”的图标,它就是MSComm控件。

工具箱中有了MSComm控件,就可以选择MSComm控件的图标后将其添加到程序窗体上,利用该控件编程,PC就可以通过VB实现与串口设备的串口通信了。

图6-2程序窗体界面

由于每个使用的MSComm控件对应着一个串行端口,如果应用程序需要访问多个串行端口,必须添加多个MSComm控件。

(2)为了实现连续的自动接收,将工具箱中的Timer控件添加到程序窗体上。

(3)添加两个文本框控件:

Text1和Text2,用于输入要发送的字符和显示要接收的字符。

(4)添加两个标签控件:

Label1和Label2,作为发送和接收字符区的标签。

(5)添加一个按钮控件:

Command1执行发送字符命令。

程序设计界面如图6-2所示。

3.属性设置

从属性窗口设置属性时,只需从对象列表框中选择待设置属性的对象,然后从属性列表的左列选择属性,最后在属性列表的右列中输入或选择新的属性值。

程序窗体、控件对象的主要属性设置如表6-2所示。

表6-2窗体、控件对象的主要属性设置

控件类型

主要属性

功能

Form

(名称)=COMForm

窗体控件

BorderStyle=3

运行时窗体固定大小

Caption=PC与PC串口通信

窗体标题栏显示程序名称

Label

(名称)=Label1

标签控件

Caption=显示接收字符区:

标签文本

(名称)=Label2

Caption=输入发送字符区:

TextBox

(名称)=Textsend

文本框控件

MultiLine=True

允许多行显示

ScrollBars=2-Vertical

垂直滚动条可用

(名称)=TextReceive

CommandButton

(名称)=Cmdsend

按钮控件

Caption=发送字符

手动发送字符

MSComm

(名称)=MSComm1

串口通信控件

其他属性在程序中设置

Timer

(名称)=Timer1

时钟控件

Enabled=True

时钟初始可用

Interval=500

设置发送周期(ms)

两台计算机中VB程序界面及属性设置应完全相同,尤其MSComm控件的InputMode和Settings属性值应相同。

4.程序代码设计

程序要实现自动发送或读取,在VB程序中有两个方式可以达到,一是查询方式,利用查询事件是否发生,当发生时,去执行默认的程序代码。

可以使用计时器控件(Timer),该控件属性中的Interval可以控制计时器被启动的时间间隔,当时间间隔一到,便会执行原先放在计时器中的程序代码。

下面是利用查询方式编写的PC与PC串口通信的参考程序,代码如下所示:

'

串口初始化

PrivateSubForm_Load()

MSComm1.CommPort=1'

设置通信端口号为COM1

MSComm1.Settings="

9600,n,8,1"

'

设置串口1参数

MSComm1.InputMode=0'

接收文本型数据

MSComm1.PortOpen=True'

打开通信端口1

EndSub

把字符通过串口发送出去

PrivateSubCmdsend_Click()

IfTextsend.Text="

"

Then

pp=MsgBox("

发送的数据不能为空!

16)

ExitSub

EndIf

MSComm1.Output=Trim(Textsend.Text)

Fori=1To20000000

Nexti

通过时钟控制来自动接收字符

PrivateSubTimer1_Timer()

Dimbuf$

buf=Trim(MSComm1.Input)'

将缓冲区内的数据读入buf变量中

IfLen(buf)<

>

0Then'

判断缓冲区内是否存在数据

TextReceive.Text=TextReceive.Text+Chr(13)+Chr(10)+buf//回车换行

关闭通信端口,停止程序运行

PrivateSubCmdquit_Click()

MSComm1.PortOpen=False

UnloadMe

EndSub

在Windows系统环境下,串口是系统资源的一部分。

应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。

在Windows系统的系统函数中,均包含了支持通信中断的功能。

二是使用事件方式。

MSComm控件提供事件回应功能,可以利用此功能达到自动发送/接收的目的。

下面是利用事件方式编写的PC与PC串口通信的参考程序,界面设计与图6-2基本相同,区别是事件方式不需要时间控件。

串口初始化

设置通信端口号为COM1

'

设置串口参数

MSComm1.InputMode=0'

接收文本型数据

MSComm1.RThreshold=1'

接收缓冲区每收到一个字符都会使MSComm控件触发OnComm事件

MSComm1.PortOpen=True'

打开通信端口1

把字符通过串口发送出去

启动定时器

ExitSub

MSComm的OnComm事件程序

由CommEvent属性值的不同,将各自的程序代码写入相关的子程序中

只要RThresold中的设定字符数到达时便会使得CommEvent属性值变成comEvReceive

因此接收的子程序便会被执行

PrivateSubMSComm1_OnComm()

SelectCaseMSComm1.CommEvent

'

通过取代每一个case表达式来处理每个事件与错误

CasecomEvCD'

CD线的状态发生变化

CasecomEvCTS'

CTS线的状态发生变化

CasecomEvDSR'

DSR线的状态发生变化

CasecomEvReceive

buf=Trim(MSComm1.Input)'

将缓冲区内的数据读入buf变量中

CasecomEvSend

EndSelect

TextReceive.Text=TextReceive.Text&

buf

停止程序运行

UnloadMe

关闭通信端口,

PrivateSubForm_Unload(CancelAsInteger)

MSComm1.PortOpen=False

5.运行程序

程序设计、调试完毕,单击工具栏快捷按钮“启动”,运行程序。

两台计算机同时运行本程序。

首先在一台计算机程序窗体中发送字符区输入要发送的字符,如“我是第一组,收到请回话!

”,单击“发送字符”按钮,发送区的字符串通过COM1口发送出去。

如果联网通信的另一台计算机程序收到字符,则返回字符串,如“收到,我是第2组!

”,如果通信正常该字符串将显示在接收区中。

程序运行界面如图6-3所示。

图6-3程序运行界面

6.1.5.2利用API函数实现字符型数据发送与接收

运行VB,创,作为发送和接收字符区的标签。

建标准的工程项目文件,设计程序窗体。

图6-4程序窗体界面

①添加两个TextBox控件,用于输入要发送的字符和显示需接收的字符。

②添加两个Label控件

③添加一个Timer控件,用于周期性地读取串口数据。

④添加两个CommandButton控件,分别执行发送字符、关闭程序等命令。

设计的程序界面如图6-4所示。

2.属性设置

程序窗体、控件对象的主要属性设置如表6-3所示。

表6-3窗体、控件对象的主要属性设置

COMForm

Caption=API串口通讯

Label1

Caption=发送数据区:

标签

Label2

Caption=接收数据区:

Textsend

TextReceive

BTNSend

Caption=发送数据

手动间断发送字符

BTNCloseCom

Caption=关闭程序

关闭程序

TMRComm

3.程序代码设计

在程序标准模块SerialPort.bas的说明部分放置使用的API函数声明及所用的结构、常数的声明:

OptionExplicit

GlobalComNumAsLong

GlobalbRead(255)AsByte

TypeCOMSTAT

fCtsHoldAsLong

fDsrHoldAsLong

fRlsdHoldAsLong

fXoffHoldAsLong

fXoffSentAsLong

fEofAsLong

fTximAsLong

fReservedAsLong

cbInQueAsLong

cbOutQueAsLong

EndType

TypeCOMMTIMEOUTS

ReadIntervalTimeoutAsLong

ReadTotalTimeoutMultiplierAsLong

ReadTotalTimeoutConstantAsLong

WriteTotalTimeoutMultiplierAsLong

WriteTotalTimeoutConstantAsLong

TypeDCB

DCBlengthAsLong

BaudRateAsLong

fBinaryAsLong

fParityAsLong

fOutxCtsFlowAsLong

fOutxDsrFlowAsLong

fDtrControlAsLong

fDsrSensitivityAsLong

fTXContinueOnXoffAsLong

fOutXAsLong

fInXAsLong

fErrorCharAsLong

fNullAsLong

fRtsControlAsLong

fAbortOnErrorAsLong

fDummy2AsLong

wReservedAsInteger

XonLimAsInteger

XoffLimAsInteger

ByteSizeAsByte

ParityAsByte

StopBitsAsByte

XonCharAsByte

XoffCharAsByte

ErrorCharAsByte

EofCharAsByte

EvtCharAsByte

TypeOVERLAPPED

InternalAsLong

InternalHighAsLong

offsetAsLong

OffsetHighAsLong

hEventAsLong

TypeSECURITY_ATTRIBUTES

nLengthAsLong

lpSecurityDescriptorAsLong

bInheritHandleAsLong

DeclareFunctionCloseHandleLib"

kernel32"

(ByValhObjectAsLong)AsLong

DeclareFunctionGetLastErrorLib"

()AsLong

DeclareFunctionReadFileLib"

(ByValhFileAsLong,lpBufferAsAny,ByValnNumberOfBytesToReadAsLong,lpNumberOfBytesReadAsLong,lpOverlappedAsLong)AsLong

DeclareFunctionWriteFileLib"

(ByValhFileAsLong,lpBufferAsAny,ByValnNumberOfBytesToWriteAsLong,lpNumberOfBytesWrittenAsLong,lpOverlappedAsLong)AsLong

DeclareFunctionSetCommTimeoutsLib"

(ByValhFileAsLong,lpCommTimeoutsAsCOMMTIMEOUTS)AsLong

DeclareFunctionGetCommTimeoutsLib"

DeclareFunctionBuildCommDCBLib"

Alias"

BuildCommDCBA"

(ByVallpDefAsString,lpDCBAsDCB)AsLong

DeclareFunctionSetCommStateLib"

(ByValhCommDevAsLong,lpDCBAsDCB)AsLong

DeclareFunctionCreateFileLib"

CreateFileA"

(ByVallpFileNameAsString,ByValdwDesiredAccessAsLong,ByValdwShareModeAsLong,ByVallpSecurityAttributesAsLong,ByValdwCreationDispositionAsLong,ByValdwFlagsAndAttributesAsLong,ByValhTemplateFileAsLong)AsLong

DeclareFunctionFlushFileBuffersLib"

(ByValhFileAsLong)AsLong

窗体模块程序如下:

初始化串口

IfNotInit_Com("

COM1:

"

)Then

MsgBox"

端口"

&

"

无效!

发送字符

PrivateSubBTNSend_Click()

IfWriteCOM32(txt

(2))&

vbCr<

Len(txt

(2))Then

写入错误"

向串口写数据

FunctionWriteCOM32(COMStringAsString)AsInteger

OnErrorGoTohandelwritelpt

DimRetBytesAsLong,LenValAsLong

DimretvalAsLong

IfLen(COMString)>

255Then

WriteCOM32Left$(COMString,255)

WriteCOM32Right$(COMString,Len(COMString)-255)

ExitFunction

ForLenVal=0ToLen(COMString)-1

bRead(LenVal)=Asc(Mid$(COMString,LenVal+1,1))

NextLenVal

retval=WriteFile(ComNum,bRead(0),Len(COMString),RetBytes,0)

WriteCOM32=RetBytes

handelwritelpt:

EndFunction

读取数据

PrivateSubTMRComm_Timer()

DimAnsAsString,iAsInteger,RtnStrAsString

Ans=ReadCommPure()

IfAns="

ThenExitSub

RtnStr=RtnStr&

CleanStr(Ans)

txtRec.Text=RtnStr

FlushComm

从串口读取数据

FunctionReadCommPure()AsString

OnErrorGoTohandelpurecom

DimRetBytesAsLong,iAsInteger,ReadStrAsString,retvalAsLong

DimCheckTotalAsInteger,CheckDigitLCAsInteger

retval=ReadFile(ComNum,bRead(0),255,RetBytes,0)

ReadStr="

If(RetBytes>

0)Then

Fori=0ToRetBytes-1

ReadStr=ReadStr&

Chr(bRead(i))

Else

Re

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2