在 Visual FoxPro 中使用 MScomm32 从串行端口接收

本文介绍了在 Visual FoxPro 中使用 Mscomm32 控件从串行端口接收数据的两种方法。

原始产品版本:   Visual FoxPro
原始 KB 数:   140525

摘要

本文为您提供了两种技术,可用于通过使用 Mscomm32 控件从串行端口接收数据。 第一种方法使用事件驱动的方法,不要求您轮询串行端口以检查是否存在收到的字符。 此技术可以最大限度地提高灵活性,并且不需要大量编码来阻止缓冲区运行。 第二种方法要求您定期轮询输入缓冲区,以检查是否存在收到的字符。 本文介绍了这两种方法,并提供了每种方法的示例。

更多信息

无论您使用哪种技术,都可以设置以下属性:

  • CommPort 属性:将此数值属性设置为所需的通信端口。 有效值为1、2、3或4,具体取决于可用的串行端口和各个计算机的配置。 这些值分别对应于 Com1、Com2、Com3 和 Com4。

  • Settings 属性:将此字符属性设置为连接到串行端口的设备所需的波特率、奇偶校验、数据位和停止位。 此属性是一个字符(以逗号分隔的列表)。 例如,若要将串行端口设置为14400波特、偶校验、7数据位和1停止位,请将字符串设置为: 14400,E,7,1

  • PortOpen 属性:将此逻辑属性设置为 true 可打开与串行端口的通信。 您还可以检查此属性以确定端口是否已正确打开。

技术一:事件驱动的接收

OnComm当输入缓冲区中存在等待的字符时,事件驱动技术将生成事件。 此外,CommEvent 属性将包含一个数字2。 OnComm若要触发该事件,必须将该属性设置 Rthreshold 为非零值 (其默认) 。 该属性最常见的设置 Rthreshold 为1,这意味着, OnComm 如果在输入缓冲区中至少有一个字符在等待,则会触发事件。

例如,您可以将以下代码放在事件中, OnComm 以将接收到的数据追加到名为的表单的属性中 mybuffer

Procedure MyCom.OnComm
    IF This.CommEvent = 2
        ThisForm.mybuffer = ThisForm.mybuffer + This.Input
    ENDIF
ENDPROC

技术二:轮询输入缓冲区

轮询输入缓冲区需要程序定期停止正在执行的操作,并检查是否有在输入缓冲区中等待的字符。 使用此技术时,将 Rthreshold 属性保留为 0 (其默认值) ,并检查 InBufferCount 属性以查看它是否大于零,这表示缓冲区中存在等待的字符。

备注

使用诸如检查输入属性的长度导致丢失字符这样的技术将导致丢失的字符,这是因为只要访问了 Input 属性,输入缓冲区就会被清空。 请改为使用 InBufferCount 属性。

假设 Mscomm 控件在窗体上且具有名称 MyCom 且有一个名为的窗体属性 mybuffer ,以下代码说明了如何轮询等待字符:

Procedure myform.myproc
    IF Thisform.MyCom.InBufferCount > 0
        Thisform.mybuffer = Thisform.mybuffer + Thisform.MyCom.Input
    ENDIF
ENDPROC

可以在 timer 方法中调用过程代码,以便于以半常规间隔检查字符。 但是,如果预计从串行端口收到大量数据,技术1将降低在输入缓冲区运行的可能性。