From afd4c3c448381f6eb706090911a15c162fdaf8af Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sun, 9 Oct 2016 11:28:19 +0200 Subject: Decompress source files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EUMEL’s TEXT dataspaces wastes a lot of storage space. Some files were therefore “compressed” by storing them as a single line, reducing overhead significantly. --- prozess/ls-Prozess 5 | 863 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 804 insertions(+), 59 deletions(-) (limited to 'prozess/ls-Prozess 5') diff --git a/prozess/ls-Prozess 5 b/prozess/ls-Prozess 5 index 66bdf94..a9b5028 100644 --- a/prozess/ls-Prozess 5 +++ b/prozess/ls-Prozess 5 @@ -22,63 +22,808 @@ *) 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ü: ");{} 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ü: ");{} 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: ");{} 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 !"){} 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ü: ");{} 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ü: ");{} 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ü: ");{} 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: ");{} 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{} + 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ü: "); + 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ü: "); + 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: "); + 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 !") + 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ü: "); + 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ü: "); + 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ü: "); + 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: "); + 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 + -- cgit v1.2.3