app/gs.process/1.02/src/ls-Prozess 5

Raw file
Back to index

(* 
        
         ********************************************************** 
         ********************************************************** 
         **                                                      ** 
         **                     ls-Prozess 5                     ** 
         **                                                      ** 
         **                     Version 1.02                     ** 
         **                                                      ** 
         **                  (Stand : 26.01.90)                  ** 
         **                                                      ** 
         **                                                      ** 
         **                                                      ** 
         **         Autoren: Bruno Pollok, Bielefeld             ** 
         **                  Wolfgang Weber, Bielefeld           ** 
         **                                                      ** 
         **                                                      ** 
         **    Copyright (C) 1988  Eva Latta-Weber, Bielefeld    ** 
         **    Copyright (C) 1990  ERGOS GmbH, Siegburg          ** 
         ********************************************************** 
         ********************************************************** 
 
                                                                           *) 
PACKET ls prozess 5 DEFINES 
       pdv konfiguration zugelassen,{}       pdv konfiguration evtl aktivieren,{}       pdv konfiguration zeigen,{}       pdv kanal konfigurieren,{}       pdv interfaceausgabe testen,{}       pdv interfaceeingabe testen:{}LET max steckplaetze     =  4,{}    max portanzahl       =  4,{}    anzahl kartensorten  =  5,{}    betriebsart          =  1,{}    keine karte          =  1,{}    ea karte             =  2,{}    kombi                =  3,{}    da karte             =  4,{}    ad karte             =  5,{}
    compact              =  6,{}    einzel               =  7,{}    mehrfach             =  8;{}LET testfenster x        = 11,{}    testfenster y        =  5,{}    testfenster xsize    = 59,{}    testfenster ysize    = 15;{}WINDOW VAR testfenster   :: window (testfenster x,     testfenster y,{}                                    testfenster xsize, testfenster ysize);{}INT    VAR steckplatzart :: 0;{}BOOL   VAR mit konfigurationsmoeglichkeit :: TRUE;{}TASK   VAR konfigurationsmanager          :: niltask;{}
ROW max steckplaetze INT VAR kartenart :: ROW max steckplaetze INT :{}                                          (keine karte, keine karte,{}                                           keine karte, keine karte);{}LET SPANNUNG = ROW 2 REAL,{}    PORT     = ROW 3 INT,{}    KARTE    = ROW max portanzahl PORT;{}ROW anzahl kartensorten KARTE CONST karte :: ROW anzahl kartensorten KARTE :{}(* ---------------------------------------------------------------------- *){}(   KARTE : ({}(* ---------------------------------------------------------------------- *){}
(*         *)       PORT : (nicht belegt, 0, 0),        (*     Port 1     *){}(*  leere  *)       PORT : (nicht belegt, 0, 0),        (*     Port 2     *){}(*  Karte  *)       PORT : (nicht belegt, 0, 0),        (*     Port 3     *){}(*         *)       PORT : (nicht belegt, 0, 0)),       (*     Port 4     *){}(*----------------------------------------------------------------------- *){}    KARTE : ({}(* ---------------------------------------------------------------------- *){}(*         *)       PORT : (digital ein,  1, 3),        (*     Port 1     *){}
(*   E/A   *)       PORT : (digital aus,  1, 1),        (*     Port 2     *){}(*  Karte  *)       PORT : (digital ein,  1, 3),        (*     Port 3     *){}(*         *)       PORT : (digital aus,  1, 1)),       (*     Port 4     *){}(*----------------------------------------------------------------------- *){}    KARTE : ({}(* ---------------------------------------------------------------------- *){}(*         *)       PORT : (analog  ein,  2, 2),        (*     Port 1     *){}(*  Kombi  *)       PORT : (analog  ein,  3, 2),        (*     Port 2     *){}
(*  Karte  *)       PORT : (digital ein,  1, 3),        (*     Port 3     *){}(*         *)       PORT : (digital aus,  1, 1 )),      (*     Port 4     *){}(*----------------------------------------------------------------------- *){}    KARTE : ({}(* ---------------------------------------------------------------------- *){}(*         *)       PORT : (analog  aus,  1, 1),        (*     Port 1     *){}(*   D/A   *)       PORT : (analog  aus,  1, 3),        (*     Port 2     *){}(* Wandler *)       PORT : (nicht belegt, 0, 0),        (*     Port 3     *){}
(*         *)       PORT : (nicht belegt, 0, 0)),       (*     Port 4     *){}(*----------------------------------------------------------------------- *){}    KARTE : ({}(* ---------------------------------------------------------------------- *){}(*         *)       PORT : (analog  ein,  1, 1),        (*     Port 1     *){}(*   A/D   *)       PORT : (analog  ein,  1, 3),        (*     Port 2     *){}(* Wandler *)       PORT : (nicht belegt, 0, 0),        (*     Port 3     *){}(*         *)       PORT : (nicht belegt, 0, 0))        (*     Port 4     *){}
(*----------------------------------------------------------------------- *){}                                                                           );{}PROC pdv konfiguration zugelassen (BOOL CONST wahrheitswert):{}  teste berechtigung;{}  mit konfigurationsmoeglichkeit := wahrheitswert;{}  IF mit konfigurationsmoeglichkeit{}     THEN konfigurationsmanager := niltask{}     ELSE konfigurationsmanager := myself{}  FI.{}  teste berechtigung:{}    enable stop;{}    IF NOT (konfigurationsmanager = niltask  OR{}
            konfigurationsmanager = myself){}       THEN errorstop ("Befehl ist nur in Task '" +{}                        name (konfigurationsmanager) + "' zugelassen!"){}    FI.{}END PROC pdv konfiguration zugelassen;{}PROC pdv konfiguration evtl aktivieren:{}  IF mit konfigurationsmoeglichkeit{}     THEN activate (3){}     ELSE deactivate (3){}  FI{}END PROC pdv konfiguration evtl aktivieren;{}PROC pdv kanal konfigurieren:{}  TEXT CONST info   ::  "  "15"Auswahl der Steckplatzart "14" "13""13""{}
                      + "     c  Compactbox             "13""{}                      + "     e  Einzelsteckplatz       "13""{}                      + "     m  Mehrfachsteckplatz     ",{}             liste  :: "Compact"13"Einzel"13"Mehrfach",{}             tasten :: "cemCEM";{}   INT VAR auswahl := menualternative (info, liste, tasten, 5, FALSE);{}   SELECT auswahl OF{}     CASE 1, 101, 104 :  trage compactbox ein;{}                         zeige kanalbelegung (0){}     CASE 2, 102, 105 :  trage einzelplatzbelegung ein;{}
                         zeige kanalbelegung (0){}     CASE 3, 103, 106 :  bearbeite die steckplaetze einzeln{}   END SELECT;{}   beende kanaldaten eintragen.{}   trage compactbox ein:{}     steckplatzart := compact;{}     trage steckplatzbelegung ein (1, kombi);{}     trage steckplatzbelegung ein (2, keine karte);{}     trage steckplatzbelegung ein (3, keine karte);{}     trage steckplatzbelegung ein (4, keine karte).{}   trage einzelplatzbelegung ein:{}     steckplatzart := einzel;{}     trage steckplatzbelegung ein (1, ermittelte kartenart (0));{}
     trage steckplatzbelegung ein (2, keine karte);{}     trage steckplatzbelegung ein (3, keine karte);{}     trage steckplatzbelegung ein (4, keine karte).{}   bearbeite die steckplaetze einzeln:{}     INT VAR platz;{}     steckplatzart := mehrfach;{}     FOR platz FROM 1 UPTO max steckplaetze REP{}       trage steckplatzbelegung ein (platz, ermittelte kartenart (platz));{}       zeige kanalbelegung (platz * 10){}     PER.{}END PROC pdv kanal konfigurieren;{}PROC pdv konfiguration zeigen:{}  SELECT steckplatzart OF{}
    CASE compact  : zeige kanalbelegung (0){}    CASE einzel   : zeige kanalbelegung (0){}    CASE mehrfach : zeige belegung einzelner steckplaetze{}    OTHERWISE       noch nicht konfiguriert{}  END SELECT.{}  noch nicht konfiguriert:{}    menuinfo ("                  "15"Warnung: "14"           "13""13""13""{}            + " Das Interface wurde noch nicht konfiguriert! "13""13""{}            + "  In diesem Zustand sind weder Eingaben noch  "13""{}            + "     Ausgaben über das Interface möglich.     "13"").{}
  zeige belegung einzelner steckplaetze:{}    TEXT CONST info   ::{}                      "   "15"Eingestellt: Mehrfachsteckplatz "14" "13""13""{}                    + "         1   Info Steckplatz 1         "13""{}                    + "         2   Info Steckplatz 2         "13""{}                    + "         3   Info Steckplatz 3         "13""{}                    + "         4   Info Steckplatz 4         "13""13""{}                    + "         z   Zurück ins Hauptmenü      ",{}               liste  :: "1"13"2"13"3"13"4"13"z",{}
               tasten :: "1234zZ";{}   INT VAR auswahl;{}   REP auswahl := menualternative (info, liste, tasten, 5, FALSE);{}     SELECT auswahl OF{}       CASE 1, 101 :  zeige kanalbelegung (10){}       CASE 2, 102 :  zeige kanalbelegung (20){}       CASE 3, 103 :  zeige kanalbelegung (30){}       CASE 4, 104 :  zeige kanalbelegung (40){}     END SELECT{}   UNTIL (auswahl = 5) OR (auswahl > 104) PER{}END PROC pdv konfiguration zeigen;{}PROC pdv interfaceausgabe testen:{}  gestalte testfenster ("Ausgabetest");{}
  disable stop;{}  teste interface;{}  IF NOT is error{}     THEN teste interface ausgabe{}  FI;{}  IF is error{}     THEN fehlerbehandlung{}     ELSE schliesse interface;{}          enable stop;{}          beseitige testfenster;{}          refresh submenu{}  FI.{}  fehlerbehandlung:{}    TEXT VAR meldung :: errormessage;{}    clear error;{}    schalte alles aus;{}    schliesse interface;{}    enable stop;{}    cursor off;{}    regenerate menuscreen;{}    menuinfo (" " + invers (meldung)).{}END PROC pdv interfaceausgabe testen;{}
PROC pdv interfaceeingabe testen:{}  gestalte testfenster ("Eingabetest");{}  disable stop;{}  teste interface;{}  IF NOT is error{}     THEN teste interface eingabe{}  FI;{}  IF is error{}     THEN fehlerbehandlung{}     ELSE schliesse interface;{}          enable stop;{}          beseitige testfenster;{}          refresh submenu{}  FI.{}  fehlerbehandlung:{}    TEXT VAR meldung :: errormessage;{}    clear error;{}    schalte alles aus;{}    schliesse interface;{}    enable stop;{}    cursor off;{}
    regenerate menuscreen;{}    menuinfo (" " + invers (meldung)).{}END PROC pdv interfaceeingabe testen;{}PROC beseitige testfenster:{}  INT VAR z;{}  FOR z FROM testfenster y + testfenster ysize DOWNTO testfenster y - 1 REP{}    cursor (testfenster x - 1, z);{}    out (""5""){}  PER{}END PROC beseitige testfenster;{}PROC gestalte testfenster (TEXT CONST funktionsart):{}  show (testfenster);{}  cursor (testfenster x - 1, testfenster y + testfenster ysize - 2);{}  out (balken links + (testfenster xsize * waagerecht) + balken rechts);{}
  cursor (testfenster, 1, 2);{}  out (testfenster, center (testfenster, invers (funktionsart))){}END PROC gestalte testfenster;{}PROC testfensterfussnote (TEXT CONST meldung):{}  cursor (testfenster, 2, testfenster ysize);{}  out (testfenster, meldung){}END PROC testfensterfussnote;{}PROC teste interfaceausgabe:{}  INT  VAR kanalnummer, steckplatz, port;{}  TEXT VAR nummer :: "";{}  enable stop;{}  REP hole kanalnummer;{}      teste ausgabe an kanal{}  PER.{}  hole kanalnummer:{}    SELECT steckplatzart OF{}
      CASE compact  :  kanalnummer := 4; steckplatz := 1; port := 4{}      CASE einzel   :  kanalnummer muss evtl erfragt werden{}      CASE mehrfach :  kanalnummer muss erfragt werden{}    OTHERWISE errorstop ("Interface ist noch nicht konfiguriert!"){}    END SELECT;{}    cursor (testfenster, 2, 5);{}    out (testfenster, "Ausgabe an Kanal " + text (kanalnummer) + klammer +{}                       kanalbeschreibung (steckplatz, port));{}    IF steckplatzart = mehrfach{}       THEN cursor (testfenster, 25, 6);{}
            out (testfenster, "in Steckplatz " + text (steckplatz)){}    FI;{}    out (testfenster, ")").{}    klammer:{}      IF kanalnummer < 10{}         THEN "  (= "{}         ELSE " (= "{}      FI.{}  kanalnummer muss evtl erfragt werden:{}    SELECT kartenart [1] OF{}      CASE kombi   :  kanalnummer := 4; steckplatz := 1; port := 4{}      CASE eakarte :  kanalnummer := 2; steckplatz := 1; port := 2{}      CASE dakarte :  frage nach kanalnummer auf da karte;{}                      steckplatz  := 1; port := kanalnummer{}
    OTHERWISE errorstop ("Keine Ausgabe an " + kartenname + " möglich!"){}    END SELECT.{}  kartenname:{}    IF kartenart [1] = ad karte{}       THEN "A/D-Karte"{}       ELSE "leeren Steckplatz"{}    FI.{}  frage nach kanalnummer auf da karte:{}    menufootnote ("Zurück zum Hauptmenü: <ESC><q>");{}    testfensterfussnote ("Bitte eine Kanalnummer eingeben!");{}    cursor (testfenster, 2, 5);{}    out (testfenster, "Ausgabe - Kanal (1 oder 2): ");{}    cursor on;{}    REP inchar (nummer){}    UNTIL (pos ("12", nummer) > 0) OR esc q gedrueckt PER;{}
    cursor off;{}    IF nummer = ""27""{}       THEN LEAVE teste interface ausgabe{}       ELSE kanalnummer := int (nummer){}    FI.{}    esc q gedrueckt:{}      (nummer = ""27"") AND (incharety (20) = "q").{}  kanalnummer muss erfragt werden:{}    TEXT VAR exit char;{}    menufootnote ("Zurück zum Hauptmenü: <ESC><q>");{}    testfensterfussnote ("Bitte eine Kanalnummer eingeben!");{}    cursor (testfenster, 2, 5);{}    out (testfenster, "Ausgabe - Kanal:");{}    cursor on;{}    REP cursor (testfenster, 19, 5);{}
        editget (testfenster, nummer, 4, 4, "", "q", exit char){}    UNTIL (exit char = ""27"q") OR ausgabekanal eingegeben PER;{}    cursor off;{}    IF exit char = ""27"q"{}       THEN LEAVE teste interface ausgabe{}    FI.{}  ausgabekanal eingegeben:{}    kanalnummer := abs (int (nummer));{}    steckplatz  := kanalnummer DIV 10;{}    port        := kanalnummer MOD 10;{}    IF steckplatz = 0 THEN steckplatz := 1 FI;{}    cursor (testfenster, 2, 7);{}    IF   (kanalnummer < 1) OR (kanalnummer > 49){}
         THEN out (testfenster, "Unzulässige Kanalnummer!          "); FALSE{}    ELIF (port = 0) OR (port > max portanzahl) OR kein ausgabeport{}         THEN out (testfenster, "Dies ist kein Ausgabe-Kanal!      "); FALSE{}         ELSE out (testfenster, "                                  "); TRUE{}    FI.{}    kein ausgabeport:{}      (port betriebsart <> digital aus) AND (port betriebsart <> analog aus).{}      port betriebsart: karte [sorte][port][betriebsart].{}      sorte           : kartenart [steckplatz].{}
  teste ausgabe an kanal:{}    TEXT VAR wert;{}    cursor (testfenster, 1, 8);{}    out (testfenster, testfenster xsize * "-");{}    cursor (testfenster, 2, 11);{}    out (testfenster, "Ausgabewert: ");{}    testfenster fussnote ("Bitte einen Wert zwischen 0 und 255 eingeben!");{}    menufootnote ("'Werte ausgeben' beenden: <ESC><q>");{}    cursor on;{}    REP cursor (testfenster, 15, 11);{}        wert := "0";{}        editget (testfenster, wert, 4, 4, "", "qh", exit char);{}        IF exit char = return{}
           THEN ausgeben (kanalnummer, int (wert) MOD ganzzahlobergrenze){}        ELIF exit char = ""27"h"{}           THEN errorstop ("Programm-Abbruch durch <ESC><h>!"){}        FI{}    UNTIL exitchar = ""27"q" PER;{}    cursor off;{}    IF (steckplatzart = mehrfach) OR (kartenart [1] = da karte){}       THEN cursor (testfenster, 1, 5);{}            out (testfenster, (2 * testfenster xsize) * " ");{}            cursor (testfenster, 2, 11);{}            out (testfenster, "                       ");{}
            testfenster fussnote ((testfenster xsize - 2) * " "){}       ELSE LEAVE teste interfaceausgabe{}    FI.{}    return: ""13"".{}END PROC teste interfaceausgabe;{}PROC teste interfaceeingabe:{}  INT  VAR kanalnummer, steckplatz, port;{}  TEXT VAR nummer :: "";{}  enable stop;{}  REP hole kanalnummer;{}      teste eingabe vom kanal{}  PER.{}  hole kanalnummer:{}    IF   steckplatzart = 0{}         THEN errorstop ("Interface ist noch nicht konfiguriert!"){}         ELSE kanalnummer erfragen{}
    FI;{}    cursor (testfenster, 2, 5);{}    out (testfenster, "Eingabe von Kanal " + text (kanalnummer) + klammer +{}                       kanalbeschreibung (steckplatz, port));{}    IF steckplatzart = mehrfach{}       THEN cursor (testfenster, 26, 6);{}            out (testfenster, "in Steckplatz " + text (steckplatz)){}    FI;{}    out (testfenster, ")").{}    klammer:{}      IF kanalnummer < 10{}         THEN "  (= "{}         ELSE " (= "{}      FI.{}  kanalnummer erfragen:{}    SELECT steckplatzart OF{}
      CASE compact  : drei kanaele anbieten;{}                      steckplatz := 1; port := kanalnummer{}      CASE einzel   : zwei oder drei kanaele anbieten;{}                      steckplatz := 1; port := kanalnummer{}      CASE mehrfach : alle kanaele moeglich{}    END SELECT.{}  drei kanaele anbieten:{}    menufootnote ("Zurück zum Hauptmenü: <ESC><q>");{}    testfensterfussnote ("Bitte eine Kanalnummer eingeben!");{}    cursor (testfenster, 2, 5);{}    out (testfenster, "Eingabe - Kanal (1, 2 oder 3): ");{}
    cursor on;{}    REP inchar (nummer){}    UNTIL (pos ("123", nummer) > 0) OR esc q gedrueckt PER;{}    cursor off;{}    IF nummer = ""27""{}       THEN LEAVE teste interface eingabe{}       ELSE kanalnummer := int (nummer){}    FI.{}    esc q gedrueckt:{}      (nummer = ""27"") AND (incharety (20) = "q").{}  zwei oder drei kanaele anbieten:{}    SELECT kartenart [1] OF{}      CASE kombi    : drei kanaele anbieten{}      CASE ad karte : zwei kanaele anbieten{}      CASE ea karte : kanalnummer := 1{}
    OTHERWISE errorstop ("Eingabe bei " + kartenname + " nicht möglich!"){}    END SELECT.{}    kartenname:{}      IF kartenart [1] = da karte{}         THEN "D/A-Karte"{}         ELSE "leerem Steckplatz"{}      FI.{}  zwei kanaele anbieten:{}    menufootnote ("Zurück zum Hauptmenü: <ESC><q>");{}    testfensterfussnote ("Bitte eine Kanalnummer eingeben!");{}    cursor (testfenster, 2, 5);{}    out (testfenster, "Eingabe - Kanal (1 oder 2): ");{}    cursor on;{}    REP inchar (nummer){}    UNTIL (pos ("12", nummer) > 0) OR esc q gedrueckt PER;{}
    cursor off;{}    IF nummer = ""27""{}       THEN LEAVE teste interface eingabe{}       ELSE kanalnummer := int (nummer){}    FI.{}  alle kanaele moeglich:{}    TEXT VAR exit char;{}    menufootnote ("Zurück zum Hauptmenü: <ESC><q>");{}    testfensterfussnote ("Bitte eine Kanalnummer eingeben!");{}    cursor (testfenster, 2, 5);{}    out (testfenster, "Eingabe - Kanal:");{}    cursor on;{}    REP cursor (testfenster, 19, 5);{}        editget (testfenster, nummer, 4, 4, "", "q", exit char){}    UNTIL (exit char = ""27"q") OR eingabekanal eingegeben PER;{}
    cursor off;{}    IF exit char = ""27"q"{}       THEN LEAVE teste interface eingabe{}    FI.{}  eingabekanal eingegeben:{}    kanalnummer := abs (int (nummer));{}    steckplatz  := kanalnummer DIV 10;{}    port        := kanalnummer MOD 10;{}    IF steckplatz = 0 THEN steckplatz := 1 FI;{}    cursor (testfenster, 2, 7);{}    IF   (kanalnummer < 1) OR (kanalnummer > 49){}         THEN out (testfenster, "Unzulässige Kanalnummer!          "); FALSE{}    ELIF (port = 0) OR (port > max portanzahl) OR kein eingabeport{}
         THEN out (testfenster, "Dies ist kein Eingabe-Kanal!      "); FALSE{}         ELSE out (testfenster, "                                  "); TRUE{}    FI.{}    kein eingabeport:{}      (port betriebsart <> digital ein) AND (port betriebsart <> analog ein).{}      port betriebsart: karte [sorte][port][betriebsart].{}      sorte           : kartenart [steckplatz].{}  teste eingabe vom kanal:{}    cursor (testfenster, 1, 8);{}    out (testfenster, testfenster xsize * "-");{}    cursor (testfenster, 2, 11);{}
    out (testfenster, "Eingelesener Wert: ");{}    testfenster fussnote ("                                             ");{}    menufootnote ("'Werte einlesen' beenden: <ESC><q>");{}    REP cursor (testfenster, 21, 11);{}        out (text (eingabe (kanalnummer), 3));{}        warte (0.1){}    UNTIL abbruch gewuenscht PER;{}    IF (steckplatzart = einzel) AND (kartenart [1] = ea karte){}       THEN LEAVE teste interfaceeingabe{}       ELSE cursor (testfenster, 1, 5);{}            out (testfenster, (2 * testfenster xsize) * " ");{}
            cursor (testfenster, 2, 11);{}            out (testfenster, "                       "){}    FI.{}END PROC teste interfaceeingabe;{}TEXT PROC kanalbeschreibung (INT CONST steckplatz, port):{}  IF steckplatzart = compact{}     THEN port auf compactbox{}     ELSE port auf steckkarte{}  FI.{}  port auf compactbox:{}    portbeschreibung + " der Compact-Box".{}  port auf steckkarte:{}    SELECT kartenart [steckplatz] OF{}      CASE kombi    : portbeschreibung + " der Kombi-Karte"{}      CASE ea karte : portbeschreibung + " der E/A-Karte"{}
      CASE da karte : portbeschreibung + " der D/A-Karte"{}      CASE ad karte : portbeschreibung + " der A/D-Karte"{}    OTHERWISE ""{}    END SELECT.{}  portbeschreibung:{}    SELECT 2 + karte [kartenart [steckplatz]][port][betriebsart] OF{}      CASE 1 : "Digitalausgang"{}      CASE 3 : "Digitaleingang"{}      CASE 0 : "Analogausgang " + text (port){}      CASE 4 : "Analogeingang " + text (port){}    OTHERWISE ""{}    END SELECT.{}END PROC kanalbeschreibung;{}PROC trage steckplatzbelegung ein (INT CONST steckplatz, art):{}
  INT VAR port;{}  kartenart [steckplatz] := art;{}  klaere spannungsbereiche;{}  FOR port FROM 1 UPTO max portanzahl REP{}    trage kanaldaten ein (kanalnummer, spannungsbereich, portdaten);{}    IF steckplatz = 1{}       THEN trage kanaldaten ein (port, spannungsbereich, portdaten){}    FI{}  PER.{}  kanalnummer:  port  +  10 * steckplatz.{}  portdaten  :  karte [kartenart [steckplatz]][port].{}  spannungsbereich:{}    IF   port = 1{}         THEN bereich von e1{}    ELIF port = 2{}         THEN bereich von e2{}
         ELSE SPANNUNG : (0.0, 0.0){}    FI.{}  klaere spannungsbereiche:{}    SPANNUNG VAR bereich von e1, bereich von e2;{}    SELECT kartenart [steckplatz] OF{}      CASE kombi    : spannungsbereich 0 bis 5 volt{}      CASE da karte : setze spannungsbereiche{}      CASE ad karte : erfrage adkarte schalterstellungen{}    OTHERWISE alles auf 0 setzen{}    END SELECT.{}  spannungsbereich 0 bis 5 volt:{}    bereich von e1 := SPANNUNG : (0.0, 5.0);{}    bereich von e2 := SPANNUNG : (0.0, 5.0).{}  setze spannungsbereiche:{}
    bereich von e1 := SPANNUNG : (-5.0, 5.0);{}    bereich von e2 := SPANNUNG : ( 0.0, 5.0).{}  alles auf 0 setzen:{}    bereich von e1 := SPANNUNG : (0.0, 0.0);{}    bereich von e2 := SPANNUNG : (0.0, 0.0).{}erfrage adkarte schalterstellungen:{}  REP{}   hole schalterstellung{}  UNTIL schalterstellung sinnvoll PER;{}  bestimme spannungsbereiche (schalterzustand, bereich von e1, bereich von e2).{}  hole schalterstellung:{}    TEXT VAR schalterzustand := menuanswer (infotext, "00000000", 5).{}  infotext:{}
    ueberschrift{}    + "  Bitte die aktuelle Schalterstellung eintragen: "13""13""{}    + "  Es bedeutet :  1  -  Schalterstellung 'on'     "13""{}    + "                 0  -  Schalterstellung 'off'    "13""13""{}    + " Nummer : 12345678 "13""{}    + "          |||||||| ".{} ueberschrift:{}   IF steckplatzart = mehrfach{}      THEN " "15"Angabe der Schalterstellungen auf der A/D-Karte "14""13""{}         + " "15"                in Steckplatz "{}         + text (steckplatz) + ":                "14""13""13""{}
      ELSE " "15"Angabe der Schalterstellungen auf der A/D-Karte: "14""13""13""{}   FI.{} schalterstellung sinnvoll:{}   (length (schalterzustand) = 8) AND nur nullen und einsen.{} nur nullen und einsen:{}   BOOL VAR ok := TRUE; INT VAR m;{}   FOR m FROM 1 UPTO 8 REP{}     IF NOT ((schalterzustand SUB m) = "1" OR (schalterzustand SUB m ) = "0"){}        THEN ok := FALSE{}     FI{}   PER;{}   ok.{}END PROC trage steckplatzbelegung ein;{}INT PROC ermittelte kartenart (INT CONST steckplatz):{}  TEXT CONST info e ::  "     "15"Angabe der Interfacekarte: "14"    "13""13""{}
                      + "     k   Kombikarte              "13""{}                      + "     e   E / A - Karte           "13""{}                      + "     d   D / A - Wandler - Karte "13""{}                      + "     a   A / D - Wandler - Karte "13""{}                      + "     0   Keine Steckkarte        ",{}             info m ::  "  "15"Angabe der Interfacekarte für Steckplatz "{}                      + text (steckplatz) + ": "14" "13""13""{}                      + "             k   Kombikarte              "13""{}
                      + "             e   E / A - Karte           "13""{}                      + "             d   D / A - Wandler - Karte "13""{}                      + "             a   A / D - Wandler - Karte "13""{}                      + "             0   Keine Steckkarte        ",{}             liste  :: "Kombi"13"E/A"13"D/A"13"A/D"13"Keine",{}             tasten :: "keda0KEDA";{}   INT VAR auswahl := menualternative (infotext, liste, tasten, 5, FALSE);{}   SELECT auswahl OF{}     CASE 1, 101, 106 :  kombi{}
     CASE 2, 102, 107 :  eakarte{}     CASE 3, 103, 108 :  dakarte{}     CASE 4, 104, 109 :  adkarte{}     OTHERWISE           keine karte{}   END SELECT.{}   infotext:{}     IF steckplatz = 0{}        THEN info e{}        ELSE info m{}     FI.{}END PROC ermittelte kartenart;{}PROC zeige kanalbelegung (INT  CONST steckplatz):{}   ROW 4 TEXT VAR kanalnummer;{}   kanalnummer [1] := text (steckplatz + 1, 2);{}   kanalnummer [2] := text (steckplatz + 2, 2);{}   kanalnummer [3] := text (steckplatz + 3, 2);{}
   kanalnummer [4] := text (steckplatz + 4, 2);{}   IF steckplatzart = compact{}      THEN zeige compactboxbelegung{}      ELSE zeige steckplatz mit karte{}   FI.{}  zeige steckplatz mit karte:{}    SELECT kartenart [steckplatznummer] OF{}      CASE kombi  : zeige steckplatz mit kombi{}      CASE eakarte: zeige steckplatz mit eakarte{}      CASE dakarte: zeige steckplatz mit dakarte{}      CASE adkarte: zeige steckplatz mit adkarte{}      OTHERWISE     zeige steckplatz ohne karte{}    END SELECT.{}
  steckplatznummer:{}    IF steckplatz = 0{}       THEN 1{}       ELSE steckplatz DIV 10{}    FI.{}  zeige compactboxbelegung:{}    menuinfo ({}      "              "15"Eingestellt: Compactbox "14"         "13""13""{}    + "                 Belegung der Kanäle:               "13""13""13""{}    + kanalnummeranzeige kombikarte).{}  zeige steckplatz mit kombi:{}    menuinfo (ueberschrift + " mit Kombikarte: "14"    "13""13""{}    + "                Belegung der Kanäle:               "13""13""13""{}    + kanalnummeranzeige kombikarte).{}
  zeige steckplatz mit eakarte:{}    menuinfo (ueberschrift + " mit E / A - Karte: "14"    "13""13""{}    + "                Belegung der Kanäle:               "13""13""13""{}    + kanalnummeranzeige eakarte).{}  zeige steckplatz mit dakarte:{}    menuinfo (ueberschrift + " mit D / A - Karte: "14"    "13""13""{}    + "                Belegung der Kanäle:               "13""13""{}    + kanalnummeranzeige dakarte).{}  zeige steckplatz mit adkarte:{}    hole spannungsbereiche;{}    menuinfo ("     " + ueberschrift + " mit A / D - Karte: "14""13""13""{}
    + "           Zwei analoge Eingänge stehen zur Verfügung:   "13""13""{}    + kanalnummeranzeige adkarte).{}  hole spannungsbereiche:{}    SPANNUNG VAR e1 bereich, e2 bereich;{}    hole spannungsbereich (steckplatz + 1, e1 bereich [1], e1 bereich [2]);{}    hole spannungsbereich (steckplatz + 2, e2 bereich [1], e2 bereich [2]).{}  zeige steckplatz ohne karte:{}    IF steckplatz = 0{}       THEN menuinfo ({}            "    "15"Einzelsteckplatz ohne Steckkarte: "14"   "13""13""13""{}          + " Es sind weder Ein- noch Ausgaben möglich! "13""){}
       ELSE menuinfo ({}            "        "15"Steckplatz "{}          + text (steckplatz DIV 10) + " ohne Steckkarte: "14""13""13""13""{}          + " Es sind hier weder Ein- noch Ausgaben möglich! "13""){}    FI.{}  ueberschrift:{}    IF steckplatz = 0{}       THEN "         "15"Einzelsteckplatz"{}       ELSE "           "15"Steckplatz " + text (steckplatz DIV 10){}    FI.{}  kanalnummeranzeige kombikarte:{}      "     "15"Kanal " + kanalnummer [1]{}                             + ": "14"  Analogeingang 1 (E1) "13""13""{}
    + "     "15"Kanal " + kanalnummer [2]{}                             + ": "14"  Analogeingang 2 (E2) "13""13""{}    + "     "15"Kanal " + kanalnummer [3]{}                             + ": "14"  Digitaleingang       "13""13""{}    + "     "15"Kanal " + kanalnummer [4]{}                             + ": "14"  Digitalausgang       "13"".{}  kanalnummeranzeige eakarte:{}    "     "15"Kanal " + kanalnummer [1]{}    + ": "14"  Digitaleingang "13""13""{}    + "     "15"Kanal " + kanalnummer [2]{}    + ": "14"  Digitalausgang "13""13""{}
    + "   ( "15"Kanal " + kanalnummer [3]{}    + ": "14"  Digitaleingang (= Kanal " + kanalnummer [1] + ") )"13""13""{}    + "   ( "15"Kanal " + kanalnummer [4]{}    + ": "14"  Digitalausgang (= Kanal " + kanalnummer [2] + ") )"13"".{}  kanalnummeranzeige adkarte:{}      "  "15"Kanal " + kanalnummer [1]{}                     + ": "14" (E1)  Spannungsbereich  " + bereich1 + ""13""13""{}    + "  "15"Kanal " + kanalnummer [2]{}                     + ": "14" (E2)  Spannungsbereich  " + bereich2 + ""13"".{}
  bereich1:{}    IF e1 bereich [1] = 0.0{}       THEN "  0.000 V  -  +" + text (e1 bereich [2], 6, 3) + " V  "{}       ELSE text (e1 bereich [1], 7, 3) + " V  -  +" + text (e1 bereich [2], 6, 3) + " V  "{}    FI.{}  bereich2:{}    IF e2 bereich [1] = 0.0{}       THEN "  0.000 V  -  +" + text (e2 bereich [2], 6, 3) + " V"{}       ELSE text (e2 bereich [1], 7, 3) + " V  -  +" + text (e2 bereich [2], 6, 3) + " V"{}    FI.{}  kanalnummeranzeige dakarte:{}      "  Die Karte stellt einen Analogausgang zur Verfügung, "13""{}
    + "  der auf zwei Arten angesprochen werden kann:        "13""13""13""{}    + "     "15"Kanal " + kanalnummer [1]{}                               + ": "14"  Spannungsbereich  -5 V  -  +5 V "13""13""{}    + "     "15"Kanal " + kanalnummer [2]{}                               + ": "14"  Spannungsbereich   0 V  -  +5 V "13"".{}END PROC zeige kanalbelegung;{}PROC bestimme spannungsbereiche (TEXT CONST schalterstellung,{}                                 SPANNUNG VAR bereich von e1,{}                                 SPANNUNG VAR bereich von e2):{}
  bestimme bereich von e1;{}  bestimme bereich von e2.{}  bestimme bereich von e1:{}    IF   schalter 3 geschlossen{}         THEN umax1 :=  0.25{}    ELIF schalter 2 geschlossen{}         THEN umax1 :=  2.5{}    ELIF schalter 1 geschlossen{}         THEN umax1 := 25.0{}         ELSE umax1 :=  0.0{}    FI;{}    IF schalter 8 geschlossen{}       THEN symmetrische spannungsmessung ueber e1{}       ELSE asymmetrische spannungsmessung ueber e1{}    FI.{}    schalter 1 geschlossen:  (schalterstellung SUB 1) = on.{}
    schalter 2 geschlossen:  (schalterstellung SUB 2) = on.{}    schalter 3 geschlossen:  (schalterstellung SUB 3) = on.{}    schalter 8 geschlossen:  (schalterstellung SUB 8) = on.{}    umin1:  bereich von e1 [1].{}    umax1:  bereich von e1 [2].{}  symmetrische spannungsmessung ueber e1:{}    umax1 := umax1 / 2.0;{}    umin1 := - umax1.{}  asymmetrische spannungsmessung ueber e1:{}    umin1 := 0.0.{}  bestimme bereich von e2:{}    IF   schalter 6 geschlossen{}         THEN umax2 :=  0.25{}    ELIF schalter 5 geschlossen{}
         THEN umax2 :=  2.5{}    ELIF schalter 4 geschlossen{}         THEN umax2 := 25.0{}         ELSE umax2 :=  0.0{}    FI;{}    IF schalter 7 geschlossen{}       THEN symmetrische spannungsmessung ueber e2{}       ELSE asymmetrische spannungsmessung ueber e2{}    FI.{}    schalter 4 geschlossen:  (schalterstellung SUB 4) = on.{}    schalter 5 geschlossen:  (schalterstellung SUB 5) = on.{}    schalter 6 geschlossen:  (schalterstellung SUB 6) = on.{}    schalter 7 geschlossen:  (schalterstellung SUB 7) = on.{}
    umin2:  bereich von e2 [1].{}    umax2:  bereich von e2 [2].{}  symmetrische spannungsmessung ueber e2:{}    umax2 := umax2 / 2.0;{}    umin2 := - umax2.{}  asymmetrische spannungsmessung ueber e2:{}    umin2 := 0.0.{}  on:  "1".{}END PROC bestimme spannungsbereiche{}END PACKET ls prozess 5{}