关于MSCOMM控件的一些说明
VB5.0/6.的MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem).
还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工、事件驱
动的、高效实用的通信程序。但在实际通信软件设计过程中,MSComm控件并非像想像中那样完美和容易控制.特别是在中文Wln
95/98下通信时更会出现问题。下面就从基础开始介绍,然后逐步讨沦MSComm控件在编程中出现的问题以及编程技巧。
一、用MSComm控件通信
1.串口通信基础知识
一般悦来,计算机都有一个或多个串行端口,它们依次为com1、Com2、…,这些串口还提供了外部设备与pC进行数据传输和
皿信的通道。这些串口在CPU和外设之间充当解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特
流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU,再进一步说,在操作系统方面,Windows用通信驱动程序
(COMM.DRV)调用API函数发送和接收数据,当用通信控件或声明调用API函数时,它门由COMM.DRV解释并传递给设备驱动程序,
作为一个vB程序员,要编写通信程序.只需知道通信控件提供给Windows通信AP1函数的接口即可.换句话说,只需设定和监视通
信控件的属性和事件即可。
2.使用Mscomm控件
在开始使用MSComm控件之前。需要先了解其属性、事件或错误
属性描述
CommPort设置或返回通信端口号
Settings以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位
PortOpen设置或返回通信端口的状态。也可以打开和关闭端口
Input返回和删除接收缓冲区中的字符
Output将字符串写入发送缓冲区
CommEvent属性为通信事件或错误返回下列值之一。在该控件的对象库中也可以找到这些常量。
常量值描述
ComEventBreak1001收到了断开信号
ComEventCTSTO1002ClearToSendTimeout。在发送字符时,在系统指定的事1件内,CTS(ClearToSend)线是低电平
ComEventDSRTO1003DataSetReadyTimeout。在发送字符时,在系统指定的事件内,DSR(DataSetReady)线是低电平
ComEventFrame1004数据帧错误。硬件检测到一个数据帧错误
ComEventOverrun1006端口溢出。硬件中的字符尚未读,下一个字符又到达,并且丢失
ComEventCDTO1007CarrierDetectTime。在发送字符时,在系统指定的事件内,CD(CarrierDetect)线是低电平。CD
也称为RLSD(ReceiveLineSingalDetect,接收线信号检测)
ComEventRxOver1008接收缓冲区溢出。在接收缓冲区中没有空间
ComEventRxParity1009奇偶校验错。硬件检测到奇偶校验错误7
ComEventTxFull1010发送缓冲区满。在对发送字符排队时,发送缓冲区满
ComEventDCB1011检取端口DCB(DeviceControlBlick)时发生了没有预料到的错误
通信事件包含了下面的设置:
常量值描述
ComEvSend1发送缓冲区中的字符数比Sthreshold值低
ComEvReceive2接收到了Rthreshold个字符。持续产生该事件,直到使用了Input属性删除了接收缓冲区中的数据
ComEvCTS3CTS(ClearToSend)线改变
ComEvDSR4DSR(DataSetReady)线改变。当DSR从1到0改变时,该事件发生
ComEvCD5CD(CarrierDetect)线改变ComEvRing6检测到响铃信号。一些URAT(UniversalAsynchronousReciver-
-Transmitters,通用异步收发器)不支持该事件
ComEvEOF7收到了EOF字符(ASCII字符26)
Error消息(MSComm控件)下表列出了MSComm控件可捕获的错误消息:
常量值描述
ComInvalidPropertyValue380无效的属性值
ComSetNotSupported383属性只读
ComGetNotSupported394属性只读
ComPortOpen8000端口打开时该存在无效
8001超时设置必须比0值大
ComPortInvalid8002无效的端口号
8003属性只在运行时有效
8004属性在运行时是只读的
ComPortAleadyOpen8005端口已经打开
8006设备标识符无效或不支持
8007不支持设备的波特率
8008指定的字节大小无效
8009缺省参数错误
8010硬件不可用(被其他设备锁住)
8011函数不能分配队列
ComNoOpen8012设备没有打开
8013设备已经打开
8014不能使用通信通知
ComSetCommStateFailed8015不能设置通信状态
8016不能设置通信事件屏蔽
ComPortNotOpen8018该存在只在端口打开是有效
8019设备忙
ComReadError8020通信设备读错误
ComDCBError8021检取端口设备控制块时出现内部错误
搞清楚以上基本属性后,就可以开始编写通信许程序了。在VB5.0/6.0中新建一个工程文件。添加MicrosoftCommControl5.0组
件,在简体Form1中加入Command命令按钮并取名为CmdTest,MSComm控件取名为MSComm1,加入如下程序代码。
PrivateSubcmdTestClick()'打开串口
MSComml.CommPort=2'设定Com2
IfMSComml.PortOpen=FalseThen
MSComm1.Settings="9600,n,8,1"'9600波特率,无校验,8位数据位,1位停止位
MSComm1.PortOpen=True'打开串口
Endif
MSComm1.OutBufferCount=0'清空发送缓冲区
MSComm1.InBufferCount=0'滑空接收缓冲区
'发送字符数据时注意必须用回车符(vbcr)结束
MSComm1.Output="Thisisaqoodbook!"&vbCr
'泼打电话号码或发送AT命令
MSComm1.Output="ATDT05778191898,&vbCr
'发送字符数组数据时注意ByteArray必须事先定义赋值
DimByteArrayasbyte()
'定义动态数组
ReDimByteArray(1)
'重定义数组大小
ByteArray(0)=0
ByteArray(1)=1
MSComm1.Output=ByteArray
EndSub
privateSubMScommEvent()
SelectCaseMSComm1.CommEvent
CasecomEvReceive
DimBufferAsVariant
MSComm1.InputLen=0
'接收二进制数据
MSComm1.InputMode=ComInputModeBinary
Buffer=MSComm1.Input
'接收字符数据
MSComm1.InputMode=comInputModeText
Buffer=MSComml.Input
Caseelse
EndSelect
Endsub
(程序1)
当前1/2页12下一页阅读全文
【关于MSCOMM控件的一些说明第1/2页】相关文章: