当前位置:文档之家› 控件使用

控件使用

、控件mscomm32.ocx 的几个重要属性CommPort:设置并返回通讯端口号。

Settings:以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位PortOpen:设置并返回通讯端口的状态。

也可以打开和关闭端口。

Input:从接收缓冲区返回和删除字符。

Output:向传输缓冲区写一个字符串。

InBufferCount:返回接收缓冲区中等待的字符数,该属性在设计时无效,可以把InBufferCount 属性设置为0 来清除接收缓冲区。

InBufferSize:设置并返回接收缓冲区的字节数,接收缓冲区的大小。

Rthreshold:产生OnComm 事件之前要接收的字符数。

设置Rthreshold 为1,接收缓冲区收到每一个字符都会使MSComm 控件产生OnComm 事件。

设置为0(缺省值)则不产生OnComm 事件。

CommEvent:返回最近的通讯事件或错误。

该属性在设计时无效,在运行时为只读。

只要有通讯错误或事件发生时都会产生OnComm 事件,CommEvent 属性存有该错误或事件的数值代码。

CommEvent 属性返回2 表示收到Rthreshold 个字符。

该事件将持续产生直到用Input 属性从接收缓冲区中删除数据。

2、实例:该事例演示如何控制COM口发送命令及如何接收数据。

本事例采用轮讯方式。

适用于通讯数据不是很巨大的和要求不是很高速的情况下。

(1)在VFP中,建立一个新的表单(2)插入文本(命名为TEXT1,用来显示读取的数据)(3)建立Microsoft Communication Control1 控件在工具栏中点插入ole容器控件,选择Microsoft Communication Control 控件(NAMe为mscomm1)(4)建立一个按纽命名为command1(5)在CHICK属性里下如下代码:**存储变量名字buffer=""** 使用COM1。

mPort = 1**9600 波特,无奇偶校验,8 位数据,一个停止位。

thisform.MSComm1.Settings = "9600,N,8,1"* 告诉控件读入整个缓冲区。

thisform.MSComm1.InputLen = 0* 打开端口。

thisform.MSComm1.PortOpen = True**将attention 命令送到调制解调器。

这是MODEM的状态读取命令thisform.MSComm1.Output = "ATV1Q0" & Chr$(13)** CHR(13)是回车符号,用来表示命令结束**等待数据返回到串行端口。

vv=1do while .t.Buffer = thisform.MSComm1.Input*从串行端口读"OK" 响应。

if at("OK",buffer)>=1exit &&有OK则退出,否则继续读endifvv=vv+1**通讯失败的错误陷阱,以免一直读。

if vv>1000exitendifloopenddo*关闭串行端口。

thisform.MSComm1.PortOpen = False**显示结果。

if vv>1000massagebox("你是不是读错口啦?","不好意思哦!")elsethisform.text1.value=bufferendifVB开发通讯软件一、PC串行通信程序机制常用的PC串行通信程序大多利用BIOSINT14H中断,以查询I/O方式完成异步串行通信。

Windows系统提供中断方式驱动的串行通信驱动程序COMM.DRV。

通信程序无需直接对串行端口进行操作,而是通过驱动程序这一编程接口进行间接操作。

Windows操作系统中,串行通信采用“事件通知”方式,支持数据按块传送。

进行通信时,Windows开辟一个用户定义的输入输出缓冲区,每接收一个字符就产生一个低级硬件中断,串行驱动程序立即取得控制权,并将字符放入输入数据缓冲区,然后将控制权返还正在运行的应用程序。

如果输入数据缓冲区满了,驱动程序用当前定义的流控制机制通知发送方停止发送数据。

发送数据也采用类似的处理方式,应用程序将需要发送的数据放入输出数据缓冲区,串口每发送一个字符就产生一个低级硬件中断。

二、PC串行口远程通信的硬件配置串行通信数据链中,计算机一端称为DTE,即数据终端设备;调制解调器一端称为DCE,即数据通信设备。

PC串行通信的硬件连接方式分为零Modem连接和Modem连接。

零Modem连接即直接用调制解调器电缆将两台设备连接起来,Modem连接则通过DCE(Modem)将两台PC连接起来。

零Modem连接用于距离15m内两台DTE或DCE设备之间的连接。

而Modem连接则通过电话网或专线用于长距离的通信。

TXD和RXD信号线用于计算机和Modem间传输数据信息;RTS从计算机端发送信号到Modem,表示希望把数据传给Modem,若Modem能接收这个数据,它将发送CTS信号给计算机;DTR 从计算机端发送信号到Modem,表示计算机已作好通信准备,Modem将DTR信号作为初始化自己的信号,然后给计算机回送数据设置就绪信号DSR;当本地Modem接收到远地Modem的呼叫,则发送RING信号给计算机;Modem应答呼叫后,发送数据载波检测DCD信号到计算机,表示已建立连接。

