• Keine Ergebnisse gefunden

Neue Befehle über DLLs einbinden

2 Makros in Word

2.3 Neue Befehle über DLLs einbinden

Neue Befehle und Funktionen lassen sich leicht durch eine externe Funktions-sammlung in Form einer Dynamic-Link-Library (DLL) einfügen. So entsteht ein erweitertes Basic mit neuen Möglichkeiten. In diesem Buch soll vor allem die direkte Hardwareansteuerung über die serielle Schnittstelle im Mittelpunkt stehen.

2.3 Neue Befehle über DLLs einbinden

15

Die RSAPI.DLL (RS232 Application Programming Interface) für Windows 9x/NT/2000 befindet sich auf der CD zum Buch. Die entsprechende Datei muss entweder in das Windows-Systemverzeichnis, das Windows-Verzeichnis oder in das aktuelle Arbeitsverzeichnis für Word-Dateien kopiert werden. Für eine ernsthafte Arbeit mit der DLL ist es am besten, die DLL in das Windows-Systemverzeichnis zu kopieren, weil sie dann von mehreren Programmen, also z.B. auch von Excel und Word genutzt werden kann.

Jede neue Funktion (Function) oder Prozedur (Sub) muss in VB erst deklariert werden, d.h. man teilt dem Basic mit, welche neue Funktion verwendet werden soll, und wo der entsprechende Programmcode zu finden ist. Der folgende Deklarationsblock stellt vier wichtige Funktionen zur Nutzung der seriellen Schnittstelle bereit. Bei der Einbindung von dieser DLL ist die Großschreibung der Funktionsnamen zu beachten. Die Deklarationen müssen im Modul an erster Stelle aufgeführt werden. Der VB-Editor erkennt, dass es sich um Dekla-rationen handelt und zeigt dies entsprechend an.

Abb. 2.4 Deklarationen externer Funktionen

'HFODUH6XE23(1&20/LE56$3,'//%\9DO3DUDPHWHU$V6WULQJ 'HFODUH6XE&/26(&20/LE56$3,'//

'HFODUH6XE7,0(287/LE56$3,'//%\9DO0V$V,QWHJHU 'HFODUH)XQFWLRQ5($'675,1*/LE56$3,'//%\9DO6$V6WULQJ

$V,QWHJHU

'HFODUH6XE6(1'675,1*/LE56$3,'//%\9DO6$V6WULQJ Listing 2.2 Deklarationen zur Nutzung der seriellen Schnittstelle

16

2 Makros in Word

Alle verwendeten Funktionen finden sich in der Funktions-Bibliothek RSAPI.DLL. Ihre Bedeutung ist:

OPENCOM: Öffnen einer seriellen Schnittstelle CLOSECOM: Schließen der seriellen Schnittstelle SENDSTRING: Senden einer Nachricht im Textformat READSTRING: Empfangen einer Nachricht im Textformat

TIMEOUT: Festlegen der maximalen Wartezeit beim Empfang Für eine erste Anwendung der DLL soll ein Gerät verwendet werden, das all-gemeine Verbreitung gefunden hat. An vielen PC-Arbeitsplätzen findet sich ein Modem, das über eine der seriellen Schnittstellen, z.B. über COM2 ange-schlossen ist. Im Normalfall dient das Modem dazu, Texte und andere Daten über das Telefonnetz auszutauschen.

Zur Kommunikation zwischen Modem und PC wurden verschiedene Kom-mandotexte vereinbart, die grundsätzlich mit AT (für Attention) anfangen. Das Kommando ATI veranlasst das Modem, eine Information über die maximal mögliche Übertragungsrate zurück zu senden, sodass der Typ des Modems bekannt wird. Eine Besonderheit des Modems besteht darin, dass die Übertra-gungsrate der vom PC gesendeten Zeichen automatisch erkannt wird und das Modem sich darauf einstellt. Übliche Übertragungsraten sind z.B. 19200 oder 57600 Bits pro Sekunde (kurz 19200 Baud, 57600 Baud). Das Makro nach Listing 2.2 sendet die Nachricht ATI1 mit 19200 Baud und empfängt dann die Antwort des Modems. Zwischen Senden und Empfang ist eine maximale Wartezeit von 0,03 Sekunden (30 ms) eingestellt. Falls das Modem nicht ange-schlossen, nicht betriebsbereit oder nicht an der gewählten Schnittstelle zu finden ist, bricht das Programm nach dieser Zeit ab. Das Makro nach Listing 2.3 hat folgenden Aufbau:

Deklaration der benutzten externen Funktionen

Öffnen der Schnittstelle COM1

Senden einer Zeichenkette zum Modem

Empfangen einer Zeichenkette vom Modem

Ausgabe der empfangenen Zeichenkette

Schließen der Schnittstelle

OPENCOM öffnet die serielle Schnittstelle COM1 mit 19200 Baud, ohne Paritätsbit, acht Bits pro Zeichen und keinem Paritätsbit. Für das Modem kann auch eine andere Baudrate eingesetzt werden. TIMEOUT legt die maximale

2.3 Neue Befehle über DLLs einbinden

17

