summaryrefslogtreecommitdiff
path: root/app/gs.process/1.02/doc/gs-prozess-6
diff options
context:
space:
mode:
Diffstat (limited to 'app/gs.process/1.02/doc/gs-prozess-6')
-rw-r--r--app/gs.process/1.02/doc/gs-prozess-6641
1 files changed, 641 insertions, 0 deletions
diff --git a/app/gs.process/1.02/doc/gs-prozess-6 b/app/gs.process/1.02/doc/gs-prozess-6
new file mode 100644
index 0000000..a3835cd
--- /dev/null
+++ b/app/gs.process/1.02/doc/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
+