diff options
Diffstat (limited to 'prozess')
-rw-r--r-- | prozess/ls-MENUKARTE:Prozess | bin | 62464 -> 0 bytes | |||
-rw-r--r-- | prozess/ls-Prozess 1 für AKTRONIC-Adapter | 557 | ||||
-rw-r--r-- | prozess/ls-Prozess 1 für MUFI als Endgerät | 550 | ||||
-rw-r--r-- | prozess/ls-Prozess 1 für MUFI im Terminalkanal | 506 | ||||
-rw-r--r-- | prozess/ls-Prozess 2 | 238 | ||||
-rw-r--r-- | prozess/ls-Prozess 3 | 33 | ||||
-rw-r--r-- | prozess/ls-Prozess 4 | 595 | ||||
-rw-r--r-- | prozess/ls-Prozess 5 | 829 | ||||
-rw-r--r-- | prozess/ls-Prozess-gen | 146 |
9 files changed, 0 insertions, 3454 deletions
diff --git a/prozess/ls-MENUKARTE:Prozess b/prozess/ls-MENUKARTE:Prozess Binary files differdeleted file mode 100644 index 9a2e009..0000000 --- a/prozess/ls-MENUKARTE:Prozess +++ /dev/null diff --git a/prozess/ls-Prozess 1 für AKTRONIC-Adapter b/prozess/ls-Prozess 1 für AKTRONIC-Adapter deleted file mode 100644 index d49d9d2..0000000 --- a/prozess/ls-Prozess 1 für AKTRONIC-Adapter +++ /dev/null @@ -1,557 +0,0 @@ -(* - - ********************************************************** - ********************************************************** - ** ** - ** ls-Prozess 1 ** - ** ** - ** Anpassung für AKTRONIC-Adapter ** - ** ** - ** 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 1 DEFINES - run pdv, - run pdv again, - initialisiere interface, - schalte alles aus, - ausgeben, - eingabe, - warte, - abbruch gewuenscht, - tue nichts, - trage kanaldaten ein, - beende kanaldaten eintragen, - hole spannungsbereich, - letzte ausgabe, - pruefe kanal, - pruefe abbruch, - teste interface, - oeffne interface, - schliesse interface, - nicht belegt, - digital aus, - analog aus, - - digital ein, - analog ein, - kanalbreite, - ganzzahl obergrenze, - adapterart, - (* ------------------------- *) - kanalkoppler, - interface kanal, - oeffne interface direkt, - schliesse interface direkt, - initialisiere interface direkt, - direkt ausgeben, - direkt eingabe: -(******** A N P A S S U N G A N A K T R O N I C - A D A P T E R ********) -LET interface test code = ""240"", - interface open code = ""176"", - - interface close code = ""176"", - adresse 0 code = ""176"", - interface write code = 64 , - interface read code = 192 ; -TEXT CONST adapterart :: "AKTRONIC-Adapter"; -TEXT PROC interface anpassung (INT CONST kanalnummer, steuerungscode): - IF es ist ein ausgabekanal - THEN code (interface write code + device + faktor * steuerungscode) - ELIF es ist ein eingabekanal - THEN lesecode in abhaengigkeit von der taktzahl - ELSE "" - FI. - es ist ein ausgabekanal: - - kanal [kanalnummer].betriebsart < 0. - es ist ein eingabekanal: - kanal [kanalnummer].betriebsart > 0. - device: - IF steckplatznummer < 3 - THEN 16 - ELSE 32 - FI. - faktor: - IF steckplatznummer MOD 2 = 0 - THEN 4 - ELSE 1 - FI. - steckplatznummer: - IF kanalnummer < 10 - THEN 1 - ELSE kanalnummer DIV 10 - FI. - lesecode in abhaengigkeit von der taktzahl: - SELECT kanal [kanalnummer].taktzahl OF - CASE 1: code fuer digital oder analog eingang - - CASE 2: code fuer kombi e1 - CASE 3: code fuer kombi e2 - OTHERWISE "" END SELECT. - code fuer digital oder analog eingang: - IF kanal [kanalnummer].betriebsart = analog ein - THEN kanal [kanalnummer].taktzahl := 2; (* ad wandler muss hier *) - lesecode + lesecode (* 2x gelesen werden! *) - ELSE lesecode - FI. - lesecode : code (interface read code + device + faktor * steuerungscode). - code fuer kombi e1: - kanal [kanalnummer].taktzahl INCR 1; (* bei Analogport1 der Kombikarte *) - - adresse 0 code + (3 * lesecode). (* sind hier 3 Takte noetig ! *) - code fuer kombi e2: - kanal [kanalnummer].taktzahl DECR 1; (* hier nur 2 Takte noetig ! *) - adresse 0 code + lesecode + lesecode. -END PROC interface anpassung; -(************ H A R D W A R E U N A B H Ä N G I G E R T E I L ************) -LET max kanalanzahl = 49, - initcode = 50, - endcode = 51, - alles aus code = 52, - - endezeichen = "q", - abbruchzeichen = "h", - esc = ""27""; -INT CONST analog aus :: -2, (* Betriebsarten *) - digital aus :: -1, - nicht belegt :: 0, - digital ein :: 1, - analog ein :: 2, - kanalbreite :: 8, - ganzzahl obergrenze :: 2 ** kanalbreite, - configuration error code :: -1, - - kanal besetzt code :: -3, - interface error code :: -4, - not init code :: -5; -INT VAR interfacechannel :: 2, - dummy; -TEXT VAR meldung :: ""; -BOOL VAR kanaldaten sind eingetragen :: FALSE, - endezeichen gegeben :: FALSE, - programm mit pdv gestartet :: FALSE, - fehler zu melden :: FALSE; -TASK VAR interface task :: niltask; -DATASPACE VAR ds :: nilspace; - -TYPE KANAL = STRUCT (INT betriebsart, taktzahl, TEXT steuercode), - SPANNUNG = STRUCT (REAL minimalwert, maximalwert); -ROW max kanalanzahl INT VAR vorherige ausgabe; -ROW max kanalanzahl KANAL VAR kanal; -ROW max kanalanzahl SPANNUNG VAR spannung; -ROW 5 TEXT CONST fehlermeldung :: ROW 5 TEXT : - ("Interface ist noch nicht konfiguriert!", - "Interface-Task ist besetzt!", - "Interface-Kanal ist belegt!", - "Interface meldet sich nicht!", - "Interface kann nicht geöffnet werden!"); - -PROC run pdv: - run pdv (last param) -END PROC run pdv; -PROC run pdv (TEXT CONST programmname): - enable stop; - last param (programmname); - programm mit pdv gestartet := TRUE; - teste interface; - disable stop; - run (programmname); - IF is error - THEN fehlerbehandlung - ELSE melde programmende - FI; - schliesse interface; - programm mit pdv gestartet := FALSE; - enable stop; - IF fehler zu melden - THEN errorstop (meldung) - FI -END PROC run pdv; -PROC run pdv again: - - enable stop; - programm mit pdv gestartet := TRUE; - teste interface; - disable stop; - run again; - IF is error - THEN fehlerbehandlung - ELSE melde programmende - FI; - schliesse interface; - programm mit pdv gestartet := FALSE; - enable stop; - IF fehler zu melden - THEN errorstop (meldung) - FI -END PROC run pdv again; -PROC melde programmende: - page; - menufootnote ("Programmende! Zum Weitermachen bitte irgendeine Taste tippen."); - pause; - schalte alles aus -END PROC melde programmende; - -PROC initialisiere interface: - enable stop; - pruefe abbruch; - IF programm mit pdv gestartet - THEN schalte alles aus - ELSE errorstop ("PDV-Programme müssen mit 'run pdv' gestartet werden!") - FI -END PROC initialisiere interface; -PROC schalte alles aus: - INT VAR k; - FOR k FROM 1 UPTO max kanalanzahl REP - vorherige ausgabe [k] := 0 - PER; - forget (ds); ds := nilspace; - call (interface task, alles aus code, ds, dummy) -END PROC schalte alles aus; -PROC ausgeben (INT CONST kanalnummer, wert): - - merke wert; - gib wert aus. - merke wert: - vorherige ausgabe [kanalnummer] := wert. - gib wert aus: - call (interface task, 256 * kanalnummer + wert, ds, dummy). -END PROC ausgeben; -INT PROC eingabe (INT CONST kanalnummer): - INT VAR eingabewert; - call (interface task, kanalnummer, ds, eingabewert); - eingabewert -END PROC eingabe; -PROC warte (REAL CONST sekunden): - TEXT VAR eingabe; - pruefe abbruch; - eingabe := incharety (int (sekunden * 10.0 + 0.5)); - IF eingabe = esc - - THEN untersuche naechstes zeichen - FI. - untersuche naechstes zeichen: - eingabe := incharety (30); - IF eingabe = endezeichen - THEN endezeichen gegeben := TRUE - ELIF eingabe = abbruchzeichen - THEN errorstop ("Programm-Abbruch durch <ESC><" - + abbruchzeichen + ">!") - FI. -END PROC warte; -PROC warte (INT CONST sekunden): - TEXT VAR eingabe; - pruefe abbruch; - eingabe := incharety (sekunden * 10); - IF eingabe = esc - THEN untersuche naechstes zeichen - - FI. - untersuche naechstes zeichen: - eingabe := incharety (30); - IF eingabe = endezeichen - THEN endezeichen gegeben := TRUE - ELIF eingabe = abbruchzeichen - THEN errorstop ("Programm-Abbruch durch <ESC><" - + abbruchzeichen + ">!") - FI. -END PROC warte; -BOOL PROC abbruch gewuenscht: - pruefe abbruch; - BOOL VAR entscheidung :: endezeichen gegeben; - endezeichen gegeben := FALSE; - entscheidung -END PROC abbruch gewuenscht; -PROC tue nichts: - - pruefe abbruch -END PROC tue nichts; -PROC trage kanaldaten ein (INT CONST kanalnummer, - ROW 2 REAL CONST spannungsbereich, - ROW 3 INT CONST kanalparameter): - spannung [kanalnummer].minimalwert := spannungsbereich [1]; - spannung [kanalnummer].maximalwert := spannungsbereich [2]; - kanal [kanalnummer].betriebsart := kanalparameter [1]; - kanal [kanalnummer].taktzahl := kanalparameter [2]; - kanal [kanalnummer].steuercode := interface anpassung - - (kanalnummer, kanalparameter [3]) -END PROC trage kanaldaten ein; -PROC beende kanaldaten eintragen: - loesche interface task; - begin (PROC kanal koppler, interface task); - kanaldaten sind eingetragen := TRUE. - loesche interface task: - disable stop; - end (interface task); - IF is error - THEN clear error - FI; - enable stop. -END PROC beende kanaldaten eintragen; -PROC hole spannungsbereich (INT CONST kanalnummer, REAL VAR u min, u max): - - u min := spannung [kanalnummer].minimalwert; - u max := spannung [kanalnummer].maximalwert -END PROC hole spannungsbereich; -INT PROC letzte ausgabe (INT CONST kanalnummer): - vorherige ausgabe [kanalnummer] -END PROC letzte ausgabe; -PROC pruefe kanal (INT CONST kanalnummer, gewuenschte betriebsart): - pruefe abbruch; - pruefe kanalnummer; - pruefe betriebsart. - pruefe kanalnummer: - IF kanalnummer < 1 OR kanalnummer > max kanalanzahl - THEN errorstop ("Kanalnummer " + text (kanalnummer) + - - " ist unzulaessig !") - FI. - pruefe betriebsart: - IF gewuenschte betriebsart <> kanal [kanalnummer].betriebsart - THEN errorstop ("An Kanal " + text (kanalnummer) + - " keine " + wunsch + " moeglich!") - FI. - wunsch: - IF gewuenschte betriebsart = analog aus - THEN "Analog-Ausgabe" - ELIF gewuenschte betriebsart = digital aus - THEN "Digital-Ausgabe" - ELIF gewuenschte betriebsart = digital ein - THEN "Digital-Eingabe" - - ELIF gewuenschte betriebsart = analog ein - THEN "Analog-Eingabe" - ELSE "Ein- oder Ausgabe" - FI. -END PROC pruefe kanal; -PROC pruefe abbruch: - IF incharety = esc - THEN pruefe weiter - FI. - pruefe weiter: - TEXT CONST zeichen :: incharety (30); - IF zeichen = endezeichen - THEN endezeichen gegeben := TRUE - ELIF zeichen = abbruchzeichen - THEN errorstop ("Programm-Abbruch durch <ESC><" - + abbruchzeichen + ">!") - - FI. -END PROC pruefe abbruch; -PROC oeffne interface (INT VAR status): - enable stop; - forget (ds); ds := nilspace; - IF kanaldaten sind eingetragen - THEN pingpong (interfacetask, initcode, ds, status) - ELSE status := configuration error code - FI; - IF status > 0 THEN status DECR maxint FI; - forget (ds); ds := nilspace -END PROC oeffne interface; -PROC schliesse interface: - enable stop; - forget (ds); ds := nilspace; - pingpong (interface task, end code, ds, dummy); - forget (ds); ds := nilspace - -END PROC schliesse interface; -PROC teste interface: - INT VAR test; - oeffne interface (test); - IF test < 0 - THEN errorstop (fehlermeldung [min (5, abs (test))]) - ELSE fehler zu melden := FALSE; - endezeichen gegeben := FALSE - FI -END PROC teste interface; -PROC fehlerbehandlung: - meldung := errormessage; - IF meldung <> "" - THEN meldung CAT fehlerzeile; - fehler zu melden := TRUE - FI; - clear error; - initialisiere interface. - fehlerzeile: - - IF errorline = 0 - THEN "" - ELSE " (bei Zeile " + text (errorline) + ")" - FI. -END PROC fehlerbehandlung; -(******************** EIN-/AUSGABE AM INTERFACE-KANAL ********************) -PROC kanalkoppler: - IF name (myself) <> "-" - THEN errorstop ("Unzulässiges Kommando!") - ELSE warte auf anrufe - FI. - warte auf anrufe: - TASK VAR absender; - TEXT VAR dummy; - INT VAR codenummer, antwort; - disable stop; - REP forget (ds); - wait (ds, codenummer, absender); - - IF codenummer = initcode - THEN kopple an interface kanal; - IF interface ist betriebsbereit - THEN bearbeite weitere auftraege - ELSE gib negative rueckmeldung - FI; - gib kanal frei - ELSE antwort := not init code; - gib negative rueckmeldung - FI - PER. - kopple an interface kanal: - continue (interface channel); - IF is error - THEN clear error; - antwort := kanal besetzt code - - ELSE oeffne interface direkt (antwort) - FI. - interface ist betriebsbereit: antwort = 0. - gib negative rueckmeldung: send (absender, antwort, ds). - gib kanal frei: - break (quiet); - send (absender, 0, ds, antwort); - collect heap garbage. - bearbeite weitere auftraege: - REP call (absender, antwort, ds, codenummer); - IF codenummer > 255 - THEN sende wert an interface - ELIF codenummer < 50 - THEN hole wert von interface - ELIF codenummer = alles aus code - - THEN initialisiere interface direkt - FI - UNTIL codenummer = endcode PER; - IF is error THEN clear error FI; - schliesse interface direkt. - sende wert an interface: - out (kanal [codenummer DIV 256].steuercode); - out (code (codenummer)). - hole wert von interface: - out (kanal [codenummer].steuercode); - SELECT kanal [codenummer].taktzahl OF - CASE 1 : antwort := erstes zeichen - CASE 2 : antwort := zweites zeichen - CASE 3 : antwort := drittes zeichen - - OTHERWISE antwort := -1 - END SELECT. - erstes zeichen: - code (incharety (1)). - zweites zeichen: - dummy := incharety (1); - code (incharety (1)). - drittes zeichen: - dummy := incharety (1); - dummy := incharety (1); - code (incharety (1)). -END PROC kanalkoppler; -PROC interface kanal (INT CONST kanalnummer): - enable stop; - IF kanalnummer < 1 OR kanalnummer > 24 - THEN errorstop ("Unzulaessige Kanalnummer") - ELSE interface channel := kanalnummer - - FI -END PROC interface kanal; -INT PROC interface kanal: - interface channel -END PROC interface kanal; -PROC oeffne interface direkt (INT VAR status): - leere puffer; - out (interface test code); - IF antwort <> "" - THEN status := 0; - out (interface open code) - ELSE status := interface error code - FI. - leere puffer: - REP UNTIL incharety = "" PER. - antwort: incharety (1). -END PROC oeffne interface direkt; -PROC schliesse interface direkt: - out (interface close code) - -END PROC schliesse interface direkt; -PROC initialisiere interface direkt: - schalte alles aus. - schalte alles aus: - INT VAR kanalnummer, kanalbetriebsart; - FOR kanalnummer FROM 1 UPTO max kanalanzahl REP - kanalbetriebsart := kanal [kanalnummer].betriebsart; - IF kanalbetriebsart = digital aus - THEN direkt ausgeben (kanalnummer, 0) - ELIF kanalbetriebsart = analog aus - THEN direkt ausgeben (kanalnummer, gewandelte nullspannung) - FI - - PER. - gewandelte nullspannung: - int(- real (ganzzahl obergrenze) * u min / (u max - u min) + 0.5). - u max : spannung [kanalnummer].maximalwert. - u min : spannung [kanalnummer].minimalwert. -END PROC initialisiere interface direkt; -PROC direkt ausgeben (INT CONST kanalnummer, wert): - out (kanal [kanalnummer].steuercode); - out (code (wert)) -END PROC direkt ausgeben; -INT PROC direkt eingabe (INT CONST kanalnummer): - gib lesecode aus; - erhaltene antwort. - gib lesecode aus: - - out (kanal [kanalnummer].steuercode). - erhaltene antwort: - TEXT VAR dummy; - SELECT kanal [kanalnummer].taktzahl OF - CASE 1 : erstes zeichen - CASE 2 : zweites zeichen - CASE 3 : drittes zeichen - OTHERWISE -1 - END SELECT. - erstes zeichen: - code (incharety (1)). - zweites zeichen: - dummy := incharety (1); - code (incharety (1)). - drittes zeichen: - dummy := incharety (1); - dummy := incharety (1); - code (incharety (1)). - -END PROC direkt eingabe; -PROC initialisiere die kanaele: - INT VAR kanalnummer; - FOR kanalnummer FROM 1 UPTO max kanalanzahl REP - trage kanaldaten ein (kanalnummer, keine spannung, leere karte); - vorherige ausgabe [kanalnummer] := 0 - PER. - keine spannung: - ROW 2 REAL : (0.0, 0.0). - leere karte: - ROW 3 INT : (nicht belegt, 0, 0). -END PROC initialisiere die kanaele; -initialisiere die kanaele; -END PACKET ls prozess 1 - - diff --git a/prozess/ls-Prozess 1 für MUFI als Endgerät b/prozess/ls-Prozess 1 für MUFI als Endgerät deleted file mode 100644 index 3408230..0000000 --- a/prozess/ls-Prozess 1 für MUFI als Endgerät +++ /dev/null @@ -1,550 +0,0 @@ -(* - - ********************************************************** - ********************************************************** - ** ** - ** ls-Prozess 1 ** - ** ** - ** Anpassung für MUFI als Endgerät ** - ** ** - ** 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 1 DEFINES - run pdv, - run pdv again, - initialisiere interface, - schalte alles aus, - ausgeben, - eingabe, - warte, - abbruch gewuenscht, - tue nichts, - trage kanaldaten ein, - beende kanaldaten eintragen, - hole spannungsbereich, - letzte ausgabe, - pruefe kanal, - pruefe abbruch, - teste interface, - oeffne interface, - schliesse interface, - nicht belegt, - digital aus, - analog aus, - - digital ein, - analog ein, - kanalbreite, - ganzzahl obergrenze, - adapterart, - (* ------------------------- *) - kanalkoppler, - interface kanal, - oeffne interface direkt, - schliesse interface direkt, - initialisiere interface direkt, - direkt ausgeben, - direkt eingabe: -(******************** A N P A S S U N G A N M U F I ********************) -LET interface test code = ""27""27"10", - interface okay code = ""27""27"00", - - interface open code = ""27""27"1A18", - interface close code = ""25""27""27"13", - adresse 0 code = ""61"", - leertakt code = ""62"", - interface write code = 80 , - interface read code = 64 , - erwartete zeichen = 4 ; -TEXT CONST adapterart :: "MUFI als Endgerät"; -TEXT PROC interface anpassung (INT CONST kanalnummer, steuerungscode): - IF es ist ein ausgabekanal - THEN code (interface write code + device + 4 * steuerungscode) - ELIF es ist ein eingabekanal - - THEN lesecode in abhaengigkeit von der taktzahl - ELSE "" - FI. - es ist ein ausgabekanal: - kanal [kanalnummer].betriebsart < 0. - es ist ein eingabekanal: - kanal [kanalnummer].betriebsart > 0. - device: - IF kanalnummer < 10 - THEN 0 - ELSE kanalnummer DIV 10 - 1 - FI. - lesecode in abhaengigkeit von der taktzahl: - SELECT kanal [kanalnummer].taktzahl OF - CASE 1: lesecode - CASE 2: adresse 0 code + lesecode + lesecode - CASE 3: adresse 0 code + lesecode + zwei weitere takte - - OTHERWISE "" END SELECT. - lesecode : code (interface read code + device + 4 * steuerungscode). - zwei weitere takte: - IF leertakt code = "" - THEN lesecode + lesecode - ELSE kanal [kanalnummer].taktzahl DECR 1; - leertakt code + lesecode - FI. -END PROC interface anpassung; -(************ H A R D W A R E U N A B H Ä N G I G E R T E I L ************) -LET max kanalanzahl = 49, - initcode = 50, - endcode = 51, - - alles aus code = 52, - endezeichen = "q", - abbruchzeichen = "h", - esc = ""27""; -INT CONST analog aus :: -2, (* Betriebsarten *) - digital aus :: -1, - nicht belegt :: 0, - digital ein :: 1, - analog ein :: 2, - kanalbreite :: 8, - ganzzahl obergrenze :: 2 ** kanalbreite, - - configuration error code :: -1, - kanal besetzt code :: -3, - interface error code :: -4, - not init code :: -5; -INT VAR interfacechannel :: 2, - dummy; -TEXT VAR meldung :: ""; -BOOL VAR kanaldaten sind eingetragen :: FALSE, - endezeichen gegeben :: FALSE, - programm mit pdv gestartet :: FALSE, - fehler zu melden :: FALSE; -TASK VAR interface task :: niltask; - -DATASPACE VAR ds :: nilspace; -TYPE KANAL = STRUCT (INT betriebsart, taktzahl, TEXT steuercode), - SPANNUNG = STRUCT (REAL minimalwert, maximalwert); -ROW max kanalanzahl INT VAR vorherige ausgabe; -ROW max kanalanzahl KANAL VAR kanal; -ROW max kanalanzahl SPANNUNG VAR spannung; -ROW 5 TEXT CONST fehlermeldung :: ROW 5 TEXT : - ("Interface ist noch nicht konfiguriert!", - "Interface-Task ist besetzt!", - "Interface-Kanal ist belegt!", - "Interface meldet sich nicht!", - "Interface kann nicht geöffnet werden!"); - -PROC run pdv: - run pdv (last param) -END PROC run pdv; -PROC run pdv (TEXT CONST programmname): - enable stop; - last param (programmname); - programm mit pdv gestartet := TRUE; - teste interface; - disable stop; - run (programmname); - IF is error - THEN fehlerbehandlung - ELSE melde programmende - FI; - schliesse interface; - programm mit pdv gestartet := FALSE; - enable stop; - IF fehler zu melden - THEN errorstop (meldung) - FI -END PROC run pdv; -PROC run pdv again: - - enable stop; - programm mit pdv gestartet := TRUE; - teste interface; - disable stop; - run again; - IF is error - THEN fehlerbehandlung - ELSE melde programmende - FI; - schliesse interface; - programm mit pdv gestartet := FALSE; - enable stop; - IF fehler zu melden - THEN errorstop (meldung) - FI -END PROC run pdv again; -PROC melde programmende: - page; - menufootnote ("Programmende! Zum Weitermachen bitte irgendeine Taste tippen."); - pause; - schalte alles aus -END PROC melde programmende; - -PROC initialisiere interface: - enable stop; - pruefe abbruch; - IF programm mit pdv gestartet - THEN schalte alles aus - ELSE errorstop ("PDV-Programme müssen mit 'run pdv' gestartet werden!") - FI -END PROC initialisiere interface; -PROC schalte alles aus: - INT VAR k; - FOR k FROM 1 UPTO max kanalanzahl REP - vorherige ausgabe [k] := 0 - PER; - forget (ds); ds := nilspace; - call (interface task, alles aus code, ds, dummy) -END PROC schalte alles aus; -PROC ausgeben (INT CONST kanalnummer, wert): - - merke wert; - gib wert aus. - merke wert: - vorherige ausgabe [kanalnummer] := wert. - gib wert aus: - call (interface task, 256 * kanalnummer + wert, ds, dummy). -END PROC ausgeben; -INT PROC eingabe (INT CONST kanalnummer): - INT VAR eingabewert; - call (interface task, kanalnummer, ds, eingabewert); - eingabewert -END PROC eingabe; -PROC warte (REAL CONST sekunden): - TEXT VAR eingabe; - pruefe abbruch; - eingabe := incharety (int (sekunden * 10.0 + 0.5)); - IF eingabe = esc - - THEN untersuche naechstes zeichen - FI. - untersuche naechstes zeichen: - eingabe := incharety (30); - IF eingabe = endezeichen - THEN endezeichen gegeben := TRUE - ELIF eingabe = abbruchzeichen - THEN errorstop ("Programm-Abbruch durch <ESC><" - + abbruchzeichen + ">!") - FI. -END PROC warte; -PROC warte (INT CONST sekunden): - TEXT VAR eingabe; - pruefe abbruch; - eingabe := incharety (sekunden * 10); - IF eingabe = esc - THEN untersuche naechstes zeichen - - FI. - untersuche naechstes zeichen: - eingabe := incharety (30); - IF eingabe = endezeichen - THEN endezeichen gegeben := TRUE - ELIF eingabe = abbruchzeichen - THEN errorstop ("Programm-Abbruch durch <ESC><" - + abbruchzeichen + ">!") - FI. -END PROC warte; -BOOL PROC abbruch gewuenscht: - pruefe abbruch; - BOOL VAR entscheidung :: endezeichen gegeben; - endezeichen gegeben := FALSE; - entscheidung -END PROC abbruch gewuenscht; -PROC tue nichts: - - pruefe abbruch -END PROC tue nichts; -PROC trage kanaldaten ein (INT CONST kanalnummer, - ROW 2 REAL CONST spannungsbereich, - ROW 3 INT CONST kanalparameter): - spannung [kanalnummer].minimalwert := spannungsbereich [1]; - spannung [kanalnummer].maximalwert := spannungsbereich [2]; - kanal [kanalnummer].betriebsart := kanalparameter [1]; - kanal [kanalnummer].taktzahl := kanalparameter [2]; - kanal [kanalnummer].steuercode := interface anpassung - - (kanalnummer, kanalparameter [3]) -END PROC trage kanaldaten ein; -PROC beende kanaldaten eintragen: - loesche interface task; - begin (PROC kanal koppler, interface task); - kanaldaten sind eingetragen := TRUE. - loesche interface task: - disable stop; - end (interface task); - IF is error - THEN clear error - FI; - enable stop. -END PROC beende kanaldaten eintragen; -PROC hole spannungsbereich (INT CONST kanalnummer, REAL VAR u min, u max): - - u min := spannung [kanalnummer].minimalwert; - u max := spannung [kanalnummer].maximalwert -END PROC hole spannungsbereich; -INT PROC letzte ausgabe (INT CONST kanalnummer): - vorherige ausgabe [kanalnummer] -END PROC letzte ausgabe; -PROC pruefe kanal (INT CONST kanalnummer, gewuenschte betriebsart): - pruefe abbruch; - pruefe kanalnummer; - pruefe betriebsart. - pruefe kanalnummer: - IF kanalnummer < 1 OR kanalnummer > max kanalanzahl - THEN errorstop ("Kanalnummer " + text (kanalnummer) + - - " ist unzulaessig !") - FI. - pruefe betriebsart: - IF gewuenschte betriebsart <> kanal [kanalnummer].betriebsart - THEN errorstop ("An Kanal " + text (kanalnummer) + - " keine " + wunsch + " moeglich!") - FI. - wunsch: - IF gewuenschte betriebsart = analog aus - THEN "Analog-Ausgabe" - ELIF gewuenschte betriebsart = digital aus - THEN "Digital-Ausgabe" - ELIF gewuenschte betriebsart = digital ein - THEN "Digital-Eingabe" - - ELIF gewuenschte betriebsart = analog ein - THEN "Analog-Eingabe" - ELSE "Ein- oder Ausgabe" - FI. -END PROC pruefe kanal; -PROC pruefe abbruch: - IF incharety = esc - THEN pruefe weiter - FI. - pruefe weiter: - TEXT CONST zeichen :: incharety (30); - IF zeichen = endezeichen - THEN endezeichen gegeben := TRUE - ELIF zeichen = abbruchzeichen - THEN errorstop ("Programm-Abbruch durch <ESC><" - + abbruchzeichen + ">!") - - FI. -END PROC pruefe abbruch; -PROC oeffne interface (INT VAR status): - enable stop; - forget (ds); ds := nilspace; - IF kanaldaten sind eingetragen - THEN pingpong (interfacetask, initcode, ds, status) - ELSE status := configuration error code - FI; - IF status > 0 THEN status DECR maxint FI; - forget (ds); ds := nilspace -END PROC oeffne interface; -PROC schliesse interface: - enable stop; - forget (ds); ds := nilspace; - pingpong (interface task, end code, ds, dummy); - forget (ds); ds := nilspace - -END PROC schliesse interface; -PROC teste interface: - INT VAR test; - oeffne interface (test); - IF test < 0 - THEN errorstop (fehlermeldung [min (5, abs (test))]) - ELSE fehler zu melden := FALSE; - endezeichen gegeben := FALSE - FI -END PROC teste interface; -PROC fehlerbehandlung: - meldung := errormessage; - IF meldung <> "" - THEN meldung CAT fehlerzeile; - fehler zu melden := TRUE - FI; - clear error; - initialisiere interface. - fehlerzeile: - - IF errorline = 0 - THEN "" - ELSE " (bei Zeile " + text (errorline) + ")" - FI. -END PROC fehlerbehandlung; -(******************** EIN-/AUSGABE AM INTERFACE-KANAL ********************) -PROC kanalkoppler: - IF name (myself) <> "-" - THEN errorstop ("Unzulässiges Kommando!") - ELSE warte auf anrufe - FI. - warte auf anrufe: - TASK VAR absender; - TEXT VAR dummy; - INT VAR codenummer, antwort; - disable stop; - REP forget (ds); - wait (ds, codenummer, absender); - - IF codenummer = initcode - THEN kopple an interface kanal; - IF interface ist betriebsbereit - THEN bearbeite weitere auftraege - ELSE gib negative rueckmeldung - FI; - gib kanal frei - ELSE antwort := not init code; - gib negative rueckmeldung - FI - PER. - kopple an interface kanal: - continue (interface channel); - IF is error - THEN clear error; - antwort := kanal besetzt code - - ELSE oeffne interface direkt (antwort) - FI. - interface ist betriebsbereit: antwort = 0. - gib negative rueckmeldung: send (absender, antwort, ds). - gib kanal frei: - break (quiet); - send (absender, 0, ds, antwort); - collect heap garbage. - bearbeite weitere auftraege: - REP call (absender, antwort, ds, codenummer); - IF codenummer > 255 - THEN sende wert an interface - ELIF codenummer < 50 - THEN hole wert von interface - ELIF codenummer = alles aus code - - THEN initialisiere interface direkt - FI - UNTIL codenummer = endcode PER; - IF is error THEN clear error FI; - schliesse interface direkt. - sende wert an interface: - out (kanal [codenummer DIV 256].steuercode); - out (code (codenummer)). - hole wert von interface: - out (kanal [codenummer].steuercode); - SELECT kanal [codenummer].taktzahl OF - CASE 1 : antwort := erstes zeichen - CASE 2 : antwort := zweites zeichen - CASE 3 : antwort := drittes zeichen - - OTHERWISE antwort := -1 - END SELECT. - erstes zeichen: - code (incharety (1)). - zweites zeichen: - dummy := incharety (1); - code (incharety (1)). - drittes zeichen: - dummy := incharety (1); - dummy := incharety (1); - code (incharety (1)). -END PROC kanalkoppler; -PROC interface kanal (INT CONST kanalnummer): - enable stop; - IF kanalnummer < 1 OR kanalnummer > 24 - THEN errorstop ("Unzulaessige Kanalnummer") - ELSE interface channel := kanalnummer - - FI -END PROC interface kanal; -INT PROC interface kanal: - interface channel -END PROC interface kanal; -PROC oeffne interface direkt (INT VAR status): - leere puffer; - out (interface test code); - fange antwort; - IF antwort = interface okay code - THEN status := 0; - out (interface open code) - ELSE status := interface error code - FI. - leere puffer: - REP UNTIL incharety = "" PER. - fange antwort: - INT VAR zaehler; - TEXT VAR antwort :: ""; - FOR zaehler FROM 1 UPTO erwartete zeichen REP - - antwort CAT incharety (1) - PER. -END PROC oeffne interface direkt; -PROC schliesse interface direkt: - out (interface close code) -END PROC schliesse interface direkt; -PROC initialisiere interface direkt: - schalte alles aus. - schalte alles aus: - INT VAR kanalnummer, kanalbetriebsart; - FOR kanalnummer FROM 1 UPTO max kanalanzahl REP - kanalbetriebsart := kanal [kanalnummer].betriebsart; - IF kanalbetriebsart = digital aus - THEN direkt ausgeben (kanalnummer, 0) - - ELIF kanalbetriebsart = analog aus - THEN direkt ausgeben (kanalnummer, gewandelte nullspannung) - FI - PER. - gewandelte nullspannung: - int(- real (ganzzahl obergrenze) * u min / (u max - u min) + 0.5). - u max : spannung [kanalnummer].maximalwert. - u min : spannung [kanalnummer].minimalwert. -END PROC initialisiere interface direkt; -PROC direkt ausgeben (INT CONST kanalnummer, wert): - out (kanal [kanalnummer].steuercode); - out (code (wert)) -END PROC direkt ausgeben; - -INT PROC direkt eingabe (INT CONST kanalnummer): - gib lesecode aus; - erhaltene antwort. - gib lesecode aus: - out (kanal [kanalnummer].steuercode). - erhaltene antwort: - TEXT VAR dummy; - SELECT kanal [kanalnummer].taktzahl OF - CASE 1 : erstes zeichen - CASE 2 : zweites zeichen - CASE 3 : drittes zeichen - OTHERWISE -1 - END SELECT. - erstes zeichen: - code (incharety (1)). - zweites zeichen: - dummy := incharety (1); - code (incharety (1)). - - drittes zeichen: - dummy := incharety (1); - dummy := incharety (1); - code (incharety (1)). -END PROC direkt eingabe; -PROC initialisiere die kanaele: - INT VAR kanalnummer; - FOR kanalnummer FROM 1 UPTO max kanalanzahl REP - trage kanaldaten ein (kanalnummer, keine spannung, leere karte); - vorherige ausgabe [kanalnummer] := 0 - PER. - keine spannung: - ROW 2 REAL : (0.0, 0.0). - leere karte: - ROW 3 INT : (nicht belegt, 0, 0). -END PROC initialisiere die kanaele; - -initialisiere die kanaele; -END PACKET ls prozess 1 - - diff --git a/prozess/ls-Prozess 1 für MUFI im Terminalkanal b/prozess/ls-Prozess 1 für MUFI im Terminalkanal deleted file mode 100644 index 712b8a2..0000000 --- a/prozess/ls-Prozess 1 für MUFI im Terminalkanal +++ /dev/null @@ -1,506 +0,0 @@ -(* - - ********************************************************** - ********************************************************** - ** ** - ** ls-Prozess 1 ** - ** ** - ** Anpassung für MUFI im Terminalkanal ** - ** ** - ** 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 altes incharety DEFINES old incharety: -TEXT PROC old incharety: - incharety -END PROC old incharety; -TEXT PROC old incharety (INT CONST timelimit): - incharety (timelimit) -END PROC old incharety; -END PACKET altes incharety; -PACKET ls prozess 1 DEFINES - run pdv, - run pdv again, - initialisiere interface, - ausgeben, - eingabe, - warte, - abbruch gewuenscht, - tue nichts, - trage kanaldaten ein, - beende kanaldaten eintragen, - hole spannungsbereich, - letzte ausgabe, - - pruefe kanal, - pruefe abbruch, - teste interface, - schalte alles aus, - oeffne interface, - schliesse interface, - nicht belegt, - digital aus, - analog aus, - digital ein, - analog ein, - kanalbreite, - ganzzahl obergrenze, - adapterart, - incharety, - inchar, - pause: -(******************** A N P A S S U N G A N M U F I ********************) -LET mufikennung = ""31""31"", - erwartete zeichen = 4 ; - -TEXT CONST adapterart :: "MUFI im Terminalkanal", - interface test code :: ""27""27"10", - interface okay code :: ""27""27"00", - interface open code :: ""27""27"1C" + hex (mufikennung), - interface close code :: mufikennung + "1C" + hex (""27""27""), - adresse 0 code :: mufikennung + "3D", - leertakt code :: mufikennung + "3E", - interface write code :: mufikennung + "5" , - interface read code :: mufikennung + "4" ; - -TEXT VAR puffer :: ""; -ROW 256 TEXT CONST hexcode :: ROW 256 TEXT : ( -"00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F", -"10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F", -"20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F", -"30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F", -"40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F", -"50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F", - -"60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F", -"70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F", -"80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F", -"90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F", -"A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF", -"B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF", -"C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF", - -"D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF", -"E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF", -"F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"); -TEXT PROC interface anpassung (INT CONST kanalnummer, steuerungscode): - LET hexzeichen = "0123456789ABCDEF"; - IF es ist ein ausgabekanal - THEN interface write code - + (hexzeichen SUB (device + 4 * steuerungscode)) - ELIF es ist ein eingabekanal - - THEN lesecode in abhaengigkeit von der taktzahl - ELSE "" - FI. - es ist ein ausgabekanal: - kanal [kanalnummer].betriebsart < 0. - es ist ein eingabekanal: - kanal [kanalnummer].betriebsart > 0. - device: - IF kanalnummer < 10 - THEN 1 - ELSE kanalnummer DIV 10 - FI. - lesecode in abhaengigkeit von der taktzahl: - SELECT kanal [kanalnummer].taktzahl OF - CASE 1: lesecode - CASE 2: adresse 0 code + lesecode + lesecode - CASE 3: adresse 0 code + lesecode + zwei weitere takte - - OTHERWISE "" END SELECT. - lesecode: - interface read code + (hexzeichen SUB (device + 4 * steuerungscode)). - zwei weitere takte: - IF leertakt code = "" - THEN lesecode + lesecode - ELSE kanal [kanalnummer].taktzahl DECR 1; - leertakt code + lesecode - FI. -END PROC interface anpassung; -PROC ausgeben (INT CONST kanalnummer, wert): - merke wert; - gib wert aus. - merke wert: - vorherige ausgabe [kanalnummer] := wert. - gib wert aus: - out (kanal [kanalnummer].steuercode); - - out (hexcode [wert + 1]). -END PROC ausgeben; -INT PROC eingabe (INT CONST kanalnummer): - gib lesecode aus; - erhaltene antwort. - gib lesecode aus: - out (kanal [kanalnummer].steuercode). - erhaltene antwort: - TEXT VAR dummy; - SELECT kanal [kanalnummer].taktzahl OF - CASE 1 : erste sendung - CASE 2 : zweite sendung - CASE 3 : dritte sendung - OTHERWISE -1 - END SELECT. - erste sendung: - fange mufikennung; - dezimalwert (old incharety (1), old incharety (1)). - - zweite sendung: - fange mufikennung; - dummy := old incharety (1); - dummy := old incharety (1); - erste sendung. - dritte sendung: - fange mufikennung; - dummy := old incharety (1); - dummy := old incharety (1); - zweite sendung. - fange mufikennung: - puffer CAT old incharety; - REP puffer CAT old incharety - UNTIL pos (puffer, mufikennung) > 0 PER; - puffer := subtext (puffer, 1, length (puffer) - 2). -END PROC eingabe; -(************ H A R D W A R E U N A B H Ä N G I G E R T E I L ************) - -LET max kanalanzahl = 49, - endezeichen = "q", - abbruchzeichen = "h", - esc = ""27""; -INT CONST analog aus :: -2, (* Betriebsarten *) - digital aus :: -1, - nicht belegt :: 0, - digital ein :: 1, - analog ein :: 2, - kanalbreite :: 8, - ganzzahl obergrenze :: 2 ** kanalbreite, - - configuration error code :: -1, - interface error code :: -4; -TEXT VAR meldung :: ""; -BOOL VAR kanaldaten sind eingetragen :: FALSE, - endezeichen gegeben :: FALSE, - programm mit pdv gestartet :: FALSE, - fehler zu melden :: FALSE; -TYPE KANAL = STRUCT (INT betriebsart, taktzahl, TEXT steuercode), - SPANNUNG = STRUCT (REAL minimalwert, maximalwert); -ROW max kanalanzahl INT VAR vorherige ausgabe; - -ROW max kanalanzahl KANAL VAR kanal; -ROW max kanalanzahl SPANNUNG VAR spannung; -PROC run pdv: - run pdv (last param) -END PROC run pdv; -PROC run pdv (TEXT CONST programmname): - enable stop; - last param (programmname); - programm mit pdv gestartet := TRUE; - teste interface; - disable stop; - run (programmname); - IF is error - THEN fehlerbehandlung - ELSE melde programmende - FI; - schliesse interface; - programm mit pdv gestartet := FALSE; - enable stop; - IF fehler zu melden - - THEN errorstop (meldung) - FI -END PROC run pdv; -PROC run pdv again: - enable stop; - programm mit pdv gestartet := TRUE; - teste interface; - disable stop; - run again; - IF is error - THEN fehlerbehandlung - ELSE melde programmende - FI; - schliesse interface; - programm mit pdv gestartet := FALSE; - enable stop; - IF fehler zu melden - THEN errorstop (meldung) - FI -END PROC run pdv again; -PROC melde programmende: - page; - menufootnote ("Programmende! Zum Weitermachen bitte irgendeine Taste tippen."); - - pause; - schalte alles aus -END PROC melde programmende; -PROC initialisiere interface: - enable stop; - pruefe abbruch; - IF programm mit pdv gestartet - THEN schalte alles aus - ELSE errorstop ("PDV-Programme müssen mit 'run pdv' gestartet werden!") - FI -END PROC initialisiere interface; -PROC schalte alles aus: - INT VAR kanalnummer, kanalbetriebsart; - FOR kanalnummer FROM 1 UPTO max kanalanzahl REP - kanalbetriebsart := kanal [kanalnummer].betriebsart; - IF kanalbetriebsart = digital aus - - THEN ausgeben (kanalnummer, 0) - ELIF kanalbetriebsart = analog aus - THEN ausgeben (kanalnummer, gewandelte nullspannung) - FI - PER. - gewandelte nullspannung: - int(- real (ganzzahl obergrenze) * u min / (u max - u min) + 0.5). - u max : spannung [kanalnummer].maximalwert. - u min : spannung [kanalnummer].minimalwert. -END PROC schalte alles aus; -PROC warte (REAL CONST sekunden): - TEXT VAR eingabe; - pruefe abbruch; - eingabe := incharety (int (sekunden * 10.0 + 0.5)); - - IF eingabe = esc - THEN untersuche naechstes zeichen - FI. - untersuche naechstes zeichen: - eingabe := incharety (30); - IF eingabe = endezeichen - THEN endezeichen gegeben := TRUE - ELIF eingabe = abbruchzeichen - THEN errorstop ("Programm-Abbruch durch <ESC><" - + abbruchzeichen + ">!") - FI. -END PROC warte; -PROC warte (INT CONST sekunden): - TEXT VAR eingabe; - pruefe abbruch; - eingabe := incharety (sekunden * 10); - IF eingabe = esc - - THEN untersuche naechstes zeichen - FI. - untersuche naechstes zeichen: - eingabe := incharety (30); - IF eingabe = endezeichen - THEN endezeichen gegeben := TRUE - ELIF eingabe = abbruchzeichen - THEN errorstop ("Programm-Abbruch durch <ESC><" - + abbruchzeichen + ">!") - FI. -END PROC warte; -TEXT PROC incharety: - IF puffer = "" - THEN old incharety - ELSE erstes zeichen von puffer - FI. - erstes zeichen von puffer: - TEXT CONST zeichen :: puffer SUB 1; - - puffer := subtext (puffer, 2); - zeichen. -END PROC incharety; -TEXT PROC incharety (INT CONST timelimit): - IF puffer = "" - THEN old incharety (timelimit) - ELSE erstes zeichen von puffer - FI. - erstes zeichen von puffer: - TEXT CONST zeichen :: puffer SUB 1; - puffer := subtext (puffer, 2); - zeichen. -END PROC incharety; -PROC inchar (TEXT VAR character): - REP character := incharety - UNTIL character <> "" PER -END PROC inchar; -PROC pause: - TEXT VAR dummy; - inchar (dummy) - -END PROC pause; -PROC pause (INT CONST timelimit): - TEXT VAR dummy := incharety (timelimit) -END PROC pause; -BOOL PROC abbruch gewuenscht: - pruefe abbruch; - BOOL VAR entscheidung :: endezeichen gegeben; - endezeichen gegeben := FALSE; - entscheidung -END PROC abbruch gewuenscht; -PROC tue nichts: - pruefe abbruch -END PROC tue nichts; -PROC trage kanaldaten ein (INT CONST kanalnummer, - ROW 2 REAL CONST spannungsbereich, - ROW 3 INT CONST kanalparameter): - - spannung [kanalnummer].minimalwert := spannungsbereich [1]; - spannung [kanalnummer].maximalwert := spannungsbereich [2]; - kanal [kanalnummer].betriebsart := kanalparameter [1]; - kanal [kanalnummer].taktzahl := kanalparameter [2]; - kanal [kanalnummer].steuercode := interface anpassung - (kanalnummer, kanalparameter [3]) -END PROC trage kanaldaten ein; -PROC beende kanaldaten eintragen: - kanaldaten sind eingetragen := TRUE -END PROC beende kanaldaten eintragen; - -PROC hole spannungsbereich (INT CONST kanalnummer, REAL VAR u min, u max): - u min := spannung [kanalnummer].minimalwert; - u max := spannung [kanalnummer].maximalwert -END PROC hole spannungsbereich; -INT PROC letzte ausgabe (INT CONST kanalnummer): - vorherige ausgabe [kanalnummer] -END PROC letzte ausgabe; -PROC pruefe kanal (INT CONST kanalnummer, gewuenschte betriebsart): - pruefe abbruch; - pruefe kanalnummer; - pruefe betriebsart. - pruefe kanalnummer: - IF kanalnummer < 1 OR kanalnummer > max kanalanzahl - - THEN errorstop ("Kanalnummer " + text (kanalnummer) + - " ist unzulaessig !") - FI. - pruefe betriebsart: - IF gewuenschte betriebsart <> kanal [kanalnummer].betriebsart - THEN errorstop ("An Kanal " + text (kanalnummer) + - " keine " + wunsch + " moeglich!") - FI. - wunsch: - IF gewuenschte betriebsart = analog aus - THEN "Analog-Ausgabe" - ELIF gewuenschte betriebsart = digital aus - THEN "Digital-Ausgabe" - - ELIF gewuenschte betriebsart = digital ein - THEN "Digital-Eingabe" - ELIF gewuenschte betriebsart = analog ein - THEN "Analog-Eingabe" - ELSE "Ein- oder Ausgabe" - FI. -END PROC pruefe kanal; -PROC pruefe abbruch: - TEXT VAR zeichen :: incharety; - IF zeichen = esc - THEN pruefe weiter - FI. - pruefe weiter: - zeichen := incharety (30); - IF zeichen = endezeichen - THEN endezeichen gegeben := TRUE - ELIF zeichen = abbruchzeichen - THEN errorstop ("Programm-Abbruch durch <ESC><" - - + abbruchzeichen + ">!") - FI. -END PROC pruefe abbruch; -PROC oeffne interface (INT VAR status): - enable stop; - IF kanaldaten sind eingetragen - THEN teste interface funktion - ELSE status := configuration error code - FI. - teste interface funktion: - leere puffer; - out (interface test code); - fange antwort; - IF antwort = interface okay code - THEN status := 0; - out (interface open code) - ELSE status := interface error code - - FI. - leere puffer: - puffer := ""; - REP UNTIL old incharety = "" PER. - fange antwort: - INT VAR zaehler; - TEXT VAR antwort :: ""; - FOR zaehler FROM 1 UPTO erwartete zeichen REP - antwort CAT old incharety (1) - PER. -END PROC oeffne interface; -PROC schliesse interface: - enable stop; - out (interface close code) -END PROC schliesse interface; -(********************* H I L F S P R O Z E D U R E N *********************) -PROC teste interface: - INT VAR test; - - warte etwas; - oeffne interface (test); - IF test < 0 - THEN errorstop (fehlermeldung) - ELSE endezeichen gegeben := FALSE; - fehler zu melden := FALSE - FI. - warte etwas: - pause (1); pause (1); pause (1); pause (1); pause (1). - fehlermeldung: - IF test = configuration error code - THEN "Interface ist noch nicht konfiguriert!" - ELIF test = interface error code - THEN "Interface meldet sich nicht!" - ELSE "Interface kann nicht geöffnet werden!" - - FI. -END PROC teste interface; -PROC fehlerbehandlung: - meldung := errormessage; - IF meldung <> "" - THEN meldung CAT fehlerzeile; - fehler zu melden := TRUE - FI; - clear error; - initialisiere interface. - fehlerzeile: - IF errorline = 0 - THEN "" - ELSE " (bei Zeile " + text (errorline) + ")" - FI. -END PROC fehlerbehandlung; -INT PROC dezimalwert (TEXT CONST zeichen 1, zeichen 2): - 16 * pos (hexzeichen, zeichen 1) + pos (hexzeichen, zeichen 2). - hexzeichen: "123456789ABCDEF". - -END PROC dezimalwert; -TEXT PROC hex (TEXT CONST zwei zeichen): - hex (code (zwei zeichen SUB 1)) + hex (code (zwei zeichen SUB 2)) -END PROC hex; -TEXT PROC hex (INT CONST wert): - (hexzeichen SUB (wert DIV 16 + 1)) + (hexzeichen SUB (wert MOD 16 + 1)). - hexzeichen: "0123456789ABCDEF". -END PROC hex; -PROC initialisiere die kanaele: - INT VAR kanalnummer; - FOR kanalnummer FROM 1 UPTO max kanalanzahl REP - trage kanaldaten ein (kanalnummer, keine spannung, leere karte); - vorherige ausgabe [kanalnummer] := 0 - - PER. - keine spannung: - ROW 2 REAL : (0.0, 0.0). - leere karte: - ROW 3 INT : (nicht belegt, 0, 0). -END PROC initialisiere die kanaele; -initialisiere die kanaele -END PACKET ls prozess 1 - - diff --git a/prozess/ls-Prozess 2 b/prozess/ls-Prozess 2 deleted file mode 100644 index 3b8d407..0000000 --- a/prozess/ls-Prozess 2 +++ /dev/null @@ -1,238 +0,0 @@ -(* - - ********************************************************** - ********************************************************** - ** ** - ** ls-Prozess 2 ** - ** ** - ** Version 1.02 ** - ** ** - ** (Stand : 06.06.89) ** - ** ** - ** ** - ** ** - ** Autoren: Bruno Pollok, Bielefeld ** - ** Wolfgang Weber, Bielefeld ** - ** ** - ** ** - ** Copyright (C) 1988 Eva Latta-Weber, Bielefeld ** - ** Copyright (C) 1990 ERGOS GmbH, Siegburg ** - ********************************************************** - ********************************************************** - - *) -PACKET ls prozess 2 DEFINES - wert an analogausgang ausgeben, - spannungswert ausgeben, - bitsymbol ausgeben, - bitmuster ausgeben, - dezimalwert ausgeben, - bitmuster gleich, - bit ist gesetzt, - wert von analogeingang, - spannungswert, - bitsymbol, - bitmuster, - dezimalwert: -LET eins = "I", - null = "O", - invers = "T", - egal = "X"; -REAL CONST maximalwert :: real (ganzzahl obergrenze - 1); -(********************* A U S G A B E - B E F E H L E *********************) - -PROC wert an analogausgang ausgeben (INT CONST kanal, wert): - pruefe kanal (kanal, analog aus); - ausgeben (kanal, wert MOD ganzzahlobergrenze) -END PROC wert an analogausgang ausgeben; -PROC spannungswert ausgeben (INT CONST kanal, REAL CONST wert): - pruefe kanal (kanal, analog aus); - pruefe spannungswert; - ausgeben (kanal, gewandelte spannung). - pruefe spannungswert: - REAL VAR u min, u max; - hole spannungsbereich (kanal, u min, u max); - IF wert < u min OR wert > u max - THEN errorstop ("Der Spannungswert " + text (wert) + - - " ist nicht zulaessig!") - FI. - gewandelte spannung: - int (((wert - u min) * maximalwert) / (u max - u min) + 0.5). -END PROC spannungswert ausgeben; -PROC bitsymbol ausgeben (INT CONST kanal, bitnummer, TEXT CONST zeichen): - pruefe kanal (kanal, digital aus); - pruefe bitnummer (bitnummer); - ausgeben (kanal, relativer dezimalwert (zeichen, bitnummer, kanal)) -END PROC bitsymbol ausgeben; -PROC bitmuster ausgeben (INT CONST kanal, TEXT CONST zeichenkette): - - pruefe kanal (kanal, digital aus); - ausgeben (kanal, relativer dezimalwert (zeichenkette, kanal)) -END PROC bitmuster ausgeben; -PROC dezimalwert ausgeben (INT CONST kanal, wert): - pruefe kanal (kanal, digital aus); - ausgeben (kanal, wert MOD ganzzahl obergrenze) -END PROC dezimalwert ausgeben; -(********************* E I N G A B E - B E F E H L E *********************) -BOOL PROC bitmuster gleich (INT CONST kanal, TEXT CONST zeichenkette): - INT CONST eingabewert :: dezimalwert (kanal); - - pruefe zeichenkette; - eingabe passt zur zeichenkette. - pruefe zeichenkette: - IF length (zeichenkette) <> kanalbreite - THEN errorstop ("Das Bitmuster '" + zeichenkette + - "' hat eine unzulaessige Laenge!") - FI. - eingabe passt zur zeichenkette: - INT VAR stelle; - BOOL VAR abweichung gefunden :: FALSE; - FOR stelle FROM 1 UPTO kanalbreite REP - teste bit an dieser stelle - UNTIL abweichung gefunden PER; - NOT abweichung gefunden. - teste bit an dieser stelle: - - TEXT CONST einzelbit :: zeichenkette SUB stelle; - IF einzelbit = eins - THEN teste eingabebit auf eins - ELIF einzelbit = null - THEN teste eingabebit auf null - ELIF einzelbit = egal - THEN eingabebit ist beliebig - ELSE errorstop ("'" + einzelbit + "' ist unzulaessiges " + - "Bitsymbol in '" + zeichenkette + "'!") - FI. - teste eingabebit auf eins: - IF NOT bit (eingabewert, kanalbreite - stelle) - THEN abweichung gefunden := TRUE - FI. - - teste eingabebit auf null: - IF bit (eingabewert, kanalbreite - stelle) - THEN abweichung gefunden := TRUE - FI. - eingabebit ist beliebig: - . -END PROC bitmuster gleich; -BOOL PROC bit ist gesetzt (INT CONST kanal, bitnummer): - pruefe kanal (kanal, digital ein); - pruefe bitnummer (bitnummer); - IF bit (eingabe (kanal), bitnummer) - THEN TRUE - ELSE FALSE - FI -END PROC bit ist gesetzt; -INT PROC wert von analogeingang (INT CONST kanal): - pruefe kanal (kanal, analog ein); - - eingabe (kanal) -END PROC wert von analogeingang; -REAL PROC spannungswert (INT CONST kanal): - INT CONST dezimalwert :: wert von analogeingang (kanal); - REAL VAR u min, u max; - hole spannungsbereich (kanal, u min, u max); - round (real (dezimalwert) * (u max - u min) / maximalwert + u min, 3) -END PROC spannungswert; -TEXT PROC bitsymbol (INT CONST kanal, bitnummer): - pruefe kanal (kanal, digital ein); - pruefe bitnummer (bitnummer); - IF bit (eingabe (kanal), bitnummer) - THEN eins - - ELSE null - FI -END PROC bitsymbol; -TEXT PROC bitmuster (INT CONST kanal): - TEXT VAR zeichenkette :: ""; - INT CONST wert :: dezimalwert (kanal); - wandle wert; - zeichenkette. - wandle wert: - INT VAR zeiger; - FOR zeiger FROM kanalbreite - 1 DOWNTO 0 REP - IF bit (wert, zeiger) - THEN zeichenkette CAT eins - ELSE zeichenkette CAT null - FI - PER. -END PROC bitmuster; -INT PROC dezimalwert (INT CONST kanal): - pruefe kanal (kanal, digital ein); - - eingabe (kanal) -END PROC dezimalwert; -(******************** H I L F S - P R O Z E D U R E N ********************) -INT PROC relativer dezimalwert (TEXT CONST zeichenkette, INT CONST kanal): - INT VAR wert := letzte ausgabe (kanal); - pruefe zeichenkette auf korrekte laenge; - veraendere alten wert; - wert. - pruefe zeichenkette auf korrekte laenge: - IF length (zeichenkette) <> kanalbreite - THEN errorstop ("Bitmuster '" + zeichenkette + "' hat " - + "unzulaessige Laenge!") - - FI. - veraendere alten wert: - INT VAR zeiger; - FOR zeiger FROM 1 UPTO kanalbreite REP - veraendere dieses bit - PER. - veraendere dieses bit: - TEXT CONST einzelbit :: zeichenkette SUB zeiger; - IF einzelbit = eins THEN setze bit - ELIF einzelbit = null THEN loesche bit - ELIF einzelbit = invers THEN invertiere bit - ELIF einzelbit = egal THEN lasse bit - ELSE errorstop ("'" + einzelbit + "' ist unzulaessiges " + - "Bitsymbol in '" + zeichenkette + "'!") - - FI. - setze bit: - set bit (wert, kanalbreite - zeiger). - loesche bit: - reset bit (wert, kanalbreite - zeiger). - invertiere bit: - IF bit (wert, kanalbreite - zeiger) - THEN loesche bit - ELSE setze bit - FI. - lasse bit: - . - END PROC relativer dezimalwert; -INT PROC relativer dezimalwert (TEXT CONST bitzeichen, - INT CONST bitnummer, kanal): - INT VAR wert :: letzte ausgabe (kanal); - IF bitzeichen = eins THEN setze bit - - ELIF bitzeichen = null THEN loesche bit - ELIF bitzeichen = invers THEN invertiere bit - ELIF bitzeichen = egal THEN lasse bit - ELSE errorstop ("'" + bitzeichen + "' ist ein unzulaessiges " + - "Bitsymbol!") - FI; - wert. - setze bit: - set bit (wert, bitnummer). - loesche bit: - reset bit (wert, bitnummer). - invertiere bit: - IF bit (wert, bitnummer) - THEN loesche bit - ELSE setze bit - FI. - lasse bit: - - . -END PROC relativer dezimalwert; -PROC pruefe bitnummer (INT CONST bitnummer): - IF bitnummer < 0 OR bitnummer > kanalbreite - 1 - THEN errorstop ("Bitnummer " + text (bitnummer) + - " ist nicht zulaessig!") - FI -END PROC pruefe bitnummer -END PACKET ls prozess 2 - - diff --git a/prozess/ls-Prozess 3 b/prozess/ls-Prozess 3 deleted file mode 100644 index b66cbe6..0000000 --- a/prozess/ls-Prozess 3 +++ /dev/null @@ -1,33 +0,0 @@ -(* - - ********************************************************** - ********************************************************** - ** ** - ** ls-Prozess 3 ** - ** ** - ** Version 1.02 ** - ** ** - ** (Stand : 06.06.89) ** - ** ** - ** ** - ** ** - ** Autoren: Bruno Pollok, Bielefeld ** - ** Wolfgang Weber, Bielefeld ** - ** ** - ** ** - ** Copyright (C) 1988 Eva Latta-Weber, Bielefeld ** - ** Copyright (C) 1990 ERGOS GmbH, Siegburg ** - ********************************************************** - ********************************************************** - - *) -PACKET ls prozess 3 DEFINES - temperatur: -LET thermometerkonstante = 50.0, - minimaltemperatur = 10.0; -REAL PROC temperatur (REAL CONST spannungswert): - spannungswert * thermometerkonstante - minimaltemperatur -END PROC temperatur -END PACKET ls prozess 3 - - diff --git a/prozess/ls-Prozess 4 b/prozess/ls-Prozess 4 deleted file mode 100644 index 59a1493..0000000 --- a/prozess/ls-Prozess 4 +++ /dev/null @@ -1,595 +0,0 @@ -(* - - ********************************************************** - ********************************************************** - ** ** - ** ls-Prozess 4 ** - ** ** - ** 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 4 DEFINES - pdv befehlsuebersicht anzeigen, - pdv ausgabebefehle anzeigen, - pdv eingabebefehle anzeigen, - pdv testbefehle anzeigen, - pdv weitere befehle anzeigen, - pdv bitmuster erlaeutern, - pdv symbole erlaeutern, - pdv digital analog werte, - pdv programm neu erstellen, - pdv programm ansehen, - pdv programm starten, - pdv programm wiederholen, - pdv dateien verzeichnis, - - pdv datei kopieren, - pdv datei umbenennen, - pdv dateien loeschen, - pdv dateien drucken, - init pdv, - pdv: -LET menukarte = "ls-MENUKARTE:Prozess", - niltext = "", - maxlaenge = 45, - maxnamenslaenge = 35; -WINDOW VAR w :: window (1, 3, 79, 19); -TEXT VAR programmname :: ""; -BOOL VAR noch kein programm gelaufen :: TRUE; -PROC pdv: - init pdv; - install menu (menukarte, FALSE); - - handle menu ("PDV") -END PROC pdv; -PROC init pdv: - programmname := ""; - noch kein programm gelaufen := TRUE; - cursor off; -END PROC init pdv; -PROC pdv befehlsuebersicht anzeigen: - menuinfo (anwendungstext (20)) -END PROC pdv befehlsuebersicht anzeigen; -PROC pdv ausgabebefehle anzeigen: - INT VAR i; - REP - i := menualternative (anwendungstext (1), anwendungstext (3), - anwendungstext (4), 5, TRUE); - SELECT i OF - CASE 1, 101: menuinfo (anwendungstext (21)) - - CASE 2, 102: menuinfo (anwendungstext (22)) - CASE 3, 103: menuinfo (anwendungstext (23)) - CASE 4, 104: menuinfo (anwendungstext (24)) - CASE 5, 105: menuinfo (anwendungstext (25)) - END SELECT - UNTIL i = 6 OR i = 106 PER; -END PROC pdv ausgabebefehle anzeigen; -PROC pdv eingabebefehle anzeigen: - INT VAR i; - REP - i := menualternative (anwendungstext (2), anwendungstext (3), - anwendungstext (4), 5, TRUE); - SELECT i OF - CASE 1, 101: menuinfo (anwendungstext (31)) - - CASE 2, 102: menuinfo (anwendungstext (32)) - CASE 3, 103: menuinfo (anwendungstext (33)) - CASE 4, 104: menuinfo (anwendungstext (34)) - CASE 5, 105: menuinfo (anwendungstext (35)) - END SELECT - UNTIL i = 6 OR i = 106 PER; -END PROC pdv eingabebefehle anzeigen; -PROC pdv testbefehle anzeigen: - INT VAR i; - REP - i := menualternative (anwendungstext (5), anwendungstext (7), - anwendungstext (8), 5, TRUE); - SELECT i OF - CASE 1, 101: menuinfo (anwendungstext (41)) - - CASE 2, 102: menuinfo (anwendungstext (42)) - END SELECT - UNTIL i = 3 OR i = 103 PER; -END PROC pdv testbefehle anzeigen; -PROC pdv weitere befehle anzeigen: - INT VAR i; - REP - i := menualternative (anwendungstext (6), anwendungstext (7), - anwendungstext (8), 5, TRUE); - SELECT i OF - CASE 1, 101: menuinfo (anwendungstext (43)) - CASE 2, 102: menuinfo (anwendungstext (44)) - END SELECT - UNTIL i = 3 OR i = 103 PER; -END PROC pdv weitere befehle anzeigen; - -PROC pdv bitmuster erlaeutern: - menuinfo (anwendungstext (46)) -END PROC pdv bitmuster erlaeutern; -PROC pdv symbole erlaeutern: - menuinfo (anwendungstext (47)) -END PROC pdv symbole erlaeutern; -PROC pdv digital analog werte: - menuinfo (anwendungstext (48)) -END PROC pdv digital analog werte; -PROC pdvdateien verzeichnis: - disable stop; - forget ("Verzeichnis der Dateien", quiet); - THESAURUS VAR programme :: ALL myself; - FILE VAR f :: - sequential file (output, "Verzeichnis der Dateien"); - - f FILLBY programme; - modify (f); - to line (f, 1); insert record (f); - menufootnote ("Verlassen: <ESC> <q>"); - cursor on; - show (w, f); - cursor off; - forget ("Verzeichnis der Dateien", quiet); - IF is error - THEN regenerate menuscreen; - out (""7""); - menuinfo (" " + invers ("FEHLER: " + errormessage)); - clear error - ELSE menu bildschirm - FI; - enable stop -END PROC pdvdateien verzeichnis; -PROC pdvprogramm neu erstellen: - hole programmname; - - kontrolliere den programmnamen; - command dialogue (FALSE); - cursor on; - disable stop; - stdinfoedit (programmname, 3); - cursor off; - command dialogue (TRUE); - IF is error - THEN regenerate menuscreen; - out (""7""); - menuinfo (" " + invers (errormessage)); - clear error - ELSE menu bildschirm - FI; - enable stop. - hole programmname: - programmname := ""; - programmname := menuanswer (ausgabe, programmname, 5). - ausgabe: - center (maxlaenge, invers ("Programm neu erstellen")) + ""13""13"" - - + " Bitte den Namen für das Programm "13""13"". - kontrolliere den programmnamen: - IF programmname = niltext - THEN LEAVE pdvprogramm neu erstellen - ELIF length (programmname) > maxnamenslaenge - THEN meckere zu langen namen an; - programmname := niltext; - LEAVE pdvprogramm neu erstellen - ELIF exists (programmname) - THEN meckere existierendes programm an; - LEAVE pdvprogramm neu erstellen - FI. -END PROC pdvprogramm neu erstellen; - -PROC pdvprogramm ansehen: - IF programmname <> niltext CAND exists (programmname) - THEN frage nach diesem programm - ELSE lasse programm auswaehlen - FI; - cursor on; - disable stop; - stdinfoedit (programmname, 3); - cursor off; - IF is error - THEN regenerate menuscreen; - out (""7""); - menuinfo (" " + invers ("FEHLER: " + errormessage)); - clear error - ELSE menu bildschirm - FI; - enable stop. - frage nach diesem programm: - IF menuno (ueberschrift + " Zuletzt bearbeitetes Programm: " + name - - + " Soll mit diesem Programm gearbeitet werden", 5) - THEN lasse programm auswaehlen - FI. - ueberschrift: - center (maxlaenge, invers ("Programm ansehen/ändern")) + ""13""13"". - name: - ""13""13" " + invers (programmname) + ""13""13"". - lasse programm auswaehlen: - THESAURUS VAR verfuegbare :: ALL myself; - IF NOT not empty (verfuegbare) - THEN noch kein programm; - LEAVE pdvprogramm ansehen - ELSE biete auswahl an - FI. - biete auswahl an: - - programmname := menuone (verfuegbare, "Programm ansehen/ändern", - "Bitte das gewünschte Programm ankreuzen!", - FALSE); - IF programmname = niltext - THEN menu bildschirm; - LEAVE pdvprogramm ansehen - FI. -END PROC pdvprogramm ansehen; -PROC pdvdateien drucken: - lasse programme auswaehlen; - drucke programme; - menu bildschirm. - lasse programme auswaehlen: - THESAURUS VAR verfuegbare :: ALL myself; - IF NOT not empty (verfuegbare) - - THEN noch kein programm; - LEAVE pdvdateien drucken - ELSE biete auswahl an - FI. - biete auswahl an: - verfuegbare := menusome (verfuegbare, "Dateien drucken", - "Bitte die Dateien ankreuzen, die gedruckt werden sollen!", - FALSE). - drucke programme: - show menuwindow; - steige ggf bei leerem thesaurus aus; - menuwindowout (menuwindowcenter (invers ("Dateien drucken"))); - menuwindowline (2); - command dialogue (FALSE); - - fuehre einzelne operationen aus; - command dialogue (TRUE); - schlage ggf neue seite auf; - menuwindowout (" Alle ausgewählten Dateien wurden gedruckt!"); - menuwindowstop. - fuehre einzelne operationen aus: - INT VAR k; - FOR k FROM 1 UPTO highest entry (verfuegbare) REP - IF name (verfuegbare, k) <> "" - THEN disable stop; - menuwindowout ( " """ + name (verfuegbare, k) + - """ wird gedruckt!"); - menuwindowline; - - print (name (verfuegbare, k)); - fehlerbehandlung - FI - PER. - steige ggf bei leerem thesaurus aus: - IF NOT not empty (verfuegbare) - THEN menuwindowline (2); - menuwindowout (" Es wurde keine Datei ausgewählt!"); - menuwindowstop; - menu bildschirm; - LEAVE pdvdateien drucken - FI. - schlage ggf neue seite auf: - IF remaining menuwindowlines < 7 - THEN menuwindowpage; menuwindowline - ELSE menuwindowline (2) - - FI. - fehlerbehandlung: - IF is error - THEN regenerate menuscreen; out (""7""); - menuinfo (" " + invers (errormessage)); - clear error; enable stop; - LEAVE pdvdateien drucken - ELSE enable stop - FI. -END PROC pdvdateien drucken; -PROC pdvdatei kopieren: - ermittle alten programmnamen; - erfrage neuen programmnamen; - kopiere ggf das programm. - ermittle alten programmnamen: - IF NOT not empty (ALL myself) - THEN noch kein programm; - - LEAVE pdvdatei kopieren - ELSE biete auswahl an - FI. - biete auswahl an: - TEXT VAR alter name := menuone (ALL myself, "Datei kopieren", - "Bitte die Datei ankreuzen, das kopiert werden soll!",FALSE); - menu bildschirm; - IF alter name = niltext - THEN LEAVE pdvdatei kopieren - FI. - erfrage neuen programmnamen: - TEXT VAR neuer name :: menuanswer (ausgabe, alter name, 5). - ausgabe: - ueberschrift + " Name der 'alten' Datei: " + bisheriger name - - + " Bitte den Namen für die Kopie: ". - ueberschrift: - center (maxlaenge, invers ("Datei kopieren")) + ""13""13"". - bisheriger name: - ""13""13" " + invers (alter name) + ""13""13"". - kopiere ggf das programm: - IF neuer name = niltext - THEN menuinfo (" " + invers ("Der gewünschte Name ist unzulässig!")); - LEAVE pdvdatei kopieren - ELIF exists (neuer name) - THEN mache vorwurf; - LEAVE pdvdatei kopieren - ELSE copy (alter name, neuer name) - - FI. - mache vorwurf: - menuinfo (" " + invers ("Eine Datei mit diesem Namen gibt es bereits!")). -END PROC pdvdatei kopieren; -PROC pdvdatei umbenennen: - ermittle alten programmnamen; - erfrage neuen programmnamen; - benenne ggf das programm um. - ermittle alten programmnamen: - IF NOT not empty (ALL myself) - THEN noch kein programm; - LEAVE pdvdatei umbenennen - ELSE biete auswahl an - FI. - biete auswahl an: - TEXT VAR alter name := menuone ( ALL myself, "Datei umbenennen", - - "Bitte die Datei ankreuzen, die umbenannt werden soll!", FALSE); - menu bildschirm; - IF alter name = niltext - THEN LEAVE pdvdatei umbenennen - FI. - erfrage neuen programmnamen: - TEXT VAR neuer name :: menuanswer (ausgabe, alter name, 5). - ausgabe: - ueberschrift + " Bisheriger Dateiname: " + bisheriger name - + " Zukünftiger Dateiname: ". - ueberschrift: - center (maxlaenge, invers ("Datei umbenennen")) + ""13""13"". - bisheriger name: - - ""13""13" " + invers (alter name) + ""13""13"". - benenne ggf das programm um: - IF neuer name = niltext - THEN menuinfo (" " + invers ("Der gewünschte Name ist unzulässig!")); - LEAVE pdvdatei umbenennen - ELIF exists (neuer name) - THEN mache vorwurf; - LEAVE pdvdatei umbenennen - ELSE rename (alter name, neuer name); - programmname := neuer name - FI. - mache vorwurf: - menuinfo (" " + invers ("Eine Datei mit diesem Namen gibt es bereits!")). - -END PROC pdvdatei umbenennen; -PROC pdvdateien loeschen: - lasse programme auswaehlen; - loesche programme; - menu bildschirm. - lasse programme auswaehlen: - THESAURUS VAR verfuegbare :: ALL myself; - IF NOT not empty (verfuegbare) - THEN noch kein programm; - LEAVE pdvdateien loeschen - ELSE biete auswahl an - FI. - biete auswahl an: - verfuegbare := menusome (verfuegbare, "Dateien löschen", - "Bitte alle Dateien ankreuzen, die gelöscht werden sollen!", FALSE). - - loesche programme: - show menuwindow; - steige ggf bei leerem thesaurus aus; - menuwindowout (menuwindowcenter (invers ("Dateien löschen"))); - menuwindowline (2); - command dialogue (FALSE); - fuehre einzelne operationen aus; - command dialogue (TRUE); - schlage ggf neue seite auf; - menuwindowout (" Alle ausgewählten Dateien wurden gelöscht!"); - menuwindowstop. - fuehre einzelne operationen aus: - INT VAR k; - FOR k FROM 1 UPTO highest entry (verfuegbare) REP - - IF name (verfuegbare, k) <> "" - THEN disable stop; - IF menuwindowyes (" """ + name (verfuegbare, k) + """ löschen") - THEN forget (name (verfuegbare, k), quiet) - FI; - fehlerbehandlung - FI - PER; - programmname := "". - steige ggf bei leerem thesaurus aus: - IF NOT not empty (verfuegbare) - THEN menuwindowline (2); - menuwindowout (" Es wurde keine Datei ausgewählt!"); - menuwindowstop; - - menu bildschirm; - LEAVE pdvdateien loeschen - FI. - schlage ggf neue seite auf: - IF remaining menuwindowlines < 7 - THEN menuwindowpage; menuwindowline - ELSE menuwindowline (2) - FI. - fehlerbehandlung: - IF is error - THEN regenerate menuscreen; out (""7""); - menuinfo (" " + invers (errormessage)); - clear error; enable stop; - LEAVE pdvdateien loeschen - ELSE enable stop - FI. -END PROC pdvdateien loeschen; - -PROC pdvprogramm starten: - programmname ermitteln; - bildschirm vorbereiten; - cursor on; - disable stop; - warnings off; - check on; - run pdv (programmname); - noch kein programm gelaufen := FALSE; - cursor off; - IF is error - THEN fehler ggf melden; - clear error - ELSE regenerate menuscreen - FI; - enable stop. - bildschirm vorbereiten: - cursor (17, 2); out (waagerecht); - cursor (38, 2); out (waagerecht); - cursor ( 1, 3); out (""4""); - menufootnote ("Programmabbruch: <ESC><h>"); - - cursor (1, 5); - out ("Das Programm wird übersetzt. Zeilen-Nr.: "). - fehler ggf melden: - IF errormessage <> "" - THEN fehler melden - FI. - fehler melden: - IF pos (errormessage, "'halt' vom Terminal") > 0 - THEN regenerate menuscreen; - out (""7""); menuinfo (" "15"'halt' vom Terminal "14"") - ELIF pos (errormessage, "Programm-Abbruch durch <ESC><h>") > 0 - THEN regenerate menuscreen; - out (""7""); menuinfo (" "15"Programm-Abbruch durch <ESC><h> "14"") - - ELIF pos (errormessage, "(bei Zeile") > 0 AND exists (programmname) - THEN programm mit fehler im notebook zeigen; - regenerate menuscreen - ELSE regenerate menuscreen; - out (""7""); menuinfo (" " + invers ("FEHLER: " - + subtext (errormessage, 1, 61))) - FI. - programm mit fehler im notebook zeigen: - noteline; - note ("FEHLER: " + errormessage); - INT VAR n; FOR n FROM 1 UPTO 9 REP noteline PER; - note (""15"Verlassen: <ESC><q> "14""); - - FILE VAR p :: sequential file (modify, programmname); - to line (p, max (1, fehlerzeile)); - col (1); - clear error; - out (""7""); - cursor on; - noteedit (p); - cursor off. - fehlerzeile: - int (subtext (errormessage, zahlposition)). - zahlposition: pos (errormessage, "(bei Zeile") + 10. - programmname ermitteln: - IF programmname <> niltext CAND exists (programmname) - THEN frage nach diesem programm - ELSE lasse programm auswaehlen - FI. - frage nach diesem programm: - - IF menuno (ueberschrift + " Zuletzt bearbeitetes Programm: " + - name + " Soll mit diesem Programm gearbeitet werden", 5) - THEN lasse programm auswaehlen - FI. - ueberschrift: - center (maxlaenge, invers ("Programm starten")) + ""13""13"". - name: - ""13""13" " + invers (programmname) + ""13""13"". - lasse programm auswaehlen: - THESAURUS VAR verfuegbare :: ALL myself; - IF NOT not empty (verfuegbare) - THEN noch kein programm; - LEAVE pdvprogramm starten - - ELSE biete auswahl an - FI. - biete auswahl an: - programmname := menuone (verfuegbare, "Programm starten", - "Bitte das gewünschte Programm ankreuzen!", FALSE); - IF programmname = niltext - THEN menubildschirm; - LEAVE pdv programm starten - FI. -END PROC pdvprogramm starten; -PROC pdv programm wiederholen: - bildschirm vorbereiten; - cursor on; - disable stop; - IF noch kein programm gelaufen - THEN errorstop ("Eine Wiederholung ist nicht moeglich!") - - ELSE run pdv again - FI; - cursor off; - regenerate menuscreen; - IF is error - THEN zeige fehler; - clear error - FI; - enable stop. - bildschirm vorbereiten: - cursor (17, 2); out (waagerecht); - cursor (38, 2); out (waagerecht); - cursor ( 1, 3); out (""4""); - menufootnote ("Programmabbruch: <ESC><h>"); - cursor (1,3). - zeige fehler: - out (""7""); - IF errormessage = "'run again' nicht moeglich" - THEN menuinfo (" "15"Eine Wiederholung ist nicht moeglich! "14"") - - ELIF pos (errormessage, "'halt' vom Terminal") > 0 - THEN menuinfo (" "15"'halt' vom Terminal "14"") - ELIF pos (errormessage, "Programm-Abbruch durch <ESC><h>") > 0 - THEN menuinfo (" "15"Programm-Abbruch durch <ESC><h> "14"") - ELSE menuinfo (" " + invers ("FEHLER: " - + subtext (errormessage, 1, 61))) - FI. -END PROC pdv programm wiederholen; -PROC meckere zu langen namen an: - menuinfo (" " + invers ("Hier dürfen Namen höchstens " - + text (max namenslaenge) - - + " Zeichen lang sein!")) -END PROC meckere zu langen namen an; -PROC meckere existierendes programm an: - menuinfo (" " + invers ("Ein Programm mit diesem Namen gibt es bereits!")) -END PROC meckere existierendes programm an; -PROC noch kein programm: - menuinfo (" " + invers ("Es existiert noch kein Programm!")) -END PROC noch kein programm; -PROC menu bildschirm: - cursor (1, 2); - out (5 * waagerecht); - cursor (1, 3); - out (""4""); - cursor (1,23); - out (79 * waagerecht); - - refresh submenu -END PROC menu bildschirm -END PACKET ls prozess 4 - - diff --git a/prozess/ls-Prozess 5 b/prozess/ls-Prozess 5 deleted file mode 100644 index a9b5028..0000000 --- a/prozess/ls-Prozess 5 +++ /dev/null @@ -1,829 +0,0 @@ -(* - - ********************************************************** - ********************************************************** - ** ** - ** 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 - - diff --git a/prozess/ls-Prozess-gen b/prozess/ls-Prozess-gen deleted file mode 100644 index b93e4b9..0000000 --- a/prozess/ls-Prozess-gen +++ /dev/null @@ -1,146 +0,0 @@ -(* - - ********************************************************** - ********************************************************** - ** ** - ** ls-Prozess/gen ** - ** ** - ** 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 ** - ********************************************************** - ********************************************************** - - *) -WINDOW VAR fenster := window (1, 1, 79, 24); -TEXT CONST titel :: ""15"ls-Prozess : Automatische Generierung "14"", - ueberschrift :: "Auswahl der Interface-Anpassung", - hinweis :: "Bitte gewünschte Anpassung ankreuzen!"; -TEXT VAR anpassung; -BOOL VAR alles okay; -frage nach diskette; -IF alles okay - THEN installation -FI; -PROC installation: - THESAURUS VAR thes :: infix namen (ALL archive, "ls-Prozess 1"); - anpassung := boxone (fenster, thes, ueberschrift, hinweis, FALSE); - cursor (1, 3); - out (""4""); - IF anpassung <> "" - THEN installiere ls prozess - ELSE warnung - FI. - warnung: - out (""7""); - line (2); - out (" FEHLER: Es muß unbedingt eine Anpassung ausgewaehlt werden!"); - cursor (5, 7); - IF no ("Generierung abbrechen") - THEN installation - FI. -END PROC installation; -PROC installiere ls prozess: - forget ("ls-Prozess/gen", quiet); - frage evtl nach interfacekanal; - check off; - warnings off; - installiere (anpassung); - installiere ("ls-Prozess 2"); - installiere ("ls-Prozess 3"); - installiere ("ls-Prozess 4"); - installiere ("ls-Prozess 5"); - - installiere ("ls-MENUKARTE:Prozess"); - check on; - release (archive); - setze ggf interface kanal; - global manager. - frage evtl nach interfacekanal: - IF adapter fuer separate schnittstelle - THEN erfrage kanalnummer - FI. - erfrage kanalnummer: - INT VAR kanalnummer; - line (2); - REP put (" Gib Interfacekanal:"); - get (kanalnummer); - IF kanalnummer < 1 OR kanalnummer > 24 - THEN out (""7" Unzulaessige Kanalnummer!"); - line (2) - - FI - UNTIL kanalnummer > 0 AND kanalnummer < 25 PER; - cursor (1, 3); - out (""4""). - setze ggf interfacekanal: - IF adapter fuer separate schnittstelle - THEN do ("interface kanal (" + text (kanalnummer) + ")") - FI. - adapter fuer separate schnittstelle: - (anpassung = "ls-Prozess 1 für AKTRONIC-Adapter") OR - (anpassung = "ls-Prozess 1 für MUFI als Endgerät"). -END PROC installiere ls prozess; -PROC installiere (TEXT CONST datei): - INT VAR zeile, spalte; - - hole datei vom archiv; - IF datei = "ls-MENUKARTE:Prozess" - THEN schicke zu menukarten task - ELSE insertiere - FI. - hole datei vom archiv: - line (2); - out ("'" + datei + "' "); - get cursor (spalte, zeile); - IF NOT exists (datei) - THEN out ("wird von der Archivdiskette geholt."); - fetch (datei, archive) - FI. - insertiere: - cursor (spalte, zeile); - out (""5""); - out ("wird insertiert."); - insert (datei); - cursor (spalte, zeile); - - out (""4""); - forget (datei, quiet). - schicke zu menukarten task: - cursor (spalte, zeile); - out (""5""); - command dialogue (FALSE); - save (datei, /"ls-MENUKARTEN"); - command dialogue (TRUE); - forget (datei, quiet). -END PROC installiere; -PROC frage nach diskette: - page; - out (center (fenster, titel)); - line (4); - putline (" Ist das Archiv angemeldet,"); - putline (" die Diskette mit 'ls-Prozess' eingelegt"); - IF yes (" und das Laufwerk geschlossen") - - THEN alles okay := TRUE - ELSE alles okay := FALSE; - warnung - FI. - warnung: - line (3); - out (" FEHLER : Diskettenzugriff nicht gesichert!"7""); - line (2); - out (" Bitte Fehler beseitigen und Programm neu starten!"); - line (5) -END PROC frage nach diskette; - - |