Wartezeit für den Zeichenempfang fest. Nach maximal 0,03 Sekunden ohne ein neues Zeichen bricht die Empfangsroutine ab. Vor dem Aufruf von READSTRING muss eine Stringvariable mit ausreichender Länge entspre-chend der erwarteten Antwort des Modems vorbereitet werden. Dies geschieht hier durch Zuweisung von 1000 Leerzeichen an A$. Die empfangenen Bytes überschreiben den leeren Text. Die Anzahl der empfangenen Zeichen wird von READSTRING zurück geliefert und im Beispiel an i übergeben. Mit der VB-Funktion Mid$ lassen sich die empfangenen Zeichen aus A$ kopieren. Wenn das Modem an der gewählten Schnittstelle bereit ist, meldet es nun zunächst den vom PC gesendeten Kommandostring ATI zurück, und dann z.B. die Mel-dung:

2.

Das Modem gibt sich hier also als ein Typ mit 14400 Baud zu erkennen. Bei anderen Geräten kann diese Meldung stark abweichen. Das einfache Makro lässt sich daher sinnvoll einsetzten, um Modems auf ihre grundsätzliche Funk-tion zu testen.

Der Aufruf mit MsgBox erfordert die Angabe eines Ausgabetextes und optio-nal einer eignen Überschrift. Zusätzlich kann die Art der MessageBox über VB-Konstanten angegeben werden. Mit vbOKCancel wird neben der Schalt-fläche OK auch noch eine SchaltSchalt-fläche Abbrechen geliefert. Bestätigt der Anwender OK, dann wird der Wert vbOK zurückgeliefert. Die eigentliche Funktion des Makros lässt sich also in Abhängigkeit von der Benutzersteue-rung ausführen oder übergehen. Das Makro MODEM2 verwendet eine zweite MessageBox zur Ausgabe der Modem-Antwort.

Abb. 2.5 Start des Makros

6XE0RGHP

,IYE2. 0VJ%R['LHVH0DNURVHQGHW]XP0RGHPDQ&20

$7,YE2.&DQFHO$EIUDJHGHV0RGHPV7KHQ 23(1&20&201

7,0(287

18

2 Makros in Word

6(1'675,1*$7,&KU 6 6SDFH

L 5($'675,1*6

0VJ%R[0LG6LYE2.2QO\YE([FODPDWLRQ

$QWZRUWGHV0RGHPV

&/26(&20 (QG,I

(QG6XE

Listing 2.3 Ansteuerung eines Modems (MODEM.DOC)

Abb. 2.6 Antwort des Modems

Abfrageinformationen von seriellen Geräten, wie hier mit einem Modem demonstriert, können auch direkt in ein Dokument eingefügt werden. Im fol-genden Abschnitt wird gezeigt, wie auch die Steuerung der Abfrage vom Do-kument aus durchgeführt werden kann. Das Ergebnis ist in Abb. 2.7 dargestellt.

Das Dokument besteht aus einer Überschrift und drei Textfeldern. Aus der Steuerelement-Symbolleiste stammen eine ComboBox, eine TextBox und ein CommandButton. Die beiden oberen Textfelder dienen lediglich der Beschrif-tung, während das dritte, größere Textfeld die angeforderten Informationen aufnimmt.

Das Dokument enthält zwei Makros. CommandButton1_Click() wird aufgeru-fen, wenn der Start-Knopf gedrückt wird. Um beim Öffnen des Dokuments die Zeichenketten in das das Kombinationsfeld (ComboBox1) einzufügen, wird Document_Open() aufgerufen.

2.3 Neue Befehle über DLLs einbinden

19

Abb. 2.7 Modemsteuerung im Dokument Modem2.doc 3ULYDWH6XE&RPPDQG%XWWRQB&OLFN

0RGHP&RPER%R[7H[W7H[W%R[7H[W (QG6XE

3ULYDWH6XE'RFXPHQWB2SHQ ,I&RPER%R[/LVW&RXQW 7KHQ

&RPER%R[$GG,WHP&201

&RPER%R[$GG,WHP&201

&RPER%R[$GG,WHP&201

&RPER%R[$GG,WHP&201

&RPER%R[/LVW,QGH[

(QG,I (QG6XE

Der eigentliche Aufruf der leicht geänderten Modemabfrage erfolgt in einem eigenen Modul, in dem auch die externen Funktionen deklariert sind. Dem Makro Modem werden zwei Parameter übergeben. Der erste Parameter enthält den Auswahltext des Kombinationsfelds (Baudrate usw.), der zweite Paramater

20

2 Makros in Word

übergibt das gewünschte Modemkommando (z.B. ATI6). Diese beiden Zeichenketten (Strings) werden dann entsprechend ausgewertet bzw. benutzt.

Abb. 2.8 Start-Knopf und ComboBox-Makros im Dokument

'HFODUH6XE23(1&20/LE56$3,'//%\9DO3DUDPHWHU 'HFODUH6XE&/26(&20/LE56$3,'//

'HFODUH6XE7,0(287/LE56$3,'//%\9DO0V

'HFODUH)XQFWLRQ5($'675,1*/LE56$3,'//%\9DO6$V ,QWHJHU

'HFODUH6XE6(1'675,1*/LE56$3,'//%\9DO6 6XE0RGHP%DXG&RPPDQG

23(1&20%DXG

6(1'675,1*&RPPDQG&KU 6 6SDFH

L 5($'675,1*6

$FWLYH'RFXPHQW6KDSHV7H[W%R[6HOHFW 6HOHFWLRQ7\SH7H[W7H[W 0LG6L

&/26(&20 (QG6XE