diff options
Diffstat (limited to 'doc/prozess/gs-prozess-6')
-rw-r--r-- | doc/prozess/gs-prozess-6 | 641 |
1 files changed, 0 insertions, 641 deletions
diff --git a/doc/prozess/gs-prozess-6 b/doc/prozess/gs-prozess-6 deleted file mode 100644 index a3835cd..0000000 --- a/doc/prozess/gs-prozess-6 +++ /dev/null @@ -1,641 +0,0 @@ -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 - |