Modem的工作状态分为命令状态和在线状态。

处于命令状态时,Modem对串口发送的信息进行解释,可通过PC串口向Modem发送AT命令对其进行初始化、设置和操作。

例如,初始化命令为:“ATQOV1WOSOΚ1&C1&D2&YO&WO”,其含义为:QO:返回结果码;V1:以字符形式显示结果码;WO:不返回协商进程结果码;SOΚ1:振铃一次,即应答;&C1:追踪数据载波信号CD;&D2当DTR从开到关时,Modem挂机进入命令状态;&YO:Modem上电时重新调出用户方案;&WO:将以上设置存为动态设置用户方案0;一旦本地Modem与远地Modem建立连接,Modem即处于在线状态,可进行数据传输。

此时,Modem不响应AT命令,直接传送所收到的数据。

三、Modem连接远程通信软件的编制通信过程中大部分的工作由串行通信驱动软件承担。

本文软件的运行环境为AST+4/66d,Hayes公司的ACCURA144+FAX144Modem,Windows3.2,VB3.0专业版。

VB3.0专业版中提供了一个MSCOMM.VBX通信控件。

它使用户能很方便地通过对控件属性的设置、检测,访问串行通信驱动程序的大多数特性,而不必考虑其实现细节。

该控件为“事件驱动”,只响应“OnComm”事件,该事件可对已发生的事件或错误进行处理,与CommEvent属性紧密相关。

通信软件、通信驱动软件和Modem之间的通信关系以下程序实现了通信的基本过程。

包括初始化串口和Modem,上位机拨号呼叫下位机,下位机应答并开始定时传输数据,挂机停止传输等功能。

VB3.0编制的通信软件清单如下:上位机控件清单:控件名称属性Form1Form1Caption ″上位机通信″MsComm comm1CommandButton1CallCaption ″拨号″CommandButton2hangCaption ″挂机″CommandButton3ExitCaption ″退出″下位机控件清单控件名称属性Form1Form1Caption ″下位机通信″MsComm comm1CommandButton1h angCaption ″挂机″CommandButton2ExitCaption ″退出″Timer1Timer1Interval 3000Text(i)Text(i)1.串口初始化、设置程序在程序初始化时,先对串口初始化。

因为使用RTS/CTS握手信号的硬件设备只有RTS信号置为高才能接收数据,所以需将MSCOMM通信控件的RTSenable属性设为TRUE。

由于Modem 在处于命令状态时,通过串口发送的命令以及命令结果均会回显在输入缓冲区中,因此在进入在线状态前,禁止产生EV-RECEIVE事件,避免数据误处理。

由于Windows是多任务系统,在进行数据收发循环处理时,应调用DOEVENTS事件,将控制权交还系统,允许Windows执行其他任务。

但应注意,在处理OnComm事件时小心使用DOEVENTS,避免系统又产生OnComm事件,造成嵌套,出现堆栈溢出错误。

Sub Form-Load()comm1.CommportΚ1′COM1口通信comm1.SettingsΚ″9600,N,8,1″′波特率9600,无校验,8位数据位1位停止位comm1.OutBufferSizeΚOUTPACK′设置输出缓冲区大小comm1.InBufferSizeΚINPACK′设置输入缓冲区大小comm1.InputLenΚ1′每次从输入缓冲区中取一个字符comm1.RTSenableΚ-1′RTS信号为高comm1.RthresholdΚ0′不产生MSCOMM-EV-RECEIVE事件comm1.PortOpenΚ-1′打开串口cdΚcomm1.CDHolding′取载波检测信号线原始状态comm1.outputΚ″AT QOV1WOSOΚ1&C1&D2&YOWO″′初始化Modem Do DoEventsLoopUntilcomm1.OutBufferCountΚ0End Sub2.上位机拨号呼叫下位机SubCallcom-Click()Comm1.OutPutΚ″ATDT″&Phonnum$&chr$(13)′向Modem发拨号命令Do DoEventsLoopUntilcomm1.OutBufferCountΚ0End Sub3.下位机Modem应答,连通后开始定时传输数据下位机检测CD,判断是否连通:Sub Comm1-OnComm()Select Casecomm1.CommEventCase5 ′MSCOMM-EV-CDTimer1.EnabledΚ-1′启动定时器End SelectEnd SubVB传送定长字符串,数据接收处理相对简单。

但在发送实时数据时,若将数据转换成定长字符串,这样会大大降低传输效率。

在接收端,通知程序从输入缓冲区中取字符有两种方法:一是用轮询方法循环判断InBufferCount是否为0;另外就是利用Rthreshold属性触发“OnComm”事件及“CommEvent”属性中EV-RECEIVE事件。

相关主题