Freigeben über


Empfangen vom seriellen Port mithilfe von MScomm32.ocx in Visual FoxPro

In diesem Artikel werden zwei Methoden zum Empfangen von Daten vom seriellen Port mithilfe des Mscomm32.ocx-Steuerelements in Visual FoxPro beschrieben.

Originalproduktversion: Visual FoxPro
Ursprüngliche KB-Nummer: 140525

Übersicht

Dieser Artikel enthält zwei Techniken, mit deren Hilfe Sie Daten vom seriellen Port mithilfe des Mscomm32.ocx-Steuerelements empfangen können. Die erste verwendet eine ereignisgesteuerte Methode und erfordert nicht, dass Sie den seriellen Port abfragen, um zu überprüfen, ob empfangene Zeichen vorhanden sind. Diese Technik ermöglicht die größte Flexibilität und erfordert keine umfangreiche Codierung, um Pufferüberläufe zu verhindern. Die zweite Technik erfordert, dass Sie den Eingabepuffer regelmäßig abfragen, um das Vorhandensein von empfangenen Zeichen zu überprüfen. In diesem Artikel werden diese beiden Techniken beschrieben, und es werden Beispiele für die einzelnen Methoden bereitgestellt.

Weitere Informationen

Legen Sie die folgenden Eigenschaften unabhängig davon fest, welche Technik Sie verwenden:

  • CommPort -Eigenschaft: Legen Sie diese numerische Eigenschaft auf den gewünschten Kommunikationsport fest. Gültige Werte sind 1, 2, 3 oder 4 abhängig von den verfügbaren seriellen Ports und der Konfiguration des einzelnen Computers. Diese Werte entsprechen Com1, Com2, Com3 und Com4.

  • Settings Eigenschaft: Legen Sie diese Zeicheneigenschaft auf die Baudrate, Parität, Datenbits und Stoppbits fest, die das mit dem seriellen Port verbundene Gerät benötigt. Diese Eigenschaft ist eine kommagetrennte Liste. Um beispielsweise den seriellen Port auf 14.400 Baud, Even Parity, 7 Data Bits und 1 Stop Bit festzulegen, legen Sie die Zeichenfolge auf: 14400,E,7,1.

  • PortOpen property: Legen Sie diese logische Eigenschaft auf "true" fest, um die Kommunikation mit dem seriellen Port zu öffnen. Sie können diese Eigenschaft auch überprüfen, um festzustellen, ob der Port ordnungsgemäß geöffnet wurde.

Technik 1: Ereignisgesteuerter Empfang

Die ereignisgesteuerte Technik löst ein OnComm Ereignis aus, wenn Zeichen im Eingabepuffer warten. Außerdem enthält die CommEvent-Eigenschaft eine numerische 2. Damit das OnComm Ereignis ausgelöst wird, müssen Sie die Rthreshold Eigenschaft auf einen anderen Wert als 0 (standard) festlegen. Die häufigste Einstellung für die Rthreshold Eigenschaft ist 1, d. h., das OnComm Ereignis wird ausgelöst, wenn mindestens ein Zeichen im Eingabepuffer wartet.

Sie können beispielsweise den folgenden Code im OnComm-Ereignis platzieren, um empfangene Daten an eine Eigenschaft eines Formulars anzufügen, das mybuffer genannt wird.

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

Technik 2: Abfragen des Eingabepuffers

Das Abrufen des Eingabepuffers erfordert, dass das Programm in regelmäßigen Abständen seine Tätigkeit unterbricht und überprüft, ob Zeichen im Eingabepuffer warten. Wenn Sie diese Technik verwenden, behalten Sie die Rthreshold Eigenschaft bei 0 (standardwert), und überprüfen Sie die InBufferCount Eigenschaft, um festzustellen, ob sie größer als 0 ist, was angibt, dass zeichen im Puffer warten.

Notiz

Die Verwendung einer Technik wie die Überprüfung der Länge der Input-Eigenschaft führt zu verlorenen Zeichen, da sobald auf die Input-Eigenschaft zugegriffen wird, der Eingabepuffer geleert wird. Verwenden Sie stattdessen die InBufferCount-Eigenschaft.

Angenommen, das Mscomm-Steuerelement befindet sich auf dem Formular und hat den Namen MyCom und dass es eine Formulareigenschaft mit dem Namen mybuffer gibt, veranschaulicht der folgende Code, wie man auf wartende Zeichen abfragt:

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

Der Prozedurcode kann in einer Timermethode aufgerufen werden, um die Überprüfung auf Zeichen in halbregelmäßigen Intervallen zu erleichtern. Wenn jedoch erwartet wird, dass große Datenmengen vom seriellen Port empfangen werden, verringert Technik One die Wahrscheinlichkeit, dass der Eingabepuffer überlastt wird.