您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > MSComm控件的使用方法
MSComm控件的使用方法(1)MSComm控件为应用程序提供了串口通信功能,该应用程序允许通过串口发送和接收数据。语法MSComm说明MSComm控件提供了两种处理通信的方法:*事件驱动通信,是一种功能很强的处理串口活动的方法。在大多数情况下,用户需要获知事件发生的时间,例如,在CD(CarrierDetect)线或RTS(RequestToSend)线上有字符到达或发生了改变等。在这种情况下,使用MSComm控件的OnComm事件捕获和处理这些通信事件。OnComm也可以捕获和处理通信中的错误。要获取所有事件和通信错误的完整清单,请参阅CommEvent属性。*用户也可以在每个重要的程序功能之后检查CommEvent属性的值来检测事件和通信错误。这对小的自含程序可能比较常用。例如,如果编写一个简单的电话拨号程序,那么在接收了每个字符后都产生一个事件并没有意义,因为你只打算从调制解调器中接收OK响应信息。使用的每个MSComm控件都与一个串口对应。如果在应用程序中需要访问多个串口,必须使用多个MSComm控件。可以在Windows控制面板中修改串口地址的中断地址。虽然MSComm控件有许多很重要的属性,但应先熟悉下面几个属性:属性描述CommPort设置或返回通信端口号Settings以字符串的形式设置或返回波特率、奇偶校验、数据位和停止位PortOpen设置或返回通信端口的状态。也可以打开和关闭端口Input返回和删除接收缓冲区中的字符Output将字符串写入发送缓冲区示例下面的例子演示了使用调制解调器进行基本的通信。PrivateSubForm_Load()BuffertoholdinputstringDimInstringAsStringUseCOM1.MSComm1.CommPort=19600baud,noparity,8data,and1stopbit.MSComm1.Settings=“9600,N,8,1”TellthecontroltoreadentirebufferwhenInputisused.MSComm1.InputLen=0Opentheport.MSComm1.PortOpen=TrueSendtheattentioncommandtothemodem.MSComm1.Output=“ATVtQ0”&+Chr$(13)Ensurethatthemodemrespondswith“OK”Waitfordatatocomebacktotheserialport.DoDoEventsBuffer$=Buffer$MSComm1.InputLoopUntilInStr(Buffer$,“OK”&vbCRLF)Readthe“OK”responsedataintheserialport.Closetheserialport.MSComm1.PortOpen=FalseEndSub注意:MSComm控件可以使用查询或事件驱动的方法从串口接收数据。本例使用了查询的方法。对于事件驱动方法的例子,请参阅OnComm事件的帮助。Break属性设置或清除断开信号状态。在设计时该属性不可用。语法object.Break[=value]Break属性的语法有如下几个部分:部分描述object对象表达式,其值是“应用于”列表中的一个对象value一个布尔表达式,指明是否设置断开信号状态,如“设置”中所示设置vlaue值的设置如下:设置描述True设置断开信号状态False清除断开信号状态说明当设置为True时,Break属性就发送一个断开信号。断开信号将停止字符发送,将发送线置为断开状态,直到将Break属性置为False。通常,为短时间区以及只有当用于通信的设备需要设置断开状态时才设置断开状态。数据类型Boolean。示例下面的例子演示了如何发送十分之一秒的断开信号。SettheBreakcondition.MSComm1.Break=TrueSetdurationto1/10second.Duration!=Timer+.1Waitforthedurationtopass.DoUntilTimerDuration!Dummy=DoEvents()LoopCleartheBreakcondition.MSComm1.Break=FalseCDHolding属性通过检查CD线的状态来查询是否有载波。CD(CarrierDetect,载波检测)是调制解调器发送给连接计算机的指示调制解调器在线的信号。该属性在设计时不可用,在运行时是只读的。语法object.CDHoldingCDHolding属性的语法有如下几个部分:部分描述object对象表达式,其值是“应用于”列表中的一个对象设置CDHolding属性的设置如下:设置描述TrueCD线高FalseCD线低说明当CD线高(CDHolding=True)并超时,MSComm控件就将CommEvent属性设置为commEventCDTO(CarrierDetectTimeoutError),并产生一个OnComm事件。CD也称为RLSD(ReceiveLineSingalDetect,接收线信号检测)。注意:尤其要注意的是,在主机应用程序比如电子公告板中要侦测载波信号的丢失问题,因为呼叫者随时都有可能挂起。数据类型:Boolean。CommEvent属性返回最近的通信事件或错误。该属性在设计时不可用,在运行时是只读的。语法object.CommEventCommEvent属性的语法有如下几个部分:部分描述object对象表达式,其值是“应用于”列表中的一个对象说明尽管通信事件或错误都产生OnComm事件,但CommEvent属性中包含了事件或错误的代码。要确定导致OnComm事件的实际错误或事件,必须引用CommEvent属性。CommEvent属性为通信事件或错误返回下列值之一。在该控件的对象库中也可以找到这些常量。通信错误包含了下面的设置:常量值描述ComEventBreak1001收到了断开信号ComEventCTSTO1002ClearToSendTimeout。在发送字符时,在系统指定的事件内,CTS(ClearToSend)线是低电平ComEventDSRTO1003DataSetReadyTimeout。在发送字符时,在系统指定的事件内,DSR(DataSetReady)线是低电平ComEventFrame1004数据帧错误。硬件检测到一个数据帧错误ComEventOverrun1006端口溢出。硬件中的字符尚未读,下一个字符又到达,并且丢失ComEventCDTO1007CarrierDetectTime。在发送字符时,在系统指定的事件内,CD(CarrierDetect)线是低电平。CD也称为RLSD(ReceiveLineSingalDetect,接收线信号检测)ComEventRxOver1008接收缓冲区溢出。在接收缓冲区中没有空间ComEventRxParity1009奇偶校验错。硬件检测到奇偶校验错误续表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)数据类型Integer。CommID属性返回标识通信设备的句柄。该属性在设计时不可用,在运行时是只读的。语法object.CommIDCommID属性的语法有如下几个部分:部分描述object对象表达式,其值是“应用于”列表中的一个对象说明该值与WindowsAPI函数CreateFile返回值是一样的。在WindowsAPI中调用任何通信例程都使用该值。数据类型LongCommPort属性返回或设置通信端口号。语法object.CommPort[=value]CommPort属性的语法有如下几个部分:部分描述object对象表达式,其值是“应用于”列表中的一个对象value指定端口号的整数说明在设计时,可以将value置为1到16之间的整数(缺省为1)。然而,当试图使用PortOpen属性打开一个不存在的端口号时,MSComm控件就产生68错误(Deviceunavilable)。警告:必须在打开端口前设置CommPort属性。数据类型Integer。CTSHolding属性检查CTS(ClearToSend)线的状态,确定是否可以发送数据。通常,调制解调器给连接的计算机发送CTS信号,指明正在处理发送过程。该属性在设计时不可用,在运行时是只读的。语法object.CTSHoldingCTSHolding属性的语法有如下几个部分:部分描述object对象表达式,其值是“应用于”列表中的一个对象CTSHolding属性的设置如下表所示:设置描述TrueCTS(ClearToSend)线高FalseCTS(ClearToSend)线低说明当CTS线低(CTSHolding=False)并超时,MSComm控件就设置CommEvent属性为comEventCTSTO(ClearToSendTimout)并激活OnComm事件。在RTS/CTS(RequestToSend/ClearToSend)硬件握手中使用CTS线。如果需要确定CTS线的状态,可以使用CTSHolding属性手动查询。要获取更多信息或握手协议,请参阅Handshaking属性。数据类型BooleanDSRHolding属性确定DSR(DataSetReady)线的状态。通常,调制解调器给连接的计算机发送CTS信号,指明准备就绪。该属性在设计时不可用,在运行时是只读的。语法object.DSRHoldingobject置换元表示一个对象表达式,其值为“应用于”列表中的一个对象。DSRHolding属性返回如下值:值描述TrueDSR(DataSetReady)线高FalseDSR(DataSetReady)线低说明当DSR线高(DSRHolding=False)并超时,MSComm控件设置CommEvent属性为comEventDTSTO(DataSetReadyTimeout)并激活OnComm事件。在为DTE(DataTerminalEquipment)计算机编写DSR/DTR(DataSetReady/DataTerminalEquipment)握手例程时,该属性很有用。数据类型BooleanDRTEnable属性确定在通信过程中是否使用DTR(DataTerminalReady)线。通常,DTR信号是计算机发送给调制解调器的,指明计算机可以接收输入数据了。语法object.DTREnable[=value]DTREnable属性的语法有如下几个部分:部分描述object对象表达式,其值是“应用于”列表中的一个对象value一个布尔表达式,指定是否使用DTR线,如“设置”中所示设置value值的设置如下:设置描述True使用DTR线False(缺省)禁止DTR线说明当DTREnable属性设置为True时,如果端口打开,DTR线被设置为高(on),如果端口关闭,DTR线被设置为低(off)。注意:在大多数情况下,将DTR线设置为低将挂起
本文标题:MSComm控件的使用方法
链接地址:https://www.777doc.com/doc-4304738 .html