From 724cc003460ec67eda269911da85c9f9e40aa6cf Mon Sep 17 00:00:00 2001
From: Lars-Dominik Braun <lars@6xq.net>
Date: Fri, 30 Sep 2016 16:57:23 +0200
Subject: Add extracted sources from floppy disk images

Some files have no textual representation (yet) and were added as raw
dataspaces.
---
 doc/prozess/gs-prozess-6 | 641 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 641 insertions(+)
 create mode 100644 doc/prozess/gs-prozess-6

(limited to 'doc/prozess/gs-prozess-6')

diff --git a/doc/prozess/gs-prozess-6 b/doc/prozess/gs-prozess-6
new file mode 100644
index 0000000..a3835cd
--- /dev/null
+++ b/doc/prozess/gs-prozess-6
@@ -0,0 +1,641 @@
+limit (11.0)##pagelength (16.5)##block# 
+#start (2.0,0.0)# 
+#page (1)# 
+#headodd# 
+#center#gs-Prozess#right#% 
+ 
+#end# 
+#headeven# 
+%#center#gs-Prozess
+ 
+#end# 
+#center#1 
+ 
+#on("b")#6  Arbeiten mit gs-Prozess#off("b")# 
+ 
+In diesem Kapitel werden wir Ihnen die Basisbefehle von #on("b")#gs-Prozess#off("b")# vorstellen und
+erläutern, was die einzelnen Befehle bewirken. Dabei werden wir an einfachen
+Beispielen aufzeigen, wie Sie mit #on("b")#gs-Prozess#off("b")# arbeiten können. 
+ 
+Wir gehen hier davon aus, daß die Hardware-Voraussetzungen erfüllt, das Interface-
+System angeschlossen und die Software (#on("b")#gs-Prozess#off("b")#) auf dem Rechner installiert
+sind. Sie sollten #on("b")#gs-Prozess#off("b")# bereits konfiguriert und einen Ein- und Ausgabetest
+durchgeführt haben. 
+ 
+In unserer Beschreibung gehen wir weiterhin davon aus, daß als Interface-System
+eine Compact-Box verwendet wird. Alle hier beschriebenen Beispiele gelten ganz
+genauso für einen Einzelsteckplatz mit Kombikarte (hier müssen Sie nur zusätzlich
+eine Leuchtdiodenanzeige anschließen - aber Sie wissen ja schon, wie das gemacht
+wird.) Bei anderen Hardware-Konfigurationen ist darauf zu achten, daß ggf. andere
+Kanalnummern anzugeben sind. 
+ 
+Die Compact-Box verfügt - genau wie die Kombikarte - über zwei analoge Eingänge
+(Kanal 1 und Kanal 2), über einen digitalen Eingang (Kanal 3) sowie über einen
+digitalen Ausgang (Kanal 4). Wie Sie schon bei der Konfiguration von #on("b")#gs-Prozess#off("b")#
+gesehen haben, haben Sie keinen Einfluß auf die Numerierung der Kanäle - die wird
+vom #on("b")#gs-Prozess#off("b")# vorgegeben. Diese Kanalnummer müssen Sie kennen, wenn Sie das
+System ansprechen (programmieren) wollen (ggf. können Sie die Kanalnummern
+durch Aktivieren des Menupunktes 'Information' unter dem Oberbegriff 'Interface'
+erfragen). 
+ 
+ 
+#on("b")#6.1  Kleine Beispiele zur digitalen Ausgabe#off("b")# 
+ 
+Bei diesem Einführungsbeispiel wollen wir uns zunächst ausschließlich auf die
+digitale Ausgabe beschränken. Wenn Sie die Compact-Box (oder eine E/A-Karte)
+angeschlossen haben, benötigen Sie hierzu keine zusätzliche Hardware, ansonsten
+schließen Sie bitte an Ihren digitalen Ausgang eine 8-elementige Leuchtdiodenanzeige
+an. 
+#page# 
+Sie haben sicher schon an einer Autobahnbaustelle ein sogenanntes "Lauflicht"
+gesehen. Es erscheint, als ob ein Licht über die aufgestellten Barken hinwegläuft.
+Dadurch soll auf die Baustellenein- bzw. -ausfahrt hingewiesen werden. Dieser Effekt
+wird dadurch erreicht, daß die Lampen, die an den Barken angebracht sind, nach­
+einander ein- und auch wieder ausgeschaltet werden. 
+ 
+Wir wollen jetzt auf unserer 8-elementigen Leuchtdiodenanzeige ein solches Lauflicht
+nachbilden. Dabei soll das "Licht von rechts nach links über die Anzeige wandern". 
+ 
+Um das Programm zu schreiben, aktivieren Sie im #on("b")#gs-Prozess#off("b")#-Menu unter dem
+Oberbegriff "Programm" den Menupunkt "Neu erstellen". Sie werden dann nach
+einem Namen gefragt, den Sie der Programmdatei geben wollen. Tragen Sie hier
+einen beliebigen Namen ein, und tippen Sie anschließend die <RETURN>-Taste.
+Notieren Sie dann das folgende ELAN-Programm: 
+ 
+#on("b")# 
+     initialisiere interface; 
+     REP 
+        lauflichtdurchgang; 
+        warte (2.0) 
+     UNTIL abbruch gewuenscht PER. 
+ 
+     lauflichtdurchgang: 
+       bitmuster ausgeben (4, "OOOOOOOI"); 
+       bitmuster ausgeben (4, "OOOOOOIO"); 
+       bitmuster ausgeben (4, "OOOOOIOO"); 
+       bitmuster ausgeben (4, "OOOOIOOO"); 
+       bitmuster ausgeben (4, "OOOIOOOO"); 
+       bitmuster ausgeben (4, "OOIOOOOO"); 
+       bitmuster ausgeben (4, "OIOOOOOO"); 
+       bitmuster ausgeben (4, "IOOOOOOO") 
+#off("b")# 
+ 
+ 
+Wenn Sie das Programm fertiggeschrieben haben, verlassen Sie die Datei durch die
+Tastenfolge <ESC><q>. Sie gelangen wieder zum Menu und aktivieren jetzt den
+Menupunkt "Starten". Daraufhin wird das Programm übersetzt und ausgeführt. 
+#page# 
+#on("b")#6.1.1  Möglichkeit eines Programmabbruchs#off("b")# 
+ 
+Wir hoffen natürlich, daß das Programm genau die Ausgabe an der Leuchtdioden­
+anzeige erzeugt, die Sie erwartet haben. 
+ 
+Als Ausgangsbedingung der Schleife haben wir den Testbefehl 'abbruch gewuenscht'
+verwendet. Dieser Befehl wird von #on("b")#gs-Prozess#off("b")# zur Verfügung gestellt. Durch den
+Testbefehl wird überprüft, ab zwischenzeitlich die Tastenkombination <ESC><q>
+eingegeben wurde. Ist das bei unserem Programm der Fall, so wird die Schleife
+('regulär') beendet. 
+ 
+Aber bitte etwas Geduld: Das Programm wird nicht sofort nach Eingabe der Tasten­
+folge "abgebrochen". Hat nämlich gerade ein neuer 'lauflichtdurchgang' begonnen,
+so wird das Refinement natürlich erst vollständig abgearbeitet. Erst dann wird
+geprüft, ob die Tastenfolge zwischenzeitlich eingegeben wurde. 
+ 
+Sollten Sie einmal in einer Situation sein, in der Sie ein Programm tatsächlich
+abbrechen müssen, so ist das (in den meisten Fällen) über die Tastenfolge
+<ESC><h> möglich. Diese Tastenkombination sollten Sie sich für "Notfälle"
+merken. Vielleicht probieren Sie sie gleich an unserem Beispiel aus. 
+ 
+ 
+#on("b")#6.1.2  Die "sonstigen" Befehle#off("b")# 
+ 
+Gehen wir zunächst auf die beiden Befehle 'initialisiere interface' und 'warte' sowie
+auf den Testbefehl 'abbruch gewuenscht ein: 
+ 
+#on("b")# 
+PROC initialisiere interface 
+#off("b")# 
+ 
+   Jedes Programm zur Prozeßdatenverarbeitung, das auf das Interface-System
+   zugreift, sollte mit diesem Befehl beginnen. Durch diesen Befehl wird das System
+   in einen definierten Anfangszustand versetzt; systeminterne Variablen werden
+   initialisiert, so daß vom Programm aus darauf zugegriffen werden kann. 
+#page# 
+#on("b")# 
+PROC warte (REAL CONST wert) 
+PROC warte (INT CONST wert) 
+#off("b")# 
+ 
+   Der Befehl 'warte' ähnelt dem Ihnen sicher bekannten Befehl 'pause'. Allerdings
+   wird hier als Parameter (INT oder REAL) die Wartezeit in Sekunden angegeben -
+   bei 'pause' dagegen die Anzahl der Zehntelsekunden. Der eigentliche Unterschied
+   besteht aber darin, daß 'warte' im Gegensatz zu 'pause' ein "Nothalt" - d.h. die
+   Tastenkombination <ESC><h>, die wir im vorigen Kapitel beschrieben haben
+   - registriert. Aus diesem Grunde sollte in Prozeßdatenverarbeitungsprogrammen
+   mit 'warte' statt mit 'pause' gearbeitet werden. 
+ 
+ 
+#on("b")# 
+BOOL PROC abbruch gewuenscht 
+#off("b")# 
+ 
+   Die Prozedur liefert den Wert 'TRUE', wenn zwischenzeitlich die Tasten­
+   kombination <ESC><q> eingegeben wurde, sonst den Wert 'FALSE'. 
+ 
+ 
+#on("b")#6.1.3  Schreibweise für Bitmuster/Bitsymbole#off("b")# 
+ 
+Beim Befehl 'bitmuster ausgeben', wird eine Zeichenkette, die aus 8 Zeichen besteht,
+übergeben - das sog. Bitmsuster. In unserem Falle kommen hier nur die Zeichen 'I'
+und 'O' vor. Ihnen ist sicher die Bedeutung sofort klar gewesen: 
+ 
+   'I'  bedeutet, daß an der entsprechenden Position ein High-Pegel (5V) angelegt
+        werden soll; 'O' bedeutet, daß an der entsprechenden Position ein Low-
+        Pegel (0V) angelegt werden soll. 
+ 
+So werden über den ersten Befehl im Refinement 'lauflichtdurchgang' alle Leucht­
+dioden ausgeschaltet, nur die Leuchtdiode ganz rechts wird angeschaltet. Über den
+zweiten Befehl wird diese wieder ausgeschaltet und dafür aber die zweite von rechts
+eingeschaltet usw. 
+#page# 
+Neben den Zeichen 'I' und 'O' dürfen auch die Zeichen 'X' und 'T' in der über­
+gebenen Zeichenkette auftauchen. Um die Bedeutung zu verstehen, muß man
+wissen, daß #on("b")#gs-Prozess#off("b")# den jeweils letzten Zustand des digitalen Ausgangs speichert
+(durch 'initialisiere interface' werden alle Ausgänge auf 'O' gesetzt). 
+ 
+   'X'  bedeutet, daß an der entsprechenden Position der zuletzt dagewesene
+        Zustand erhalten bleibt, d.h. durch diese Ausgabe nicht beeinflußt wird. 
+ 
+   'T'  bedeutet, daß an der entsprechenden Position der zuletzt dagewesene
+        Zustand "umgekehrt" wird. Lag zuletzt ein Low-Pegel (O) an, so wird
+        daraus ein High-Pegel (I) und umgekehrt. 
+ 
+Sie können sich nun sicher sofort erklären, was das folgende Programm bewirkt: 
+ 
+ 
+#on("b")# 
+    initialisiere interface; 
+    bitmuster ausgeben (4, "OIOIOIOI"); 
+    REP 
+      bitmuster ausgeben (4, "TTTTTTTT"); 
+      warte (1) 
+    UNTIL abbruch gewuenscht PER 
+#off("b")# 
+ 
+ 
+Durch den ersten Befehl 'bitmuster ausgeben' wird jede zweite Leuchtdiode ange­
+schaltet, die anderen werden ausgeschaltet. Durch den zweiten Befehl in der Schleife
+wird nun jeweils jeder Zustand in "das Gegenteil umgekehrt", so daß ein Blinklicht
+entsteht, bei dem abwechselnd einmal die einen vier, dann die anderen vier Leucht­
+dioden aufleuchten - und das jeweils für eine Sekunde. 
+ 
+ 
+#on("b")#6.1.4  Befehle für die digitale Ausgabe#off("b")# 
+ 
+Einen Befehl, mit dem der digitale Ausgang des Interfaces angesprochen werden
+kann, haben Sie schon in Kapitel 6.1 kennengelernt: 
+#page# 
+#on("b")# 
+PROC bitmuster ausgeben (INT CONST kanal, 
+                         TEXT CONST zeichenkette) 
+#off("b")# 
+ 
+Über den ersten Parameter wird der Kanal angegeben, über den der digitale Ausgang
+angesprochen werden kann; bei uns ist das der Kanal 4 auf der Compact-Box. Über
+den zweiten Parameter wird das sogenannte Bitmuster übergeben; ein Text, der aus
+genau 8 Zeichen besteht. Dabei dürfen die Zeichen "I, O, X und T verwendet werden
+(sehen Sie dazu auch Kapitel 6.1.3). 
+ 
+#on("b")#gs-Prozess#off("b")# stellt noch zwei weitere Befehle für die digitale Ausgabe zur Verfügung.
+Um die Wirkungsweise der Befehle zu verdeutlichen, hier das erste Beispiel (das
+Lauflicht) in einer zweiten Version: 
+ 
+#on("b")# 
+   initialisiere interface; 
+   REP 
+      lauflichtdurchgang; 
+      warte (2.0) 
+   UNTIL abbruch gewuenscht PER. 
+ 
+   lauflichtdurchgang: 
+     INT VAR zeiger; 
+     FOR zeiger FROM 0 UPTO 7 REP 
+        schalte aktuelle leichtdiode an; 
+        schalte vorgaenger aus 
+     PER. 
+ 
+   schalte aktuelle leuchtdiode an: 
+     bitsymbol ausgeben (4, zeiger, "I"). 
+ 
+   schalte vorgaenger aus: 
+     IF zeiger = 0 
+        THEN bitsymbol ausgeben (4, 7, "O") 
+        ELSE bitsymbol ausgeben (4, zeiger - 1, "O") 
+     FI. 
+#off("b")# 
+ 
+#on("b")# 
+PROC bitsymbol ausgeben (INT CONST kanal, bitnummer, 
+                         TEXT CONST zeichen) 
+#off("b")# 
+#page# 
+Während durch den Befehl 'bitmuster ausgeben' auf alle 8 Ausgänge gleichzeitig
+Einfluß genommen werden kann, wird mit dem Befehl 'bitsymbol ausgeben' gezielt
+nur genau einer der 8 Ausgänge, d.h. eines der 8 Bits manipuliert. Welcher Ausgang /
+welches Bit manipuliert werden soll, wird über den zweiten Parameter festgelegt: hier
+kann einer der Werte 0...7 angegeben werden (Beachten Sie die Numerierung der
+Ausgänge (!)). 
+ 
+Als dritter Parameter wird ein Text übergeben, der aus genau einem Zeichen
+bestehen muß. Ebenso wie beim Befehl 'bitmuster ausgeben' sind hier die Zeichen I,
+O, X und T zulässig. Sie haben hier auch die gleiche Bedeutung. 
+ 
+Mit dem dritten Ausgabebefehl für den digitalen Ausgang können wir das Beispiel
+noch in einer dritten Version notieren: 
+ 
+#on("b")# 
+   initialisiere interface; 
+   REP 
+      lauflichtdurchgang; 
+      warte (2.0) 
+   UNTIL abbruch gewuenscht PER. 
+ 
+   lauflichtdurchgang: 
+     INT VAR wert :: 1; 
+     REP 
+       dezimalwert ausgeben (4, wert); 
+       wert := 2 * wert 
+     UNTIL wert > 128 PER. 
+#off("b")# 
+ 
+#on("b")# 
+PROC dezimalwert ausgeben (INT CONST kanal, wert) 
+#off("b")# 
+ 
+'wert' kann Werte zwischen 0 und 255 annehmen. Das zugehörige Bitmuster wird
+dann am angegebenen Kanal ausgegeben. Anhand dieses Befehls wird Ihnen sicher
+auch klar, warum gerade die oben beschriebene Numerierung der Bits gewählt
+wurde. 
+#page# 
+#on("b")#6.1.5  Befehle für die analoge Ausgabe#off("b")# 
+ 
+Neben der 'digitalen' Ausgabe ist auch eine 'analoge' Ausgabe möglich. Allerdings
+wollen wir die Beschreibung der Befehle an dieser Stelle sehr kurz halten, denn eine
+"analoge" Ausgabe ist nur möglich, wenn Sie eine D/A-Karte besitzen. 
+ 
+Auf der D/A-Karte steht nur ein physikalischer Ausgabekanal zur Verfügung, der von
+#on("b")#gs-Prozess#off("b")# jedoch über zwei Kanalnummern angesprochen werden kann. 
+ 
+Über den Ausgabekanal 1 können Spannungswerte zwischen -5V und +5V aus­
+gegeben werden, über den Ausgabekanal 2 Spannungswerte zwischen 0V und +5V. 
+ 
+Dafür stellt #on("b")#gs-Prozess#off("b")# zwei Befehle bereit: 
+ 
+#on("b")# 
+PROC spannungswert ausgeben (INT  CONST kanal, 
+                             REAL CONST wert) 
+#off("b")# 
+ 
+'wert' kann, in Abhängigkeit vom angegebenen Kanal, Werte zwischen -5.0 und +5.0
+(bei Kanal 1) bzw. 0.0 und +5.0 (bei Kanal 2) annehmen. Bei dem Versuch, Werte
+außerhalb dieser Grenzen anzugeben, erhalten Sie die Fehlermeldung "Der
+Spannungswert ... ist nicht zulässig!". 
+ 
+ 
+#on("b")# 
+PROC wert an analogausgang ausgeben (INT CONST kanal, wert) 
+#off("b")# 
+ 
+Für 'wert' kann eine Zahl zwischen 0 und 255 angegeben werden. Dabei wird 0 auf
+den kleinstmöglichen Spannungswert am jeweilgen Kanal (bei Kanal 1 also auf -5V,
+bei Kanal 2 auf 0V) und 255 auf den größtmöglichen Spannungswert am jeweilgen
+Kanal (bei beiden Kanälen auf +5V) abgebildet. Das Intervall zwischen kleinst- und
+größtmöglichem Spannungswert wird in 255 gleichgroße Teilintervalle eingeteilt. Es
+wird nun die Spannung ausgegeben, die der Intervallnummer entspricht. 
+Anmerkung: Dieser Befehl hat nur einen "geringen praktischen Nutzwert"; er dient
+           vornehmlich dazu, den Wandlungsprozeß zu verdeutlichen. 
+#page# 
+#on("b")#6.2  Kleine Beispiele zur digitalen Eingabe#off("b")# 
+ 
+Für die im folgenden beschriebenen kleinen Beispiele benötigen Sie einen Code­
+kartenleser und einige Codekarten (können auch von der Fa. AKTRONIK bezogen
+werden). Der Anschluß des Codekartenlesers an Ihr Interface-System ist denkbar
+einfach. Stecken Sie den 8poligen Platinenstecker des Codekartenlesers in die Buchse
+des Digitaleinganges der Steckkarte bzw. der Compact-Box und den 3poligen
+Platinenstecker in die passende Spannungsversorgungsbuchse (12V) am Steckplatz
+bzw. auf der Compact-Box - fertig! Bei eingeschalteter Betriebsspannung müßte nun
+der Codekartenleser beleuchtet sein. 
+ 
+Auf den Lochkarten sind bis zu 8 Löcher eingestanzt. Dabei können bestimmte
+Löcher (Bits) für die Erfassung definierter Merkmale verwendet werden. Dazu kann
+eine Karte in bestimmte Bereiche aufgeteilt werden. 
+ 
+In unserem kleinen Beispiel stellen wir uns vor, daß eine (Modell-)Sparkasse zwei
+Filialen hat. Sie hat an Ihre "Kunden" Codekarten verteilt. Die Filialen sind durch
+Farben gekennzeichnet. Die oberen (höchstwertigen) zwei Bits der Karte sollen diese
+Farbe kodiert enthalten, damit auch der "Sparkassen-Computer" die Farbe schnell
+ermitteln kann. Die Karte soll folgenden Aufbau haben: 
+ 
+           +---------------------------------+
+           |   O   o   o   O   o   o   O     |
+           |              |                  |
+           |      Farbbits| Kundennummer     |
+           |              |                  |
+           |              |                  |
+           |              |                  |
+           |                                 |
+           +---------------------------------+
+ 
+ 
+#center#Abb.20  Beispiellochkarte 
+#page# 
+Bit 7 sei für rote, Bit 6 für grüne Farbe gesetzt, d.h. gelocht. Wie wollen jetzt ein
+Programm erstellen, das auf Eingabe einer Karte deren Farbe und den durch die
+ersten 6 Bits bestimmten Wert (Kundennummer) ausgibt: 
+ 
+#on("b")# 
+   initialisiere interface; 
+   REP 
+     erfasse lochkarte 
+   UNTIL abbruch gewuenscht PER. 
+ 
+   erfasse lochkarte: 
+     warte bis karte im leser; 
+     gib farbe aus; 
+     gib kundennummer aus; 
+     warte bis keine karte im leser. 
+ 
+   warte bis karte im leser: 
+     put ("Bitte eine Codekarte einlegen!"); line; 
+     WHILE NOT alles abgedunkelt REP 
+        tue nichts 
+     END REP; 
+     WHILE alles abgedunkelt REP 
+        tue nichts 
+     END REP; 
+     warte (1). 
+ 
+   warte bis keine karte im leser: 
+     put ("Bitte die Karte entnehmen!"); 
+     REP 
+       tue nichts 
+     UNTIL alles beleuchtet PER. 
+ 
+   alles abgedunkelt: 
+     bitmuster (3) = "OOOOOOOO". 
+ 
+   alles beleuchtet: 
+     bitmuster (3) = "IIIIIIII". 
+ 
+   gib farbe aus: 
+     IF bitsymbol (3, 7) = "I" 
+        THEN put ("rote Karte"); line 
+        ELSE put ("grüne Karte");line 
+     FI; 
+#page# 
+   gib kundennummer aus: 
+     INT VAR kundennummer :: 0, bitnummer; 
+     FOR bitnummer FROM 0 UPTO 5 REP 
+       registriere gesetztes bit 
+     PER; 
+     put ("Kundennummer:"); put (kundennummer): line. 
+ 
+   registriere gesetztes bit: 
+     IF bit ist gesetzt (3, bitnummer) 
+        THEN kundennummer INCR (2 ** bitnummer) 
+     FI. 
+ 
+ 
+#off("b")# 
+   (Hinweis: Es handelt sich hier um ein Beispielprogramm, an dem diverse
+             Befehle erläutert werden sollen - die Programmierung ist nicht
+             optimal! Im Refinement 'warte bis karte im leser' ist es z.B.
+             günstiger, solange einzulesen, bis der eingelesene Wert "stabil" ist.
+             Auch das Refinement 'registriere gesetztes bit' würde man so nicht
+             programmieren, sondern nach einem Einlesevorgang (Bitmuster)
+             über Textoperationen aus dem Bitmuster die 'kundennummer'
+             ermitteln...). 
+ 
+Bevor wir Ihnen die Funktionsweise der von #on("b")#gs-Prozess#off("b")# bereitgestellten Prozeduren
+im Detail erläutern, möchten wir Ihnen noch ein paar kurze Erläuterungen zum
+obigen Programm geben. 
+ 
+Besondere Aufmerksamkeit sollten Sie den Refinements 'warte bis karte im leser' und
+'warte bis keine karte im leser' schenken. Im erstgenannten Refinement ist sicherzu­
+stellen, daß das Einschieben der Karte (erst muß alles abgedunkelt werden - dann
+müssen einige Positionen beleuchtet sein) registriert wird. Um Fehlauswertungen der
+Karte zu vermeiden (z.B. beim Verkanten einer Karte) wird zur Sicherheit vor der
+Auswertung eine Sekunde gewartet. Am Ende des Lesevorgangs soll sichergestellt
+werden, daß die Karte auch entnommen worden ist (alle Positionen wieder beleuchtet
+sind). 
+#page# 
+Wir prüfen im Refinement 'gib farbe aus' nur das 7. Bit (sehen Sie die Erklärung zu
+'bitsymbol'). Ist das Bit gesetzt (die Karte hier gelocht), so identifizieren wir die Farbe
+Rot, sonst Grün. Natürlich ist es möglich, mit 2 "Farbbits" vier Farben zu ver­
+schlüsseln: z.B. Rot, wenn nur Bit 7 gesetzt ist; Grün, wenn nur Bit 6 gesetzt ist; Blau,
+wenn Bit 7 und Bit 6 gesetzt sind; Gelb, wenn weder Bit 7 noch Bit 6 gesetzt sind.
+Dadurch wird der Auswertalgorithmus aber etwas aufwendiger. Vielleicht probieren
+Sie es nacher einmal. 
+ 
+Die Prozedur 'tue nichts' wird schon von #on("b")#gs-Prozess#off("b")# bereitgestellt. Es wird keine
+Aktion ausgeführt - jedoch überprüft, ob zwischenzeitlich die Tastenfolge
+<ESC><h> ("Notbremse") eingegeben wurde. Es empfiehlt sich, diese Prozedur
+gerade in Schleifenrümpfen einzusetzten, damit die Möglichkeit besteht, bei einer
+"Endlosschleife" einen Abbruch herbeizuführen (sonst "hängt" die Task ggf. am
+Interfacekanal)! 
+ 
+ 
+#on("b")#6.2.1  Befehle für die digitale Eingabe#off("b")# 
+ 
+In Kapitel 6.1.4 haben Sie die Befehle für die digitale Ausgabe kennengelernt, die
+Ihnen #on("b")#gs-Prozess#off("b")# zur Verfügung stellt. Zu jedem dieser drei Befehle gibt es das
+"Gegenstück" auch als Eingabebefehl. Alle Eingabebefehle sind als werteliefernde
+Prozeduren (Funktionen) ausgelegt. 
+ 
+In den Refinements 'alles abgedunkelt' und 'alles beleuchtet' benutzen wir den
+Befehl: 
+ 
+#on("b")# 
+TEXT PROC bitmuster (INT CONST kanal) 
+#off("b")# 
+ 
+Über den Parameter wird der Kanal angegeben, über den der digitale Eingang ange­
+sprochen werden kann; bei uns ist das der Kanal 3 auf der Compact-Box. Die
+Prozedur liefert einen Text, der aus acht Zeichen besteht. Dabei können nur die
+Zeichen "I und "O" auftreten (sehen Sie dazu auch Kapitel 6.1.3). 
+#page# 
+Die beiden gerade genannten Refinements hätten aber auch so notiert werden
+können: 
+ 
+#on("b")# 
+  alles abgedunkelt: 
+    dezimalwert (3) = 0. 
+ 
+  alles beleuchtet: 
+    dezimalwert (3) = 255. 
+#off("b")# 
+ 
+#on("b")# 
+INT PROC dezimalwert (INT CONST kanal) 
+#off("b")# 
+ 
+Über den Parameter wird der Kanal angegeben, über den der digitale Eingang ange­
+sprochen werden kann; bei uns ist das wieder der Kanal 3 auf der Compact-Box. Die
+Prozedur liefert einen Integer-Wert zwischen 0 und 255 (sehen Sie dazu auch unter
+'dezimalwert ausgeben' im Kapitel 6.1.4). 
+ 
+Den dritten Eingabebefehl für den Digitaleingang, den #on("b")#gs-Prozess#off("b")# bereitstellt, finden
+Sie im Refinement 'gib farbe aus': 
+ 
+#on("b")# 
+TEXT PROC bitsymbol (INT CONST kanal, bitnummer) 
+#off("b")# 
+ 
+Wie schon bei den anderen beiden Eingabebefehlen wird hier über den ersten
+Parameter der Eingabekanal festgelegt; bei uns auf der Compact-Box ist das wieder
+der Kanal 3. Über den zweiten Parameter wird die Nummer des Bits angegeben,
+dessen Wert ermittelt werden soll. Ist das betreffende Bit gesetzt, so liefert die
+Prozedur das Zeichen "I", sonst das Zeichen "O" (sehen Sie dazu auch das Kapitel
+6.1.3 'Schreibweise für Bitmuster/Bitsymbole'). 
+ 
+ 
+#on("b")#6.2.2  Eingabetests#off("b")# 
+ 
+Neben diesen drei Eingabebefehlen stellt #on("b")#gs-Prozess#off("b")# noch zwei Testbefehle zur
+Verfügung, die man häufig gut verwenden kann. Auf einen greifen wir schon im
+Refinement 'registriere gesetztes bit' zurück: 
+#page# 
+#on("b")# 
+BOOL PROC bit ist gesetzt (INT CONST kanal, bitnummer) 
+#off("b")# 
+ 
+Die Parameter sind die gleichen wie beim Befehl 'bitsymbol'. Zunächst liest die
+Prozedur die aktuelle Einstellung am angegebenen Digitaleingang ('kanal') ein und
+untersucht dann das Bit mit der angegebenen Bitnummer (0, ..., 7). Die Prozedur
+liefert den Wert 'TRUE', wenn das Bit mit der entsprechenden Bitnummer gesetzt ist
+(die Prozedur bitsymbol' mit gleichen Parametern also den Wert "I" liefern würde),
+sonst 'FALSE' (die Prozedur bitsymbol' mit gleichen Parametern also den Wert "O"
+liefern würde). 
+ 
+Den zweiten Testbefehl haben wir im obigen Programm noch nicht verwendet. Wir
+könnten damit aber auch die Refinements 'alles abgedunkelt' und 'alles beleuchtet'
+folgendermaßen notieren: 
+ 
+#on("b")# 
+  alles abgedunkelt: 
+    bitmuster gleich (3, "OOOOOOOO"). 
+ 
+  alles beleuchtet: 
+    bitmuster gleich (3, "IIIIIIII"). 
+#off("b")# 
+ 
+ 
+#on("b")# 
+BOOL PROC bitmuster gleich (INT CONST kanal, 
+                            TEXT CONST vorgabe) 
+#off("b")# 
+ 
+Wie bereits zuvor wird über den ersten Parameter der Kanal angegeben, über den der
+Digitaleingang angesprochen werden kann. Zunächst liest die Prozedur am ange­
+gebenen Kanal die aktuelle Einstellung ein und vergleicht es mit der 'vorgabe'. Der
+eigentliche Vorteil der Prozedur liegt darin, daß bei der Beschreibung der 'vorgabe'
+neben den Zeichen "I" und "O" auch das Zeichen "X" verwendet werden darf. z.B.
+"IOXXXXX". Entspricht das eingelesene Bitmuster der 'vorgabe', so liefert die Prozedur
+den Wert 'TRUE', sonst den Wert 'FALSE'. In gerade genannten Beispiel liefert die
+Prozedur also immer dann 'TRUE', wenn eine Karte mit der Markierung für Rot
+eingeschoben wurde - gleichgültig, welche Kundennummer eingestanzt ist. 
+#page# 
+#on("b")#6.2.3  Befehle für die analoge Eingabe#off("b")# 
+ 
+Die analoge Eingabe möchten wir Ihnen an einem ganz einfachen Beispiel vor Augen
+führen. Sie brauchen dazu nur ein ganz normales Drehpotentiometer (ca. 5kOhm),
+das Sie in jedem Elektronik-Fachgeschäft für wenig Geld erhalten können. Ein
+solches Drehpotentiometer verfügt über drei Anschlüsse. Wenn man sich den inneren
+Aufbau vor Augen führt, ist die Belegung der drei Anschlüsse auch recht einsichtig. 
+ 
+ 
+         siehe Physikbuch!! 
+ 
+ 
+ 
+#on("b")##center#Abb.21 Aufbau eines Drehpotentiometers#off("b")#
+ 
+Löten Sie ggf. auf die drei Anschlüsse je einen Lötschuh, um eine einfache Steckver­
+bindung zur Kombikarte/Compact-Box herstellen zu können. Wichtig ist vor allem,
+daß der mittlere Anschluß am Drehpotentiometer auf den mittleren Stecksockel am
+Analogeingang auf der Kombikarte/Compact-Box aufgesteckt wird. Die beiden
+anderen Anschlüsse können können Sie beliebig auf die beiden dann noch freien
+Lötstifte (+ und �) des gleichen Analogeingangs aufstecken. 
+ 
+Starten Sie dann das folgende Programm: 
+ 
+#on("b")# 
+   initialisiere interface; 
+   page; 
+   REP 
+     notiere potentiometerwert 
+   UNTIL abbruch gewuenscht PER. 
+ 
+   notiere potentiometerwert: 
+     put (wert von analogeingang (1)); 
+     line. 
+#off("b")# 
+#page# 
+Nach dem Start des Programms müßten auf dem Bildschirm untereinander immer
+wieder die gleiche Zahl (ein Wert zwischen 0 und 255) auftauchen. Wenn Sie dann
+am Potentiometer drehen, müßten sich auch die Werte auf dem Bildschirm ändern. 
+ 
+Sie hätten das Refinement 'notiere potentiometerwert' auch folgendermaßen notieren
+können: 
+ 
+#on("b")# 
+   notiere potentiometerwert: 
+     put (spannungswert (1)); 
+     line. 
+#off("b")# 
+ 
+Statt Wert zwischen 0 und 255 zu erhalten, müßten Sie jetzt Werte zwischen 0.0 und
+5.0 erhalten. 
+ 
+ 
+#on("b")# 
+REAL PROC spannungswert (INT CONST kanal) 
+#off("b")# 
+ 
+Über den Parameter wird der Kanal angegeben, über den der analoge Eingang ange­
+sprochen werden kann; bei uns ist das der Kanal 1 (oder 2) auf der Kombikarte/
+Compact-Box. Auf der Kombikarte/Compact-Box können nur Spannungswerte
+zwischen 0.0V und 5.0V eingelesen werden. Auf der A/D-Karte kann der Bereich für
+die einzulesenden Sapnnungwerte durch die Schalterstellung auf der Karte eingestellt
+werden (Sehen Sie dazu auch Kapitel 5.3.1). 
+ 
+ 
+#on("b")# 
+REAL PROC wert von analogeingang (INT CONST kanal) 
+#off("b")# 
+ 
+Über den Parameter wird der Kanal angegeben, über den der analoge Eingang ange­
+sprochen werden kann; bei uns ist das der Kanal 1 (oder 2) auf der Kombikarte/
+Compact-Box. Geliefert werden Werte zwischen 0 und 255. 
+ 
+Tatsächlich wird aber ein Spannungswert vom Analogeingang eingelesen. Dieser
+Spannungswert wird vom Analog-Digital-Wandler auf der Karte nach folgendem
+Verfahren gewandelt: 
+#page# 
+Dem größtmöglichen Spannungswert an diesem Eingang wird der Wert 255, dem
+kleinstmöglichen der Wert 0 zugeordnet. Das Intervall zwischen dem kleinst- und
+größtmöglichen Spannungswert wird in 255 gleichgroße Teilintervalle eingeteilt. Es
+wird nun die Nummer des Intervalls geliefert, in das die eingelesene Spannung fällt.
+Kleinst- und größtmögliche Spannungswerte sind abhängig von der aktuellen Steck­
+karte, Interface-Konfiguration). 
+ 
+ 
+#on("b")#6.3  Hinweise auf Aufgabenmaterial#off("b")# 
+ 
+Eine Fülle von Beispielanwendungen sind beschrieben in: 
+ 
+   Landesinstitut für Schule und Weiterbildung (Hrsg.), Materialien zur Lehrerfort­
+   bildung in Nordrhein-Westfalen, Heft 2, Neue Technologien - Informations­
+   technologische Inhalte im Wahlpflichtunterricht der Klassen 9/10, 2. über­
+   arbeitete Auflage 1987 
+
-- 
cgit v1.2.3