O.Scharnefski


VBA - Programmer's home

Projekt: Telefonkartenlesegerät




Lösung Team 1
Lösung Team 2


Lösung Team 3
Lösung Team 4


Dies ist die Seite, mit der Du lernst, Deinen PC zum Datenerfassungsgerät zu erweitern!

Im folgenden erarbeiten wir, wie Du die serielle Schnittstelle für Dateneingaben nutzt. Dazu sind einige Grundlagen notwendig:

Wie gewohnt musst Du die Datei "PORT.DLL" auf den Desktop laden.
Dies machst Du hier: "PORT.DLL" (Rechte Maustaste, 'Ziel speichern unter' und Pfad suchen).

Mit der DLL (Dynamic Link Library - Unterprogrammsammlung) kannst Du selbst natürlich noch nicht viel anfangen.

Ein Programmgerüst wäre toll! " Excel-VBA Programmgerüst" (Rechte Maustaste, 'Ziel speichern unter' und Pfad suchen zum Desktop. Sicherheitsmeldungen nicht beachten, da vertrauensvolle Quelle) liefert Dir eines.

Starte Excel und öffne "geruest.xls". Mit Alt+F11 gelangst Du in den VBA-Editor und kannst den bisherigen Quelltext anschauen.

Wie gewohnt sind im oberen Teil die Unterprogramme, die Du später benutzt, mit Pfadangabe bekannt gegeben (OPENCOM, DTR, CTS,...).


Los geht's...

(1) Das Einlesen von Daten wird zunächst an einem Pin, z.B. DCD geübt!
    DCD ist mit dem Schiebeschalter der Wertigkeit 23 verbunden.
    Um den Schiebeschalter mit Spannung zu versorgen muss Pin DTR auf 1 gesetzt werden!


    Die Eingabe-Pins können '1' und '0' unterscheiden, das macht die Auswahl durch if ... then ... else einfacher!

    Wie sieht demnach der Quelltext zu diesem Programmablaufplan aus?


Tippe den Quelltext ein und teste Dein Programm!

Eine Erweiterung ist das Einfügen einer Zähl-Schleife, so dass das Programm z.B. 5 mal durchläuft. Sinnvoll ist dabei, den Nutzer durch eine Bildschirmausgabe vor der if...then...else Auswertung aufzufordern, das Bit zu setzen oder zu löschen.

Teste auch dieses Programm!


(2) Im nächsten Schritt musst Du einen Rechenalgorithmus (Rechenvorschrift) finden, der Dir die Zustände aller vier Eingabeschalter erfasst und den Dezimalwert am Bildschirm ausgibt.

    Zur Erinnerung die Wertigkeiten und Pin-Zugehörigkeiten:

      20= 1: CTS
      21= 2: DSR
      22= 4: RI
      23= 8: DCD
Tipp als Programmablaufplan (PAP):



Zu Beginn sollte 'Wert' auf Null gesetzt werden!


Eine Erweiterung ist wie oben das Einfügen einer Zähl-Schleife, so dass das Programm z.B. 10 mal durchläuft und dabei den Nutzer durch eine Bildschirmausgabe vor den Auswertungn auffordert, Bits zu setzen oder zu löschen.

Kontrolliere die Ergebnisausgabe der Dezimalzahlen von Hand nach!



Weiter geht's...

(3) Das parallele Einlesen hat nun geklappt. Nun soll ein die Schiebeschalter als serieller 'Datengeber' funktionieren.

Idee:

    Pin DCD hat nun nicht mehr die Funktion der einzelnen Wertigkeit 23, sondern durch kontrolliertes Setzen und Löschen von Bits nacheinander nimmt DCD die Werte 20, 21, 22,... usw. an.

    Zum Setzen des nächsten Bits kann durch das Leuchten der LED, die an RTS angeschlossen ist, aufgefordert werden.


PAP:

    RTS 1 (LED an) -> Bit (DCD) setzen oder löschen -> Bestätigung des Setzens (Messagebox als Programmunterbrechung) -> RTS 0 (LED aus) -> Einlesen des Zustandes DCD -> Berechnung und Ausgabe des aktuellen Dezimalwertes -> RTS 1 (LED an)...

    Die Schleife soll so programmiert werden, dass eine 8-bit Zahl seriell eingelesen wird.


    Eventuell benötigst Du die Berechnung 2Hochzahl. In VBA gibt es die Funktion "hoch" nicht.
    Aber wir können uns behelfen:

      2Hochzahl = (Exp(Log(2)*Hochzahl))
    Bsp:
      24 = (Exp(Log(2)*4)) = 16 (dez)



Zur Anwendung des bisherigen ...

(4) Das bisher Erlernte findet z.B. beim Auslesen einer Telefonkarte Anwendung. Dabei kann sehr schön die serielle Datenübertragung beobachtet werden.

Hinweise zu den nachfolgenden Programmen:

Die PORT.DLL wird benötigt. Lade sie von dieser Homepage (oben).

Das erste Beispielprogramm ist linear aufgebaut, d.h. in einem Durchlauf wird das Programm von oben nach unten Schritt für Schritt abgearbeitet.

Um keine Pfadanpassungen im Programm (Pfad zur DLL) vornehmen zu müssen speicherst Du die PORT.DLL im Verzeichnis C:\WINNT\system oder C:\WINNT\system32.
Dort sucht ein Programm zuerst nach DLLs. Hast Du allerdings keinen Zugriff auf die Systemordner, so speichere die DLL samt Programm im gleichen Verzeichnis und passe den Pfad zur DLL im Programm an.

Das zweite Beispielprogramm ist in Unterprogrammtechnik aufgebaut, d.h. in einem Durchlauf verzweigt das Programm in ein Unterprogramm und nach dessen Abarbeitung kehrt der Programmzeiger wieder an die Absprungstelle zurück.
Dieses Programm beinhaltet zusätzlich noch die Ausgabe der Bits auf dem Excel-Tabellenblatt.

Die Programme, v.a. das erste, sind mit Kommentaren (Erklärungen) versehen. Anhand des erarbeiteten Spannungs-Zeit-Diagramms kannst Du die Programmschritte wunderbar nachvollziehen.


Fragen? Email an mich: o.scharnefski@t-online.de



Weiterhin Viel Spass mit der hardwarenahen VBA-Programmierung!


Die außerschulische Verwendung oder Verwendung außerhalb der Lernortkooperation von oben aufgeführten Materialien ist nur mit Zustimmung des Verfassers gestattet!


Zurück zur Projektübersicht



O.Sch.