Teil II
Transcription
Teil II
FACHHOCHSCHULE HANNOVER FACHBEREICH ELEKTROTECHNIK FACHRICHTUNG DATENVERARBEITUNG INFORMATIONSELEKTRONIK Diplomarbeit Online-Überwachung des Vakuumsystems am Gavitationswellen-Interferometer GEO600 (Teil 2: Programmdokumentation) Diplomand: Sven Hrabak, 0814254 Zeitraum: 15.01.1997 - 15.04.1997 Firma: UNI Hannover, Institut für Atom- und Molekülphysik Erstprüfer: Prof. Heine, FH Hannover Zweitprüfer: Prof. Dr. Danzmann, UNI Hannover Programmdokumentation Inhalt: PROGRAMM: ACTIVATE CONFIGURATION.VI................................................................5 PROGRAMM: ACTIVATE LEAK CHECK.VI.......................................................................7 PROGRAMM: ACTIVATE SECTIONS.VI.............................................................................9 PROGRAMM: ALERT-PASSIVE.VI.....................................................................................14 PROGRAMM: ALERT.VI ......................................................................................................16 PROGRAMM: ASCII PROTOCOL (SPECTRA) TO NUMBERS.VI...................................19 PROGRAMM: ASK FOR BAR CHART.VI...........................................................................24 PROGRAMM: ASK FOR LEAK CHECK.VI ........................................................................25 PROGRAMM: ASK FOR SINGLE PEAK.VI........................................................................26 PROGRAMM: AUTOSCAN DATA- STRING TO DATA.VI..............................................27 PROGRAMM: AUTOSCAN MASSES.VI.............................................................................29 PROGRAMM: BUILD AUTOSCAN ARRAY.VI .................................................................35 PROGRAMM: CHANGE ALL PORTS TO ACTIVE PORTS.VI.........................................37 PROGRAMM: COMMAND; AXX.VI...................................................................................38 PROGRAMM: COMMAND; GFS.VI ....................................................................................40 PROGRAMM: COMMAND; GPA.VI....................................................................................42 PROGRAMM: COMMAND; GPS.VI ....................................................................................43 PROGRAMM: COMMAND; LXX.VI....................................................................................44 PROGRAMM: COMMAND; SFS.VI.....................................................................................45 PROGRAMM: COMMAND; SST.VI.....................................................................................46 PROGRAMM: COMMUNICATION (C - C) RECEIVE.VI..................................................47 PROGRAMM: COMMUNICATION (C - C) SEND.VI.........................................................50 PROGRAMM: COMMUNICATION.VI ................................................................................54 Inhaltsverzeichnis - Seite 1 PROGRAMM: CONVERT CONFIG-DATA <-> FILE.VI....................................................58 PROGRAMM: CONVERT SECTION NUMBER.VI ............................................................60 PROGRAMM: CONVERT TIME.VI......................................................................................61 PROGRAMM: FORMAT AUTOSCAN DATA.VI................................................................62 PROGRAMM: FORMAT CHANGES-DATA-ARRAY.VI...................................................65 PROGRAMM: FRONT PANEL.VI ........................................................................................67 PROGRAMM: FULL SCAN- COMMAND TO STRING.VI................................................73 PROGRAMM: FULL SCAN- DATA TO STRING.VI...........................................................74 PROGRAMM: FULL SCAN- STRING TO COMMAND.VI................................................75 PROGRAMM: FULL SCAN- STRING TO DATA.VI...........................................................76 PROGRAMM: GET ALL QUADRUPOLES (PORT_ALL).VI.............................................77 PROGRAMM: GET DATA FROM ALL PRESSURE SENSORS.VI...................................81 PROGRAMM: GET INFO ABOUT QUADRUPOLE.VI ......................................................83 PROGRAMM: GET LEAK CHECK.VI .................................................................................84 PROGRAMM: GET MASSES FOR AUTOSCAN MASSES.VI...........................................90 PROGRAMM: GET NAMES OF SECTION COMPUTERS.VI ...........................................91 PROGRAMM: GET NEXT COM-ADRESS.VI.....................................................................92 PROGRAMM: GET POSITION NUMBERS IN OTHER SECTIONS.VI ............................93 PROGRAMM: GET TUNNEL-CHECK.VI............................................................................96 PROGRAMM: INTERPOLATIONPOLYNOM OF NEWTON.VI........................................99 PROGRAMM: LEAKCHECK CHECKCALL.VI................................................................103 PROGRAMM: LINEAR INTERPOLATION.VI..................................................................104 PROGRAMM: MAKE AUTOSCAN DATA SHOWABLE.VI ...........................................105 DATEI: NAMES.SYS ............................................................................................................109 PROGRAMM: NO EOC ERROR.VI....................................................................................110 PROGRAMM: NO TIME OUT ERROR.VI.........................................................................111 PROGRAMM: NUMBER OF CHAR IN A STRING-ARRAY.VI......................................112 Inhaltsverzeichnis - Seite 2 PROGRAMM: NUMBER OF SEARCH NUMBER IN AN ARRAY.VI............................113 PROGRAMM: PARSER.VI..................................................................................................115 PROGRAMM: PORT TO COM.VI ......................................................................................118 DATEI: PORT.ALL................................................................................................................119 DATEI: PORT.SYS ................................................................................................................121 PROGRAMM: POWER - SWITCH FOR AUTOSCAN MASSES.VI ................................123 PROGRAMM: READ FULL SCAN - GET INFO.VI ..........................................................125 PROGRAMM: READ FULL SCAN.VI................................................................................127 PROGRAMM: READ TPG300 (PRESSURE).VI ................................................................133 PROGRAMM: REPLACE NEW SCAN DATA.VI .............................................................135 PROGRAMM: SAVE PRESSURE.VI..................................................................................137 PROGRAMM: SCALE SHOW AUTOSCAN MASSES.VI ................................................138 DATEI: SCAN.INI..................................................................................................................143 PROGRAMM: SECTION CENTRAL-CLUSTER.VI..........................................................144 PROGRAMM: SECURITY PENNING.VI...........................................................................156 PROGRAMM: SECURITY PRESSURE.VI.........................................................................159 PROGRAMM: SELECT A LINE OR COLUMN FROM A 2D-STRING-ARRAY.VI.......162 PROGRAMM: SELECT ARRAY-LINE.VI.........................................................................163 PROGRAMM: SELECT ARRAY-ROW.VI.........................................................................164 PROGRAMM: SERIAL COMMUNICATION - SPECTRA.VI...........................................165 PROGRAMM: SERIAL COMMUNICATION - TPG300.VI...............................................167 PROGRAMM: SERIAL READ.VI .......................................................................................169 PROGRAMM: SET AUTOSCAN MASSES.VI...................................................................171 PROGRAMM: SET DISTANCES.VI...................................................................................174 PROGRAMM: SET MULTIPLIER GAIN FACTOR.VI......................................................177 PROGRAMM: SETUP.VI.....................................................................................................178 PROGRAMM: SHOW AUTOSCAN DATA II.VI...............................................................184 Inhaltsverzeichnis - Seite 3 PROGRAMM: SHOW AUTOSCAN DATA.VI ..................................................................186 PROGRAMM: SHOW FULL SCAN.VI...............................................................................190 PROGRAMM: SHOW LEAK CHECK.VI ...........................................................................197 PROGRAMM: SHOW PRESSURE TPG300- CENTRAL-CLUSTER.VI ..........................201 PROGRAMM: SHOW TUNNELTEST.VI...........................................................................206 PROGRAMM: SORT FILES.VI ...........................................................................................211 PROGRAMM: STATUS PRESSURE SENSOR.VI.............................................................213 PROGRAMM: TALK ACTIVE INTERNET.VI...................................................................215 PROGRAMM: TALK MODULE ACTIVE.VI.....................................................................216 PROGRAMM: TALK MODULE PASSIVE.VI ...................................................................217 PROGRAMM: TALK PASSIVE INTERNET.VI.................................................................219 PROGRAMM: VALUE IN SPAN.VI ...................................................................................220 PROGRAMM: WITCH INPUT IS TRUE.VI .......................................................................221 Inhaltsverzeichnis - Seite 4 Programm: Activate Configuration.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Umsetzung der „Port.all“-Datei in die „Port.sys“ in Abhängigkeit von den aktivierten Sektoren Programmbeschreibung: Die Pfade zu den Dateien „Vacuum.ini“, „State.ini“, „Port.all“ und „Port.sys“ werden definiert und die ersten drei Dateien geöffnet und deren Inhalt gelesen. Die eigene Sektionsnummer wird aus der „Vacuum.ini“ selektiert. Die Konfigurationen, die durchgeführt wurden und aus denen die Datei „Port.all“ resultierte, beziehen sich immer nur auf die Sektion, die durch den jeweiligen Rechner verwaltet wird. Es ist daher nur nötig, die Sektoren in der „Port.all“-Datei zu löschen, die deaktiviert wurden, um sie an keinen Messungen zu beteiligen. Ergebnis dieser Umsetzung ist die Datei „Port.sys“. Activate Configuration.vi - Seite 5 Eine CASE-Struktur wird geöffnet, die für jede Sektionskennziffer das Löschen übernimmt. Hier ist der Löschvorgang für das Zentralhaus dargestellt. Die Zustände der drei Sektoren, die in der Sektion Zentralhaus vorhanden sind, werden aus der Datei „State.ini“ selektiert. Es handelt sich mit der Position 1 um das Rohr 1, mit der Position 2 um das Zentralhaus selbst und mit der Position 3 um das Rohr 2. Sind die Zustände gleich eins, ist keine Veränderung der Konfiguration in diesen Bereichen erforderlich. Ist allerdings der Zustand gleich null, müssen die entsprechenden Konfigurationen aus der Datei gelöscht werden, da sie durch die Deaktivierung an keinen Messungen teilnehmen sollen. Der Löschvorgang wird durch die Funktion „Change all Ports to active Ports.vi“ übernommen. Beispiel: Löschen der Rohr 1-Sektion Die Positionen 16 und 17, sowie die Positionen null bis drei werden aus der Konfiguration gelöscht. Die Kennziffer (16, 17,...) sind der Skizze für die Konfiguration der Anschlüsse zu entnehmen (für die Sektion Zentralhaus: Section Central-Cluster.vi“). Der Löschvorgang für die anderen Sektionen ist analog zu dem oben beschrieben Verfahren. Durch den Aufbau der „State.ini“-Datei werden für die Sektion Endhaus 1 die Positionen 0 (= Sektor Endhaus 1) und 1 (= Sektor Rohr 1) benötigt und für die Sektion Endhaus 2 die Positionen 3 (= Sektor Rohr 2) und 4 (= Sektor Endhaus 2). Activate Configuration.vi - Seite 6 Programm: Activate Leak Check.vi Eingabe: Section Number Ausgabe: Configuration Out Kurzbeschreibung: Löschen aller aktivierten Konfigurationen aus der „Port.all“-Datei Programmbeschreibung: Die Pfade zu den Dateien „State.ini“ und „Port.all“ werden definiert, die Dateien geöffnet und deren Inhalt gelesen. Die Konfigurationen, die durchgeführt wurden und aus denen die Datei „Port.all“ resultierte, beziehen sich immer nur auf die Sektion, die durch den jeweiligen Rechner verwaltet wird. Es ist daher nur nötig, die Sektoren in der „Port.all“-Datei zu löschen, die aktiviert wurden, um sie an keinen Messungen zu beteiligen. Eine CASE-Struktur wird geöffnet, die für jede Sektionskennziffer, die über „Section Number“ definiert wurde, das Löschen übernimmt. Hier ist der Löschvorgang für das Zentralhaus dargestellt. Die Zustände der drei Sektoren, die in der Sektion Zentralhaus vorhanden sind, werden aus der Datei „State.ini“ selektiert. Es handelt sich mit der Position 1 um das Rohr 1, mit der Position 2 um das Zentralhaus selbst und mit der Position 3 um das Rohr 2. Activate Leak Check.vi - Seite 7 Sind die Zustände gleich null, der Sektor also deaktiviert, ist keine Veränderung der Konfiguration in diesen Bereichen erforderlich. Ist allerdings der Zustand gleich eins, müssen die entsprechenden Konfigurationen aus der Datei gelöscht werden, da sie durch die Aktivierung an keinen Messungen teilnehmen sollen. Der Löschvorgang wird durch die Funktion „Change all Ports to active Ports.vi“ übernommen. Beispiel: Löschen der Rohr 1-Sektion Die Positionen 16 und 17, sowie die Positionen null bis drei werden aus der Konfiguration gelöscht. Die Kennziffern (16, 17,...) sind der Skizze für die Konfiguration der Anschlüsse zu entnehmen (für die Sektion Zentralhaus: Section Central-Cluster.vi“. Der Löschvorgang für die anderen Sektionen ist analog zu dem oben beschrieben Verfahren. Durch den Aufbau der „State.ini“-Datei werden für die Sektion Endhaus 1 die Positionen 0 (= Sektor Endhaus 1) und 1 (= Sektor Rohr 1) benötigt und für die Sektion Endhaus 2 die Positionen 3 (= Sektor Rohr 2) und 4 (= Sektor Endhaus 2). Activate Leak Check.vi - Seite 8 Programm: Activate Sections.vi Eingabe: keine Ausgabe: keine verknüpfte Dateien: State.ini Kurzbeschreibung: Aktivieren/Deaktivieren einzelner Sektoren Bedienung: Über den „Cancel“-Button wird dieses Programm verlassen. Durch Drücken des „Done“-Buttons werden die aktuellen Einstellungen in der Datei „State.ini“ gespeichert und danach dieses Programm verlassen. Um einen Sektor zu aktivieren, klickt man mit der Maus in den gewünschten Bereich. (Hier als Beispiel: Endhouse 1) Activate Sections.vi - Seite 9 Auf dem Bildschirm erscheint der Name des Sektors, den man gewählt hat, der aktuelle Zustand (hier: deaktiviert) und zwei Buttons, mit denen man diesen Sektor in den neuen Zustand versetzen kann. Will man den alten Zustand beibehalten, klickt man auf den entsprechenden Button (hier: Deactivate). Danach verschwindet diese Anzeige wieder. Ein aktivierter Sektor kennzeichnet sich dadurch, daß er rot blinkt. Programmbeschreibung: Die Anzeige „Current state“ wird ermöglicht. Das Blinken der aktivierten Sektoren ist über fünf boolean Indicator realisiert, die über die Attribute Node auf „blinking“ geschaltet werden. Damit diese Indikatoren beim Klicken im Bild keinen Einfluß haben, werden sie auf „disabled“ geschaltet. Außer zu dieser Anzeige, haben sie keine Bedeutung. Die beiden Buttons „Cancel“ und „Done“ werden mit Hilfe der „local variable“ auf den definierten Zustand false gesetzt. Activate Sections.vi - Seite 10 Die Einstellungen, die getroffen wurden, werden in der Datei „State.ini“ gespeichert. Diese Datei wird geöffnet und die erste Zeile, in ihr sind die einzelnen Zustände gespeichert, als Anfangsdaten entnommen. Weiterhin wird der Rest der Datei extrahiert, um später diese Daten mit den neuen Zuständen zusammenzufügen. An der Logikkonstante „Test“ kann auf die Testversion umgeschaltet werden. Es wird nur ein Zustandsarray (Nullarray) erzeugt, um die Funktion dieses Programms zu testen. Das Zustandsarray (aus der Datei oder aus dem Nullarray) wird auf das Shift-Register einer WHILE-Schleife geführt. Das Hauptprogramm ist in einer WHILE-Schleife untergebracht. Diese wird so lange durchlaufen, bis der „Done“- oder „Cancel“Button zum Abbruch gedrückt wird. Bei jedem neuen Durchlauf dieser WHILESchleife werden die Schalter zur Aktivierung/ De-Aktivierung auf false gesetzt, damit es zu keinen Überschneidungen kommt. Ein weiteres Shift-Register als „Merker“ wird erzeugt. Das Anklicken eines Sektors ist, ähnlich wie bei den Blinkern zur Kennzeichnung der aktiven Sektoren, durch ein boolean Control realisiert. Die Farben wurden transparent gewählt, so daß die Schalter unsichtbar über dem Bild liegen. Es sind fünf Schalter vorhanden, einer für jeden Sektor. Die einzelnen Sektoren sind durchnumeriert. Je nachdem, welcher Schalter betätigt wurde, wird der Merker auf den entsprechenden Wert gesetzt. Activate Sections.vi - Seite 11 Anfang (ganz links) und Ende (ganz rechts) bilden die hier nicht abgebildeten Shift-Register. In den ersten vier CASE-Anweisungen Sind die Schalter für die Sektoren (v. l. n. r.) Endhouse 1, Tube 1, Central-Cluster und Tube 2 dargestellt. Wird der jeweilige Schalter betätigt, wird der Merker auf den entsprechenden Wert gesetzt. Die CASE-Anweisung rechts (Endhouse 2) zeigt den false-Fall, wenn der Schalter nicht betätigt wurde: Der vorherige Wert wird beibehalten. Auf der rechten Seite ist die Signalleitung unterbrochen. An dieser Stelle ist eine Funktion angebunden, die nach der Bearbeitung eines Sektors, also der Veränderung dessen Zustandes, den Merker wieder zurücksetzt (Beschreibung siehe unten). Ausgangszustand des Merkers ist null. Null bedeutet, daß kein Schalter betätigt wurde, also auch kein Sektor gewählt wurde, also keine Veränderung erwünscht ist. Die Farbe der Anzeigen werden auf die Hintergrundfarbe eingestellt und damit unsichtbar gemacht. Die Schalter zur Aktivierung/ Deaktivierung werden unsichtbar gemacht. Bei allen anderen Zuständen (1-5), wenn also ein Schalter betätigt wurde, werden alle Anzeigen sichtbar gemacht. Das zu bearbeitende Element wird aus dem Shift-Register entnommen. Die Position muß noch um eins dekrementiert werden, da ein Array immer an der Position null beginnt. Je nachdem, welcher Wert im Shift-Register zwischengespeichert war, erfolgt über eine CASEStruktur die Anzeige des aktuellen Zustandes. Ist der Merker größer als null, wird in „true“ einer weiteren CASEAnweisung eine WHILE-Schleife aktiviert, in der die beiden Schalter zur Aktivierung, bzw. Deaktivierung abgefragt werden. Diese Schleife wird so lange durchlaufen, bis einer der beiden Schalter angeklickt wurde. Bei Beendigung der Schleife wird der Wert des Schalters „activate“ in eine Zahl umgewandelt. Activate Sections.vi - Seite 12 Diese Schleife ist ein typische „Hänger“: Es passiert nichts, bevor der Bediener eine Taste drückt. Damit der Rest des Programms ungehindert fortfahren kann, ist eine Warteschleife von 100 ms eingefügt. Der Wert, der aus der Taste „activate“ resultiert, wird in das Array vom Ausgangszustand eingesetzt. Wird der Button „Cancel“ gedrückt, wird die weitere Bearbeitung abgebrochen und das Programm beendet. Durch Drücken des „Done“Buttons wird das Programm ebenfalls beendet, allerdings werden die neuen Einstellungen vorher in der Datei „State.ini“ gespeichert. Hierzu müssen vor das neue Zustandsarray und der vorher aus der gesamten Datei getrennte Rest wieder zusammengefügt werden. Die alte Datei wird überschrieben. Die Veränderung einer Zustandsdatei soll auch in anderen Sektionen zur Verfügung stehen. Das Zustandsarray wird in einen String umgewandelt und mit dem Kommando „sst“ (send state) zu allen Sektionsrechnern geschickt. Somit ist es möglich, von jedem Rechner aus das gesamte System zu verwalten. Activate Sections.vi - Seite 13 Programm: Alert-Passive.vi Eingabe: PAx Caller Ausgabe: - Kurzbeschreibung: Warnung vor überhöhtem Druck in einer anderen Sektion Bedienung: Wird in einer Sektion ein zu hoher Druck (Schwellwert) gemessen, erscheint auf dem Bildschirm aller anderen Sektionen folgendes Dialogfenster: In dem Fenster wird außerdem die Sektion, in der dieser Fehler auftrat, angezeigt. Durch „noticed...“ wird dieser Fehler akzeptiert, aber es werden keine unmittelbaren Veränderungen vorgenommen. „Deactivate Section“ setzt die Messungen der gesamten Sektion in der der Fehler auftrat außer kraft. Programmbeschreibung: Aus der übermittelten Sektionskennziffer („Caller“) wird der Name der entsprechenden Sektion (hier: Central-Cluster) mit Hilfe einer CASE-Struktur gebildet. Der entsprechende Warnhinweis wird zusammen mit der Sektionsmitteilung über einen Indikator ausgegeben (siehe oben). Alert - Passive.vi - Seite 14 Dieser Alarm soll 15s angezeigt und danach abgebrochen werden. Hierzu wird die Uhrzeit bestimmt. In der WHILE-Schleife wird ständig neu die Uhrzeit gemessen. Ist die Differenz größer als 15 s erfolgt der Abbruch der WHILE-Schleife. Abbruchkriterium ist ebenfalls das Drücken einer der beiden Schalter. Wurde der Button „Deactivate Section“ gedrückt, wird dem Caller ein Acknowledgement („A“) mit Hilfe der „Communication (C - C) Send.vi“-Anweisung zurückgeschickt. Alert - Passive.vi - Seite 15 Programm: Alert.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Alarm bei überhöhtem Druck Bedienung: Wird in einer Sektion ein zu hoher Druck (Schwellwert) gemessen, erscheint auf dem Bildschirm dieser Sektion folgendes Dialogfenster: In dem Fenster wird außerdem die Sektion, in der dieser Fehler auftrat, angezeigt. Durch „noticed...“ wird dieser Fehler akzeptiert, aber es werden keine unmittelbaren Veränderungen vorgenommen. „Deactivate Section“ setzt die Messungen der gesamten Sektion außer Kraft. Programmbeschreibung: Die Pfade zu den Dateien „State.ini“ und „Vacuum.ini“ werden definiert und die Daten aus diesen Dateien gelesen. Das Zustandsarray wird aus der „State.ini“ selektiert und mit Hilfe von „Vacuum.ini“ die Sektionskennziffer des aufrufenden Rechners bestimmt. Alert.vi - Seite 16 Die Sektionskennziffer dient als Eingabe in eine CASEAnweisung. Dort wird die Ziffer in den Namen der jeweiligen Sektion umgewandelt (hier: Central-Cluster). Der entsprechende Warnhinweis wird zusammen mit der Sektionsmitteilung über einen Indikator ausgegeben (siehe oben). Sofern der Rechner über einen Lautsprecher verfügt, wird ein Signalton ausgegeben. Der Ton ist eine halbe Sekunde lang mit einer Frequenz von 860 Hz. Die Schalter „noticed...“ und „Deaktivate Section“ werden auf false gesetzt. Die Nachricht über das Auftreten einer Drucküberschreitung wird zu den anderen Sektionsrechnern mit der Anweisung „PAx“ geschickt. „x“ enthält die Sektionskennziffer, in der der Fehler auftrat. Der Zielrechner wird durch den Index der FOR-Schleife gekennzeichnet. Stimmt der Index mit der eigenen Sektionskennziffer überein, wird keine Nachricht gesendet. Dieser Alarm soll 30 s angezeigt und danach abgebrochen werden. Hierzu wird die Uhrzeit bestimmt. In der WHILE-Schleife wird ständig neu die Uhrzeit gemessen. Ist die Differenz größer als 30s erfolgt der Abbruch der WHILE-Schleife. Abbruchkriterium ist ebenfalls das Drücken einer der beiden Schalter. Wurde in der „Communication (C - C) Send.vi“-Funktion keine Antwort von einem der Zielrechner erhalten, wird hier durch die „Communication (C - C) Receive.vi“-Funktion auf eine Antwort gewartet. Alert.vi - Seite 17 Ist diese Antwort gleich „A“, hat dies denselben Effekt, wie das Drücken des „Deaktivate Section“-Buttons. Jede Antwort führt zum Abbruch der WHILE-Schleife. Aus der „State.ini“-Datei werden alle weiteren Informationen (außer dem Zustandsarray) ausgeschnitten. Das Anklicken des „Deaktivate Section“-Buttons hat zur Folge, daß alle Sektoren in der betreffenden Sektion deaktiviert werden. Hierzu werden die entsprechenden Zustände im Zustandsarray auf Null gesetzt (Bild: Sektion Zentralhaus). Für das Zentralhaus sind das die Sektoren 1 (= Rohr 1), 2 (= Zentralhaus) und 3 (= Rohr 2). In der Sektion Endhaus 1 werden die Sektoren 0 (= Endhaus 1) und 1 (= Rohr 1) gelöscht. In der Sektion Endhaus 2 sind das die Sektoren 3 (= Rohr 2) und 4 (= Endhaus 2). Das geänderte Array wird wieder mit den anderen Daten zusammengefügt und das Ergebnis als neue „State.ini“ gespeichert. Alert.vi - Seite 18 Programm: ASCII protocol (Spectra) to numbers.vi Eingabe: ASCII protocol Spectra (=false)/ TPG300 Ausgabe: Result of Scan Kurzbeschreibung: Umwandlung der ASCII-Protokolle (amerikanische Schreibweise) in ein Array mit Zahlen Programmbeschreibung: Die Daten werden sowohl von den Massenspektrometern, als auch von den TPG300 als ASCII-Zeichen, dem sogenannten ASCIIProtokoll gesendet. Diese Daten müssen zunächst aufgearbeitet werden. Über den Eingang „Spectra (=false)/TPG300“ wird das jeweilige Meßgerät, von dem die Daten stammen, definiert. Eingestellt ist false für ein Massenspektrometer. Das ASCII-Protokoll wird auf ein „A“, das Acknowledgement, das von den Massenspektrometern zurückgesendet wird, untersucht. Es kann sich nur am Anfang des Strings befinden. Ist das Ergebnis der Untersuchung gleich -1, befindet sich kein „A“ im String. Dieser wird ohne Änderung weitergegeben. Ist das Ergebnis ungleich -1, wird das erste Zeichen im String gelöscht. Das „A“ ist somit verschwunden. Dem String wird ein <CR> beigefügt. Dieses erleichtert die Auswertung (siehe unten). Erste WHILE-Schleife (Searching for , and replace it by <CR>) Die Werte sind in den Protokollen durch Kommata getrennt. Für eine eindeutige Trennung (im Deutschen werden die Kommas als Dezimalpunkte verwendet → 2,5) werden diese durch <CR> (= Carriage Return) ersetzt. ASCII - protocol (Spectra) -> numbers.vi - Seite 19 Der String wird in einem Shift-Register in der WHILE-Schleife zwischengespeichert. Dieser String (a) wird auf Kommata untersucht. Die Schleife wird so lange durchlaufen, bis das Ergebnis der Untersuchung gleich -1 ist, bis sich also kein Komma mehr im String befindet. Dies wird über die Funktion „Split String“ erreicht. Vor der Stelle, wo das Komma gefunden wurde wird durch diese Funktion der String (a) getrennt. Ergebnis sind zwei Strings (b, c) Erstes Zeichen des resultierenden zweiten Strings (c) ist das Komma. Die Länge dieses Strings (c) wird bestimmt, dekrementiert und durch die Funktion „String Subset“ ein neuer String (d) gebildet, bei dem das erste Zeichen von (c) (das Komma) nicht mehr vorhanden ist. Die Strings (b) und (d) werden wieder zusammengesetzt. Dazwischen wird (an der Stelle, wo vorher das Komma war, ein <CR> eingesetzt. Zweite WHILE-Schleife (Searching for . and replace it by ,) In der amerikanischen Schreibweise wird bei Dezimalzahlen ein Punkt (.) bei uns ein Komma (,) zur Trennung der Dezimalstellen benutzt (amerikanisch: 12.45; deutsch: 12,45). Der String wird wieder in einem Shift-Register einer WHILESchleife gespeichert. Die Schleife wird so lange durchlaufen, bis durch die „Split String“-Funktion kein Punkt mehr gefunden wird (=-1). Der String wird vor der Position des Punktes gesplittet. Der zweite entstehende String enthält noch den Punkt. Es wird wie oben weiterverfahren. Statt eines <CR> wird jedoch das in der deutschen Schreibweise verwendete Komma eingesetzt. Das Zwischenergebnis kann auf dem Bildschirm angesehen werden (muß aber nicht). ASCII - protocol (Spectra) -> numbers.vi - Seite 20 Fall 1: TPG300 wurde gewählt (=true) Der String enthält nur zwei Zahlen. Mit der Funktion „String Subset“ wird das erste Zeichen des Strings (<CR>) gelöscht. Die erste „Format & Strip“-Anweisung wandelt die erste Zahl (es handelt sich um das vom TPG300 ausgegebene Statuswort) in eine Dezimalzahl um. Der Rest des Strings (ab dem zweiten <CR>) wird nicht bearbeitet. Die zweite „Format & Strip“-Anweisung wandelt die zweite Zahl (den eigentlichen Meßwert) in eine Zahl in Exponentialschreibweise mit einer Nachkommastelle um. Die beiden Werte werden in einem Array zusammengefaßt und über „Result of Scan“ ausgegeben. ASCII - protocol (Spectra) -> numbers.vi - Seite 21 Fall 2: Spectra wurde gewählt (= false) Die letzten beiden Zeichen des Strings werden gelöscht. (Anmerkung: Es würden sonst, keiner weiß warum, zwei Nullen an das sonst korrekte Ergebnis angehängt). Der resultierende String wird im Shift-Register einer WHILESchleife zwischengespeichert. Durch die Funktion „Split String“ wird festgestellt, ob noch ein <CR> in dem String vorhanden ist. Die Schleife wird so lange durchlaufen, bis kein <CR> mehr vorhanden ist. Die Länge des Strings wird festgestellt, dekrementiert und über „String Subset“ das <CR>, welches sich immer an erster Stelle befindet, gelöscht. Folge: Der String enthält nun nur noch n-1 Zeichen. Über „Split String“ wird das erste Zeichen vom String getrennt. Handelt es sich hierbei um ein „>“, ist dies ein Indikator dafür, daß dieser Wert nicht korrekt gemessen wurde. Wird der Meßbereich zu klein gewählt, gibt das Massenspektrometer eine Zeichenfolge aus, die den overflow kennzeichnet (>.>eEE = sieben Zeichen). Wird ein „>“ erkannt, werden in der CASE-Anweisung gleich true diese sieben Zeichen gelöscht und als gemessener Wert -1 ausgegeben. Dies kennzeichnet einen noch fehlenden Meßwert (→ siehe Read full span). ASCII - protocol (Spectra) -> numbers.vi - Seite 22 Wurde kein overflow erkannt, wird aus dem String eine Zahl in Exponentialschreibweise mit einer Nachkommastelle durch die „Format & Strip“-Anweisung gebildet. Der restliche String (an erster Stelle ist nun wieder ein <CR> vorhanden) wird zum nächsten Durchlauf an die WHILE-Schleife weitergegeben. In der WHILE-Schleife wurde „enable indexing“ gewählt, es entsteht ein Array aus allen umgewandelten Zahlen. Das letzte Element dieses Arrays wird gelöscht. Es enthält als letztes Element den Wert Null, der aber nicht durch das ASCII-Protokoll definiert wurde, sondern aus den vorangegangenen Verfahrensweisen entsteht. ASCII - protocol (Spectra) -> numbers.vi - Seite 23 Programm: Ask for Bar Chart.vi Eingabe: Multiplier Range (Gain) Accuracy First Mass Last Mass Port Number Ausgabe: Answer Kurzbeschreibung: Aktivierung einer Bar Chart Messung in einem Massenspektrometer Programmbeschreibung: Über die Funktion „Serial Communication Spectra“ wird mit der Anweisung „F1,1“ das Filament 1 des an dem gewählten Port angeschlossenen Massenspektrometers eingeschaltet. Die Anweisung zur Durchführung eines Bar Charts in einem Massenspektrometer hat folgendes Aussehen: M [f1],[f2],[f3],[f4],[f5],[f6],[f7],[f8] f1 = 2 f2 = 0,1 f3 = 0,1 Mode Bar Chart Multiplier off/on Total Pressure off/on (Setting: 0, der Totaldruck wird aus der Summe der Partialdrücke gebildet) f4 = 0-5 Accuracy/Speed (Default: 5) f5 = 1-200 First Mass (Default: 1) f6 = 1-200 Last Mass (Default: 50) f7 = 5-13 Range (Gain) (Default: 7) f8 = 0,1 Auto Range off/on (Setting: 0, die Dekade wird durch f7 festgelegt) War das Einschalten erfolgreich, d.h. wurde ein Command Acknowledgement (= „A“) vom Massenspektrometer zurückgeschickt, so werden die Eingabeparameter in einen ASCII-String mit oben beschriebenen Format umgewandelt, der dem jeweiligen Massenspektrometer geschickt wird. Die Antwort (Command Acknowledgement) wird über „Answer“ ausgegeben. Ask for Bar Chart.vi - Seite 24 Programm: Ask for Leak Check.vi Eingabe: Multiplier Range (Gain) Response (Speed) Mass Port Number Mass Tune Ausgabe: Answer Kurzbeschreibung: Aktivierung einer Leak Check Messung in einem Massenspektrometer Programmbeschreibung: Über die Funktion „Serial Communication Spectra“ wird mit der Anweisung „F1,1“ das Filament 1 des an dem gewählten Port angeschlossenen Massenspektrometers eingeschaltet. Die Anweisung zur Durchführung eines Leak Checks in einem Massenspektrometer hat folgendes Aussehen: M [f1],[f2],[f3],[f4],[f5],[f6],[f7],[f8],[f9],[f10] f1 = 1 f2 = 0,1 f3 = 0-5 f4 = 1-200 f5 = 0-31 f6 = 5-13 f7 = 0,1 f8 = 0-99 f9 = 0-99 f10= 0,1 Mode Leak Check Multiplier off/on (Default: 0) Response (Speed) (Default: 5), Anm.: analog zu Accuracy Probe Gas (Default: 4= He), Anm.: Analog zu Mass Mass Tune (Default: 16= 0 offset) Range (Gain) (Default: 7) Auto Range off/on (Setting: 0, Range wird durch f6 festgelegt) High Alarm off/on (Default: 0, Alarm wird softwaretechnisch realisiert) Low Alarm off/on (Default: 0, siehe f8) Audio off/on (Default: 0) War das Einschalten erfolgreich, d.h. wurde ein Command Acknowledgement (= „A“) vom Massenspektrometer zurückgeschickt, so werden die Eingabeparameter in einen ASCII-String mit oben beschriebenen Format umgewandelt, der dem jeweiligen Massenspektrometer geschickt wird. Die Antwort (Command Acknowledgement) wird über „Answer“ ausgegeben. Ask for Leak Check.vi - Seite 25 Programm: Ask for Single Peak.vi Eingabe: Multiplier Range (Gain) Accuracy Mass Port Number Ausgabe: Answer Kurzbeschreibung: Aktivierung einer Single Peak Messung in einem Massenspektrometer Programmbeschreibung: Über die Funktion „Serial Communication Spectra“ wird mit der Anweisung „F1,1“ das Filament 1 des an dem gewählten Port angeschlossenen Massenspektrometers eingeschaltet. Die Anweisung zur Durchführung eines Leak Checks in einem Massenspektrometer hat folgendes Aussehen: M [f1],[f2],[f3],[f4],[f5] f1 = 5 f2 = 0,1 f3 = 0-5 f4 = 1-200 f5 = 5-13 Mode Single Peak Multiplier off/on (Default: 0) Accuracy/Speed (Default: 5) Mass (Default: 1) Gain (Default: 7) War das Einschalten erfolgreich, d.h. wurde ein Command Acknowledgement (= „A“) vom Massenspektrometer zurückgeschickt, so werden die Eingabeparameter in einen ASCII-String mit oben beschriebenen Format umgewandelt, der dem jeweiligen Massenspektrometer geschickt wird. Die Antwort (Command Acknowledgement) wird über „Answer“ ausgegeben. Ask for Single Peak.vi - Seite 26 Programm: AutoScan Data- String to data.vi Eingabe: Input String Ausgabe: From to Y-Scale X-Scale X-Scale Names Plot Names Data Resolution Actual time Changes Values Kurzbeschreibung: Konvertierung eines gesendeten Strings von einem fremden Rechner in Anzeige-Parameter Von jedem Rechner aus können die Daten, die mit dem AutoScan gesammelt wurden abgerufen werden. Die einzelnen Daten sind bezogen auf die jeweilige Sektion. Dieses Programm konvertiert die Antwort auf eine Anfrage bei einem anderen Rechner nach diesen AutoScan-Daten. Programmbeschreibung: Die einzelnen Daten sind durch Tabs getrennt. Die Funktion „Split String“ sucht nach dem ersten Tabulator. Der String davor enthält die Information für die Anzeige „from to“, also in welchem Zeitraum die Parameter angezeigt werden. Mit der zweiten „Split String“-Anweisung (im Bild unten rechts) wird das erste Zeichen, der Tabulator, gelöscht und der verbleibende Rest des String der weiteren Decodierung zugänglich gemacht. Die Information für Y-Scale besteht aus zwei Ziffern, dem Minimum und dem Maximum für die Anzeige. Aus diesem Grund wurde eine FORSchleife konstruiert, die als Ergebnis durch „enable indexing“ ein Array bildet. Die Funktion des Tabulators wurde bereits oben beschrieben. Der selektierte String wird in eine Zahl in Exponentialform umgewandelt. AutoScan data- String to Data.vi - Seite 27 Der String wurde auf ein Shift-Register geführt. Dadurch ist der für zwei Durchläufe in der FOR-Schleife vorhanden und kann jeweils um die Tabulatoren gekürzt werden. Der Rest der Umwandlung erfolgt analog zu den oben beschriebenen Verfahren. Besonderheiten: Beispielsweise bei der Anzahl der Namen der einzelnen Plots, also der Anzahl der überwachten Massen, ist diese keine konstante Größe. Es können zwar, laut Definition, maximal sieben Massen überwacht werden, allerdings muß dieses Kontingent nicht vollständig ausgeschöpft sein. Wurden beispielsweise nur fünf Massen definiert, wird vor dem Senden der Namen die Anzahl (fünf) geschickt. Diese Zahl bestimmt die Anzahl der Durchläufe der FOR-Schleife. AutoScan data- String to Data.vi - Seite 28 Programm: AutoScan Masses.vi Eingabe: Accuracy State.ini Path State.ini Ausgabe: - Kurzbeschreibung: Ausführung eines AutoScan Programmbeschreibung: Der Pfad zu den Statistikdateien wird definiert. Weitere Definitionen sind die Pfade für die „Scan.ini“, die „Port.sys“ und die „Vacuum.ini“. Die Datei „Scan.ini“ wird geöffnet und ihr Inhalt gelesen. Die letzte Einstellung wird mit der Funktion „Select Array-line.vi“ gewählt. Ab der Position 1 sind in diesem Array die routinemäßig abzufragenden Massen definiert. Es handelt sich um maximal sieben Massen. Zu diesem Zweck wird eine FOR-Schleife geöffnet. Aus den Positionen neun und zehn lassen sich die zu betrachtenden Druckbereiche ablesen. Deren Differenz ergibt die Anzahl der zu messenden Dekaden. Hieraus wird ebenfalls eine FOR-Schleife gebildet. Die Datei „Port.sys“ wird geöffnet und deren Inhalt gelesen. Die Größe des gelesenen 2D-Arrays wird bestimmt. In X-Richtung befindet sich die Anzahl der vorhandenen Konfigurationen. Alle Massenspektrometer sollen aus der Konfigurationen selektiert werden. Hierzu wird eine FOR-Schleife geöffnet. AutoScan Masses.vi - Seite 29 Ein Array wird auf ein ShiftRegister geführt, das die Konfigurationen aufnehmen soll. Anhand der Hardwarekennziffer (Zeile zwei in den Konfigurationen) werden die Massenspektrometer herausgefunden. Handelt es sich um die Kennziffer eins oder zwei (Massenspektrometer ohne/ mit Multiplier), werden mittels des Programms „Get Info about Quadrupole.vi“ alle nötigen Informationen zusammengestellt und das resultierende Array dem aus dem Shift-Register angehängt. Handelt es sich bei der indexierten Position um kein Massenspektrometer, bleibt das Zielarray unverändert. Die Größe des entstandenen Arrays wird geprüft. Eine Konfiguration enthält sechs Bestandteile. Die Größe des Arrays wird also durch sechs geteilt. Dieses Ergebnis wird als Eingang für eine weitere FOR-Schleife genutzt. Ein weiteres Array zur Aufnahme der Meßergebnisse wird erzeugt. Es sind maximal sieben Massen an der berechneten Anzahl von Massenspektrometer zu überprüfen. Das Array wird mit -1, dem Indikator für eine Fehlmessung, initialisiert. Erste FOR-Schleife: Die Massen Mittels des Index wird eine Masse aus dem Array der zu überprüfenden Massen selektiert. Ist diese Masse gleich null, wird keine Messung durchgeführt. Ist die selektierte Masse ungleich null handelt es sich um einen gültigen Wert, der gemessen werden muß. Zweite FOR-Schleife: Der Druckbereich Der Index dieser FOR-Schleife wird benutzt, um die zu messende Druckdekade festzulegen. AutoScan Masses.vi - Seite 30 Dritte FOR-Schleife: Senden der Meßanweisung In dieser Schleife erfolgt die Sicherheitsüberprüfung, ob alle Druckwerte in Ordnung sind. Hier werden die vorhandenen Multiplier eingeschaltet und an die Massenspektrometer die Aufforderung zur Messung des Partialdrucks einer Masse gesendet. Diese Schleife wird so oft durchlaufen, wie es Konfigurationen gibt. Aus der Konfiguration werden nacheinander die Parameter selektiert. An Position zwei und vier befinden sich die Port-Nummern der abhängigen Drucksensoren und an Position drei und fünf die dazugehörigen Anschlüsse an den TPG300. Diese Parameter werden jeweils einer „Read TPG300 (pressure).vi“Funktion zugeführt und damit der Druck gemessen. Eine Messung mit dem Massenspektrometer wird nur dann ausgeführt, wenn beide gemessenen Drücke unterhalb des Drucklimits (s.u.) liegen. Auf Position null der jeweiligen Konfiguration befindet sich die Port-Nummer des Massenspektrometers. Auf Position eins ist die Information über einen vorhandenen Multiplier gespeichert. Ist dieser Wert gleich null, also kein Multiplier vorhanden, darf der maximale Druck zum Einschalten des Massenspektrometers zwei Zehnerpotenzen größer sein als bei einem Massenspektrometer mit Multiplier (Position eins gleich eins). AutoScan Masses.vi - Seite 31 Ist ein Massenspektrometer vorhanden, wird der „Multiplier Gain Factor“, die Verstärkung des Multipliers gesetzt. Dies geschieht mit der Funktion „Set Multiplier Gain Factor.vi“. Das Drucklimit ist definiert für ein Massenspektrometer mit Multiplier mit 5,0E-6 mbar. Es wird überprüft, ob sich an der Position im Array mit den Meßdaten der gesuchte Wert bereits befindet, ob also eine Messung bereits erfolgreich war und der Wert ungleich -1 ist. Ist noch eine -1 vorhanden und liegen die gemessenen Drücke unter dem Schwellwert, kann die Anweisung zur Messung an das Massenspektrometer verschickt werden. Der zu messende Druckbereich wird gebildet aus dem kleinsten Druck (= die größte Ziffer) minus dem Index der FOR-Schleife. Alle nötigen Daten werden an die Funktion „Ask for Single Peak.vi“ weitergegeben. Ergebnis dieses Programms ist ein Command Acknowledgement. Der Ausgang der FOR-Schleife ist auf „enable indexing“ geschaltet. Es werden erst alle Massenspektrometer, die in der Konfiguration vorhanden sind, angesprochen und deren Command Acknowledgement abgewartet. Erst danach wird die FOR-Schleife verlassen. Sollte eine der Bedingungen für diese Übermittlung nicht erfüllt worden sein, wird ein „N“ ausgegeben. Dies bedeutet: not acknowledged. Dieses Zeichen wird auch vom Massenspektrometer zurückgemeldet, wenn aus irgendwelchen Gründen ein Fehler aufgetreten ist und die Messung nicht begonnen werden konnte. Das Array mit den Command Acknowledgement wird in der folgenden WHILE-Schleife benutzt. Innerhalb der WHILE-Schleife wird eine FORSchleife geöffnet, die so oft durchlaufen wird, wie Konfigurationen von Massenspektrometer vorhanden sind. Die Port-Nummer jeder einzelnen Konfiguration wird selektiert. AutoScan Masses.vi - Seite 32 An jedes dieser Massenspektrometer wird das Kommando „o“ geschickt und damit gefragt, ob die Daten bereits zur Verfügung stehen. Ergebnis einer Nachfrage ist das Command Acknowledgement zusammen mit einer eins oder einer null. Demnach bedeutet „A0“, daß die Daten noch nicht verfügbar sind und „A1“, daß die Messung beendet wurde und die Daten gelesen werden können. Der Ausgang der FOR-Schleife wurde mit „enable indexing“ deklariert, so daß aus den Antworten der Massenspektrometer ein Array entsteht. In der WHILE-Schleife wird mit der „Number of char in a String-Array.vi“ zum einen die Anzahl der „A1“ in den Antworten der Massenspektrometer festgestellt, zum anderen auch die Anzahl der Command Acknowledgements die aus der Übermittlung der Anweisung zum Messen des Partialdrucks entstanden waren. Diese WHILE-Schleife wird erst dann beendet, wenn die Anzahl der beendeten Messung mindestens ebenso groß ist, wie die Anzahl der Anfragen danach. Da diese Messung unter Umständen einige Zeit in Anspruch nehmen kann, wurde eine Wartefunktion eingeführt, um Paralleloperationen zu ermöglichen. Nach Beendigung dieser Schleife können alle Meßwerte abgefragt werden. Hierzu wird eine FOR-Schleife geöffnet, die so oft durchlaufen wird, wie es Konfigurationen von Massenspektrometern gibt. AutoScan Masses.vi - Seite 33 Das Array mit den vorhandenen oder noch nicht vorhandenen Meßergebnissen wird auf ein Shift-Register geführt. Mit der „Array Subset“-Anweisung wird das bearbeitete Element selektiert. Zum Lesen des vorhandenen Meßwertes und der evtl. nötigen Korrektur des bisherigen Meßergebnisses wird die Funktion „Replace new Scan Data.vi“ benutzt. Ein- und Ausgang dieses Programms sind allerdings Arrays, weshalb das betrachtete Element noch in ein Array umgeformt und am Ende wieder in ein Element umgewandelt werden muß. Dieser Wert wird in das alte Array eingesetzt. Der nötige Port wird aus dem Array der Konfiguration über den Index der FORSchleife gewonnen. Mit diesem Wert wird der Multiplier und das Filament des betreffenden Massenspektrometers ausgeschaltet. Der Name für das Speichern der Meßwerte setzt sich aus einem „M“ für „Masses“ und der Uhrzeit der Messung in Sekunden zusammen. Die Zeit beim Beginn aller Messungen wird gemessen. Der Name wird wie oben beschrieben zusammengesetzt und die Daten in einer neuen Datei im Statistikverzeichnis gespeichert. Zusätzlich wird ein Eintrag in der Datei „Statistics.inf“ vorgenommen. Diese Datei ermöglicht später die leichter Zusammenstellung der Datensätze. Der Merker für die Belegung der Massenspektrometer in der „State.ini“-Datei wird nach der Messung zurückgesetzt. AutoScan Masses.vi - Seite 34 Programm: Build AutoScan Array.vi Eingabe: Chart Names Measurement (Old) Scan.ini Data Time Ausgabe: Measurement (new) Kurzbeschreibung: Sortiervorgang für die AutoScan-Daten zur Anzeige Programmbeschreibung: Alle Parameter wurden bereits in dem Programm „Make AutoScan Data showable.vi“ zusammengestellt. „Time“ bezeichnet den aktuell betrachteten Zeitpunkt, an dem Daten zur Verfügung stehen. In der „Scan.ini“ muß also der Zeitpunkt herausgefunden werden, wann die dazugehörige Konfiguration stattgefunden hat. Dieser Vorgang muß vor der Datenaufnahme stattgefunden haben. Aus dem Array der „Scan.ini“ wird die erste Spalte, in der sich die Zeitpunkte der Änderungen dieser Datei befinden, durch die „Select Array-row.vi“-Anweisung selektiert und die Größe des entstandenen Arrays festgestellt. In einer WHILE-Schleife wird jeder einzelne Wert, vom letzten Eintrag beginnend, mit der Konstanten „Time“ verglichen. Die Schleife wird abgebrochen, sobald ein Eintrag gefunden wurde, der kleiner als „Time“ ist oder das Ende dieser Liste erreicht wurde. Der gefundene Wert (oder null) wird ausgegeben. Mit Hilfe der Funktion „Select Array-line.vi“ wird diese Konfiguration aus den anderen gelöst und die sieben definierten Massen, die ab der Position eins im Array verfügbar sind, selektiert. Die Größe des Arrays, in dem die alten Datensätze vorhanden sind, wird festgestellt und die Anzahl der Datensätze selektiert. Eine FOR-Schleife wird geöffnet, die siebenmal (= Anzahl der vorhandenen Plätze) durchlaufen wird. Build AutoScan Array.vi - Seite 35 „Chart Names“ ist ein Array, in dem sich Ziffern der Massen befinden, die dargestellt werden sollen. Mit Hilfe des Index der FOR-Schleife werden die Massen nacheinander selektiert. In der Anweisung „Number of search number in an Array.vi“ wird herausgefunden, ob sich die selektierte Masse in der zuvor herausgefundenen Konfiguration befindet. Ist dies der Fall, die Anzahl also größer als null, wird aus dem Array „Data“, das die Meßwerte des aktuell betrachteten Datensatzes enthält, die entsprechende Position, die ebenfalls durch „Number of search number in an Array.vi“ herausgefunden wurde, in dem Zielarray eingesetzt. Das Ergebnis wird über „Measurement (new)“ ausgegeben. Build AutoScan Array.vi - Seite 36 Programm: Change all Ports to active Ports.vi Eingabe: Position to erase Port.all Input Ausgabe: Port.all Output Kurzbeschreibung: Löschen einer Konfiguration in der „Port.all“-Datei Programmbeschreibung: Zum Löschen einer Konfiguration ist es erforderlich, die PortNummer, die angeschlossene Hardware und die abhängigen Druckmeßgeräte zu löschen. Die Konfigurationskennziffer bleibt für weitere Konfigurationen erhalten! Aus dem eingegebenen Array „Port.all Input“ werden die entsprechenden Positionen durch 0 (null) ersetzt und damit gelöscht. Die Konfiguration, in der gelöscht werden soll, ist durch „Position to erase“ festgelegt. Die Positionsnummern, der oben erwähnten zu löschenden Daten aus einer Konfiguration, sind wie folgt definiert: 1 2 4 6 Port-Nummer Hardware Port-Nummer Drucksensor 1 Port-Nummer Drucksensor 2 Das Ergebnis wird durch „Port.all Output“ ausgegeben. Change all Ports to active Ports.vi - Seite 37 Programm: Command; Axx.vi Eingabe: Axx Settings Caller Ausgabe: Senden der geforderten AutoScan-Daten zum Caller (Get AutoScan) Kurzbeschreibung: Axx empfangen. Durchführung des Zusammenstellens der AutoScan-Daten für einen anderen Rechner und Senden. Komplement: AutoScan Data- String to Data.vi Programmbeschreibung: Die Anweisung Axx wird an den Rechner (Zielrechner = Destination) geschickt, von dem die Daten gesammelt werden sollen. Der Source- Rechner hat bereits aus der Konfiguration des DestinationRechners die Port-Nummer extrahiert, von der die AutoScan-Daten gewünscht werden. Diese Nummer wird in xx übertragen. Mit „Settings“ wird der zu betrachtende Bereich (drei Stunden, 24 Stunden, drei oder sieben Tage) übermittelt. Die Funktion „Show AutoScan Data II.vi) stellt alle nötigen Daten für den gewählten Zeitbereich zusammen. Die Daten müssen noch in einen ASCII-String umgewandelt werden, um sie an den Source-Rechner zurückzuschicken. Hierzu wurde folgende Reihenfolge gewählt: • from to (Datum) • Y-Scale • X-Scale Style • X-Scale Grid names • Plot names • Data • Resolution • Actual time • Changes (in der AutoScan-Konfiguration) Die Trennung der einzelnen Daten erfolgt durch das Einsetzen eines Tabulators. Dieses vereinfacht die Rückgewinnung der Daten (siehe hierzu: Programmbeschreibung „AutoScan Data- String to Data.vi“) „From to“ liegt bereits als String vor. Die Umwandlung beginnt bei den Eckwerten der Y-Achse. Command; Axx.vi - Seite 38 Es handelt sich hierbei um zwei Werten in einem Array (Minimum und Maximum). Zur Umwandlung wird eine FOR-Schleife benutzt. Jeweils ein Wert wird in das Format einer sechsstelligen Exponentialzahl mit einer Nachkommastelle umgewandelt. Vor jede Zahl wird ein TAB zur Trennung eingefügt. Ebenso wird mit „X-Scale Style“ verfahren. Hier liegen drei Werte zur Beschreibung vor. Eine Besonderheit wird bei der Umwandlung der „X-Scale grid names“ deutlich: Es können, laut Definition, maximal sieben Massen automatisch überwacht werden. Werden aber nicht alle Plätze belegt, ist es auch nicht nötig die Informationen der leeren Stellen zu übertragen. Es ergibt sich für das Array der „X-Scale Grid names“ eine variable Größe mit dem Maximalwert sieben. Bei den vorher betrachteten Werten („Y-Scale“ und „X-Scale Style“) war die Anzahl festgelegt. Um dem Empfänger die Auswertung der Information zu erleichtern, wird vor der eigentlichen Information deren Größe, also die Anzahl der „X-Scale Grid names“, eingesetzt: Erst danach wird das Array mit den Namen in einen einzelnen String mit der Trennung durch die Tabulatoren hinzugefügt. Der Rest der Informationen wird durch die oben beschriebenen Schemata durchgeführt. Alle Strings werden zusammengefügt und dem „Caller“, also dem Source-Rechner zurückgeschickt. Command; Axx.vi - Seite 39 Programm: Command; GFS.vi Eingabe: Settings Caller Ausgabe: Senden der geforderten Scan-Daten zum Caller (Get Full Scan) Kurzbeschreibung: Durchführung eines Scans in der angegebenen Druckdekade und Senden des Ergebnisses. Komplement: - Programmbeschreibung: „Settings“ enthält die zur Messung nötigen Optionen als String. Diese werden in dem Unterprogramm „Full Span- String to Command.vi“ in Zahlenwerte umgewandelt. Als Ergebnis kommen folgende Parameter heraus: • • • • • • • • • Multiplier Port Number Accuracy Testversion (wird nicht benötigt) First Mass Last Mass Pressure (low) Pressure (high) Section Diese Parameter werden dem Programm zur Messung eines Scans „Show full Scan.vi“ zugeführt. Dies bedeutet: Wird von einem anderen Rechner aus auf dem Zielrechner das Messen eines kompletten Scans veranlaßt, erscheint auf dem Bildschirm des Zielrechners die Oberfläche des Scan-Programms. Auf diese Art und Weise läßt sich bei dieser sehr zeitaufwendigen Messung der Fortschritt sowohl auf dem Ziel-, als auch auf dem Caller-Rechner verfolgen. Wichtig: „Send“ und „Run“ sind im Programm „Show full Scan.vi“ auf true gesetzt. Hiermit wird diese Messung beim Aufruf direkt gestartet. Das Ergebnis der Messung wird in dem Unterprogramm „Full Span- data to String.vi“ in einen sendefähigen String umgewandelt. Command; GFS.vi - Seite 40 Dieser String wird mit der Anweisung „sfs“ (= send full Scan) an den aufrufenden Rechner, den Caller, zurückgeschickt. Durch das Senden in Form einer eigenständigen Anweisung wird nur der Zielrechner mit der Durchführung der Messung beaufschlagt. Auf dem Caller kann das Programm nach dem Aufruf verlassen und andere Programmteile aufgerufen werden. Sobald das Ergebnis gesendet wird, öffnet sich das Fenster mit der Oberfläche für den vollen Scan wieder und das Ergebnis wird angezeigt. Mit dem Ergebnis werden die getroffenen Einstellungen noch einmal übermittelt. Die Trennung zwischen Parametern und Daten erfolgt durch ein (Carriage Return). Command; GFS.vi - Seite 41 Programm: Command; GPA.vi Eingabe: Caller Ausgabe: Senden der geforderten „Port.all“-Datei zum Caller (Get Port.all) Kurzbeschreibung: Die Datei „Port.all“ aus der Sektion des Zielrechners wird in einen String umgewandelt und verschickt. Komplement: - Programmbeschreibung: Die Datei „Port.all“, die die gesamten Konfigurationen aus der Sektion des Zielrechners enthält, wird geöffnet. Eine Konfiguration enthält acht Einstellungen, also acht Werte, die jedoch bei nicht allen Meßgeräten genutzt werden. Die Anzahl der Konfigurationen ist in den Sektionen unterschiedlich. Die Anzahl wird mit der Funktion „Array Size“ festgestellt und die Zahl in einen String umgewandelt. Um die spätere Decodierung zu erleichtern, wird diese Anzahl allen Konfigurationen im String vorangestellt. Es werden nun zwei verschachtelte FOR-Schleifen durchlaufen, in denen jedes Element der Konfigurationen in eine zweistellige Dezimalzahl umgewandelt wird. Die Ergebnisse werden in einem String zusammengefaßt. Dieser String wird dann an den Caller geschickt. Command; GPA.vi - Seite 42 Programm: Command; GPS.vi Eingabe: Caller Ausgabe: Senden der geforderten „Port.sys“-Datei zum Caller (Get Port.sys) Kurzbeschreibung: Die Datei „Port.sys“ aus der Sektion des Zielrechners wird in einen String umgewandelt und verschickt. Komplement: - Programmbeschreibung: Die Datei „Port.sys“, die die aktivierten Konfigurationen aus der Sektion des Zielrechners enthält, wird geöffnet. Eine Konfiguration enthält acht Einstellungen, also acht Werte, die jedoch bei nicht allen Meßgeräten genutzt werden. Die Anzahl der Konfigurationen ist in den Sektionen unterschiedlich. Die Anzahl wird mit der Funktion „Array Size“ festgestellt und die Zahl in einen String umgewandelt. Um die spätere Decodierung zu erleichtern, wird diese Anzahl allen Konfigurationen im String vorangestellt. Es werden nun zwei verschachtelte FOR-Schleifen durchlaufen, in denen jedes Element der Konfigurationen in eine zweistellige Dezimalzahl umgewandelt wird. Die Ergebnisse werden in einem String zusammengefaßt. Dieser String wird dann an den Caller geschickt. Command; GPS.vi - Seite 43 Programm: Command; Lxx.vi Eingabe: Lxx Settings Caller Ausgabe: Senden eines gemessenen Druckwertes zum Caller. (Leakcheck) Kurzbeschreibung: Durchführung einer Leakcheck-Messung an dem Rechner in einer fremden Sektion Programmbeschreibung: In dem Programm „Show Leak Check.vi“ ist es möglich, jedes Massenspektrometer im System anzusprechen. Diese Steuerung (der Lecktest) ist von jedem Rechner aus durchführbar. Die Anweisung Lxx wird an einen Rechner geschickt, mit dem ein Lecktest durchgeführt werden soll, wenn das zu messende Massenspektrometer außerhalb der eigenen Sektion liegt. Die Buchstaben xx stehen als Platzhalter für die Positionsnummer (01 - 38) im Bild. Für den Lecktest werden die für die Lecksuche üblichen Parameter als String in „Settings“ geliefert: • Die erste Ziffer gibt die „Selection“ an, das ist die Bezeichnung, ob in alle oder nur den aktivierten Sektoren gemessen werden soll. • Die zweite Ziffer gibt die Accuracy (hier: Response) an. • Mit den nächsten drei Ziffern wird die zu messende Masse definiert. • Die letzten beiden, jeweils zwei Zahlen, grenzen den zu messenden Druckbereich ein. Diese Ziffern werden aus dem String jeweils in Zahlen umgewandelt (hier am Beispiel der Masse: beginnend ab der Position zwei werden drei ASCII-Zeichen vom String getrennt und diese in eine Dezimalzahl konvertiert). Diese Parameter werden der Funktion „Get leak check.vi“ zugeführt. In ihr findet die eigentliche Messung statt. Der resultierende Meßwert wird in eine Exponentialzahl umgewandelt und mit derselben (kleingeschriebenen) Anweisung an den Caller zurückgeschickt. Command; Lxx.vi - Seite 44 Programm: Command; sfs.vi Eingabe: Settings Ausgabe: - Kurzbeschreibung: Empfangen eines Scans mit Anzeige (Send Full Scan) Programmbeschreibung: Ein Rechner wurde mit der Anweisung „GFS“ (Get full Scan) beauftragt, einen kompletten Scan zu messen. Mit der Anweisung „sfs“ wird das Ergebnis an den Caller zurückgeschickt. Der String „Settings“ enthält die Informationen über die Meßparameter und die Meßdaten selbst. Die beiden Datenpakete sind durch ein (=Carriage Return) getrennt. Die erste Untersuchung des Strings ist also auf das CR. Der String vor dem CR enthält die Parameter, sie werden durch die Funktion „Full Scan- String to Command.vi“ in Ziffern umgesetzt. Die Konvertierung der Werte des Scans wird mit dem Unterprogramm „Full scan-string to data.vi“ durchgeführt. Die Start- und Endwerte für die Massen und die Drücke müssen nach der Umsetzung noch, bedingt durch das Eingabeformat auf der „Show full Scan.vi“- Oberfläche, in Arrays umgewandelt werden. Die Parameter werden der Anzeigefunktion „Show full Scan.vi“ zugeführt. Die Eingabeparameter „Run“, „Send?“ und „Answer?“ werden auf true gesetzt. Hierdurch wird erreicht, daß eine Messung gestartet wird, aber tatsächlich keine neuen Werte gemessen werden. Stattdessen werden die übertragenen Meßergebnisse zur Darstellung herangezogen. Besonderheit: Der Caller wartet nicht, wie bei den anderen Anweisungen auf das Meßergebnis. Es würden sonst bei beiden Rechnern, dem Caller und dem messenden Rechner, durch die zeitaufwendige Messung unter Umständen Routinemessungen unterbrochen werden. Das Ergebnis wird mit dieser gesonderten Anweisung an dem Zielrechner verschickt. Auf diesem wird die Oberfläche für den „Full Scan“ geöffnet (falls sie zwischenzeitlich geschlossen wurde) und das Ergebnis angezeigt. Command; sfs.vi - Seite 45 Programm: Command; sst.vi Eingabe: Data Ausgabe: - Kurzbeschreibung: Aktivieren/Deaktivieren eines Sektors (send state) Programmbeschreibung: Die neuen Zustandsdaten eines Sektors, die in einem Data-String übermittelt wurden, werden in einer FOR-Schleife in Zahlen umgewandelt. Mit der Funktion „String Subset“ wird jeweils ein Character aus dem String gelöst und mit der „Format & Strip“Anweisung in eine Ziffer umgewandelt. Das Ergebnis ist null oder eins. Der Ausgang der FOR-Schleife (rechts) wurde mit „enable indexing“ formatiert, so daß die Daten als Array vorliegen. Parallel dazu wird die Zustandsdatei „State.ini“ geöffnet und das alte Zustandsarray gelöscht. Am Schluß wird das neue Zustandsarray mit den Daten, die sonst noch in dieser Datei vorhanden waren, zusammengeführt und diese neue Datei abgespeichert. Die alte Datei wird hierbei überschrieben. Command; sst.vi - Seite 46 Programm: Communication (C - C) Receive.vi Eingabe: - Ausgabe: Command Data Caller Kurzbeschreibung: Empfangen einer Nachricht via TCP Programmbeschreibung: Für die Rückmeldung an den Sender einer Nachricht (Caller) ist es erforderlich, dessen Internet-Adresse zu kennen. In der Testversion (Schalter Testversion = true) wird ein Array erzeugt, das als Konstanten nur die Internet-Adresse des Rechners GEO2 enthält. Ist „Testversion“ ausgeschaltet, werden die Adressen aus der Datei „Names.sys“, in der sie im Setup abgelegt wurden, gelesen. Hierzu wird der Pfad definiert und die Datei geöffnet. Die ersten zwölf Zeichen dieser Datei enthalten die Namen der Rechner. Diese werden abgeschnitten. Von dem verbleibenden String werden die Internet-Adressen im String-Format selektiert. Die einzelnen Adressen sind durch <CR><LF> (= Carriage Return/ Line Feed) getrennt. Nach diesem Steuerzeichen wird gesucht, der String davor, der eine Adresse enthält, ausgegeben und das Steuerzeichen gelöscht. Dieser Vorgang wird so lange wiederholt, bis keine Steuerzeichen mehr gefunden werden. Der Ausgang der WHILE-Schleife wurde auf „enable indexing“ geschaltet, so daß die Internet-Adressen als Array vorliegen. Die Adressen können so leicht voneinander getrennt werden und sind als Elemente wählbar. Communication (C - C) Receive.vi - Seite 47 Die Reihenfolge der Adressen stellt sich wie folgt dar: • • • • Zentralhaus Endhaus 1 Endhaus 2 alle weiteren: Steuerrechner außerhalb des Systems Eine WHILE-Schleife wird geöffnet. Sie wird so lange wiederholt, bis ein Timeout von 1,5s erreicht wurde, ein Fehler auftrat oder eine gültige Nachricht empfangen wurde. Mit der „Talk Internet Passive.vi“-Funktion wird nachgesehen, ob ein Verbindungsaufbau von einem anderen Rechner versucht wird. Der übermittelte String (wurde keine Verbindung aufgebaut, ein leerer String) wird überprüft, ob es sich um den Beginn der Online-Anweisung „ONx“ handelt. Es wird untersucht, ob das „O“ im String enthalten ist. Alle weiteren Anweisungen werden nur durchgeführt, wenn diese Bedingung zutrifft. Das dritte Zeichen des Strings wird selektiert. Es handelt sich hierbei um die Sektionskennziffer des Callers. Diese Ziffer wird über „Caller“ ausgegeben. Wurde der Online-Befehl erkannt, wird mit der selektierten Kennziffer des Callers ein Acknowledgement „A“ an den Caller zurückgeschickt. Die Internet-Adresse wird dazu mit „Index Array“ aus dem Array geholt. Eine WHILE-Schleife wird geöffnet. Es wird auf eine Nachricht gewartet. Ist das Ergebnis der „Talk Internet Passive.vi“-Funktion der String „chsdlfük“, wird diese Schleife ebenfalls wiederholt. Dieser String hat keinen praktischen Wert. Beim Testen der Funktion wurde er eingesetzt und läßt sich seitdem nicht mehr löschen. Bricht man diese Schleife dennoch ab, wird erneut ein Acknowledgement gesendet und dieser Programmteil wiederholt. Ergebnis sollte eine gesendete Anweisung sein. Diese wird über „Command“ ausgegeben. Communication (C - C) Receive.vi - Seite 48 Es wird verglichen, ob es sich bei dem empfangenen String um eine Doppelsendung handelt, die im TCP/IP-Protokoll auftreten kann. Ist dies der Fall oder der String leer, wird auf eine neue OnlineAnweisung gewartet. War die empfangene Anweisung gültig (ungleich einem leeren String), wird noch gewartet, ob zusätzlich Daten übertragen werden. In der WHILE-Schleife, die nach 2s abgebrochen wird, wird erneut die „Talk Internet Passive.vi“-Funktion nach übermittelten Daten gefragt. Die Schleife wird so lange wiederholt, bis ein gültiger String empfangen wurde, der über „Data“ ausgegeben wird, oder die genannte Timeout-Grenze erreicht ist. Communication (C - C) Receive.vi - Seite 49 Programm: Communication (C - C) Send.vi Eingabe: Destination Command String to Send Ausgabe: Output Error Destination = Source Kurzbeschreibung: Senden einer Nachricht via TCP Programmbeschreibung: Als Destination wird nur die Kennziffer der Sektion eingegeben (z.B. null für Zentralhaus). Dieses Kennziffer muß in eine InternetAdresse umgewandelt werden. In der Testversion (Schalter Testversion = true) wird die Adresse als Konstante angenommen. Sie enthält die Internet-Adresse des Rechners mit dem Namen GEO3. Der Vergleichsausgang „Destination = Source“, in dem überprüft wird, ob die Nachricht an sich selbst geschickt werden soll, wird gleich false gesetzt. Ist „Testversion“ ausgeschaltet, werden die Adressen aus der Datei „Names.sys“, in der sie im Setup abgelegt wurden, gelesen. Hierzu wird der Pfad definiert und die Datei geöffnet. Die ersten zwölf Zeichen dieser Datei enthalten die Namen der Rechner. Diese werden abgeschnitten. Von dem verbleibenden String werden die Internet-Adressen im String-Format selektiert. Die einzelnen Adressen sind durch <CR><LF> (= Carriage Return/Line Feed) getrennt. Nach diesem Steuerzeichen wird gesucht, der String davor, der eine Adresse enthält, ausgegeben und das Steuerzeichen gelöscht. Dieser Vorgang wird so lange wiederholt, bis keine Steuerzeichen mehr gefunden werden. Der Ausgang der WHILE-Schleife wurde auf „enable indexing“ geschaltet, so daß die Internet-Adressen als Array vorliegen. Communication (C - C) Send.vi - Seite 50 Gleichzeitig wird die „Vacuum.ini“ geöffnet. In ihr ist die Kennziffer der eigenen Sektion enthalten. Diese Kennziffer wird in einen String umgewandelt. Es folgt der Vergleich, ob die eigene Sektionsnummer gleich der durch „Destination“ angegebenen Ziel-Sektionsnummer entspricht. Ist dies der Fall, wird keine Nachricht übermittelt und der Ausgang „Destination = Source“ gleich true gesetzt. Im folgenden wird der normale Fall, der Zielrechner ist von dem eigenen Rechner, der nur noch als „Caller“ bezeichnet werden soll, verschieden. Mit Hilfe der „Index Array“-Anweisung wird die Internet-Adresse aus dem Array selektiert. Eine WHILE-Schleife wird geöffnet. Mit Hilfe der Anweisung „ONx“ wird die Verbindung zum Zielrechner eröffnet. Der Buchstabe „x“ dient als Platzhalter. Er wird durch die zuvor umgewandelte Sektionskennziffer der eigenen Sektion ersetzt. Somit erkennt der Zielrechner leicht die Quelle (den Sender) der Nachricht. In einer weiteren WHILE-Schleife wird mit Hilfe der „Talk Internet Passive.vi“-Funktion auf ein Acknowledgement des Zielrechners gewartet. Diese Schleife wird so lange wiederholt, bis das Acknowledgement gefunden wurde, bis ein Fehler auftrat oder nach 5 s ein Timeout ausgelöst wird. Communication (C - C) Send.vi - Seite 51 Sollte die Schleife durch den Timeout beendet worden sein, wird dieser gesamte Vorgang (Senden der Online-Anweisung („ONx“) und das Warten auf eine Antwort noch zweimal wiederholt. Die folgenden Anweisungen werden nur durchgeführt, wenn das Acknowledgement und damit der Aufbau der Verbindung empfangen wurde. Die zu sendende Anweisung wird mit einem <CR><LF> (= Carriage Return/ Line Feed) versehen. Dies ist für den Zielrechner der Hinweis, daß die Anweisung beendet ist. Die Anweisung wird an den Zielrechner geschickt. Das erste Zeichen der Anweisung wird überprüft. Handelt es sich um einen Großbuchstaben (zwischen A und Z), wird eine Antwort vom Zielrechner erwartet. Es wird überprüft, ob zusätzlich Daten gesendet werden sollen (zum Beispiel Parameter zu einer Messung). Auch dieser String wird mit einem <CR><LF> abgeschlossen und danach an den Zielrechner gesendet. Auch hier wird, wie oben ein Acknowledgement vom Zielrechner erwartet, daß die Daten angekommen sind. Die Timeout-Grenze beträgt auch hier 5 s, danach wird das Lesen abgebrochen und ein TimeoutFehler ausgegeben. Der alte und der neue Fehler werden ausgegeben. Communication (C - C) Send.vi - Seite 52 Wurde eine Antwort erwartet, wird im letzten Programmteil darauf gewartet. Ein Timeout wird nach 10s ausgelöst. Das Ergebnis wird über „Output“ ausgegeben. Communication (C - C) Send.vi - Seite 53 Programm: Communication.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Messaging mit einem anderen Rechner über das Internet Bedienung: Dieses Tool dient der Nachrichtenübermittlung zwischen zwei Rechnern. Diese Nachrichten werden nur unidirektional verschickt, d.h. der Empfänger erhält sie und kann nur den Erhalt bestätigen. Über „Choose Destination“ kann entweder ein im System befindlicher Rechner (Central-Cluster, Endhouse 1 oder Endhouse 2) direkt angesprochen werden, oder es muß ein Rechnername eingegeben werden, der über „Net Send“ (= DOS-Anweisung) verschickt werden kann. Sollte sich der angesprochene Rechner nicht in der eigenen Domäne befinden, so muß diese mit angegeben werden. In das Feld Message kann nun eine beliebige Nachricht eingegeben werden, die durch Drücken auf den „Send“-Button an das gewählte Ziel verschickt wird. Quit beendet dieses Programm. Communication.vi - Seite 54 Programmbeschreibung: Vor dem eigentlichen Programm werden einige Einstellungen getroffen. Bei der Auswahl „Choose Destination“ handelt es sich um einen Text Ring. In ihm werden die nebenstehenden Möglichkeiten für die Nachrichtenübermittlung definiert. Der Default-Wert wird auf „Central-Cluster“ gestellt. Beim heutigen Stand ist noch keine e-mailVerwaltung vorgesehen. Wird dies trotzdem, z.B. durch einen Fehler ausgewählt, erscheint die rechts stehende Meldung. Das Auswahlkriterium „e-mail“ wurde bereits aus der Liste entfernt (s.o.). Die Voraussetzungen für die Nutzung (Eingabe einer InternetAdresse, Anzeige) sind bereits geschaffen. 1.) Net Send (allgemein) Diese Anweisung ist aus der DOS-Oberfläche bekannt. Unter dem Betriebssystem WindowsNT 4.0 heißt diese Anweisung vollständig: net send ‘Name’ ‘/Domain:Name’ „Nachricht“ Es muß nur noch der Name des Zielrechners, bzw. die Domäne mit dem Namen des Zielrechners eingegeben werden. Die Ausführung dieser DOS-Anweisung übernimmt die Funktion „System Exec.vi“ Bis zur Beendigung dieses Programms durch den „Quit“-Button, wird dieses in einer WHILE-Schleife fortgeführt. Es hat sich gezeigt, daß die Ausführung der „System Exec.vi“Anweisung allein dazu führt, daß, trotz der Änderung von „Mechanical Action“ des „Send“-Buttons, die zu sendende Nachricht nicht nur einmal, sondern viele Male übertragen wird. Dies führt zur absoluten Stillegung des Senderechners und des Zielrechners (Die CPU-Leistung liegt bei 100%). Ein Abbruch ist nur schwer möglich. Aus der Analogtechnik ist dieses Phänomen als „Kontaktprellen“ bekannt. Es wurde daher in die Programmstruktur folgende Sicherheitsmaßnahme eingebaut: Communication.vi - Seite 55 Zur Durchführung der „System Exec.vi“-Anweisung wird ein ShiftRegister mit einer Variable (Default = 0) eingeführt. Die Entscheidung, ob eine Nachricht verschickt wird, oder nicht, wird nicht nur von dem „Send“-Button und der gewählten Übertragungsart (bislang nur net send, kein e-mail) abhängig gemacht, sondern auch von dieser Shift-Variable. Die Variable bleibt so lange 0, bis der „Send“-Button gedrückt wird. Passiert dies, wird die Variable inkrementiert. Dies geschieht so lange, bis der Button wieder losgelassen wird. Ist diese Variable gleich eins (der Button wurde gerade erst gedrückt), wird die „System Exec.vi“-Anweisung ausgeführt und die Variable gleichzeitig auf Zwei gesetzt. Durch diese Maßnahme wird verhindert, daß die „net send“-Anweisung ein zweites Mal verschickt wird. Wurde mit „Choose Destination“ die allgemeine „net send“-Anweisung gewählt, wird ein weiteres Eingabefeld („Enter Computer Name“) angezeigt. Der eingegebene Name wird als „Name“ in die „net send“-Anweisung eingesetzt. Das Eingabefeld „Enter Internet Adress“ bleibt weiter unsichtbar. Die weitere Bearbeitung erfolgt nach der oben beschriebenen Prozedur. 2.) Net Send (Systemintern) Für den systeminternen Gebrauch (innerhalb GEO600) wird die „Direktwahl“ eines Rechners ermöglicht, indem die Sektionen zur Auswahl gestellt werden. In der Konfiguration wurde die Namen der Rechner in den einzelnen Sektionen eingegeben und in der Datei „Names.sys“ gespeichert. Durch das Unterprogramm „Get Names of Section Computers.vi“ liegen diese Namen als String-Array vor. Communication.vi - Seite 56 Die ersten drei Bedingungen dieser CASE-Struktur sind für die drei Sektionen innerhalb des Systems freigehalten (Central-Cluster, Endhouse1 und Endhouse 2). Die vierte CASE-Anweisung gilt dem sogenanntem „Manager“, ein außenstehender Rechner, der Verbindung zum System hat und dort eingreifen kann, der aber nicht in der Nähe des Systems positioniert sein muß und der keine Aufgaben an der Funktion des Systems hat. Wird eine dieser Sektionen ausgewählt (hier: Endhouse 2), bleiben die Eingabefelder für einen Rechnernamen und eine InternetAdresse unsichtbar. Die Nummer der gewählten Sektion ist analog der Position im Array für die Computernamen zur Adressierung. Der entsprechende Name wird mit Hilfe der „Index Array“-Anweisung selektiert. 3.) E-mail Die Funktion e-mail ist bis zum heutigen Stand noch nicht etabliert. Vorbereitet ist allerdings die letzte (fünfte) CASE-Struktur. Ein Eingabefeld erscheint, das zur Eingabe der Internet-Adresse auffordert. Communication.vi - Seite 57 Programm: Convert Config-data <-> file.vi Eingabe: Convert/Deconvert (false = from File) 2D-Array (original) 2D-Array (rebuild) Ausgabe: 2D-Array (modified) Kurzbeschreibung: Konvertieren der Daten der Anschlußkonfiguration. Austausch der Positionsnummern der TPG300 für die Abhängigen Massenspektrometer durch die entsprechenden COM-Adressen und Locations und umgekehrt. Programmbeschreibung: Über die Schalter „Convert/Deconvert“ wird die jeweilige Funktion gewählt. Die Defaulteinstellung ist die Dekonvertierung (=false). Dies bedeutet, die Daten werden von einem gelesenen File so aufbereitet, daß sie für den Leser verständlich zur Anzeige gebracht werden. Die Dekonvertierung wird an dem „2D-Array (original) durchgeführt: Die Größe des Arrays wird ermittelt. Für jeden vorhandenen Datensatz werden (über den Index einer FOR-Schleife) zunächst die Anschlußdaten des ersten Drucksensors herausgefiltert. Diese finden sich im Datensatz auf Position 4 und 5 (4=Port number; 5= Location). In einer weiteren FORSchleife wird nun der entsprechende Drucksensor im Array gesucht. Sofern die Anschlußdaten übereinstimmen und die Port number ungleich null (=keine Belegung) ist, wird der entsprechende Index zwischengespeichert. Convert Config - data.vi - Seite 58 In der folgenden CASE-Anweisung wird, wenn der Drucksensor gefunden wurde (≠0), auf den Speicherplatz 4 des Datensatzes die Positionsnummer des Drucksensors geschrieben. Die entsprechende Ziffer befindet sich auf Position 0 des Sensordatensatzes. Derselbe Vorgang wird für den zweiten Drucksensor wiederholt. Hierzu wird Platz 5 des aktuellen Datensatzes überschrieben. Am Schluß werden noch die nun nicht mehr genutzten Speicherplätze 6 und 7 gelöscht. Die Konvertierung funktioniert genau umgekehrt. Hierzu wird das „2D-Array (rebuild)“ benutzt: Die Größe des Arrays wird ermittelt. Da für die Darstellung der Port-Nummer und der dazugehörigen Location je Drucksensor zwei Speicherplätze genutzt werden, durch den Anzeigemodus nur einer je Sensor reserviert wurde, muß die Positionsnummer (Row 5) in die nächste Spalte (Row 6) kopiert werden. Aus Speicherplatz 4 (Spalte/Row 4) wird die Positionsnummer des ersten Drucksensors entnommen und in Row 4 und 5 die PortNummer (aus Row 1) und die dazugehörige Location (aus Row 3) eingefügt. Diese Prozedur wird mit dem zweiten Drucksensor auf den Speicherplätzen 6 und 7 wiederholt. Convert Config - data.vi - Seite 59 Programm: Convert Section number.vi Eingabe: Section Input Ausgabe: Section Output Kurzbeschreibung: Konvertieren der Sektionsnummer in einen String „Endhouse1“, „Endhouse2“ oder „Central-Cluster“ Programmbeschreibung: Die Eingabe der Sektionsnummer wird über eine CASE-Anweisung in den entsprechenden String umgewandelt. 0 - Central-Cluster 1 - Endhouse 1 2 - Endhouse 2 Convert section number.vi - Seite 60 Programm: Convert time.vi Eingabe: Time in Ausgabe: Time String Kurzbeschreibung: Umwandlung der Zeit in Sekunden in Datum und Uhrzeit Programmbeschreibung: Die eingegebene Zeit, die in Sekunden vorliegt und definiert ist nach der Universalzeit ab dem 1. Januar 1904 12:00 am, wird mit der Funktion „Seconds to Date/ Time“ umgewandelt. Von dem entstandenen Cluster sind die Angaben Tag, Monat, Stunde und Minute nötig. Diese werden durch „Unbundle by Name“ aufgeteilt. Jedes dieser Elemente wird in einen String umgeformt. Zwischen dem Tag und dem Monat wird ein Punkt (.), zwischen Monat und Stunde ein Leerzeichen ( ) und zwischen Stunde und Minute ein Doppelpunkt (:) eingefügt. Der entstandene String mit dem Format „DD.MM HH:MM“ wird über „Time String“ ausgegeben. Convert time.vi - Seite 61 Programm: Format AutoScan Data.vi Eingabe: Input time Input mass Format Range Ausgabe: Formatted Array of one mass Kurzbeschreibung: Formatierung von periodisch aufgenommenen AutoScan-Daten. Lineare Interpolation der Zwischenwerte. Programmbeschreibung: Das Array „Format“ enthält alle Zeitpunkte, die in der späteren Grafik dargestellt werden sollen. „Range“ bezeichnet hierbei die halbe Differenz zwischen zwei Zeitpunkten. Dies dient der Zuordnung einzelner Zeiten. „Input time“ enthält die zuzuordnenden Meßzeitpunkte und „Input Mass“ die dazugehörigen Meßwerte. Zunächst werden die vorhandenen Meßwerte (Meßzeitpunkte) in dem Array der Sollzeitpunkte verteilt. Dies wird mit einer FORSchleife erreicht. Die Anzahl der Wiederholungen dieser Schleife ist abhängig von der Anzahl der Sollzeitpunkte. Der Index dieser FOR-Schleife wird genutzt, um ein Array zu erzeugen, das später die gesammelten Informationen über die betrachteten Massen (incl. der interpolierten Werte) in dem gewählten Zeitraum enthält. Dieses Array wird zunächst als leeres Array initialisiert und auf ein Shift-Register geführt. Außer dem Index wird ein weiterer Merker benötigt, um die Indexierung der vorhandenen gemessenen Werte zu ermöglichen. Dieser wird ebenfalls durch ein Shift-Register realisiert. (Bild: siehe unten) Das Einsetzen und demzufolge die spätere Interpolation erfolgt nur, wenn zu dem aktuell betrachteten Meßzeitpunkt ein gültiger Meßwert vorhanden ist. Dies ist jeder Wert größer als Null. Ist dies nicht der Fall, wird die Entscheidung, was in das entstehende Array einzusetzen ist, übersprungen und zum nächsten Wert übergegangen. Format Autoscan Data.vi - Seite 62 Der halbe Abstand der Sollzeitpunkte (Range), der durch den Index definierte aktuelle Zeitpunkt (fo) und der durch den Merker definierte nächste einzusetzende Meßzeitpunkt (ti) werden einer „Formular Node“ zugeführt. Hier erfolgt die Abfrage, ob der betrachtet Meßzeitpunkt ti innerhalb des Zeitintervalls des definierten Zeitpunktes fo ± ra liegt. Ist dies der Fall, wird der dazugehörige Meßwert aus „Input Mass“ in das Ergebnisarray eingesetzt. Liegt ti außerhalb dieses Bereichs (s.o.), erfolgt zusätzlich eine Überprüfung, ob der Indexzeitpunkt noch kleiner ist, als der betrachtete Zeitpunkt aus dem Meßarray. Solange dies der Fall ist, wird derselbe Meßzeitpunkt betrachtet. Durch die Anfangsbedingungen ist es möglich, das ti kleiner ist, als fo. In diesem wird zum nächsten Meßzeitpunkt ti+1 weitergeschaltet. Vorteil dieser Methode ist, daß, egal wie groß oder klein die Anzahl (Auflösung) im Zielarray gewählt wird, ein Meßzeitpunkt immer nur genau einmal zugeordnet wird. Nach der Verteilung der Meßwerte müssen die fehlenden Zwischenwerte ermittelt werden. Die geschieht durch lineare Interpolation in der nächsten FOR-Schleife. Format Autoscan Data.vi - Seite 63 Die Anzahl der Durchläufe dieser FOR-Schleife ist analog zu der der letzten. Zunächst erfolgt die Abfrage, ob der betrachtete Wert n gleich Null ist. Trifft dies zu, wird der Wert n-1 als Punkt Y0 der linearen Interpolation zugeführt. Weiteres Element wird die betrachtete Position, X. Aus ihr leitet sich X0 ab. In der WHILE-Schleife wird der nächste gültige Wert gesucht. Die Schleife wird so lange durchlaufen, bis ein Y-Wert ungleich Null gefunden wird. Dieser Wert wird zu Y1 und die Position zu X1. Mit Hilfe der Funktion „Linear Interpolation.vi“ wird der fehlende Wert ersetzt. War der betrachtete Wert ungleich Null, wird dieser als gültiger Wert interpretiert. Es ist also keine Interpolation erforderlich. Es wird zum nächsten Wert übergegangen. Format Autoscan Data.vi - Seite 64 Programm: Format Changes-Data-Array.vi Eingabe: Actual time Span Resolution Changes Values Ausgabe: Changes Array Kurzbeschreibung: Für die AutoScan-Darstellung: Anzeige der Änderungen in der AutoScan-Konfiguration. Programmbeschreibung: Die Zahl -1 ist ein Indikator, ob überhaupt Änderungen in der Konfiguration vorgenommen wurden. Ist sie nicht im Array vorhanden, wird als „Changes Array“ ein Nullarray (kein Inhalt) ausgegeben. Aus „Actual Time“ und dem „Span“ wird der Zeitraum bestimmt, der betrachtet werden soll. „Span“ dividiert durch die „Resolution“ ergibt die Anzahl der Zeiteinheiten in dem Zeitraum. Mit Hilfe der FOR-Schleife wird ein Array erzeugt, das alle Zeitabschnitte im Zeitraum benennt. Weiterhin wird (oben) ein Array erzeugt, das später an den Zeitpunkten der Änderungen in der Konfiguration eine Markierung (=1) enthält. Ein Merker wird erzeugt und die Größe des Arrays der Änderungen in die WHILE-Schleife eingegeben. Diese Schleife wird so lange wiederholt, bis alle Änderungen eingetragen wurden. Format Changes-Data-Array.vi - Seite 65 Oben links: Durch den Merker (erstes ShiftRegister) wird ein Element aus dem „Changes-Array“ geholt (f0). Mit Hilfe des Indexes der WHILE-Schleife wird ein Element aus dem Array mit den Zeitabschnitten betrachtet (ti). Der Eingang „ra“ enthält als Rundungshilfe den Wert eines halben Zeitabschnitts. Diese Werte werden in der „Formular Node“ gesammelt. Der Ausgang „OK“ ist gleich eins, wenn fo innerhalb ti ± ra liegt. Ansonsten ist der Ausgang gleich Null. Ist der Ausgang gleich eins, wird der Merker inkrementiert (Anm.: Es wird jeder Wert des Changes Arrays nur einmal eingesetzt). Und der Wert 1 im Ausgangsarray an der indexierten Stelle eingesetzt. Eins wird bei der späteren Darstellung in einem „Waveform Chart“ eine senkrechte Linie darstellen und damit eine Änderung der Konfiguration kennzeichnen. Ist „OK“ gleich null erfolgt keine Änderung. Das erzeugte Array mit Nullen und Einsen wird als ausgegeben. Format Changes-Data-Array.vi - Seite 66 Programm: Front Panel.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Bedienoberfläche des GEO600-Programms Bedienung: Das „Front Panel.vi“ stellt den Hauptbildschirm des GEO600Programms dar. Von hier aus werden alle Funktionen dieses Programms erreicht, bzw. gesteuert. Nach dem Aufruf des Programms erscheint folgendes Fenster: Auf der linken Seite befinden sich die Bedienungen der Statistikfunktionen und die Taster, die einen manuellen Zugriff auf die Meßgeräte erlauben. Auf der rechten Seite befinden sich die Hilfefunktionen und alle Funktionen, die mit der Konfiguration des Systems in Verbindung stehen. Front Panel.vi - Seite 67 Die Funktionen im einzelnen: „Get full Scan“ Ein vollständiger Scan soll an einem Massenspektrometer gemessen werden. Durch Drücken dieses Tasters wird ein neues Fenster geöffnet, in dem die Bedienelemente für das gewünschte Massenspektrometer vorhanden sind, die Angaben zum Massen- und Druckbereich können hier getätigt werden und die Meßgenauigkeit wird eingestellt. „Show Pressure“ Ein Fenster mit einer Skizze der Sektion wird angezeigt. Hier können die Druckmeßwerte der letzten Messung dargestellt werden oder eine neue Messung wird gestartet. Es werden nur die Drücke in der eigenen Sektion angezeigt! „Show AutoScan Data“ Die Massen, die ständig überwacht werden sollten, können hier angezeigt werden. Es sind verschiedene Zeiträume wählbar, über die die Daten angezeigt werden können. Die Partialdruckverläufe der Massen werden bis zum jetzigen Zeitpunkt zusammengestellt und in einem Fenster dargestellt. Das jeweilige Massenspektrometer, dessen Daten betrachtet werden sollen, muß vorher definiert werden. „Leakcheck“ Zwei unterschiedliche Lecksuchfunktionen sind integriert: Zum einen der Helium-Lecktest, bei dem mit Hilfe eines Gases (Helium) ein Leck gesucht wird. Hier werden die Drücke dieser Masse an zwei verschiedenen Massenspektrometern angezeigt. Zum zweiten kann der sogenannte Tunnelcheck durchgeführt werden. Hier wird in den Rohren eine wählbare Masse betrachtet und aus deren Partialdrücken ein Polynom gebildet. Aus dem Maximum, dessen Entfernung von Haupthaus und vom Endhaus angegeben wird läßt sich auf ein vorhandenes Leck schließen. „Pressure alert“ Ein-, bzw. Ausschalten der Überdruck-Warnanzeige. Front Panel.vi - Seite 68 „Set AutoScan“ In diesem Fenster werden die Massen definiert, die ständig überwacht werden sollen. Außerdem wird der Druckbereich der Betrachtung festgelegt. „Communication“ Unidirektionales Verschicken einer Nachricht (Message-Box) an einen anderen Rechner der Sektion. „Configuration“ Hier wird die gesamte Konfiguration der Sektion festgelegt. Sämtliche Meßgeräte, die durch den aufrufenden Rechner an dessen Schnittstellen verwaltet werden sollen, werden hier eingegeben. Eine genaue Definition der Port-Adresse und des daran befindlichen Meßgerätes, sowie eventuell die Abhängigkeit von anderen Meßgeräten ist erforderlich. „Help“ Durch die Aktivierung/Deaktivierung der Hilfeanzeige können Hilfestellungen zu den meisten Bedienungen in den Programmen gegeben werden, in denen die Eingaben nicht selbsterklärend sind. „Activate“ Mit diesem Button erreicht man eine Oberfläche, in der die gesamten Meßgeräte einzelner Sektoren aktiviert oder deaktiviert werden können. Das Ein- und Ausschalten ist vor allem während des Evakuierens des Systems notwendig, wenn z.B. eine Lecksuche durchgeführt werden soll oder einzelne Teile des Systems noch nicht fertiggestellt wurden. „Quit“ Dieser Button sollte nach dem Start des Systems nicht mehr benutzt werden, das Programm würde dadurch verlassen. Alle Messungen würden beendet werden und es gäbe keine wirksame Überwachung des Vakuumsystems. Programmbeschreibung: Der Pfad zu der Datei „Vacuum.ini“ wird definiert und deren Inhalt geladen. Die eigene Sektionsnummer wird gelesen und der Funktion „Convert Section Number.vi“ zugeführt. Front Panel.vi - Seite 69 Der Name der Sektion wird bei den Programmen zur Konfiguration der Sektion und der Anzeige der Drücke in der Sektion benötigt, da die zur Sektion gehörigen Bilder und damit die Programme zur der Sektion immer unterschiedlich sind. Beim Aufruf der Konfiguration wird der Pfad in das Unterverzeichnis „\Sections“ erweitert. Das zu ladende Programm nennt sich „Section“ und anschließend der Name der Sektion. Dieses Programm wird durch „Call Instrument.vi“ gestartet und ausgeführt. Dasselbe Verfahren wird bei der Anzeige des Druckes verwendet. Der Beginn des Namens ist hierbei „Show pressure TPG300- ″. Alle weiteren Programm werden mit CASE = true-Anweisungen aufgerufen. Durch Anklicken von „Communication.vi“ geöffnet. „Communication“ wird das „Get full Scan“ öffnet das Programm „Show full Scan.vi“ Hierbei müssen noch die Eingänge „Send“ und „Run“ auf false gesetzt werden. Das Drücken von „Leakcheck“ öffnet das „Leakcheck CheckCall.vi“, eine Abfrage, welches der beiden Lecksuchprogramme gestartet werden soll. „Set AutoScan“ bewirkt die Ausführung von „Set AutoScan Masses.vi“. „Activate“ startet das Programm „Activate Sections.vi“ und, wenn die Daten darin geändert wurden, das Unterprogramm „Activate Configuration.vi“. „Show AutoScan Data“ öffnet das gleichnamige VI. Das Anklicken der „Help“-Taste invertiert einen Merker, der auf ein Shift-Register geführt wird. Hierdurch wird der Anweisung „Control Front Panel.vi - Seite 70 Help Window“ die Anweisung für „Show“ gegeben. Dies funktioniert umgekehrt genauso. Das Drücken des „Quit“-Buttons hat zur Folge, daß eine Dialogbox geöffnet wird, in der nachgefragt wird, ob dieses Programm tatsächlich verlassen werden soll. Der Button „Pressure Alert“ dient als UND-Verknüpfung für die Anzeige eines tatsächlichen Alarms. Ist dieser Button „OFF“, wird jede Anzeige, egal ob sie aus der eigenen oder einer fremden Sektion stammt, unterdrückt. Die Anzeige wird durch das Programm „Alert.vi“ hervorgerufen. Neben diesen Benutzerfunktionen, die nur aktiviert werden, wenn der Benutzer sie anklickt, erfüllt das Programm auch automatische Funktionen, wie zum Beispiel die Überwachung der AutoScanMassen oder die Drucküberwachung innerhalb der Sektion. Die Druckmessung soll alle 30 s durchgeführt werden. Hierzu wird die aktuelle Zeit bestimmt und überprüft, ob die Sekunden gleich 30 oder null sind. Um nur eine Messung durchzuführen, wird dieser Wert mit einem Merker (Shift-Register) verglichen. Sind diese beiden Wert unterschiedlich, wird eine Messung der Drücke veranlaßt. Für die Messung sorgt das Programm „Get data from all pressure sensors.vi“. Das Ergebnis ist ein 2D-Array mit den Meßwerten und den dazugehörigen Positionsnummern, an denen gemessen wurde. Die Sekunden (30 oder null) werden an das Shift-Register weitergegeben, so daß keine zweite Messung erfolgt. Die Meßergebnisse werden in einem Shift-Register gesammelt. Es wird die Größe des Registers ermittelt. Übersteigt diese Größe 20 Einträge nicht (siehe Bild oben), wird das neue Meßergebnis dem Array angehängt. Front Panel.vi - Seite 71 Ist das Array allerdings größer oder gleich 20 Einträge (= 10 Messungen), wird das Array abgespeichert und das Ergebnis der gerade durchgeführten Messung als neuer Eingangswert für das Shift-Register benutzt. Der Ausgang „Pressure too high“ der „Get data from all pressure sensors.vi“ wird mit dem Schalter „Pressure Alert“ UNDverknüpft (s.o.). Der Wert (true/ false) dieses Schalters ist ebenfalls Eingabewert für den Parser („Parser.vi“), womit Alarmmeldungen aus anderen Sektionen blockiert werden. Mit der Anweisung „Communication (C - C) Receive.vi“ wird ständig überprüft, ob von einem anderen Rechner ein Verbindungsaufbau gewünscht wird. Trifft dies zu, und wurde eine Anweisung übermittelt, muß diese noch übersetzt und ausgeführt werden. Diese Funktion übernimmt der Parser. Die letzte Funktion, die automatisch ausgeführt wird, ist die Messung der Partialdrücke der AutoScan-Massen. Es wird eine Accuracy von drei angenommen, die für den Normalfall ausreichend ist. Die Messung wird durch die Funktion „PowerSwitch for AutoScan Masses.vi“ eingeleitet. Zum Zeitpunkt der Erstellung dieser Dokumentation war noch kein zeitlicher Abstand, in dem die Messungen stattfinden sollen, bekannt. Dies muß noch, wie bei der Druckmessung, nachgetragen werden. Front Panel.vi - Seite 72 Programm: Full scan- Command to String.vi Eingabe: Multiplier Port Number Accuracy First Mass Last Mass Pressure (Low) Pressure (High) Section Testversion Ausgabe: String Output Komplement: Full Scan- String to Command.vi Kurzbeschreibung: Umwandlung der „GFS“-Parameter in einen String Programmbeschreibung: Die Eingabeparameter werden nacheinander durch die „Format & Append“-Anweisung in Strings umgewandelt. Folgende Formate werden für die Umwandlung verwendet: • • • • • • • • • Multiplier Port Number Accuracy First Mass Last Mass Pressure (Low) Pressure (High) Section Testversion 1d 02d 1d 03d 03d 02d 02d 1d 0/1 d bedeutet dezimale Darstellung. 1, 2 oder 3 gibt die Anzahl der reservierten Stellen an. Die Null an Anfang kennzeichnet, daß alle nicht benötigten Stellen mit Null aufgefüllt werden sollen. Dies erleichtert die De-Konvertierung. Full Scan- Command to String.vi - Seite 73 Programm: Full scan- Data to String.vi Eingabe: Scan Cancelled Ausgabe: String Output Komplement: Full Scan- String to Data.vi Kurzbeschreibung: Umwandlung eines gemessenen Scans in einen String Programmbeschreibung: Es wird zunächst die Größe des Arrays festgestellt. Der zu erzeugende String wird in einem Shift-Register zwischengespeichert. Der Eingangswert ist ein leerer String. Durch den Index der FOR-Schleife wird jedes Element des Arrays mit Hilfe der „Format & Append“-Anweisung in einen String mit dem Format 8.1e (Exponentialzahl, sechs Stellen, eine Nachkommastelle) umgewandelt. Als Eingangsstring wird der Inhalt des Shift-Registers vorangestellt. Zum Schluß wird dem String noch die Information über einen evtl. vorhandenen Abbruch der Messung angehängt und das Ergebnis über „String Output“ ausgegeben. Full Scan- Data to String.vi - Seite 74 Programm: Full scan- String to Command.vi Eingabe: String Input Ausgabe: Multiplier Port Number Accuracy First Mass Last Mass Pressure (Low) Pressure (High) Section Testversion Komplement: Full Scan- Command to String.vi Kurzbeschreibung: Umwandlung eines gesendeten Strings in eine Full Scan-Anweisung Programmbeschreibung: Die einzelnen Parameter werden aus dem String entsprechend seiner vorherigen Formatierung mit der „Format & Strip“-Anweisung zurückgewonnen. Beispiel Multiplier: Für die MultiplierInformation wird eine Stelle an Anfang des String reserviert. Aus dem String wird ab Position 0 (Null) ein Element betrachtet. Dieser Teilstring wird in eine einstellige Dezimalzahl umgewandelt. Beispiel Pressure (High): Für die Information wurden zwei Stellen zur Verfügung gestellt. Aus dem String werden ab Position 12 (diese Position hat sich für diese Information aus den vorherigen Daten ergeben) zwei Zeichen gelöst und diese in eine zweistellige Dezimalzahl umgewandelt. Die Bearbeitung des Strings erfolgt parallel. Alle Daten werden also gleichzeitig umgewandelt. Eine einzelne Transformation, also alle Werte nacheinander, wäre z.B. durch jeweilige Kürzung des String ebenfalls möglich gewesen. Die gewählte Lösung ist allerdings schneller. Full Scan- String to Command.vi - Seite 75 Programm: Full Scan- String to Data.vi Eingabe: Received String Ausgabe: Scan Cancelled Komplement: Full Scan- Data to String.vi Kurzbeschreibung: Umwandlung eines gesendeten Strings in eine Full Scan-Datenarray Programmbeschreibung: Der String wird aus das Shift-Register einer WHILESchleife gegeben. Die Schleife wird so lange wiederholt, bis das Register leer ist. Es werden, entsprechend dem Sendeformat, acht Zeichen am Anfang entfernt. Der Rest des Strings wird wieder auf das Shift-Register gegeben. Die acht separierten Zeichen werden in eine Exponentialzahl mit einer Nachkommastelle umgewandelt. Es wurde „enable indexing“ aktiviert, so daß aus den umgewandelten Zahlen ein Array entsteht. Nach Beendigung der WHILE-Schleife erfolgt die Bearbeitung des entstandenen Arrays. Es wird die Größe des Arrays ermittelt und mit Hilfe der „Array Subset“Anweisung das letzte Element des Arrays entfernt. Das aus dem Scan jetzt entfernte, letzte Element enthält die „Cancel“-Information. Ist diese ungleich Null, wird der Indikator „Cancelled“ auf logisch Eins gesetzt → der Scan ist unvollständig. Full Scan- String to Data.vi - Seite 76 Programm: Get all Quadrupoles (port_all).vi Eingabe: GPA (=false)/ GPS Ausgabe: Port Info out Kurzbeschreibung: Sammeln der vorhandenen Massenspektrometer-Anschlüsse aus allen Sektionen Programmbeschreibung: Beim Aufruf dieses Unterprogramms wird die Datei Vacuum.ini geöffnet, um festzustellen, in welcher Sektion man sich befindet. Es existieren drei Sektionen, folglich müssen die PortKonfigurationen aus der eigenen geladen und aus den verbleibenden beiden Sektionen per Internet abgerufen werden. Es besteht die Wahl, entweder die „Port.sys“ oder die „Port.all“ (=Default) zu laden. Links unten wird entweder „GPS“ für die „Port.sys“Konfigurationen oder „GPA“ für die „Port.all“-Konfigurationen eingegeben. Eine FOR-Schleife wird dreimal durchlaufen. Ist der Index bei der eigenen Sektionen angekommen, wird die CASE-Anweisung „true“ bearbeitet. Entspricht der Index nicht der eigenen Sektion, wird an den entsprechenden Rechner die Anweisung „GPA“ → Get Port.all geschickt. Get all Quadrupoles (port_all).vi - Seite 77 Wurde keine Antwort erhalten, wird die Funktion „Communication (C - C) Receive“ aufgerufen, um das Ergebnis des anderen Rechners abzuwarten. Die ersten Zeichen des empfangenen String enthalten die Information, wie viele Konfigurationen gesendet wurden. Diese Zeichen werden abgeschnitten, in eine Zahl umgewandelt und als Eingang für die Wiederholungszahl einer FOR-Schleife genutzt. Der empfangene String wird auf ein Shift-Register geführt. Die Konfigurationen werden in einem 2D-Array zusammengefaßt. Es wird zunächst ein leeres Array initialisiert. Eine Konfiguration enthält acht Speicherplätze für die sie betreffenden Informationen. Die erste FOR-Schleife wird also acht mal wiederholt. Die Anzahl der möglichen Konfigurationen wird wie oben beschrieben gewonnen. Aus dem empfangenen String werden zwei Zeichen vom Anfang getrennt. Der Rest des Strings wird wieder auf das Shift-Register geführt. Die beiden Zeichen werden in eine Dezimalzahl umgewandelt und in das Zielarray eingesetzt. Ergebnis ist die rekonstruierte „Port.all“-Datei eines angesprochenen Rechners einer Sektion. Diese wird auf die eingangs erwähnte FORSchleife geführt, bei welcher „enable indexing“ aktiviert wurde. Get all Quadrupoles (port_all).vi - Seite 78 Ist der Index gleich der Kennziffer der eigenen Sektion, wird die Datei Port.all geladen und ebenfalls auf die äußerer FOR-Schleife geführt. Sind alle drei Konfigurationen vorhanden, ist das Ergebnis ein 3DArray. Aus diesem Array muß eine Konfiguration gewonnen werden, die nur die Information enthält, an welcher Stelle sich ein Massenspektrometer befindet und in welcher Sektion es zu finden ist. Die Position bezieht sich hierbei auf das Bild aus „Get Position-numbers in other Sections.vi“. Ein entsprechendes Array wird erzeugt: Die erste FOR-Schleife wird dreimal (weil 3D-Array) durchlaufen. Die maximale Größe einer Port.all-Datei liegt bei 18 Konfigurationen. Diese Zahl bestimmt die Anzahl der Durchläufe der zweiten FOR-Schleife. Get all Quadrupoles (port_all).vi - Seite 79 Mit Hilfe der „Array Subset“- und der „Reshape Array“-Funktion wird eine Konfiguration selektiert. An der Position 2 (= drittes Element) befindet sich die Information über die angeschlossene Hardware. Die Bearbeitung wird nur fortgesetzt, wenn ein Massenspektrometer (Quadrupol) angeschlossen ist, ansonsten wird zur nächsten Konfiguration gewechselt. Die Zieladresse im Ergebnisarray ergibt sich aus der Positionsnummer des Massenspektrometers in der rechnereigenen Konfiguration und der entsprechenden Positionsnummer im Bild (s.o.). Diese Daten liegen als Liste für jede Sektion vor (hier: Sektion Central-Cluster). Die eigentliche Position wird durch die Funktion „Number of search number in an Array“ gefunden. Die Port-Nummer des gefundenen Massenspektrometers wird in das Ergebnisarray an Position 1 eingesetzt. An Position 0 (Null) wird der Name der Sektion plaziert. Ergebnis ist das Array . Get all Quadrupoles (port_all).vi - Seite 80 Programm: Get data from all pressure sensors.vi Eingabe: keine Ausgabe: Measurement data Position of measurement Kurzbeschreibung: „Caller“, um alle Drucksensoren auszulesen. Programmbeschreibung: Die Datei „Port.sys“ wird geöffnet und die Größe bestimmt: Zwei leere Array werden erzeugt, um die gemessenen Daten dort und die Position in der Konfigurationsanzeige unterzubringen. Eine FOR-Schleife wird so lange durchlaufen, bis alle Konfigurationen bearbeitet worden sind. Auf der Position 2 ist jeweils die Hardwarekonfiguration gespeichert (→ siehe Port.sys). Handelt es sich um eine Pirani- (3) oder eine Penning-(4) Meßröhre, wird die Messung eingeleitet. Bei anderen Hardwareeinstellungen wird an die aktuelle Position der Liste „Null“ weitergegeben. Über die Position 1 wird der zugehörige Port definiert und über Speicherplatz 3 die Location. Get data from all pressure sensors.vi - Seite 81 Der Meßwert wird nun im Array ebenso ersetzt, wie die Location und die Liste anschließend um ein Element vergrößert. Nach Abschluß der Durchsuchung wird die Liste um das letzte Element gekürzt: Es enthält nur eine null vom letzten Durchlauf! Get data from all pressure sensors.vi - Seite 82 Programm: Get Info about Quadrupole.vi Eingabe: Input Array Index Ausgabe: Quadrupole informations Kurzbeschreibung: Zusammenstellung eines Arrays mit für ein Massenspektrometer relevanten Daten: • Port Nummer • Multiplier (0 - ohne; 1 - mit) • Drucksensor 1 (Port-Nummer) • Drucksensor 1 (Location) • Drucksensor 2 (Port-Nummer) • Drucksensor 2 (Location) Programmbeschreibung: Im „Input Array“ sind alle erforderlichen Informationen für alle angeschlossenen Massenspektrometer enthalten. Welches Massenspektrometer ausgewählt ist, legt der „Index“ fest. Alle Angaben werden aus der zweiten Dimension gezogen (siehe hierzu auch: Port.sys) und in entsprechendem Format gebündelt. Bei der Überprüfung der angeschlossenen Hardware wird gefragt, ob diese gleich eins (Quadrupole ohne Multiplier) ist und entsprechend Multiplier gleich eins (mit Multiplier) oder null (kein Multiplier vorhanden) gesetzt. Es ist durch den Aufruf dieses Programm ausgeschlossen, daß, außer diesen beiden, eine andere Belegung vorhanden ist (z.B. Pirani-Meßröhre). Das Ergebnis wird in dem 1D-Array „Quadrupole informations“ ausgegeben. Get info about Quadrupole.vi - Seite 83 Programm: Get Leak Check.vi Eingabe: Select all (=0)/activated Selected Quadrupole Mass Response (Speed) Range (low press 11) Range (high press 7) Ausgabe: Pressure Kurzbeschreibung: Beschaffung/ Messen des Druckes einer Masse (Lecksuche) Programmbeschreibung: Der Name der eigenen Sektion wird durch öffnen der Datei Vacuum.ini festgestellt. Je nachdem, ob der Eingang „Select all (=0)/ activated“ gleich null oder eins ist, werden entweder alle Massenspektrometer durch Benutzen der Konfiguration Port.all zur Messung herangezogen ... oder es werden nur die nicht aktivierten Sektoren genutzt. Die Massenspektrometer werden selektiert und alle Informationen über deren Konfiguration zusammengetragen. Get leak check.vi - Seite 84 Falls erforderlich, wird das entstandene Array in die richtige (definierte) Ausrichtung gebracht. Die Pfade für die Zustandsdatei und die Datei Vacuum.ini werden definiert. Sie werden für die spätere Verriegelung benötigt. Die Messung erfolgt in einer WHILE-Schleife. Diese wird so lange durchlaufen, bis das vorgegebene Meßgerät gefunden wurde. Dieses wurde in der Darstellung von „Get Position-numbers in other Sections.vi“ ausgewählt. Eingang der CASE-Anweisung ist die aktuelle Sektionsnummer. Die Positionsnummer werden den Numerierungen in Tabellenform aus der Konfiguration zugeordnet (hier: Central-Cluster). Mit „Selected Quadrupole“ wird die Konfigurationsnummer des gewählten Massenspektrometers bestimmt. Ist diese gleich 0 (Null) wird in diesem Programm nichts mehr unternommen. Die Sektionsnummer wird inkrementiert. Ist sie größer als zwei (es gibt nur drei Sektionen), wird sie auf Null zurückgesetzt. Die Bestimmung der oben beschriebenen Konfigurationsnummer beginnt erneut. Für die spätere Bearbeitung wird die Differenz aus Low- und High-Press gebildet (= Anzahl der zu durchlaufenden Meßdekaden) Außerdem werden diese beiden Werte in Strings umgewandelt. (s.u.) Erste CASE-Anweisung (Read with this Computer): Es erfolgt die Abfrage, ob die gerade bearbeitete Sektion gleich der Sektion ist, in der der aufrufende Rechner steht. Get leak check.vi - Seite 85 Zweite CASE-Anweisung (messen/ Anweisung zum Messen): True: Get pressure from an other Computer Das gewählte Massenspektrometer wird nicht durch den Rechner verwaltet, von dem aus die Messung gestartet wurde. Über die „Send“-Funktion wird die Lxx-Anweisung an den Zielrechner geschickt. Dieser Rechner ist durch die aktuelle Sektionsnummer definiert. xx sind hierbei Platzhalter für die Konfigurationsnummer. Alle zur Messung nötigen Werte werden mit übertragen. Hierzu werden die Parameter in Strings umgewandelt (s.o.) und mit der Lxx-Anweisung verschickt. Das rechts stehende Datenformat wird für die Parameter angegeben. Wurde durch die „Send“-Funktion keine Antwort bekommen, wird auf diese in einer WHILE-Schleife gewartet. Als Ergebnis der Übertragung wird erwartet, daß das gesendete Kommando (Lxx) zurückgesendet wird. Das Ergebnis wird um das Command Acknowledgement reduziert und anschließend in eine Exponentialzahl umgewandelt. False: Pressure OK? Befindet sich das gewählte Massenspektrometer in der eigenen Sektion, kann vom eigenen Rechner aus die Messung gestartet werden. Get leak check.vi - Seite 86 Durch die Tabelle (s.o.) wurde die Konfigurationsnummer bestimmt. Durch die Funktion „Select Array Line.vi“ (unten links) werden alle Konfigurationsnummern selektiert. Mit der Funktion „Number of search Numbers in an Array.vi“ wird die Position der relevanten Konfiguration bestimmt. Alle anderen nötigen Werte können aus ihr abgeleitet werden. Der Multiplier (Position 1) wird, je nachdem, ob er ein- oder ausgeschaltet wird, auf ein Drucklimit von 5,0E-7 mbar oder 5,0E-5 mbar gesetzt. Die Überprüfung des Druckes erfolgt mit den Positionen 2 und 3, bzw. 4 und 5. In ihnen sind die Port-Nummern und die Anschlüsse der Druckmeßgeräte angegeben. Der Druck beider „Read TPG300 (pressure).vi“-Funktionen muß geringer als das Limit sein, sonst wird mit der Messung nicht fortgefahren. Ist der Druckwert zu hoch, wird der Meßwert auf -1 gesetzt. Dritte CASE-Anweisung (pressure too high/OK): Kann der Druck gemessen werden, tritt eine WHILE-Schleife in Kraft. Aufgrund der Verriegelung durch die AutoScan-Struktur kann eine momentane Messung blockiert sein. Die Schleife wird so lange durchlaufen, bis eine Messung möglich ist. Aus der Datei State.ini wird in Zusammenhang mit der Sektionskennziffer der Zustand von AutoScan abgefragt, d.h.: Sind die Massenspektrometer gerade in Benutzung? Hier zeigt sich der Vorteil der Lecksuche in einem deaktivierten Sektor: Die Suche wird nicht durch die routinemäßigen Messungen unterbrochen! Get leak check.vi - Seite 87 Ist der AutoScan gerade in dieser Sektion aktiv, wird 15 Sekunden gewartet und die Frage nach dem Zustand der Massenspektrometer anschließend erneut gestartet. Werden die Massenspektrometer gerade nicht durch ein anderes Programm (AutoScan) genutzt, werden diese gesperrt. An die Speicherstelle für den Lecktest (3) wird eine Eins geschrieben. Will ein anderes Programm auf die Massenspektrometer zugreifen, wird dieses durch diese Verriegelung unterbunden. Ist eine Messung möglich, wird eine FOR-Schleife aktiviert. Diese wird so oft durchlaufen, wie Dekaden zur Untersuchung vereinbart waren (s.o.: Subtraktion von range high und low). Ein Array wird mit Null initialisiert (links). Es wird tatsächlich nur ein Wert gemessen. Es kann aber die Funktion „Replace new Scan data.vi“ genutzt werden, die als Eingabe als Meßdaten nur ein Array erlaubt. Von dem maximalen Wert (niedrigste Druckmeßdekade) wird jeweils der Index der FOR-Schleife abgezogen und zusammen mit den Parametern Port Number, Multiplier, Response und Mass dem Unterprogramm „Ask for Leak Check.vi“ zugeführt. Get leak check.vi - Seite 88 Ergebnis dieses Unterprogramms ist das Command Acknowledgement. Ist es ungleich „N“ für „not acknowledged“, wird in einer WHILE-Schleife auf das Ergebnis der Messung gewartet. Ist es nach Nachfrage (o) abrufbereit, wird vom Massenspektrometer A1 gesendet, andernfalls A0. Die Port Nummer wird der Funktion „Replace new Scan data.vi“ zusammen mit den alten Scan-Daten zugeführt. Ergebnis ist das aktuelle Meßergebnis. Diese Meßergebnis muß noch aus dem Array selektiert werden, bevor es über Pressure ausgegeben wird. Sind alle Meßdekaden durchlaufen, werden Filament und Multiplier ausgeschaltet (hier dargestellt: Filament off). Get leak check.vi - Seite 89 Programm: Get Masses for AutoScan Masses.vi Eingabe: Last config Older config Ausgabe: Masses to Show All Set? Kurzbeschreibung: Zusammenstellung der Massen für die Darstellung von AutoScan Programmbeschreibung: Eine FOR-Schleife wird gebildet. Entsprechend der sieben zu vergebenden Plätze für die Darstellung, wird diese Schleife siebenmal durchlaufen. Das Ergebnis der letzten Konfiguration wird auf ein Shift-Register gegeben und verändert. Von der älteren Konfiguration wird das jeweils indexierte Element entnommen. Mit der Funktion „Number of search numbers in an Array.vi“ wird festgestellt, ob das gewählte Element bereits in der vorhandenen Konfiguration enthalten ist. Ist dies der Fall (Anzahl ≠ 0) und ist noch ein Platz in dem Zielarray frei, wird das indexierte Element (die indexierte Masse) in das Array aufgenommen. Ist die alte Konfiguration komplett abgefragt worden, wird das Ergebnis durch „Masses to Show“ ausgegeben. „All Set?“ ist dann gleich true, wenn alle Plätze belegt wurden. Get Masses for AutoScan Masses.vi - Seite 90 Programm: Get Names of Section Computers.vi Eingabe: - Ausgabe: Section Computer Names Kurzbeschreibung: Konvertierung der Rechnernamen aus der Datei „Names.sys“ in ein String-Array Programmbeschreibung: Die Datei „Names.sys“ wird geöffnet und die enthaltenen Daten auf das ShiftRegister einer FOR-Schleife gegeben. Es sind insgesamt vier Rechner im System vorhanden, demnach wird die Schleife viermal durchlaufen. Die Namen sind durch Tabulatoren voneinander getrennt. Mit der ersten „Split String“-Anweisung wird ein Tabulator gesucht und der davor stehende Name abgetrennt. Das Ergebnis wird an das Ende der Schleife geführt, bei der „enable indexing“ aktiviert wurde (es wird aus allen Namen ein Array gebildet). Der Rest des Strings wird auf eine weitere „Split String“-Anweisung geführt. Hier wird das erste Zeichen, der Tabulator, vom Rest des Strings getrennt. Das Ergebnis wird in „Section Computer Names“ ausgegeben. Get Names of Section computers.vi - Seite 91 Programm: Get next COM-Adress.vi Eingabe: Old COM-Port-Adress Ausgabe: New COM-Port-Adress Kurzbeschreibung: Rotation der COM-Adressen (max. 18) Programmbeschreibung: Die alte Port-Adresse wird inkrementiert. Wird dieser Wert größer als 18, so wird er auf zwei zurückgesetzt, ansonsten wird er beibehalten. Get next COM - Adress.vi - Seite 92 Programm: Get Position Numbers in other Sections.vi Eingabe: Caller? Calling Computer Ausgabe: Port Info out Kurzbeschreibung: Grafische Übersicht über alle Ports, herausfinden einer Portinformation Bedienung: Diese Oberfläche erscheint z.B. wenn ein kompletter Scan gemessen werden soll, die Portinformation, an der das gewünschte Massenspektrometer angeschlossen ist, aber nicht bekannt ist. Im Bild oben sind alle Ports eingetragen. Bei Aufruf dieses Programms werden alle Nicht-Massenspektrometer ausgeblendet. Durch Anklicken mit der Maus wird ein Massenspektrometer ausgewählt. Die gewünschte Konfiguration wird in das bearbeitende Programm übernommen. Get Position Numbers in other Sections.vi - Seite 93 Programmbeschreibung: Zunächst werden alle Port-Konfigurationen geladen. Diese Aufgabe übernimmt das Unterprogramm „Get all Quadrupoles (port_all).vi“. Es werden die aktivierten Sektoren benötigt, also die „port.sys“-Dateien, daher wird der entsprechende Eingang = true gesetzt. Als nächstes müssen die Buttons, an deren Position kein Massenspektrometer vorhanden ist, unsichtbar gemacht werden. Zu diesem Zweck wird eine FOR-Schleife erzeugt, die 38 mal (= Anzahl der Buttons) durchlaufen wird. Die gesammelten Portinformationen werden auf ein vorhandenes Massenspektrometer überprüft. Ist keines vorhanden, ist an dieser Position 0 (Null) eingetragen. Der entsprechende Button wird mit der Attribute Node „disabled“ auf 2 (zwei) geschaltet. Hiermit wird der Button zum Anklicken ausgeschaltet und grau dargestellt. Ist der betrachtete Platz mit etwas anderem als Null belegt (→ Massenspektrometer vorhanden), wird der entsprechende Button zum Anklicken freigegeben (enabled). Die Überprüfung, ob ein Button angeklickt wurde, findet in einer WHILE-Schleife statt. Diese wird so lange durchlaufen, bis der „Cancel“-Button gedrückt oder ein Massenspektrometer ausgewählt wurde. Die Buttons sind in einem Cluster zusammengefaßt. Um herauszufinden, welcher Button gedrückt wurde, ist es erforderlich die „Unbundle by name“-Anweisung zu benutzen. Hier werden alle im Cluster vorhandenen Elemente mit ihrem Namen gesplittet (Bild: siehe nächste Seite). Jeweils zehn Ausgänge werden zusammengefaßt und zu der Funktion „Whitch Input ist true?“ geführt. Ergebnis dieser Funktion ist die Aussage, ob ein Ausgang gleich true ist und wenn ja, welcher. Ist ein Ausgang gleich true, also einer der selektierten Ausgänge (Massenspektrometer) ausgewählt, wird das Ergebnis mit der Dekadennummer addiert (hier: dritte Dekade, Dekadennummer = 30), andernfalls ist das Ergebnis gleich Null. Get Position Numbers in other Sections.vi - Seite 94 Wurde aus einem der vier Dekaden gemeldet, daß ein Button gedrückt wurde, werden alle Ergebnisse addiert und zur Positionsbestimmung im Array dekrementiert. Für die Portinformation werden nur die Sektion, in der das gewählte Massensteht, spektrometer und die in der für diese Sektion gültige Positionsnummer in der eigenen Konfiguration benötigt. Diese beiden Informationen werden zur weiteren Bearbeitung durch „Port Info out“ ausgegeben. Durch die ODER-Verknüpfung erfolgt die Beendigung dieses Programms. Get Position Numbers in other Sections.vi - Seite 95 Programm: Get Tunnel-Check.vi Eingabe: Tube (false = 1) Mass Accuracy Port Info in Ausgabe: Measurement out Kurzbeschreibung: Abfrage des Partialdrucks einer Masse an allen sieben Massenspektrometern eines Rohrs Programmbeschreibung: Die Pfade für die Zustandsdatei und „Vacuum.ini“ werden für die spätere Verriegelung definiert. Die Beziehungen zwischen den Positionsangaben und den Angaben der jeweiligen Konfigurationen werden definiert. (s.a. „Get Position-Number in other Sections.vi) Die Datei Vacuum.ini wird geöffnet, um festzustellen, in welcher Section dieses Programm aufgerufen wurde. Die Daten für Accuracy und die gewünschte Masse werden so aufbereitet, das sie, falls es nötig sein sollte, an eine andere Sektion verschickt werden können. Eine FOR-Schleife wird so lange durchlaufen, bis alle definierten Massenspektrometer entlang eines Rohres angefragt wurden (sieben mal). Durch den Index wird jedes Massenspektrometer ausgewählt (Definition: s.o.). Durch „Port Info in“ werden die nötigen Daten zur Verfügung gestellt. Ist die angegebene Positionsnummer gleich Null, ist ein Fehler aufgetreten: Get Tunnel - Check.vi - Seite 96 Es handelt sich nicht um ein Massenspektrometer. Somit wird auch keine Messung durchgeführt. Die zweite Überprüfung findet hinsichtlich de Sektion statt. Stimmen die Sektionsnummer des Massenspektrometers und die eigene überein, wird die Messung durch den aufrufenden Rechner durchgeführt. Die Messung durch ein Massenspektrometer kann durch die Funktion AutoScan blockiert sein. Damit nicht zwei Programme gleichzeitig auf ein Massenspektrometer zugreifen, wird eine Verriegelung in der Datei „State.ini“ durchgeführt. Die Dateien „Vacuum.ini“ und „State.ini“ werden geöffnet. Enthält die State.ini an der Stelle für AutoScan einen Eintrag, wird keine Messung durchgeführt. Ist ein Eintrag vorhanden, wartet das Programm 15 Sekunden und liest die Zustandsdatei dann erneut, um zu sehen, ob inzwischen eine Freigabe der Massenspektrometer erfolgte. Ist hingegen keine Verriegelung aktiv, wird die Verriegelung für den Tunnelcheck (Pos. 2) eingefügt und abgespeichert. Eine Messung kann nun erfolgen. Die Messung erfolgt mit Hilfe der Funktion „Get Leak Check.vi“. Sie wird im Bereich von 1E-11 mbar bis 1E-7 mbar an allen verfügbaren Massenspektrometern durchgeführt. Nach Beendigung der Messungen wird die WHILE-Schleife abgebrochen. Und die Ergebnisse durch ausgegeben. Get Tunnel - Check.vi - Seite 97 Das gewünschte Massenspektrometer wird nicht durch den eigenen Rechner verwaltet: Aus den Parametern wurde bereits ein sendefähiger String gebildet. Mit der Anweisung Lxx wird der Zielrechner mit der Messung beauftragt. Die Funktionsweise ist analog zu der eines Lecktests. Get Tunnel - Check.vi - Seite 98 Programm: Interpolationpolynom of Newton.vi Eingabe: Tube (false = 1) Measurement data Ausgabe: Maximum at (measured from CC) Maximum at (measured from EH) Function out Kurzbeschreibung: Interpolation einer Funktion beim Tunneltest, Ausgabe des Maximums Programmbeschreibung: Die Funktionsweise und die Rechenvorschrift für die PolynomenInterpolation nach Newton wurde in einem gesonderten Kapitel behandelt. Allgemeines Ergebnis der Berechnungen ist folgendes Polynom: y = a0 + a1 (x-x0) + a2 (x-x0)(x-x1) + ... + an (x-x0)(x-x1)...(x-xn) Die Datei „System.ini“ wird geöffnet. In ihr sind die Abstände der Massenspektrometer zum CentralCluster und die Gesamtentfernung Central-Cluster ↔ Endhouse abgespeichert. Mit dem Schalter „Tube“ wird entschieden, ob das Rohr 1 zwischen Zentralhaus und Endhaus 1 oder das Rohr 2 zwischen Zentralhaus und Endhaus 2 betrachtet werden soll. Dementsprechend wird ein Array mit den relevanten Maßen ausgewählt. Legt man über ein Rohr ein Koordinatensystem mit dem Ursprung in dem im Zentralhaus definierten Fixpunkt, bilden diese Maße die Werte auf der X-Achse. Die zugehörigen Y-Werte werden in „Measurement data“ definiert. Die laut Rechenvorschrift erforderlichen Wertepaare werden dem Berechnungsschema der Koeffizienten des Polynoms zugeführt (Beispiel: Berechnung von a1). Bei der Berechnung eines Maximums in der Funktion wird nicht nur der Abstand vom Zentralhaus aus angegeben, sondern auch gemessen vom jeweiligen Endhaus. Interpolationpolynom of Newton.vi - Seite 99 Die Angabe des Abstandes des Fixpunktes im Endhaus vom Zentralhaus ist nicht unbedingt erforderlich, sie stellt beim Finden eines Leckes nur eine Erleichterung dar (falls sich das Leck näher am Endhaus befindet). Ist dieser Wert nicht angegeben (<100), wird der Abstand vom letzten Massenspektrometer zur Angabe genutzt. Die vollständige Funktion ist in dieser Formular Node zusammengefaßt: Die Funktion an sich ist allerdings noch nicht darstellbar. Es wird mit Hilfe von künstlich erzeugten X-Werten ein Array erzeugt, das die Ergebnisse (Y- Werte) der entstandenen Funktion darstellt. In einer FOR-Schleife werden verschiedene Stufen der Genauigkeit der X-Werte durchlaufen. Zunächst wird mit einer Teilung vom 100 begonnen (100 Werte werden aus der Funktion gewonnen). Die entspricht einer Bestimmungsgenauigkeit eines Leckes von 6 m. Diese Teilung wird immer mehr erhöht, bis eine Teilung von 1 mm erreicht wurde. Sinnvoll ist diese Rechengenauigkeit nicht, da allein durch Meßungenauigkeit wesentlich größere Fehler auftreten. Möglich ist eine Genauigkeit von ± 10 cm. Die Teilungen werden in Form eines Array abgelegt. Eine FOR-Schleife wird so oft durchlaufen, so viele Array-Elemente es gibt. Ein Shift-Register wird erzeugt. Es enthält den jeweiligen Maximalwert der Funktion (Maximalwert des Arrays). Ist der Index gleich Null, wird das erzeugte Array (Teilung = 100) zu Anzeige ausgegeben. Interpolationpolynom of Newton.vi - Seite 100 Links unten wird der Index eingegeben, links oben die vollständige Länge (je nach Angabe bis zum letzten Massenspektrometer oder bis zum Endhaus → s.o.) und in der links in der Mitte das oben beschriebene Array mit den Teilungen. Durch den Index wird die an der betreffenden Stelle stehende Teilung aus dem Array gelöst. Gleichzeitig werden mit der „Array Subset“-Anweisung alle vom Anfang bis zu der indexierten Stelle vorhandenen Teilungen selektiert und anschließend miteinander multipliziert. Die gesamte Länge wird durch die Anzahl der Teilungen geteilt. Das Ergebnis ist die neue Schrittweite, in der Y-Werte der Funktion berechnet werden sollen, um eine genauere Position des Maximums zu bestimmen. Die aktuelle Schrittweite wird verdoppelt und das Ergebnis als Faktor für die FOR-Schleife genutzt. Hieraus ergibt sich, daß sowohl vor, als auch nach dem bisher angenommenen Maximum der Funktion gleich viele Zwischenschritte berechnet werden. Die Schrittweite, multipliziert mit der Anzahl der Schritte (einseitig) wird von dem bisherigen Maximum abgezogen. Dadurch wird das Maximum in der Mitte des betrachteten Bereiches gelegt. Dieser Abzug wird nicht beim ersten Durchlauf durchgeführt. Hier wird das Maximum noch bei Null angenommen. Das Ergebnisarray wird in einer FOR-Schleife erstellt. Die Schrittweite wird mit dem Index multipliziert und das Ergebnis zu dem vorher berechneten Abstand zum Maximum (Anfangszustand: 0m) addiert. Am Ausgang der FOR-Schleife wurde „enable indexing“ eingeschaltet. Interpolationpolynom of Newton.vi - Seite 101 Das Ergebnisarray wird auf seinen Maximalwert überprüft. Dieser Wert bildet die Grundlage für den Ansatz der nächsten Berechnung. Hierzu wird der Maximalwert auf das ShiftRegister geführt. Nach Beendigung aller Durchläufe wird das zuletzt ermittelte Maximum der Funktion über ausgegeben. Der entsprechende Wert für den Abstand von Endhaus, bzw. letzten Massenspektrometer aus gesehen ergibt sich durch die Subtraktion des jeweiligen Abstandes zum Fixpunkt im Zentralhaus. Interpolationpolynom of Newton.vi - Seite 102 Programm: Leakcheck CheckCall.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Dialogfenster, ob He-Lecktest, der Tunneltest oder keines von beiden durchgeführt werden soll Bedienung: Wird vom Hauptmenü der Punkt „Leakcheck“ gewählt, erscheint folgendes Dialogfenster: Durch Anklicken des jeweiligen Testes gelangt man auf den spezifizierten Bildschirm. Mit „Cancel“ kommt man zurück zum Hauptmenü Programmbeschreibung: Die Abfrage der Tasten ist in einer WHILE-Schleife realisiert. Wird eine der beiden „Test“-Tasten gedrückt, wird, je nach Wahl, der He-Lecktest durchgeführt oder der Tunneltest wird gestartet. Das Drücken einer Taste, auch des „Cancel“-Buttons, hat zur Folge, das dieses Programm beendet wird und die Dialogbox somit verschwindet. Leakcheck CheckCall.vi - Seite 103 Programm: Linear Interpolation.vi Eingabe: Y0 Y1 X X1 Ausgabe: Interpolated Y-value Kurzbeschreibung: Lineare Interpolation eines Wertes zwischen zwei Punkten im Koordinatensystem Programmbeschreibung: Bedingung: Der Wert X, zum dem der Y-Wert interpoliert werden soll, ist genau 1 (Eins) größer, als der Wert X0. Sind die beiden Y-Werte gleich, wird einer der beiden ausgegeben. Es ist im Fall der Linearität damit zu rechnen, daß ein Wert zwischen den beiden Punkten einen betragsmäßig gleichen Y-Wert besitzt. Sind die beiden Werte ungleich, kann anhand der Geradengleichung ein beliebiger Wert interpoliert werden: y - y0 = m * ( x - x0 ) mit Y1 - Y0 m=X -X 1 0 Diese Formel ist in einer Formular Node untergebracht: Das Ergebnis wird über „Interpolated Y-value“ (rechts) ausgegeben. Linear Interpolation.vi - Seite 104 Programm: Make AutoScan data showable.vi Eingabe: Actual time Span Resolution Port Ausgabe: Showable data Plot names Kurzbeschreibung: Zusammenstellung und Sortieren von AutoScan-Daten Programmbeschreibung: Die Datei „Port.sys“ wird geöffnet, um die aktuelle Konfiguration zu laden. Die Größe der Datei wird festgestellt und diese als Faktor für eine FOR-Schleife genutzt. Ein Array mit -1 und ein Zähler mit den Anfangswert 0 werden erzeugt und auf ein ShiftRegister gegeben. Aus dem Array mit den Port-Konfigurationen wird die Position 2 selektiert. In an dieser Stelle eine 1 oder eine 2 eingetragen, d.h. befindet sich an am betrachteten Port ein Massenspektrometer, wird ein Info-Array darüber erzeugt. Befindet sich ein anderer Eintrag an der Stelle, wird ein Array mit Inhalt -1 erzeugt. Die erste Position (0) des neuen Arrays wird mit der eingegebenen Port-Nummer verglichen. Sind sie gleich, wird die Position, in der die richtige Konfiguration gefunden wurde, (= Index der FORSchleife) in das „-1“-Array gespeichert und der Zähler um inkrementiert. Stimmten Port-Nummer und der Array-Port nicht überein, wird zur nächsten Konfiguration übergegangen. Das erste Element aus dem „-1“-Array wird nach Beendigung der FOR-Schleife selektiert. Make AutoScan data showable.vi - Seite 105 Der Pfad zu den statistischen Daten wird definiert. Es wird eine Liste mit allen verfügbaren Speicherdaten erstellt. Die Filenamen, die als Array von Strings vorliegen, werden durch die Funktion „Sort Files.vi“ in eine aufsteigende Reihenfolge gebracht. Die Datei „Scan.ini“, in der alle Änderungen der AutoScanKonfigurationen gespeichert sind, wird geöffnet. Ein Shift-Register mit der Länge der „Scan.ini“Datei wird angelegt. Ein Zielarray wird eingerichtet, in dem später die noch auszuwählenden Massen von AutoScan, die angezeigt werden sollen, stehen sollen. In der WHILE-Schleife wird die jeweils letzte Konfiguration von AutoScan selektiert und zusammen mit den bereits zusammengetragenen AutoScan-Daten dem Unterprogramm „Get Masses for AutoScan Masses.vi“ zugeführt. Ziel ist es, alle Speicherplätze (max. sieben) mit Massen zu belegen, die schon einmal überwacht wurden. Erläuterung: Bei der Definition der automatisch zu überwachenden Massen ist es nicht erforderlich, alle freie Speicherplätze zu belegen. Sind daher bei dem Aufruf dieses Programms ein oder mehrere Plätze frei, können diese mit Massen belegt werden, die in vorherigen Konfigurationen vorhanden waren, dann allerdings ausgetauscht wurden. Die WHILE-Schleife wird so lange wiederholt, bis alle sieben Speicherplätze belegt wurden, oder die keine weiteren Konfigurationen vorhanden sind. Aus den Massen ergibt sich die Bezeichnung der Plotnamen. Ihnen wird jeweils „Mass ...“ angehängt. Die gesammelten Plotnamen werden als Array ausgegeben. Make AutoScan data showable.vi - Seite 106 Aus der aktuellen Zeit und dem darzustellenden Span wird die Differenz gebildet, um einen Anhaltspunkt zu haben, wie weit zurück die gemessenen Daten untersucht werden müssen. In dieser WHILE-Schleife findet die eigentliche Zusammenstellung der AutoScan-Daten statt. Die Shift-Register enthalten oben ein acht Daten großes Array ohne Inhalt und unten die sortierten Filenamen, wo die Daten zu finden sind. Sieben Plätze sind hierbei für die Meßdaten und einer für die Meßzeit reserviert. Der letzte Filename wird mit der „Index Array“-Anweisung selektiert und anschließend mit der „Array Subset“-Anweisung aus dem Array gelöscht. Die restlichen Filenamen werden auf das ShiftRegister zurückgegeben. Das gewählte File wird geöffnet und die Daten gelesen. Mit der Funktion „Select Array-row.vi“ wird das Teilarray des gewünschten Ports selektiert. Aus dem Dateinamen ist die Meßzeit ersichtlich. Trennt man den ersten Buchstaben und wandelt die verbleibenden Zeichen zurück in Ziffern, hat man das Speicherdatum. Dieses wird an Position Sieben im Zielarray gespeichert. Das Speicherdatum, das Zielarray, das durch den Port gewählte Teilarray, die Namen der zusammengestellten Massen und das Array „Scan.ini“ werden dem Unterprogramm „Build AutoScan Array.vi“ zugeführt. Make AutoScan data showable.vi - Seite 107 In diesem Unterprogramm werden die Daten für die gerade betrachtete Messung entsprechend zusammengestellt. Diese WHILE-Schleife wird so lange wiederholt, bis entweder keine weiteren Meßdateien vorhanden sind, oder bis der durch die Differenz der aktuellen Zeit und dem gewählten Zeitraum der Betrachtung sich ergebende Anfangszeitpunkt unterschritten ist. Das Ergebnisarray wird invertiert. Die Daten wurden von der letzten Messung aus betrachtet in das Zielarray eingetragen, dargestellt werden soll aber die korrekt zeitliche Abfolge (Zeitstrahl von links nach rechts). Die Aufnahme der Meßwerte wird sicher nicht ausschließlich periodisch erfolgen. Um in der Darstellung Sprünge, die durch zwei verhältnismäßig weit auseinanderliegende Meßwerte entstehen, müssen die zusammengestellte Meßwerte noch einer linearen Achse angepaßt werden. Es wird ein Array erzeugt, das, entsprechend der gewählten Auflösung in dem gewünschten Zeitbereich, immer gleiche zeitliche Abstände einhält. Für jede gewählte Masse wird die Anpassung innerhalb einer FORSchleife vorgenommen. Die eigentliche Umsetzung in des neue Zeitformat übernimmt das Unterprogramm „Format AutoScan Data.vi“. Dieses benötigt neben den jeweiligen Daten, die mit der Funktion „Select Array-line.vi“ durch den Index der FOR-Schleife nacheinander selektiert werden, die Eingabe der ursprünglichen Zeitachse. Sie ist im Array in der Zeile sieben gespeichert (oben links: „Select Array line.vi“, Zeile 7). Weiterhin wird das Zielformat als Array eingegeben und, als Entscheidungshilfe, die halbe Größe zweier zeitliche Abstände im Zielarray. Ist zres der Abstand zwischen zwei Zeitformatangaben, wird ein Wert aus dem ursprünglichen Array im Intervall zi ± zres/2 zugeordnet. Make AutoScan data showable.vi - Seite 108 Datei: Names.sys Speicherformat: <Name Rechner Central-Cluster><Name house1><Name Rechner Endhouse 2> =3*4 Buchstaben; Beispiel: geo1geo2geo3 Beschreibung: Diese Datei enthält die Namen der jeweils eingesetzten Rechner in den verschiedenen Häusern. Rechner End- Diese Namen werden benötigt, um die Kommunikation der Rechner untereinander zu ermöglichen. Es sind nicht mehr als vier Buchstaben erlaubt (sonst Änderung in „Communication“), die den tatsächlichen Rechnernamen in der Netzwerkumgebung darstellen. Diese Datei enthält, durch <CR><LF> getrennt, die InternetAdressen der beteiligten Rechner: 1. Zentralhaus 2. Endhaus 1 3. Endhaus 2 alle weiteren: Steuerrechner (extern) Nemes.sys - Seite 109 Programm: No EOC Error.vi Eingabe: Error in Ausgabe: Error out Kurzbeschreibung: Rücksetzen eines „Connection closed“ Fehlers Anmerkung: Dieses Programm stammt aus der LabVIEW-Bibliothek Programmbeschreibung: Der Cluster „Error in“ wird mit der Anweisung „Unbundle by Name“ aufgetrennt. Es wird überprüft, ob der Fehlercode gleich dem Fehler „Connection closed“, was dem Fehler 66 entspricht und in Fehler (true) angezeigt wird. Ist dies der Fall , wird das Fehler-Flag zurückgesetzt, der Fehlercode bleibt erhalten. Der neue Fehlercluster wird ausgegeben. Bei anderen Fehlern erfolgt keine Bearbeitung des Fehlerclusters. No EOC Error.vi - Seite 110 Programm: No Time out Error.vi Eingabe: Error in Ausgabe: Error out Kurzbeschreibung: Rücksetzen eines „Time out“ Fehlers Anmerkung: Dieses Programm stammt aus der LabVIEW-Bibliothek Programmbeschreibung: Der Cluster „Error in“ wird mit der Anweisung „Unbundle by Name“ aufgetrennt. Es wird überprüft, ob der Fehlercode gleich dem Fehler „Connection timed out“, was dem Fehler 56 entspricht und in Fehler (true) angezeigt wird. Ist dies der Fall , wird das Fehler-Flag zurückgesetzt, der Fehlercode bleibt erhalten. Der neue Fehlercluster wird ausgegeben. Bei anderen Fehlern erfolgt keine Bearbeitung des Fehlerclusters. No Time out Error.vi - Seite 111 Programm: Number of char in a String-Array.vi Eingabe: Input String Array Search Char Ausgabe: Number Kurzbeschreibung: Zählen der Anzahl von Zeichen (einzelne Buchstaben oder ganze Strings) in einem String-Array. Programmbeschreibung: Die Größe des „Input String Array“ wird festgestellt und „Anzahl“ auf null gesetzt. Mit Hilfe des Index einer FOR-Schleife wird jedes Element überprüft, ob es dem gesuchten Element „Search Char“ entspricht. Ist dies der Fall, wird „Anzahl“ inkrementiert, andernfalls passiert nichts. Die Anzahl „Number“ wird ausgegeben. Number of char in a String - Array.vi - Seite 112 Programm: Number of search number in an Array.vi Eingabe: Input Array Search Number Ausgabe: Number Position Kurzbeschreibung: Bestimmung der vorhandenen Anzahl einer Zahl in einem Array und der Position der ersten gefundenen Zahl Programmbeschreibung: Die Größe des „Input Arrays“ wird bestimmt und die „Anzahl“ auf null gesetzt. Über den Index der FOR-Schleife wird jedes Element mit „Search Number“ verglichen. Bei Übereinstimmung des Elements und der Zahl wird die „Anzahl“ inkrementiert, ansonsten 0 (null) addiert. Das Ergebnis der Untersuchung wird über „Number“ ausgeben. Wurde die gesuchte Zahl nicht gefunden, ist dieser Wert null. Ist die Anzahl größer oder gleich eins, erfolgt über eine WHILESchleife die zweite Durchsuchung des Arrays, an welcher Stelle das erste Element gleich der gesuchten Zahl ist. Die Position wird über den Index der WHILE-Schleife ausgegeben. Ist die Zahl in dem vorhandenen Array nicht vorhanden, ist die Position gleich -1. Number of search number in an Array.vi - Seite 113 Anmerkung: In der WHILE-Schleife ist der Vergleich, ob die Anzahl der untersuchten Elemente nicht die Größe des zu untersuchenden Arrays übersteigt, eigentlich überflüssig, da die WHILE-Schleife ja nur ausgeführt wird, wenn die „Anzahl“, also die bereits gefundenen Werte größer als null ist. Diese Abfrage ist also nur eine Sicherheitsabfrage. Number of search number in an Array.vi - Seite 114 Programm: Parser.vi Eingabe: String Input Source Text Input Pressure Warning Ausgabe: - Kurzbeschreibung: „Übersetzer“ für eingehende Internet-Anweisungen Programmbeschreibung: Über das Internet eingehende Anweisungen von anderen Rechnern werden im Parser zugeordnet, ausgeführt und ggf. beantwortet. Die Anweisung ist in „String Input“ enthalten. Eine Anweisung ist immer drei Zeichen lang. Um Fehlern vorzubeugen, werden die ersten drei Zeichen von „String Input“ selektiert. „Source“ enthält die Kennziffer des aufrufenden Rechners. Die Ziffern sind wie folgt verteilt: • 0: Rechner in der Sektion Zentralhaus 1: Rechner in der Sektion Endhaus 1 2: Rechner in der Sektion Endhaus 2 3: Steuerungsrechner außerhalb des Systems • • • „Text Input“ enthält in Form eines Strings die ggf. nötigen Parameter, z.B. für die Durchführung einer Messung. Es gibt zwei Prinzipien zur Übersetzung der eingehenden Anweisung: 1.) Alle drei Buchstaben stellen die Anweisung dar. Beispiel: Es wird verglichen, ob „String Input“ gleich „GPA“ ist. Ist dies der Fall, wird das Unterprogramm „Command; GPA.vi“ ausgeführt, andernfalls erfolgt in diesem Programmabschnitt nichts. 2.) Nur der erste Buchstabe entspricht einer Anweisung. Die noch folgenden Zeichen sind bereits Bestandteil einer Spezifikation, bzw. Parameter zur Durchführung einer Messung. Parser.vi - Seite 115 Beispiel: Bei der Anweisung „Lxx“ stellt xx einen Platzhalter dar. Bei der Übertragung dieses Befehls wird xx durch die Kennziffer einer Position eines Massenspektrometers ersetzt. Zur Erkennung dieser Anweisung ist demnach nur das „L“ erforderlich, das aus der Anweisung zunächst ausgeschnitten werden muß. Die Anweisung muß zusätzlich dem ausführenden Unterprogramm eingegeben werden, das die Information aus dem Platzhalter weiterverarbeitet. Durch diese beiden Prinzipien erfolgt die Überprüfung aller Anweisungen. Eine Ausnahme stellt hierbei der Alarm (Anweisung PAx) dar: Die Warnung vor einem zu hohen Druck kann manuell von Hauptbildschirm aus ausgeschaltet werden. In diesem Fall erfolgt keine Warnmeldung. Das Ausschalten ist durch die UND-Verknüpfung mit dem Eingang „Pressure Warning“ realisiert. Folgende Anweisungen werden durch den Parser aktiviert: • Lxx: Lecksuche am empfangenen Rechner. XX enthält die Positionsnummer des gewählten Massenspektrometers in der Konfiguration. Die Parameter zur Messung, die Anweisung und die Quelle sind erforderlich. • Axx: Überprüfung/ Zusammenstellung der AutoScan-Daten. XX enthält die Positionsnummer des gewählten Massenspektrometers in der Konfiguration. Die Parameter über die Größe des betrachteten Zeitbereichs, die Anweisung und die Quelle sind erforderlich. • GPA: Get Port.all. Umsetzung der Datei und Verschicken. Die Quelle ist erforderlich. • GPS: Get Port.sys. Umsetzung der Datei und Verschicken. Die Quelle ist erforderlich. • GFS: Get full Scan. Anweisung zur Aufzeichnung eines kompletten Scans. Die Parameter zur Durchführung der Messung und die Quelle sind erforderlich. • sst: Send State. Übermittlung der Änderungen der Zustandsdatei. Nur die neuen Parameter sind erforderlich. Parser.vi - Seite 116 • PAx: Alert! In einem Sektor (x) ist eine SchwellwertÜberschreitung des vereinbarten maximalen Drucks (5,0E-5 mbar/ 5,0E-7 mbar) aufgetreten. Es erfolgt eine Meldung an alle Rechner. Die Anweisung und die Quelle sind erforderlich.. Parser.vi - Seite 117 Programm: Port to COM.vi Eingabe: Port number Ausgabe: COM-Title Kurzbeschreibung: Umwandlung der Port-Adresse in einen darstellbaren Text als COM x. Anzeige als „real“-Port ( 0 - COM 1, 1 - COM 2, ...) Programmbeschreibung: Zu der „Port number“ wird eins addiert. Über die „Format & Append“-Anweisung wird das Ergebnis in eine Dezimalzahl umgewandelt und der Text „COM ” davorgestellt. Der entstandene Text wird über „COM-Title“ ausgegeben. Port to COM.vi - Seite 118 Datei: Port.all Speicherformat: - 2D-Array - Nach Änderungen in der Konfiguration wird die bestehende Datei überschrieben - Die Größe der erste Dimension des Arrays richtet sich nach der laut Zeichnung (Configuration) vorhandenen Definitionsmöglichkeiten der Anschlüsse (Central-Cluster: 18, Endhouse 1 & 2: je 16) - Bestandteile einer Informationseinheit (Definition pro Anschluß): • Positionsnummer in der Sektionskonfiguration • Port Nummer • angeschlossene Hardware: 0 - keine 1 - Massenspektrometer ohne Multiplier 2 - Massenspektrometer mit Multiplier 3 - Pirani-Meßröhre (über ein TPG300) 4 - Penning-Meßröhre (über ein TPG300) • Location am TPG300 0 - A1 1 - A2 2 - B1 3 - B2 • Drucksensor 1 (Port Nummer) • Drucksensor 1 (Location → s. o.) • Drucksensor 2 (Port Nummer) • Drucksensor 2 (Location → s. o.) Beschreibung: Diese Datei enthält alle zur Konfiguration einer Sektion nötigen Daten. Es sind für die Sektion Central-Cluster 18 mögliche Anschlüsse vorgesehen und für die Endhäuser jeweils 16. Die Einstellungen werden im Hauptmenü unter „Configuration“ der jeweiligen Sektion entsprechend geändert, in die oben aufgeführten Bestandteile formatiert (die Einstellungen in „Configuration“ sind benutzerfreundlicher gestaltet) und gespeichert. Diese Daten werden herangezogen, wenn die Meßgeräte ausgelesen werden sollen. Die Information „Location“ wird nur von den TPG300 genutzt. Die Informationen „Drucksensor ...“ stellen die Abhängigkeiten der Massenspektrometer von bestimmten TPG300 dar. Die Angabe „Positionsnummer in der Sektionskonfiguration“ enthält keine Information für die anderen Programme. Sie stellt nur eine Angabe dar, mit der bei erneutem Aufruf von „Configuration“ die vorher gewählte Position grafisch dargestellt werden kann. Port.all - Seite 119 Besonderheiten: Diese Datei enthält alle Definitionen der vorhandenen Ports. Durch Aktivierung/ Deaktivierung können einzelne Sektionen beeinflußt werden. Hierzu werden die in dieser Datei, „Port.all“, gesammelten Daten in die Datei „Port.sys“ übertragen und darin die Anschlußdaten für die deaktivierten Sektionen wieder gelöscht. Diese Datei ist von diesen Änderungen nicht betroffen. Siehe auch: Port.sys; Activate Configuration.vi; Activate Sections.vi Port.all - Seite 120 Datei: Port.sys Speicherformat: - 2D-Array - Nach Änderungen der aktiven Sektionen wird die bestehende Datei überschrieben - Die Größe der erste Dimension des Arrays richtet sich nach der laut Zeichnung (Configuration) vorhandenen Definitionsmöglichkeiten der Anschlüsse (Central-Cluster: 18, Endhouse 1 & 2: je 16) - Bestandteile einer Informationseinheit (Definition pro Anschluß): • Positionsnummer in der Sektionskonfiguration • Port Nummer • angeschlossene Hardware: 0 - keine 1 - Massenspektrometer ohne Multiplier 2 - Massenspektrometer mit Multiplier 3 - Pirani-Meßröhre (über ein TPG300) 4 - Penning-Meßröhre (über ein TPG300) • Location am TPG300 0 - A1 1 - A2 2 - B1 3 - B2 • Drucksensor 1 (Port Nummer) • Drucksensor 1 (Location → s. o.) • Drucksensor 2 (Port Nummer) • Drucksensor 2 (Location → s. o.) Beschreibung: wie Port.all: Diese Datei enthält alle zur Konfiguration einer Sektion nötigen Daten. Es sind für die Sektion Central-Cluster 18 mögliche Anschlüsse vorgesehen und für die Endhäuser jeweils 16. Die Einstellungen werden im Hauptmenü unter „Configuration“ der jeweiligen Sektion entsprechend geändert, in die oben aufgeführten Bestandteile formatiert (die Einstellungen in „Configuration“ sind benutzerfreundlicher gestaltet) und gespeichert. Diese Daten werden herangezogen, wenn die Meßgeräte ausgelesen werden sollen. Die Information „Location“ wird nur von den TPG300 genutzt. Die Informationen „Drucksensor ...“ stellen die Abhängigkeiten der Massenspektrometer von bestimmten TPG300 dar. Die Angabe „Positionsnummer in der Sektionskonfiguration“ enthält keine Information für die anderen Programme. Sie stellt nur eine Angabe dar, mit der bei erneutem Aufruf von „Configuration“ die vorher gewählte Position grafisch dargestellt werden kann. Port.sys - Seite 121 Besonderheiten: Durch Aktivierung/Deaktivierung kann der Zustand einzelner Sektionen beeinflußt werden. Hierzu werden die in der Datei „Port.all“ gesammelten Daten in diese Datei, „Port.sys“, übertragen und hier die Anschlußdaten für die deaktivierten Sektionen wieder gelöscht. Das Löschen wird nach der Beeinflussung des Zustandes („Activate Sections.vi“) durch das Unterprogramm „Activate Configuration.vi“ vorgenommen. Siehe auch: Port.all; Activate Configuration.vi; Activate Sections.vi Port.sys - Seite 122 Programm: Power - switch for AutoScan Masses.vi Eingabe: Accuracy Ausgabe: - Kurzbeschreibung: Warteschleife zum Einschalten des AutoScan. Überprüfung, daß kein anderes Programm die Massenspektrometer nutzt Programmbeschreibung: Die Pfade zu den Dateien „Vacuum.ini“ und „State.ini“ werden definiert. Die Abfrage, ob die Massenspektrometer verfügbar sind, erfolgt in einer WHILESchleife. Diese wird so lange durchlaufen, bis eine Messung gestartet werden konnte, oder bis diese Schleife fünf mal durchlaufen wurde, danach erfolgt der Abbruch dieser WHILE-Schleife. Die Dateien werden geöffnet und das entsprechende Zustandsarray mit der Funktion „Select Array-line.vi“ selektiert. Die Zustände der anderen Programmteile werden aus dem entstehenden Array herausgefiltert. Mit der Funktion „Number of search number in an Array.vi“ wird die Anzahl der vorhandenen Verriegelungen (die Anzahl der 1-en) in dem Array festgestellt. Sind keine vorhanden, d.h. wurde von keinem anderen Programm eine Verriegelung durchgeführt, wird an die für AutoScan reservierte Stelle in das Array der Zustandsdatei eine 1 (eins) geschrieben, und damit eine Verriegelung durchgeführt. Gleichzeitig wird mit der vorgegebenen Accuracy das Programm „AutoScan Masses.vi“ gestartet. Power - switch for AutoScan Masses.vi - Seite 123 Sind die Massenspektrometer durch ein anderes Programm verriegelt, d.h. greift gerade ein anderes Programm auf die Massenspektrometer zu, wird 30 s gewartet, und danach die Zustandsdatei erneut gelesen. Durch die Begrenzung auf fünf Versuche, eine Messung zu starten, heißt das, daß das Programm maximal 2,5 min. wartet, bevor es die Messung abbricht. Je nachdem, wie häufig die automatische Überprüfung der Massen (AutoScan) erfolgen soll, muß dieser Wert noch verringert werden. Die Überlegung, ihn so hoch zu wählen, kam daher, daß, wenn ein kompletter Scan gemessen wird, dieses einige Minuten in Anspruch nimmt und daher ohnehin einige Abbrüche des AutoScan zu erwarten sind. Messungen mit den Lecktest hingegen sind wahrscheinlich öfter unterbrochen, so daß zwischendurch diese automatische Überwachung gestartet werden kann. Power - switch for AutoScan Masses.vi - Seite 124 Programm: Read full Scan - Get Info.vi Eingabe: Port Number Multiplier (Test Version) Ausgabe: Test Version Quadrupole Info Port Not Found Kurzbeschreibung: Zusammenstellung der gewählten Informationen und Setzen des Multipliers. Massenspektrometer- Programmbeschreibung: Die Testversion wird intern aktiviert. Ziel der Testversion ist, alle Fileoperationen zu unterbinden (s.u.). Dieses wird durch zwei CASE-Strukturen erreicht, die nacheinander geschaltet werden. Im folgenden wird nicht von der Testversion ausgegangen. Eventuelle Abweichungen von der regulären Programmstruktur werden gesondert beschrieben. Die Datei „Port.sys“ wird geöffnet, um die Informationen für die Massenspektrometer zusammenzustellen. Für die Testversion wird an dieser Stelle nur ein Array erzeugt, das alle MassenspektrometerKonfigurationen zuläßt. Aus diesem Array werden die Port-Nummern mit der Funktion „Select Array-line.vi“ selektiert. Mit Hilfe der Funktion „Number of Search Number in an Array.vi“ kann herausgefunden werden, ob an der gewählte Port überhaupt konfiguriert wurde. Liegt keine Konfiguration vor, wird Fehlermeldung „Port not found“ nächste Seite oben). Read full Scan - Get Info.vi - Seite 125 über ein Dialogfeld die ausgegeben (Bild siehe Nachteil: Wird das Dialogfeld nicht bestätigt, werden alle anderen Programme gestoppt. Durch die Funktion „Number of Search Number in an Array.vi“ wurde außer der Anzahl der vorhandenen Port Nummern auch die Position in der Konfiguration bestimmt. Mit Hilfe dieses Wertes und der Konfiguration wird ein Array mit allen wichtigen Daten über das gewählte Massenspektrometer zusammengestellt. Diese Aufgabe übernimmt das Unterprogramm „Get Info about Quadrupole.vi“. In dem resultierenden Array wird der Multiplier ausgetauscht. In der Konfiguration ist nur angegeben, ob ein Multiplier vorhanden ist, oder nicht. Zum Aufruf einer Messung muß der Multiplier aber nicht zwangsläufig eingeschaltet werden. Ist der Eingang „Multiplier (Test Version)“ größer als Null, also der Multiplier eingeschaltet, soll in dem Info-Array der Multiplier ebenfalls eingeschaltet werden, sofern das gewählte Massenspektrometer einen Multiplier besitzt. Diese Verknüpfung wird folgendermaßen realisiert: Aus dem InfoArray wird die Information über das Vorhandensein eines Multipliers selektiert. Die Abfrage, ob der Wert größer als Null ist, macht aus der gespeicherten 0 (Null) oder 1 (Eins) eine boolsche Größe. Die UND-Verknüpfung mit der in letzten Absatz beschriebenen Multiplier-Information liefert die oben genannte Bedingung. Nach der Umwandlung in eine Zahl (0/1) wird diese Information in dem Info-Array gespeichert. Mit der Funktion „Set Multiplier Gain Factor.vi“ wird, soweit vorhanden, der durch „Multiplier (Test Version)“ definierte Wert des Multipliers aktiviert. Dieser kann die Werte 2 oder 3 für *102 oder *103 annehmen. Ist der gesuchte Port gültig wird das Info-Array des Massenspektrometers und die Meldung „Port found“ ausgegeben. Read full Scan - Get Info.vi - Seite 126 Programm: Read full Scan.vi Eingabe: Port not found Accuracy Test Version First Mass Last Mass Scan in Pressure Quadrupole Info Ausgabe: Cancelled? Full Scan Kurzbeschreibung: Lesen eines Scans in einer Druckdekade unter Berücksichtigung der Sicherheitsmaßnahmen. Bedienung: Wird ein Scan gestartet, erscheint an der Stelle des „RUN“-Buttons auf der Bedienoberfläche der Abbruchbutton (siehe rechts). Soll die Messung tatsächlich unterbrochen werden, klickt man auf diesen Button. Der Text wechselt zu . Das Programm ist nun damit beschäftigt, alle Messungen zu stoppen, die Massenspektrometer auszuschalten und die bisher gewonnenen Ergebnisse aufzubereiten. Dies kann u.U. bis zu einer Minute dauern. Programmbeschreibung: Für die Verriegelung werden die Pfade „State.ini“ und „Vacuum.ini“ definiert. Dieses Programm kann intern in eine Testversion umgewandelt werden. Sollen die abhängigen Drucksensoren vor einer Messung nicht berücksichtigt werden, können die „Security“Messung durch Wahl der Testversion ausgeschaltet werden. Unter diesen Umständen muß sichergestellt sein, daß der Druck die zulässigen Werte nicht übersteigt. Die Grenze des Druckes, der maximal auftreten darf, wenn die Massenspektrometer zu einer Messung herangezogen werden, ist mit 5,0E-7 mbar definiert. Für eine Messung ohne Multiplier liegt dieser Wert bei 5,0E-5 mbar (s.u.). Read full Scan.vi - Seite 127 Der gesamte Meßvorgang ist in einer WHILE-Schleife untergebracht. Sind die Massenspektrometer durch ein anderes Programm belegt, so ist in der Datei „State.ini“ eine Verriegelung vorgesehen, die keinen weiteren Zugriff zuläßt. Die Dateien „Vacuum.ini“ und „State.ini“ werden geöffnet und es wird überprüft, ob die Massenspektrometer durch den AutoScan belegt sind. Ist dies der Fall, wartet dieses Programm 15 s und liest die Zustandsdatei dann erneut. Hat der AutoScan die Massenspektrometer gerade nicht belegt, d.h. befindet sich keine Verriegelung in der Zustandsdatei, wird eine auf den Platz, der für den „Full Scan“ vorgesehen ist, eingerichtet. Nun kann kein anderes Programm auf die Massenspektrometer zugreifen. Die Größe des „Quadrupole info“-Arrays wird festgestellt. Nach dieser Größe richtet sich die Anzahl der durchzuführenden Messungen (da es sich um einen einzelnen Scan handelt, also nur eine einzelne Messung durchzuführen ist, enthält das Info-Array nur einen Datensatz). Die Größe wird durch sechs geteilt, da jede Massenspektrometer sechs Angaben benötigt. Ein Array wird erzeugt, das mit „N“ gefüllt ist. Hieraus lassen sich später fehlende Command Acknowledgements der Massenspektrometer ableiten. Schritt eins: Anfordern einer Messung In der ersten FOR-Schleife wird die erste Sicherheitsuntersuchung des Druckes durchgeführt und dem gewählten Massenspektrometer wird die Anweisung zur Messung eines kompletten Scans mitgeteilt. Read full Scan.vi - Seite 128 Wurde auf Testversion umgeschaltet, wird nicht der Druck gemessen, sondern der Multiplier eingeschaltet und der Druck als ausreichend niedrig angenommen. Die Druckmessung übernimmt, sofern sie nicht durch der Wahl der Testversion ausgeschaltet wurde, die Funktion „Security pressure.vi“. In „Scan in“ befinden sich die Daten, die in einem früheren Durchlauf schon einmal gemessen wurde oder, falls es sich um die erste Messung handelt, ein Array mit „-1“. Es erfolgt eine Abfrage, ob das Minimum dieses Arrays kleine als 0 (Null) ist. Falls es das nicht ist, ist keine weitere Messung nötig. Sind die Bedingungen erfüllt, wird dem Massenspektrometer die Anweisung zur Messung eines Scans mit den nötigen Parametern gegeben. Parameter sind: • Port Number • Range (Gain) • Accuracy • First Mass • Last Mass • Multiplier Read full Scan.vi - Seite 129 Ergebnis dieses Aufrufs ist das Command Acknowledgement, das von dem angesprochenen Massenspektrometer zurückgeschickt wird. Dieses Massenspektrometer beginnt unverzüglich mit der Ausführung der Anweisung, mit der Messung. Das Acknowledgement wird in dem Array des Shift-Registers gespeichert (das Array besteht nur aus diesem einen Wert → s.o.). Zweiter Schritt: Warten auf das Meßergebnis Eine weitere WHILE-Schleife wird geöffnet. Die Messung eines Scans kann, je nach Wahl der Parameter einen langen Zeitraum in Anspruch nehmen. Es ist nicht vorhersehbar, wie lange dies sein wird. Mit der Anweisung „o“ besteht die Möglichkeit der Abfrage, ob der zu messende Scan bereits vollständig verfügbar ist, oder ob die Messung noch läuft. Ist der vollständige Scan im Speicher des Massenspektrometers verfügbar, wird auf die Anfrage eine „1“ zurückgeschickt (mit Command Acknowledgement: „A1“) oder, für den Fall, daß der Scan noch nicht vollständig ist, „A0“. Wie oben wird eine FOR-Schleife geöffnet, die so oft wiederholt wird, so viele Massenspektrometer in der Konfiguration vorhanden sind (einmal). An der jeweils ersten Position befindet sich die Port Nummer. Diese wird selektiert und mit dem Kommando „o“ mit der Erwartung einer Rückmeldung an das messende Massenspektrometer geschickt. Die Schleife wird sehr häufig durchlaufen. Das Ergebnis der Messung des Druckes hat dann keine Gültigkeit mehr. Aus diesem Grund wird immer eine neue Messung gestartet. Der boolsche Indikator wird, wie schon bei der letzten Sicherheitsabfrage des Druckes auf „false“ gesetzt, d.h. es wird kein neuer Wert gelesen, sondern der zuletzt gespeicherte Druck aus der Routinekontrolle benutzt. Dieses Vorgehen hat den Vorteil, daß die Routinemessungen nicht für die Messung eines kompletten Scans unterbrochen werden müssen. Die gespeicherten Werte können als aktuell angenommen werden, da die Routinekontrollen des Drucks in einem sehr dichten Abstand erfolgen. Die WHILE-Schleife wird so lange wiederholt, bis die Rückmeldung „A1“ ist. AbbruchbedinRead full Scan.vi - Seite 130 gungen sind außerdem ein zu hoher Druck und eine Unterbrechung durch den Bediener des Programms. Die Unterbrechung mit dem in der Bedienung erwähnten „Abort measurement“-Button wurde in diesem Teil dieses Programms plaziert, da es hier am längsten „hängt“. Alle anderen Teile dieses Programms werden sehr viel schnell abgearbeitet. Um ein paralleles Arbeiten anderer Programme zu ermöglichen, wird eine Pause von 2 s gewährt. Dieser Wert kann, falls benötigt, noch höher gewählt werden. Im Vergleich zu allen anderen Funktionen hat dieses Programm die niedrigste Priorität. Dritter Schritt: Ersetzen alter Daten durch aktuelle Meßdaten Eine FOR-Schleife wird nach den bereits oben beschriebenen Schemata definiert. Zur Sicherheit erfolgt noch einmal eine Überprüfung, ob die Rückmeldung tatsächlich „A1“ gewesen ist. Ist dies der Fall, wird die Port Nummer aus dem Konfigurationsarray selektiert und der Funktion „Replace new Scan data.vi“ zugeführt. In ihr werden die zur Verfügung stehenden Daten aus dem Massenspektrometer gelesen und die Alten, die über ein Array unten rechts der CASEAnweisung zugeführt werden, aktualisiert. Die alten Meßdaten entstammen der Eingabe „Scan in“. Die neuen Daten werden durch „Full Scan“ zur Ausgabe gebracht. Für den unwahrscheinlichen Fall, daß ein Fehler aufgetreten sein sollte, und ein Abbruch des zweiten Schrittes erfolgte, ohne daß „A1“ vom Massenspektrometer zurückgesendet wurde (dieser Fall ist schon aufgetreten, daher wurde diese zweite Abfrage eingeführt), wird nur die Port Nummer selektiert. Die Ausgabe entspricht in diesem Fall dem Eingabearray. Weiterhin werden in diesem Schritt das Massenspektrometer und der dazugehörige Multiplier ausgeschaltet. Dies erfolgt schrittweise in einer Sequence. Zunächst wird der Multiplier auf 0 (Null) gesetzt (siehe Bild), und schließlich wird das Filament mit der Anweisung „F1,0“ ausgeschaltet. Read full Scan.vi - Seite 131 Fehlerbehandlung Mögliche Fehlerursachen sind: n Abbruch durch einen zu hohen Druck n Abbruch durch den Benutzer oder n Fehlerhafte Port-Definitionen Diese Fehler haben zur Folge, daß über eine ODERVerknüpfung der Indikator „Error“ auf true gesetzt wird. Wurde der Port fehlerhaft definiert, erfolgt keine weitere Messung, tritt allerdings einer der anderen genannten Fehler auf, muß die Messung sofort abgebrochen und das Massenspektrometer ausgeschaltet werden. Dies wird in einer Anweisung realisiert. CASE- Die Anzahl der Konfigurationen wird ermittelt und dementsprechend eine FOR-Schleife definiert (s.o.). Die jeweilige Port Nummer wird selektiert und zuerst der Multiplier und danach das Filament (siehe Bild) des Massenspektrometers ausgeschaltet. Zusätzlich wird der „Cancelled?“ auf true gesetzt. Indikator Ist die Messung beendet, wird 15 s gewartet. Die Messung, die hier durchgeführt wurde, entspricht einer Druckdekade. Tatsächlich werden sicher mehr Dekaden gemessen und angezeigt. Dieses Programm wird also mehrfach aufgerufen. Zwischen den einzelnen Messungen ist dann immer etwas Zeit, in der die Massenspektrometer nicht von diesem Programm belegt sind, sondern Routinemessungen durchgeführt werden können. Nach Beendigung dieser Messung wird die Zustandsdatei wieder auf ihren ursprünglichen Wert zurückgesetzt. Read full Scan.vi - Seite 132 Programm: Read TPG300 (pressure).vi Eingabe: Port number Location Ausgabe: pressure Kurzbeschreibung: Lesen des Druckes an einem TPG300-Meßkopf. Tritt ein Fehler auf oder ist die „Port number“ gleich null, erfolgt keine Messung. „Pressure“ wird in diesem Fall mit -1 angegeben. Der genutzte Meßkopf wird vor der Messung eingeschaltet. Programmbeschreibung: Überprüfung, ob „Port number“ kleiner oder gleich 0 ist. Ist dies der Fall, wird über „pressure“ sofort -1 ausgegeben. Dieser Fall wird für die Testversion benötigt. Über „Location“ wird der ASCIICode für die am TPG300 befindliche Meßstelle erzeugt. Zum einen erfolgt die Zuordnung zu den jeweiligen Plätzen für das Auslesen der Meßwerte (0 - A1, 1 - A2, 2 - B1, 3 - B2), und zum anderen wird die jeweilige Meßstelle eingeschaltet. Das Einschalten erfolgt über die „SEN,x,x,x,x“ Anweisung, das Auslesen über „Pxx“. Die Zeichenfolge „\r\n“ (= <CR><LF>) bildet jeweils den Abschluß einer Anweisung. Das Lesen des Meßwertes wird nur dann gestartet, wenn kein Fehler bei der Übertragung der Einschaltanweisung auftrat. Die Antwort des TPG300 auf den „SEN“-Befehl wird in „ASCII → num“ in das im ASCII-Protokoll des TPG300 enthaltenen Statuswort und dem eigentlichen Meßwert jeweils als Zahl umgewandelt. Diese Angaben sind als Array verfügbar. Das erste Element enthält das Statuswort, das zweite den Wert. Read TPG300 (pressure).vi - Seite 133 Das Statuswort wird überprüft. Es erfolgt die Entscheidung, ob der Meßwert in Ordnung ist oder ob die Messung wiederholt werden soll. Die Abfrage des Meßwertes ist in einer WHILE-Schleife untergebracht. Hierdurch kann die Messung eines Meßwertes, sofern die Statusinformation eine neue Messung zuläßt, noch zweimal wiederholt werden. Kann kein gültiger Wert gemessen werden, ist das Ergebnis gleich -1. Es ist nicht nötig, die Meßköpfe auszuschalten, da die Druckmessung so oft wie möglich wiederholt werden soll. (Ein zu kurzfristiges Einund Ausschalten führt zu einer Fehlermeldung am TPG300) Read TPG300 (pressure).vi - Seite 134 Programm: Replace New Scan Data.vi Eingabe: Port Number Old Scan Ausgabe: New Scan Kurzbeschreibung: Ersetzen der alten/nicht gemessenen Daten eines Scans (= Bezeichnung für ein Massenspektrogramm) durch die aktuell gemessenen. Diese Funktion dient nicht zur Herstellung eines Updates, sondern wird, beim Durchlauf mehrerer Dekaden in einer Meßreihe nach Beendigung einer Dekadenmessung benutzt. Programmbeschreibung: Über „Port Number“ wird das Massenspektrometer bestimmt, dessen neuer Scan gelesen werden soll. Über die Funktion „Serial Communication Spectra“ wird die Anweisung „e“ zu dem jeweiligen Massenspektrometer geschickt, die den Transfer der gesammelten Daten bewirkt. Dieses übermittelte ASCII-Protokoll muß zunächst in ein Array aus Zahlen umgewandelt werden. Dies geschieht in der Funktion „ASCII Protokoll (Spectra) to numbers.vi“. „Old Scan“ enthält alle bisher gemessenen Daten. Die Größe dieses Arrays richtet sich nach der Anzahl der zu messenden Massen. Wenn einzelne Werte bisher noch nicht eindeutig bestimmt werden konnten oder fehlerhaft waren, enthalten die entsprechenden Einträge den Wert -1. Im Anfangszustand (vor der ersten Messung) sind zunächst alle Plätze mit -1 belegt. Dieser Wert ist ein Indikator, daß der jeweilige Platz noch belegt werden muß. Ist der durch eine FOR-Schleife indexierte Platz = -1 (fehlerhafter oder nicht gemessener Wert), so wird dieser durch den im neuen Scan vorhandenen Wert ersetzt. Andernfalls passiert nichts. Replace New Scan Data.vi - Seite 135 Anmerkung: Durch die Aufbereitung der Daten des neuen Scans, besteht die Möglichkeit, daß der neue Wert ebenfalls -1 ist. Dies ist der Fall, wenn trotz einer höher gemessenen Dekade (1E-10, statt 1E-11) das Massenspektrometer für diese spezielle Masse immer noch „overflow“ angezeigt hat. Das Ergebnis wird über „New Scan“ ausgegeben. Replace New Scan Data.vi - Seite 136 Programm: Save pressure.vi Eingabe: Measurement Input Ausgabe: - Kurzbeschreibung: Speichern der gemessenen Druckmeßwerte mit der Meßzeit Programmbeschreibung: Der Pfad zu den Statistikfiles wird definiert. Der Dateiname setzt sich aus dem Buchstaben „P“ für „Pressure“ und dem aktuellen Datum zusammen. Hieraus wird der Pfad entwickelt. Die Daten aus „Measurement Input“ werden mit dem definierten Dateinamen gespeichert. Das Speicherformat ist „12.11e“, das bedeutet: Zwölf Stellen werden reserviert, wobei zehn von ihnen Nachkommastellen sind. Ist der gebildete Dateiname noch nicht existent, d.h. hat ein neuer Tag begonnen, muß ein neues File angelegt werden. Zu dieser Überprüfung werden die bisherigen Dateien aufgelistet und die zuletzt gespeicherte Datei selektiert. Entspricht der zweite Teil des Namens dem aktuellen Datum, wird bei der Anweisung „Write to Spreadsheet File.vi“ „Append to File“ auf true gesetzt. Die Werte werden an die gültige Datei angehängt. Ist das aktuelle Datum ungleich dem zuletzt gespeicherten, wird mit „Append to File“ gleich false ein neues File erzeugt. Save pressure.vi - Seite 137 Programm: Scale Show AutoScan Masses.vi Eingabe: Time Time Span Resolution Ausgabe: Y-Scale X-Scale Style X-Scale Grid Names Date (from - to) Changes at Resolution out Kurzbeschreibung: Zusammenstellung der Parameter für die Darstellung der AutoScanDaten Programmbeschreibung: Der Pfad zu den Statistikenfiles und der „Scan.ini“-Datei wird definiert. Die „Scan.ini“ wird geöffnet und die in ihr enthaltenen Daten gelesen. Es gibt insgesamt vier Darstellungsarten der AutoScan-Daten, d.h. es sind vier Zeiträume möglich, über die die Daten angezeigt werden können. Die einfachste Darstellungsform ist die der letzten drei Stunden. Diese Anzeige wird von einer „Waveform Chart“ unterstützt. Alle anderen (größeren) Darstellungsarten müssen gesondert behandelt werden. Diese erfordern eine eigenständige Skalierung der X-Achse. Die Aufteilung wurde sekundenweise gewählt, allerdings ist auch jedes andere Format denkbar. Mit „Time Span“ werden die unterschiedlichen Darstellungsarten definiert. Ist es für die Auflösung (Resolution) nicht anders angegeben (gleich Null), wird die interne Darstellung in Minuten genutzt, andernfalls die angegebene. Darstellungsart 0: drei Stunden Die Auflösung (Resolution) braucht nicht beachtet werden. Die X-Achse benötigt keine gesonderte Bezeichnung. Scale Show AutoScan Masses.vi - Seite 138 Der Zeitraum ist dreimal eine Stunde (eine Stunde = 3600 Sekunden). Der Anfangspunkt der X-Achse ist also „Time“ minus dem Ergebnis der Multiplikation. Weiterhin bezeichnet das Ergebnis der Multiplikation die „Resolution out“, die für weitere Darstellungen in anderen Programmen noch benötigt wird. Später wird „Resolution out“ mit dem internen oder dem vom Benutzer vorgegebenen Wert belegt. Darstellungsart 1: 24 Stunden Als interner Wert für die Auflösung sind 1440 Werte (=Minuten) eingestellt. Startwert ist 1 (Eins). Aus der Berechnung Endzeit (Time) minus dem Ergebnis aus 24 mal eine Stunde (3600 Sekunden) ergibt sich die betrachtete Zeitspanne. Es werden vier Namen für die Bezeichnung der X-Achse erzeugt (Startzeit + 0, + 8, + 16 und + 24 Stunden). Der letzte Wert entspricht, bei korrekter Berechnung, dem „Time“-Wert, der aktuellen Zeit. Die Zeitpunkte werden in Stunden und Minuten umgewandelt. Anschließend werden sie in einen String mit dem Format (HH:MM) umgewandelt. Alle anderen Zeitpunkte werden ebenso behandelt. Zu deren Berechnung wird aus der Spanne (24 mal 3600 Sekunden) ein Drittel von dem Endwert abgezogen bzw. ein Drittel der Startzeit addiert. Da sieben Werte für die X-Achse vorgesehen sind, werden die fehlenden mit einem leeren String gefüllt. Das Ergebnis wird über „X-Scale Grid Names“ ausgegeben. Darstellungsart 2: Drei Tage Die Darstellungsform „drei Tage“ wurde gewählt, um die Entwicklung der Partialdrücke über ein Wochenende betrachten zu können. Als Auflösung wird, sofern nicht anders angegeben, 4320 Werte (= Minuten) als interner Wert definiert. Startwert ist 1 (Eins). Scale Show AutoScan Masses.vi - Seite 139 Die Zeitspanne wird mit 24 multipliziert mit drei, multipliziert mit einer Stunde (3600 Sekunden) berechnet. Zur Darstellung auf der X-Achse werden vier Werte definiert. Die ersten drei Bereiche enthalten das Datum, während dem vierten (hier: Zeitpunkt) die aktuelle Zeit zugeordnet wird. Die Umsetzung erfolgt wie oben beschrieben. Die Ausnahme stellt hierbei die Zeit dar. Sie wird aus der letzten Zeitangabe gewonnen. Die Umsetzung in einen String erfolgt analog zu der Umsetzung des Datums mit dem Unterschied, daß die Trennzeichen bei der Zeitangabe ein Semikolon (:) sind, während beim Datum ein Punkt (.) benutzt wird. Die Berechnung erfolgt über den Abzug jeweils eines Drittels der Spanne bzw. zweimal eines Drittels vom Endzeitpunkt (Time). Darstellungsart 3: Sieben Tage Die interne Auflösung wird mit 10080 Werten (= Minuten) festgelegt. Startwert ist 1 (Eins). Die Berechnung der Zeitspanne ergibt sich aus der Multiplikation von sieben Tagen mit 24 Stunden mit einer Stunde (3600 Sekunden). Startwert der Betrachtung ist Endpunkt (Time) minus dem Ergebnis der obigen Multiplikation. Zur Bezeichnung der X-Achse werden alle sieben Anzeigemöglichkeiten belegt. Jede Anzeige bezeichnet den Zeitraum eines Tages. Demnach enthält jede Anzeige ein Datum. Das Datum wird, wie oben beschrieben, umgesetzt. Anschließend erfolgt die Umwandlung in einen String. Als Trennzeichen wird ein Punkt eingesetzt. Das Anzeigeformat sieht wie folgt aus: DD.MM. Die Berechnung des Datums am Tag vorher erfolgt über die jeweilige Subtraktion einer zuvor berechneten Konstanten vom Endwert (Time). Ein Tag hat 86400 Sekunden. Durch die ganzzahligen Vielfachen ergeben sich die Daten für die vorherigen Tage. Scale Show AutoScan Masses.vi - Seite 140 Die berechneten Daten werden in einem Array zusammengefaßt und über „X-Scale Grid Names“ ausgegeben. Der berechnete Beginn und durch „Time“ das eingegebene Ende der Betrachtung sind die Eckdaten für den „X-Scale Style“. Die Schrittweite wird mit 1 (Eins) angegeben. Aus „Time“ und dem jeweils berechneten Startwert, der aus der gewählten Zeitspanne resultiert, werden durch Umsetzung die Werte für „Date (from - to)“ gewonnen. Diese Werte müssen in einen String umgewandelt werden. Die beiden Strings werden, durch ein <CR> (Carriage Return) getrennt, ausgegeben. Die Zeitpunkte für die Änderungen der AutoScan-Konfiguration sollen bestimmt werden. Aus der Datei „Scan.ini“ werden die Zeiten der durchgeführten Änderungen selektiert (Bei jeder Änderung der AutoScan-Konfiguration wird automatisch der Zeitpunkt der Änderung mit gespeichert). Die Größe dieses Arrays wird bestimmt. Die erste Änderung muß herausgefunden werden, die in dem betrachteten Zeitraum stattgefunden hat. Hierzu wird von der Größe des Arrays, in dem die Änderungszeitpunkte enthalten sind, in einer WHILE-Schleife deren Index abgezogen. Durch die „Index Array“-Anweisung erhält man somit die letzte Änderung, die vorletzte, ... usw. Scale Show AutoScan Masses.vi - Seite 141 Die WHILE-Schleife wird so lange wiederholt, bis keine Änderungswerte mehr vorhanden sind (der betrachtete Zeitraum ist größer, als die Anzahl der aufgezeichneten Daten) oder ein Datum gefunden wurde, das vor dem Beginn des zu betrachtenden Zeitraums liegt. Der zu diesem Zeitpunkt relevante Index der WHILE-Schleife wird nach außen geführt. Im zweiten Fall (Änderung gefunden) muß der gefundene Zeitpunkt inkrementiert werden, da nur die Änderungen innerhalb des betrachteten Zeitraums interessant sind, die WHILE-Schleife aber erst beim Finden des ersten außerhalb des Zeitraums liegenden Änderungszeitpunkt gestoppt hat. Im ersten Fall (keine Daten mehr verfügbar) wird der Wert zur Vermeidung von Unstimmigkeiten auf 0 (Null) gesetzt. Die Größe des aus der Datei „Scan.ini“ gelesenen Arrays wird bestimmt. Zur weiteren Verwendung sind nur die Änderungsdaten nötig, die innerhalb des betrachteten Zeitraumes liegen. Alle anderen Daten werden mit der „Array Subset“-Anweisung gelöscht. Als Anfangspunkt des Arrays und zu dessen Reduktion wird der oben gewonnene Wert genutzt. Aus dem resultierenden Array werden die benötigten Informationen mit Hilfe der „Select Array-row.vi“ selektiert: Die Zeitpunkte der Änderungen befinden sich in der ersten Spalte (0) des Arrays. Der maximale Druck (dies entspricht der kleineren Zahl) befindet sich in Spalte Neun (9). Die einzelnen Werte sind nicht entscheidend. Um alle gemessenen Werte später anzeigen zu können, muß der kleinste je gewählte Wert benutzt werden. Dieser wird durch die Funktion „Array Max & Min“ herausgefunden. Gleiches gilt für den minimalen Druck (dies entspricht der größeren Zahl). Auch hier wird die „Array Max & Min“-Funktion benutzt, um den größten Wert herauszufinden. Die Druckwerte werden in einem Array zusammengefaßt und über „Y-Scale“ ausgegeben. Scale Show AutoScan Masses.vi - Seite 142 Datei: Speicherformat: scan.ini - Array - Neue Einstellungen werden hinten angehängt - Eine Einstellung besteht aus: n n n Beschreibung: Datum/Uhrzeit der Änderung (in Sekunden, „universal time“) sieben Massen (nicht genutzte Plätze = 0) Druckbereich (min./max. Wert) Diese Datei enthält die Daten, welche Massen zyklisch überprüft werden sollen (Beispiel: 16 für Sauerstoff, 14 für Stickstoff,...). Es können maximal sieben Massen eingestellt werden. Die Datei wird von „Set AutoScan Masses“ um eine Änderung erweitert und von „Get AutoScan Masses“ gelesen. Diese Datei wird im Setup erzeugt. Alle Überwachungsplätze werden hierbei auf null (keine Messung) gesetzt. Scan.ini - Seite 143 Programm: Section Central-Cluster.vi Section Endhouse 1.vi Section Endhouse 2.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Konfiguration der Sektion Bedienung: Vom Hauptbildschirm aus gelangt man durch „Configuration“ in dieses Programm. Je nachdem, welche Sektion in der man sich befindet im „Setup“ angegeben wurde, erhält man das Titelbild der Sektion Zentralhaus, Endhaus 1 oder Endhaus 2. Die Programme sind bis auf eine Besonderheit beim Zentralhaus identisch. Hier werden die unterschiedlichen Skizzen dargestellt, die Programmdokumentation erfolgt nur einmal stellvertretend für alle drei Programme. Section CC - EH1 - EH2.vi - Seite 144 Dies ist die Skizze der möglichen Konfigurationen in der Sektion Zentralhaus. Es stehen, im Gegensatz zu den anderen Sektionen, 18 Konfigurationen zur Verfügung. Diese Skizze wird in der Sektion Endhaus 1 für die Konfiguration gezeigt. Es stehen maximal 16 Plätze zur Belegung frei. Achtung: Das in der Sektion Zentralhaus 18 Möglichkeiten zur Konfiguration zur Verfügung stehen, ändert nichts an der Tatsache, daß nur 16 aufgrund der 16 vorhandenen Ports am Rechner genutzt werden können! Das nächste Bild zeigt eine Skizze der Sektion Endhaus 2. Auch hier stehen, wie in der Sektion Endhaus 1, 16 Plätze zur Konfiguration zur Verfügung. Diese Bilder geben den aktuellen Zustand wieder. Änderungen sind in ihnen nicht wirksam. In diesen Beispielen sind alle Plätze mit „no connection“ belegt, was bedeutet, daß noch kein Meßgerät plaziert wurde. Section CC - EH1 - EH2.vi - Seite 145 Die eigentlichen Eingabeelemente befinden sich auf der rechten Seite des Bildschirms. In diesem Feld werden die Konfigurationsplätze belegt: Wird dieses Programm zum ersten Mal aufgerufen, erscheint oben der Hinweis „First Configuration“. Ist bereits einmal eine Konfiguration vereinbart worden, nur „Configuration“. Vorgehensweise bei der Konfiguration: Beim Anschluß der Meßgeräte (Massenspektrometer oder Drucksensoren) sollte notiert werden, an welchen Positionen diese eingesetzt werden und welche Anschlüsse beim Rechner benutzt wurden. Diese Informationen werden dann in diese Skizze übertragen: Section CC - EH1 - EH2.vi - Seite 146 Man wählt mit „Position-Number“ die Positionsnummer aus der Skizze, an der ein Meßgerät definiert werden soll. Die gewählte Position wird rot hinterlegt. Eventuell schon vorhandene Einstellungen werden in den Positionen darunter angezeigt. Ist keine Einstellung vorhanden (no connections), sind die Eingabeelemente grau dargestellt. Der Anschluß zum Rechner muß festgelegt werden. Durch Drücken des grünen Pfeils rechts neben „COM-Port-Number“ wird diese inkrementiert. Dies wird so lange wiederholt, bis die gewünschte PortNummer erreicht wurde. Wird die maximal zulässige Anzahl an verfügbaren Ports überschritten (18), wird wieder von vorn begonnen (2). Nach der Festlegung des Ports folgt darunter die Eingabe der Hardware. Auch hier wird mit dem grünen Pfeil links daneben die verfügbare Hardware weiter geschaltet, bis das gewünschte Meßinstrument erscheint. Es besteht die Wahl zwischen: • kein Anschluß • Massenspektrometer ohne Multiplier • Massenspektrometer mit Multiplier • Pirani-Meßröhre • Penning-Meßröhre Jeweils vier Drucksensoren werden von einem TPG300 verwaltet. Hier stehen die Anschlüsse A1, A2, B1 und B2 zur Verfügung. A und B kennzeichnen zwei verschiedene Einschübe mit je zwei Anschlüssen im TPG300. Wurde ein Drucksensor gewählt, muß unter „TPG300 Channel“ der Anschluß spezifiziert werden. Auch dieses geschieht durch den Druck auf den grünen Pfeil links neben der Anzeige, bis der gewünschte Anschluß erscheint. Die Massenspektrometer und, in einem Ausnahmefall auch die Penning-Drucksensoren sind von anderen Drucksensoren abhängig geschaltet. Sie dürfen nur eingeschaltet werden, wenn der Druck an den spezifizierten Sensoren geringer ist als ein definierter Schwellwert. Unter „Connections“ werden zwei (!) Drucksensoren als abhängige Parameter definiert. Unter „Old“ werden frühere Konfigurationen angezeigt. Bei „New“ können neue Positionsnummern von Meßgeräten aus dem Bild eingetragen werden. Mit „Accept“ werden die neuen Werte übernommen. Pirani-Drucksensoren benötigen keine vorgeschalteten Meßgeräte. Section CC - EH1 - EH2.vi - Seite 147 Es dürfen keine Drucksensoren von sich selbst anhängig gemacht werden! Es entsteht sonst eine Endlosschleife. Es müssen immer beide Drucksensoren definiert werden! Sind in der unmittelbaren Umgebung eines Massenspektrometers nicht zwei Drucksensoren verfügbar, die eine sinnvolle Abhängigkeit ergeben, wird zweimal derselbe Drucksensor angegeben. Dieser Fall sollte die Ausnahme bleiben! Nach der Eingabe aller Informationen kann durch die Wahl einer anderen Positionsnummer von vorn begonnen werden. Durch das Drücken von „DONE“ werden die neuen Konfigurationen gespeichert und dieses Programm verlassen. Vor dem Speichern erscheint ein Dialogfenster, in dem gefragt wird, ob die alten Einstellungen tatsächlich überschrieben werden sollen. Das Betätigen des „Quit“-Buttons führt zum Verlassen des Programms ohne Speicherung. Es wird vorher mit einem Dialogfenster darauf aufmerksam gemacht, ob die neuen Einstellungen tatsächlich verworfen werden sollen. Unter dem Kasten befindet sich die Anzeige „Set Multiplier Gain Factor“. Hier können, stellvertretend für alle Messungen, die Multiplier aller Massenspektrometer, die mit einer solchen Applikation ausgestattet sind, eingestellt werden. Mögliche Einstellungen sind hierbei: • Multiplier aus (siehe Bild) • Faktor E2 (= *100) • Faktor E3 (= * 1000) In diesem Konfigurationsprogramm werden die Massen für die automatische Überwachung (AutoScan) festgelegt. Dieser Programmteil ist über den Schalter „Set AutoScan Masses“ oben rechts zu erreichen. Programmbeschreibung: Der Pfad zu der Datei „Port.all“ wird definiert. Mit der Funktion „File/ Directory Info“ wird die Größe dieses Files festgestellt. Ist es kleiner als 10 Bytes, handelt es sich um die erste Konfiguration, die erstellt wird. Im folgenden wird das Programm „Section Central-Cluster.vi“ als Vorlage für die Dokumentation genommen. Der einzige Unterschied Section CC - EH1 - EH2.vi - Seite 148 zu den anderen Programmen besteht in der Anzahl der Konfigurationsmöglichkeiten (16 statt 18). Die Anzeige „Configuration“ bzw. bei der ersten Konfiguration „First Configuration“ wird auf blinkend umgeschaltet. Handelt es sich um die erste Konfiguration, wird dem blinkenden Indikator der entsprechende Text zugeordnet (unten). Ein Array zur Aufnahme der Konfigurationen wird initialisiert. War bereits eine Konfiguration vorhanden, wird diese geladen und mit der Funktion „Convert Config-Data to file.vi “ in ein darstellbares Format gebracht. Der Text „Configuration“ wird angezeigt. Das geladene und auch das beim ersten Aufruf der Konfiguration erzeugte Array enthalten insgesamt 18 (16) einzelne Konfiguration. Alle haben inhaltlich denselben Aufbau: • Positionsnummer • Port-Nummer • Hardware • Anschluß des Drucksensors • Drucksensor 1 (abhängig) • Drucksensor 2 (abhängig) Um die einzelnen Daten verändern zu können, wird das 2D-Array in einzelne Arrays aufgeteilt, die jeweils eine Kategorie der oben genannten Informationen enthalten. Die Trennung wird mit der Funktion „Select Array-line.vi“ erreicht. Die Änderung/Erstellung der Konfigurationen erfolgt in einer WHILE-Schleife. Alle Arrays werden auf Shift-Register geführt. Section CC - EH1 - EH2.vi - Seite 149 Folgende Reihenfolge wird dabei eingehalten (von oben nach unten): • Hardware + Markierung (Anzeige) • Markierungsindex • Hardware • Port-Nummer • TPG300-Anschluß • Drucksensor 1 • Drucksensor 2 Section CC - EH1 - EH2.vi - Seite 150 Die Hardwarekonfigurationen (ganz oben) werden zur Darstellung in einen Cluster umgewandelt und in der Skizze der Sektion eingetragen. Wichtig ist die Einstellung „Cluster Size“ gleich 36 (32) Elemente. Die erwähnte Markierung ist eine Rot-Einfärbung der gerade bearbeiteten Position. Die Skizze der jeweiligen Sektion mit den HardwareAnzeigeelementen und den „Color Boxen“, die zur Markierung in der Farbe wechseln, sind in einem Cluster untergebracht (deshalb die Umwandlung in einen Cluster). Die „Cluster Order“, also die Reihenfolge der Anzeigeelemente im Cluster, beginnt bei 0 (null) bei dem Hardwareelement eins in aufsteigender Reihenfolge und bei 18 (16) bei der „Color Box“ zum Hardwareelement eins. Zur Bearbeitung wird der Cluster zurück in ein Array umgewandelt. Hier ist keine Einstellung von „Cluster Size“ notwendig. Die gewählte Positionsnummer wird wegen des Zählbeginns bei null im Cluster dekrementiert. Der Markierungsindex wird um 18 (16) erhöht, da die Markierungen erst in diesem Bereich beginnen. Die „Color Box“ der gewählten Position wird rot gefärbt. Hierzu wird das durch den Markierungsindex definierte Element durch die Farbkonstante „rot“ ersetzt. Diese Änderung wird auf der linken Seite bei der alten Position wieder aufgehoben. Die Farbe wird in die Hintergrundfarbe gewechselt und das Element damit unsichtbar gemacht. Die Hardwareanzeige wird auf den aktuellen Wert geändert. Hier wird der inkrementierte Wert der Position benutzt. Die Hardwareeinstellungen sind in einem „Text Ring“ definiert. Es handelt sich hierbei um eine Liste von Texten die wählbar sind, denen intern Zahlen zugeordnet sind und auch nur als solche behandelt werden. Nach dem Ersetzen der Elemente wird das Array zurück in einen Cluster gewandelt und zur Anzeige gebracht. Die inkrementierte Positionsnummer wird durch das gesamte Programm geschliffen. Jedes Element und damit jede Änderung baut auf dieser Ziffer auf. Im folgenden wird ein durch die Positionsnummer indexiertes Element nur noch das gewählte Element oder das indexierte Element genannt Section CC - EH1 - EH2.vi - Seite 151 Aus dem Hardwarearray wird das indexierte Element gelöst. Es wird überprüft, ob der „grüne Pfeil“ gedrückt wurde. Durch den Pfeil soll die nächste Konfigurationsmöglichkeit (das nächste Meßgerät) angezeigt werden. Hierzu muß die Kennziffer beim Drücken des Schalters inkrementiert werden. Wurde der Pfeil gedrückt, erfolgt ein Vergleich, ob die bisherige Hardwarekonfiguration bereits die höchste Kennziffer, den Wert vier, erreicht hat. Ist das Ergebnis wahr, wird wieder mit 0 (null) begonnen, hierzu muß zu dem ursprünglichen Wert -4 addiert werden. Andernfalls wird der ursprüngliche Wert inkrementiert. Wurde der Button nicht gedrückt, bleibt die Konfigurationsnummer bestehen, es wird 0 (null) addiert. Die neue Konfiguration wird angezeigt und in das Hardwarearray eingefügt. Gleichzeitig wird die neue Hardwarekennziffer auch in das Darstellungsarray eingefügt (s.o.). Abhängig von der gewählten Hardware werden einige Anzeigen ausgeschaltet und grau dargestellt. Diese Einstellungsmöglichkeiten werden bei der gewählten Hardware nicht benötigt: 0 - keine Hardware: alle Elemente 1 - Massenspektrometer ohne Multiplier: der TPG300-Anschluß 2 - Massenspektrometer mit Multiplier: Der TPG300-Anschluß 3 - Pirani: alle abhängigen Drucksensoren 4 - Penning: kein Element wird ausgeschaltet Der Penning-Sonderfall wurde oben bereits besprochen. Dieses Ein- bzw. Ausschalten der Eingabeelemente ist über eine CASE-Anweisung realisiert. Die Funktionsweise der Eingabe der Port-Nummer ist analog dem bei der Hardware beschriebenen Verfahren. Es sind 18 Ports an jedem Rechner vorhanden. Benutzt werden die Ports aber erst ab Port zwei. Section CC - EH1 - EH2.vi - Seite 152 Es erfolgt also eine Überprüfung, ob beim Drücken des „grünen Pfeils“ Port 18 bereits erreicht ist. Wenn ja, wird der Port um -16 auf zwei gesetzt. Diese Änderung wird angezeigt und in das Array übernommen. Die Änderung des TPG300-Anschlusses funktioniert ebenso. Hier gibt es vier Wahlmöglichkeiten. Die Überprüfung erfolgt also auf Element drei. Der Anschluß wird so lange inkrementiert, bis drei erreicht ist, dann wird er auf null zurückgesetzt. Es handelt sich auch hierbei um einen „Text Ring“. Folgende Anschlüsse sind den Ziffern zugeordnet: 1 - TPG300 - A1 2 - TPG300 - A2 3 - TPG300 - B1 4 - TPG300 - B2 Bei der Angabe der abhängigen Drucksensoren („Connections“) wurde bei der Programmierung ein anderes Konzept verfolgt: Die alten Elemente werden aus dem Array gelöst und durch die Indikatoren unter „Old“ angezeigt. Erst durch das Drücken von „Accept“ werden die neuen Positionsnummern, die direkt eingegeben werden können, in das Array übernommen. Solange „Accept“ nicht gedrückt ist, werden die neu eingegebenen Werte zwar unter „New“ angezeigt, aber noch die alten Werte in das Array geschrieben. Section CC - EH1 - EH2.vi - Seite 153 Es werden beide Angaben gleichzeitig geändert. Soll nur eine Angabe geändert werden, muß in die zweite Position unter „New“ derselbe Wert wie in „Old“ vorhanden eingegeben werden. Das Drücken des Schalters „Set AutoScan Masses“ hat zur Folge, daß das Programm „Set AutoScan Masses.vi“ aufgerufen wird. Die Eingabe von „Set Multiplier Gain Factor“, auch wieder ein „Text Ring“, wird direkt übernommen. Nach Beendigung der WHILE-Schleife (s.u.) wird immer die aktuelle Einstellung gespeichert. Hierzu wird die „Vacuum.ini“ geöffnet und deren Inhalt gelesen. In Zeile eins in der Position null wird der neue Wert für den Gain Factor abgelegt. Das neue Array wird wieder als „Vacuum.ini“ gespeichert. Wird der „Quit“Button gedrückt, wird nachgefragt, ob das Programm tatsächlich verlassen werden soll, ohne die Einstellungen zu speichern. Wird in der angezeigten Dialogbox „OK“ gedrückt, erfolgt der Ausstieg aus diesem Programm, wird „Cancel“ gedrückt, passiert nichts. Das Anklicken des „Done“-Buttons führt zum Speichern der Einstellungen. Es wird vorher noch einmal gefragt, ob die alte Konfiguration überschrieben werden soll. Wird in der angezeigten Dialogbox „OK“ gedrückt, wird das Programm beendet und die Daten werden gespeichert. Wird statt dessen „Cancel“ gedrückt, passiert nichts. Section CC - EH1 - EH2.vi - Seite 154 Ein Array wird erzeugt, das die Positionsnummern enthält. Dieses Array muß noch inkrementiert werden, da die Positionsnummer bei eins beginnen. In der Sektion Zentralhaus wird ein Array mit 18 Ziffern erzeugt, in den anderen Sektionen ein Array mit 16 Ziffern. Alle Arrays werden in der oben beschriebenen Reihenfolge zu einem einzigen 2D-Array zusammengesetzt. Alle Konfigurationen liegen nun spaltenweise übereinander. Wurde der „Done“-Button gedrückt, und die Daten sollen abgespeichert werden, wird das erzeugte Array durch die Funktion „Convert Config-Data to File.vi“ umgesetzt und anschließend als neue „Port.all“-Datei abgespeichert. Section CC - EH1 - EH2.vi - Seite 155 Programm: Security Penning.vi Eingabe: Port Number Location Port Info Ausgabe: OK! Penning Kurzbeschreibung: Überprüfung des Druckes bei Pirani-Meßröhren, in deren Abhängigkeit Penning-Drucksensoren eingeschaltet werden Programmbeschreibung: Die Eingabe der „Port Info“ ist optional. Es wird überprüft, ob eine Verbindung hergestellt wurde. Ist die Größe des Arrays gleich 0 (Null) muß die Port-Konfiguration noch geladen werden. Hierzu wird die „Port.sys“ geladen. Sind in „Port Info“ Informationen enthalten, werden diese benutzt. Aus der „Port Info“ wird die Konfiguration herausgesucht, in der das angesprochene Meßgerät enthalten ist. Dazu werden die PortNummer und der Anschluß mit den Daten in der Konfiguration verglichen. Um eine Endlosschleife zu verhindern, erfolgt zusätzlich die Abfrage, ob nicht das Ende der Liste schon erreicht wurde. Die Positionsnummer im „Port Info“-Array wird benötigt. An der Position 2 in der Konfiguration steht die Kennziffer der angeschlossenen Hardware. Eine Penning-Meßröhre trägt die Kennziffer 4 (Vier). Es erfolgt die Abfrage, ob es sich um diese Kennziffer handelt. Trifft dies zu, wird der Ausgang „Penning“ auf true gesetzt. Security Penning.vi - Seite 156 Normalerweise sind die Penning-Meßröhren hardwaremäßig verriegelt. In jedem TPG300 sind sowohl Penning- als auch PiraniMeßröhren untergebracht. Somit können durch die Definition von Schwellwerten innerhalb des TPG300 die Pennings in Abhängigkeit von den Pirani-Meßröhren eingeschaltet werden. Es gibt eine Ausnahme: In einem TPG300 sind ausschließlich Penning-Drucksensoren untergebracht. Ein gegenseitige Verriegelung ist demnach durch die Hardware nicht möglich: Die Verriegelung muß durch die Software realisiert werden. In der Konfiguration können die Drucksensoren eingegeben werden, von denen das Einschalten der Massenspektrometer abhängig ist, und ebenso können bei Penning-Meßröhren Pirani-Drucksensoren definiert werden. Zweckmäßigerweise sollte dies nur bei dem oben angesprochenen TPG300 durchgeführt werden, da das doppelte Abfragen von Meßgeräten sonst zuviel Zeit kostet. Ob eine Abfrage von weiteren Drucksensoren stattfinden soll wird entschieden, wenn an den Positionen 4 und 6 in der Konfiguration, die die Port-Nummern der Pirani-Meßröhren definieren, Werte eingetragen sind, die ungleich 0 (Null) sind (Port 0 kommt nicht vor). Sind alle Bedingungen erfüllt, wird eine zusätzliche Messung gestartet. LabVIEW akzeptiert keine rekursiven Funktionen, daher muß der Inhalt des Programms „Read TPG300 (pressure).vi“ hier erneut eingefügt werden. Die Port-Nummer ist bereits vorhanden, fehlt noch der Anschluß. Dieser steht in der Konfiguration an Position 5, bzw. an Position 7. Der weitere Inhalt der CASE-Anweisung soll nicht noch einmal erläutert werden. Die Beschreibung ist analog der des oben bereits erwähnten Programms „Read TPG300 (pressure).vi“. Der gemessene Druck beider Messungen muß unter 1,0E-4 mbar liegen, damit der Ausgang „OK!“ auf true geschaltet wird und damit die Messung an der Penning-Meßröhre freigegeben wird. Laut Hersteller soll der Kaltkathoden-Meßkreis nicht bei einem Druck über 1E-3 mbar eingeschaltet werden, um eine übermäßige Verschmutzung zu vermeiden. Die Wahl, das Einschalten erst ab einem Druck von 1E-4 mbar zu gewähren, dient als Security Penning.vi - Seite 157 „Sicherheitsabstand“. Dieser ist möglich, da die Pirani-Meßröhren bis zu einem Druck von 1E-4 mbar messen und danach in „Underrange“ schalten. Waren eine oder mehr Bedingungen für die Durchführung einer Zusatzmessung nicht erfüllt, wird „OK!“ auf true gesetzt, da davon auszugehen ist, daß, sofern es sich um eine Penning-Meßröhre handelt, diese durch eine hardwareseitige Verriegelung aktiviert wird. Security Penning.vi - Seite 158 Programm: Security Pressure.vi Eingabe: Pressure Limit Quadrupole Information Index Read new? Ausgabe: Pressure OK Multiplier Kurzbeschreibung: Überprüfung des Druckes bei Drucksensoren oder Lesen aus einem File, in dessen Abhängigkeit Massenspektrometer eingeschaltet werden Programmbeschreibung: Mit Hilfe des Indexes werden aus der „Quadrupole Information“, die die Konfiguration des aktuell gewählten Massenspektrometers enthält, die Informationen über die abhängigen Drucksensoren selektiert. Merke: „Quadrupole Information“ enthält von der allgemeinen Konfiguration abweichende Daten! An Position 2 und 3 im „Quadrupole Information“-Array sind die Port-Nummer und der Anschluß des ersten Drucksensors, der überprüft werden soll, enthalten. An Position 4 und 5 befinden sich die Port-Nummer und der Anschluß des zweiten Drucksensors. Ist der Eingang „Read new?“ gleich true, werden diese Daten benutzt, um mit Hilfe der Funktion „Read TPG300 (pressure).vi“ den Druck an den definierten Drucksensoren zu messen. Weiterhin wird aus dem „Quadrupole Information“Array die Information über den Zustand des Multipliers gewonnen. Diese befindet sich an Position 1 im Array. Das Ergebnis (vorhanden/ nicht vorhanden) wird über „Multiplier“ ausgegeben. Die Entscheidung, ob ein Druckmeßwert ausreichend klein gewesen ist, um das gewählte Massenspektrometer einzuschalten, wird über den Eingang „Pressure Limit“ definiert. Der Eingang enthält den Wert, der bei eingeschaltetem Multiplier nicht überschritten werden darf (Hersteller: 2,0E-6 Torr; gewählt: 5,0E-7 mbar). Die Information über den Zustand des Multipliers beläßt diesen Wert (Multiplier ein) oder multipliziert ihn mit 100 (Multiplier aus). Security Pressure.vi - Seite 159 Sind beide Meßergebnisse kleiner als dieses Limit, wird „Pressure OK“ gleich true gesetzt. Somit wird das gewählte Massenspektrometer zur Messung freigegeben. Ist der Eingang „Read new?“ gleich false, soll also kein neuer Wert gemessen werden, werden die Ergebnisse aus den Routinemessungen des Druckes zur Entscheidung, ob ein Massenspektrometer eingeschaltet werden soll, herangezogen. Der Pfad zu den statistischen Daten wird definiert und aus der Liste der vorhandenen Files das letzte (das aktuellste) ausgewählt. Die Datei wird geöffnet und deren Größe bestimmt. Mit „Index Array“ Index = 0 wird die Anzahl der vorhandenen Meßdurchläufe (plus Positionsnummern) festgestellt, mit dem Index = 1 die Anzahl der einzelnen Messungen. Der Anzahl der Messungen ist die Meßzeit vorangestellt. Diese wird durch das Dekrementieren des Arrays und dem Beginn des Ausschneidens bei der Position 1 eliminiert. Es soll nur die letzte Messung betrachtet werden, daher wird die Größe der Anzahl der Meßdurchläufe um zwei dekrementiert und diese letzten beiden Zeilen selektiert. In dem so entstandenen Teilarray sind in Zeile 0 die Meßdaten und in Zeile 1 die Positionsnummern aus der Konfiguration zugeordnet. Durch die Funktion „Select Array-line.vi“ werden die Zeilen voneinander getrennt. Um die gültigen Meßwerte herausfinden zu können, müssen zunächst die Positionsnummern bestimmt werden. Diese können aus der Konfiguration gewonnen werden. Der Einfachheit halber wird die „port.all“-Datei, die alle Konfigurationen enthält, geöffnet. Zur Bestimmung der Positionsnummer muß jede Konfiguration in der Datei mit den bereits vorhandenen Daten (Port-Nummer, Anschluß, Pirani/ Penning) verglichen werden. Security Pressure.vi - Seite 160 Die Datei liegt als 2DArray vor. Jede Spalte entspricht einer Konfiguration und damit einer Positionsnummer. Ein Shift-Register wird erzeugt. In ihm wird das Ergebnis gespeichert. Der Index der WHILE-Schleife kennzeichnet die Spalte. Auf Position eins (links oben) der Konfiguration befindet sich die PortNummer, sie wird mit der des Meßgerätes verglichen (siehe oben, Quadrupole Information). Position drei (links Mitte) enthält den Anschluß, hier erfolgt ebenfalls der Vergleich mit dem Wert aus „Quadrupole Information“. An Position zwei in der Konfiguration ist die angeschlossene Hardware definiert. Diese sollte, wenn es sich um einen Drucksensor handelt, mit der Kennziffer drei oder vier (größer drei) belegt sein. Treffen diese drei Bedingungen zu, wird es sich um das gesuchte Meßgerät handeln. Der Position null kann die Positionsnummer entnommen und im Shift-Register gespeichert werden. Die WHILE-Schleife wird abgebrochen, sobald eine gültige Positionsnummer gefunden wurde. Zusätzlich ist eine Sicherheitsabfrage eingebaut: Wenn der Index größer ist als die Anzahl der vorhandenen Konfigurationen, wird die Schleife ebenfalls abgebrochen. Diese Überprüfung erfolgt für beide Drucksensoren. Die gefundene Positionsnummer wird in dem Array mit den Positionsnummern, das bei der Messung der Drücke gebildet wurde, verglichen. Die Position, an der die Positionsnummer dann gefunden wurde (mit Hilfe der Funktion „Number of search number in an Array.vi“), wird als Eingang für eine „Index Array“-Anweisung benutzt, die dann den zugehörigen Meßwert aus dem anderen Array herausgefiltert. Diese Werte werden nach dem oben beschriebenen Verfahren mit dem Limit verglichen. Security Pressure.vi - Seite 161 Programm: Select a line or column from a 2D-string-Array.vi Eingabe: Input Array (2D) Number of Line/ Column Line/ T = Coloumn Ausgabe: Selected Array (1D) Kurzbeschreibung: Selektion einer Zeile/ einer Spalte eines 2D-Arrays, bestehend aus Strings Programmbeschreibung: Die Größe des eingegebenen Arrays wird bestimmt. Da es sich um ein 2D-Array handelt, ist die Ausgabe der „Array Size“-Anweisung ein 1D-Array mit den beiden Größenangaben. Mit dem Schalter „Line“ wird aus dem String-Array entweder eine Zeile selektiert (false) oder eine Spalte (true). „Line“ = false Aus der Größe des 2DArrays wird die Größe der Zeilen selektiert. Und dies als Parameter einer FORSchleife genutzt. Jedes Element aus der mit „Number of line/ column“ definierten Zeile wird aus dem Array gelöst. Am Ausgang der FOR-Schleife wurde „enable indexing“ gewählt, so daß ein Array aus den Elementen der Zeile des 2DArrays entsteht. Das Ergebnis wird über „Selected Array ausgegeben“. Ebenso wird mit der Selektion einer Spalte verfahren („Line“ = true). Select a line or column from a 2D-string-Array.vi - Seite 162 Programm: Select Array-line.vi Eingabe: Input Array Line number Ausgabe: Output Array Kurzbeschreibung: Selektion einer Zeile eines Arrays. Programmbeschreibung: Die Größe des 2D-Arrays wird bestimmt. Die Ausgabe der „Size“Funktion ist ein 1D-Array. Der erste Wert beschreibt immer die Anzahl der Elemente in Y-Richtung, der zweite Wert die Anzahl der Elemente in X-Richtung. Eine Zeile, definiert durch „Line Number“, wird als Konstante behandelt, während der Index in einer FOR-Schleife als Variable genutzt wird, um alle Elemente dieser Zeile zu selektieren. Durch die Wahl von „enable indexing“ am Ausgang der FORSchleife, wird aus diesen Werten ein 1D-Array gebildet, das in „Output Array“ ausgegeben wird. Wichtig: Während die „Size“-Funktion die Anzahl der Elemente liefert (1, 2, 3,...), definieren alle anderen ArrayFunktionen das erste Element eines Arrays als das Element 0 (null)! Die Realisation über eine FOR-Schleife ist nur eine übersichtlichere Lösung als die „Array Subset“-Funktion, hat aber denselben Effekt. Der Programmieraufwand ist derselbe. Select Array - line.vi - Seite 163 Programm: Select array-row.vi Eingabe: Input Array Row Number Ausgabe: Output Array Kurzbeschreibung: Selektion einer Spalte eines Arrays. Programmbeschreibung: Die Größe des 2D-Arrays wird bestimmt. Die Ausgabe der „Size“Funktion ist ein 1D-Array. Der erste Wert beschreibt immer die Anzahl der Elemente in Y-Richtung, der zweite Wert die Anzahl der Elemente in X-Richtung. Eine Spalte, definiert durch „Row Number“, wird als Konstante behandelt, während der Index in einer FOR-Schleife als Variable genutzt wird, um alle Elemente dieser Spalte zu selektieren. Durch die Wahl von „enable indexing“ am Ausgang der FORSchleife, wird aus diesen Werten ein 1D-Array gebildet, das in „Output Array“ ausgegeben wird. Wichtig: Während die „Size“-Funktion die Anzahl der Elemente liefert (1, 2, 3,...), definieren alle anderen ArrayFunktionen das erste Element eines Arrays als das Element 0 (null)! Die Realisation über eine FOR-Schleife ist nur eine übersichtlichere Lösung als die „Array Subset“-Funktion, hat aber denselben Effekt. Der Programmieraufwand ist derselbe. Select Array - row.vi - Seite 164 Programm: Serial Communication - Spectra.vi Eingabe: Port Number Write String Answer required? Ausgabe: Serial Error Read Timeout Read String Kurzbeschreibung: Kommunikation mit einem Massenspektrometer über eine serielle Schnittstelle. Programmbeschreibung: Über die „Port Number“ wird die Initialisierung des Ports vorgenommen. Falls ein Fehler auftritt, wird dieser durch den „Simple Error Handler“ bearbeitet. Ist kein Fehler aufgetreten, wird der „Write String“ zur Übertragung in das für das Massenspektrometer vorgeschriebene Format „(xxx)\r“ gebracht (xxx = Anweisung, \r = Carriage Return) und über die Funktion „Serial Port Write“ übertragen. Wird eine Antwort von dem angesprochenen Massenspektrometer erwartet, also „Answer required?“ gleich true ist, wird die folgende CASE-Struktur durchlaufen. Ist kein Fehler aufgetreten, wird eine WHILE-Schleife so lange durchlaufen, bis in dem Ergebnisstring ein (gesendetes) Carriage Return gefunden wurde, bis die Anzahl der <CR> im String ungleich -1 ist. An dem definierten Port (blaue Signalleitung links) wird festgestellt, wie viele Bytes dort vorhanden sind. Diese Anzahl wird zusammen mit einer Konstante für den Timeout des Lesens an die Funktion Serial Communication - Spectra.vi - Seite 165 „Serial Read with Timeout“ weitergegeben, in der die verfügbaren Bytes abgerufen werden. Da nicht unbedingt zu erwarten ist, daß die Antwort des Massenspektrometers bereits vollständig übertragen wurde (das letzte Byte ist ein <CR>), werden die vorhandenen Daten in einem ShiftRegister gesammelt und erst nach Abschluß der Übertragung ausgegeben. Vorher wird jedoch das <CR> aus dem Übertragungsprotokoll gelöscht. Während der Initialisierung, des Schreibens der Anweisung und des Lesens am Port können Fehler auftreten. Diese werden über „Read Timeout“, für das Überschreiten der zum Lesen von Daten verfügbaren Zeit, und „Serial Error“ ausgegeben. Ein Fehler an der seriellen Schnittstelle läßt sich nicht sofort beheben oder beeinflussen, tritt aber ein Timeout auf, kann dies z.B. an zu langen Leitungen liegen oder daran daß das Massenspektrometer eine andere Messung noch nicht abgeschlossen hatte. Für diesen Fall wird die gesamte Prozedur des Schreibens (und Lesens) noch bis zu zweimal wiederholt, erst dann wird das Programm abgebrochen und die Fehlermeldung ausgegeben. Serial Communication - Spectra.vi - Seite 166 Programm: Serial Communication - TPG300.vi Eingabe: Port Number Write String Answer Ausgabe: Serial Error Read Timeout Serial read Kurzbeschreibung: Kommunikation mit einem TPG300 über eine serielle Schnittstelle. Programmbeschreibung: Über die „Port Number“ wird die Initialisierung des Ports vorgenommen. Falls ein Fehler auftritt, wird dieser durch den „Simple Error Handler“ bearbeitet. Ist kein Fehler bei der Initialisierung aufgetreten, wird die durch „Write String“ definierte Anweisung an das TPG300 geschickt. Das TPG300 erwartet als Abschluß jeder Anweisung ein <CR><LF> (= Carriage Return, Line Feed). Für die String Konstante wurde auf „’\’ Code Display“ umgeschaltet. Dies bedeutet, daß Steuerzeichen angezeigt werden. In diesem Format werden nun „\r“ für Carriage Return und „\n“ für Line Feed eingegeben. Eine zusätzliche Eingabe in der Anweisung entfällt. Dieser String wird über die serielle Schnittstelle an das TPG300 ausgegeben und eine Fehlerbehandlung mit dem Error Handler durchgeführt. Nach Erhalt der Anweisung reagiert das TPG300 mit einer Rückmeldung, einem Command Acknowledgement. Dieses besteht aus <ACK><CR><LF>. Oder im Steuercode: „\06\r\n“. Trat ein Fehler in Form eines „Serial Errors“ oder eines „Read Timeouts“ auf, wird diese Prozedur bis zu dreimal wiederholt. Erst danach erfolgt ein Abbruch. Serial Communication - TPG300.vi - Seite 167 Wurde keine Antwort erwartet, ist dieses Programm hiermit beendet. Wird eine Antwort erwartet, z.B. bei der Anforderung eines Meßwertes, muß dem TPG300 die Anweisung <ENQ> (= Equiry, Anforderung zur Datenübertragung) mitgeteilt werden. Dies entspricht dem Steuerzeichen „\05“. Trat kein Fehler bei der Übertragung auf, werden über das „Serial Read.vi“ und die Funktion „Bytes at Serial Port“ die ankommenden Daten am Port gesammelt. Die WHILE-Schleife wird so lange wiederholt, bis in dem sich ergebenden String ein <LF> (Line Feed: \06), daß das Ende der Übertragung signalisiert, auftritt. Sollte nicht die gesamte Information auf einmal verfügbar sein, wird diese in einem Shift-Register gesammelt und anschließend über „Serial Read“ ausgegeben. Die Fehlermeldungen „Serial Error“ und „Read Timeout“ werden über die entsprechenden Indikatoren ausgegeben. Der Read Timeout ist auf 5s eingestellt. Serial Communication - TPG300.vi - Seite 168 Programm: Serial Read.vi Eingabe: Port number Timeout Limit Bytes to read Ausgabe: Serial Read Timeout Error out Kurzbeschreibung: Lesen der vorhandenen Bytes an einer seriellen Schnittstelle. Programmbeschreibung: Über „Port number“ wird die zu lesende serielle Schnittstelle definiert. Die aktuelle Uhrzeit wird bestimmt. Diese beiden Werte gehen als Konstanten in die WHILE-Schleife ein. Hier wird die aktuelle Zeit noch einmal gemessen. Die Differenz wird durch Eintausend geteilt und die somit in Sekunden verfügbare verstrichene Zeit mit dem „Timeout Limit“ verglichen. Wird nichts anderes angegeben, beträgt das Limit 5 s. Beim Überschreiten dieser Frist wird „Timeout“ = true ausgegeben und der Lesevorgang (die WHILE-Schleife) abgebrochen. Mit der Funktion „Bytes at Serial Port“ wird die Anzahl der Bytes, die an dem definierten Port verfügbar sind, abgerufen. Ein Fehler führt zu einer Meldung über den „Simple Error Handler“. „Error Out“ wird gleich true gesetzt und die WHILE-Schleife abgebrochen. Serial Read.vi - Seite 169 Wird kein Fehler erkannt, werden in der CASE-Anweisung mit der Funktion „Serial Port Read“ die vorhandenen Bytes gelesen und an „Serial Read“ weiter- und damit ausgegeben. Tritt beim Lesen ein Fehler auf, wird dieser auch hier über den „Simple Error Handler“ abgewikkelt und „Error out“ = true gesetzt. Anmerkungen: Die Funktion „Bytes at Serial Port“ wurde in der ersten Version durch das Lesen immer nur eines Bytes ersetzt. Dies führte bei einigen Übertragungen zu Fehlern. Die Funktion wurde daraufhin in diesen Zustand zurückversetzt. Serial Read.vi - Seite 170 Programm: Set AutoScan Masses.vi Eingabe/Ausgabe: keine verknüpfte Datei: scan.ini Kurzbeschreibung: Setzen der ständig zu überwachenden Massen (Anzahl: max. 7). Bedienung: Mit „Select a mass to change“ wird ein Speicherplatz ausgewählt, der neu belegt werden soll. Durch „New mass“ läßt sich diese Masse definieren. Bei einigen Massenangaben sind konkrete Vorschläge, um welche Elemente (Atome / Moleküle / Verbindungen) es sich dabei handelt, vorhanden. Diese Möglichkeiten werden angezeigt. „New Mass“ enthält beim Aufruf eines Speicherplatzes die Masse, die bislang definiert war. Diese läßt sich ändern. In welchem Druckbereich diese Massen betrachtet werden sollen, muß in „Set scanning range“ definiert werden. Mit „Done“ werden die aktuellen Einstellungen gespeichert, und dieses Programm wird verlassen. Wird der „Cancel“-Button gedrückt, obwohl Änderungen vorgenommen wurden, erscheint eine Dialogbox mit der Frage, ob die Einstellungen nicht vor dem Verlassen gespeichert werden sollen. Set AutoScan Masses.vi - Seite 171 Programmbeschreibung: Zunächst wird die zu ändernde Datei „scan.ini“ geöffnet, die Werte gelesen und die letzte Einstellung selektiert. Die eingestellten Massen werden zur Anzeige gebracht. Die letzte (aktuelle) Konfiguration wird mit „Select Array-line.vi“ selektiert. Die eingestellten Massen werden aus der geladenen Konfiguration getrennt und zur einfacheren Darstellung in einen Cluster umgewandelt. Drei Positionen werden dazu aus dem Array gelöscht: Die Speicherzeit und die Druckangaben. Die Drücke werden gesondert selektiert und die gespeicherten Werte als Default-Werte zur Anzeige gebracht. „New Mass“ wird als Default-Wert der Wert des ersten Speicherplatzes übergeben. „Select a mass to change“ ist Default-mäßig auf eins eingestellt. Alle Änderungen erfolgen in einer WHILE-Schleife. Ein Shift-Register wird definiert, das die aktuelle Massenzahl mit einem Element aus dem Periodensystem oder einer Verbindung, z.B. einem Gasgemisch verbindet. Als Default-Wert wird der Wert von „New Mass“ benutzt. Der Cluster mit allen Einstellungen, der ebenfalls über ein Shift-Register geführt ist, wird zur Anzeige gebracht. Ein weiteres Shift-Register wird erzeugt, das die Kennziffer des aktuellen Speicherplatzes enthält, der bearbeitet wird. Diese Kennziffer wird mit jedem Durchlauf der WHILE-Schleife durch den Wert von „Select a mass to change“ aktualisiert. Der Cluster mit den Speicherplatzwerten wird in ein Array umgewandelt. Der Wert des Shift-Registers mit dem Speicherplatz muß dekrementiert werden, da ein Array mit dem Wert null statt mit eins beginnt. Der Wert von „New Mass“ wird in das Array übernommen. Das neue Array wird zurück in einen Cluster gewandelt und auf das zugehörige Shift-Register geführt. Set AutoScan Masses.vi - Seite 172 Ist „Select a mass to change“ geändert worden, also der neue Wert ungleich dem des Shift-Registers, wird aus dem Array der Speicherplatzbelegungen der zugehörige Wert selektiert und als Default-Wert „New Mass“ zugewiesen. Beim Drücken des „Cancel“Buttons und wenn das neue Array nicht mit dem Alten übereinstimmt, erfolgt die Abfrage, ob die neuen Einstellungen gespeichert werden sollen. Danach, und auch im Falle des Betätigens des „Done“-Buttons wird dieses Programm beendet. Die Speicherung erfolgt mit der aktuellen Uhrzeit (incl. Datum) in Sekundendarstellung (=universal time). Sie wird an die existierende „scan.ini“ angehängt. Die Reihenfolge ist folgendermaßen festgelegt: Uhrzeit, das Array mit der Belegung der Speicherplätze und das sortierte Array mit den gewählten Drücken. Eine weitere Angabe, die gespeichert wird, ist der zu überwachende Druckbereich. Wird dieser möglichst klein gewählt, z.B. in dem Bereich, wo der Betrieb der Anlage kritisch wird, erfolgt die Messung jeweils schneller als bei einem großen Druckbereich. Set AutoScan Masses.vi - Seite 173 Programm: Set Distances.vi Eingabe/Ausgabe: - verknüpfte Datei: System.ini Kurzbeschreibung: Definition der Abstände der Massenspektrometer zum Zentralhaus (für den Tunnelcheck) Bedienung: Dieses Programm wird aus der Konfiguration aufgerufen. Im Zentralhaus muß ein Fixpunkt definiert und gekennzeichnet werden, von dem alle Längenmessungen ihren Ursprung haben. Nun werden alle Abstände zwischen diesem Fixpunkt und den in den Armen des Interferometers vorhandenen Massenspektrometer in Metern bestimmt. Diese Werte werden in die Liste auf dem Bildschirm eingetragen. Quadrupol Nummer eins entspricht dem Massenspektrometer, das dem Zentralhaus am nächsten gelegen ist. Diese Definitionen werden für beide Arme durchgeführt. Set Distances.vi - Seite 174 In der letzten Zeile erscheint bei Programmaufruf der Hinweis „Total“. Hier kann der Abstand vom Fixpunkt im Zentralhaus zu einem Fixpunkt in den Endhäusern eingegeben werden. Bei der Berechnung des Abstandes des Maximums der interpolierten Funktion aus dem Tunneltest erscheint nicht nur die Angabe vom Zentralhaus aus gemessen, sondern auch aus der Gegenrichtung: dem Endhaus. Dies erleichtert das Nachmessen, wenn das vermeintliche Leck näher am Endhaus liegt. Wird dieser Wert nicht eingegeben, berechnet das Programm den Abstand zum letzten Massenspektrometer. Programmbeschreibung: Das Hauptprogramm besteht aus einer WHILE-Schleife, die als Abbruchbedingung das Drücken des „OK“-Buttons hat. In ihr befindet sich die zu ändernde Liste als String-Array. Die Größe des Arrays (der Liste) wird festgelegt. Der „OK“-Button wird auf false gestellt. Die Datei „System.ini“ wird geöffnet und die alte Konfiguration geladen. Die Daten der geladenen Konfiguration werden durch zwei verschachtelte FOR-Schleifen in die Liste (das String-Array) eingefügt. Die Indexwerte müssen jeweils inkrementiert werden, da die ersten Plätze des Arrays bereits mit der Beschriftung der Liste vergeben sind. Die Listenbeschriftungen wurden in einer Arraykonstanten definiert, die als Anfangszustand in das Shift-Register der FOR-Schleife gegeben wird. Set Distances.vi - Seite 175 Wurde der „OK“-Button gedrückt und damit die Beendigung der Einstellungen signalisiert, überprüft das Programm, ob die aktuellen Einstellungen der Liste von den geladenen abweicht. Wurde nichts geändert, ist es nicht nötig, die Einstellungen zu speichern. Wurden Änderungen durchgeführt, muß das String-Array in Zahlen umgewandelt werden. Hierzu wird zunächst mit der „Array Subset“Anweisung die Tabellenbeschriftung ausgeschnitten. Ein leeres Array wird erzeugt. In ihm werden die umgewandelten Werte untergebracht. Die Umwandlung erfolgt wieder mit Hilfe zweiter FOR-Schleifen, wie oben beschrieben. Die Daten werden zum Schluß als 2D-Array abgespeichert, wobei das alte File überschrieben wird. Set Distances.vi - Seite 176 Programm: Set Multiplier Gain Factor.vi Eingabe: Multiplier (0, 1, 2) Port number Ausgabe: - Kurzbeschreibung: Setzen des Gain Factors eines Multipliers. Programmbeschreibung: Ist die Eingabe „Multiplier“ größer als 0 (0 → kein Multiplier), so wird über das Unterprogramm „Serial Communication - Spectra“ die Anweisung „G“ für die Einstellung des Gain Faktors (des Verstärkungsfaktors) und der entsprechenden Kennziffer an den in „port number“ gewählten Port übertragen. Die Kennziffer ergibt sich aus der inkrementierten Zahl der Eingabe „Multiplier“. Ist „Multiplier“ gleich Null, ist keine Einstellung nötig, da das an dem Port angeschlossene Massenspektrometer keinen Multiplier besitzt. Set Multiplier Gain Factor.vi - Seite 177 Programm: Setup.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Einrichten der Verzeichnisstrukturen und Grundeinstellungen Bedienung: Zur Installation des Programms GEO600 muß vorher das Programm „Setup.vi“ aufgerufen werden. Es ist dazu nötig, in das Verzeichnis von GEO600 zu wechseln. Nach dem Start erscheint folgender Bildschirm: Hier nicht dargestellt sind zwei Schalter in der rechten unteren Ecke: Der Benutzer wird aufgefordert, den Pfad einzugeben, in dem die nötigen Verzeichnisstrukturen angelegt werden sollen. Als Vorgabe ist „C:\GEO600“ eingestellt. Bei einer eigenen Eingabe ist darauf zu achten, daß das Ende nicht mit einem „\“ abschließt! Mit einem der beiden Taster gelangt man in die nächste Ebene. Wurde dieses Programm aufgerufen, um Komponenten zu ändern oder zu erweitern, ist der richtige Pfad einzugeben und „Next“ zu betätigen. Soll dieses Verzeichnis, z.B. beim Erststart, neu angelegt werden, ist der Schalter „OK“ anzuklicken. In der nächsten Ebene wird nach den Sektionen und den darin installierten Rechnern gefragt: Setup.vi - Seite 178 Der Benutzer wird aufgefordert, die Namen der Rechner in den Sektionen einzugeben und deren Internet-Adressen zuzuordnen. Diese Eingabe wird nach dem in der letzten Ebene beschriebenen Muster quittiert. Es wird auf die dritte Ebene umgeschaltet: Das Setup fragt nach externen Steuerrechnern, die installiert werden sollen. Von diesen Rechnern aus können Daten abgefragt und Einstellungen geändert werden und es werden Mitteilungen an sie geschickt, wenn z.B. ein Überdruck auftritt. Mit „Yes.“ können einer oder mehrere Rechner angegeben werden (In der aktuellen Version, 15.04.’97, ist zwar die Eingabe mehrerer Rechner möglich, angesprochen wird nur der Erste). Die Internet-Adressen werden in der sogenannten Dot-Notation eingegeben. Mit „Ready“ wird die Eingabe beendet. Setup.vi - Seite 179 Wird der „No.“-Button gedrückt, wird diese Abfrage übersprungen und in die nächste Ebene gewechselt: Mit Hilfe dieser Anzeige kann die Sektionsnummer eingegeben werden. Durch Anklicken wählt man die Sektion Zentralhaus, Endhaus 1, Endhaus 2 oder den externen Standort. Programmbeschreibung: Alle Eingabeelemente werden auf „unsichtbar“ geschaltet und die Textfarbe grau festgelegt. In einer WHILE-Schleife, in der das gesamte Programm abläuft, wird ein Shift-Register geöffnet. Es enthält einen Merker, an welcher Programmposition man sich gerade befindet. Der Merker startet mit null. Durch Drücken der „Next“ oder „OK“Taste oder durch einen programminternen Schalter wird der Merker erhöht und damit zum nächsten Programmteil gewechselt. Die WHILE-Schleife wird so oft wiederholt, solange der Merker kleiner als sechs ist. Der „Next“- und der „OK“-Button werden dargestellt. Programmteil 0: Erstellung der Verzeichnisse Das Eingabeelement „Path to install“ wird dargestellt und über eine „Local variable“ mit „C:\GEO600“ ein möglicher Pfad vorgegeben. Im Textfeld wird der „Willkommen“-Text angezeigt. Setup.vi - Seite 180 Sobald der „OK“-Button gedrückt wird, wird der Inhalt des „Path to install“-Feldes in einen Pfad umgesetzt und die Verzeichnisstruktur mit „New Directory“ erstellt (s.u.). Programmteil 1: Eingabe der beteiligten Rechner Im Textfeld erscheint die Aufforderung zur Eingabe der Namen und Internet-Adressen der in den Sektionen installierten Rechner. Das Eingabeelement „Path to install“ wird aus- und stattdessen der Cluster „Names/ Net“ eingeblendet. Sobald der „OK“-Button gedrückt wird, wird der Inhalt dieses Clusters bestimmt und in der Datei „names.sys“ abgespeichert. Programmteil 2: Eingabe externer Steuerrechner Der Cluster „Names/ Net“ wird ausgeblendet und die in diesem Programmteil nötigen Schalter „Yes!“ und „No!“ auf false gesetzt. Die Schalter und auch der „Ready“-Button werden dargestellt. In dem Textfeld erscheint die Frage, ob externe Steuerrechner installiert werden sollen und darunter die Buttons für „Ja“ und „Nein“. Setup.vi - Seite 181 Dem Eingabefeld „Enter Adress(es)“ wird der Default-Wert „000.000.000.000“ zugewiesen. In einer weiteren WHILE-Schleife wird die Entscheidung, ob Steuerrechner hinzugefügt werden sollen oder nicht, abgewartet. Ein ShiftRegister wird erzeugt. Dieses dient als Merker für den Abbruch der Schleife. Die Buttons „Next“ und „OK“ werden ausgeblendet. Der Merker wird auf true, zum Abbruch, gesetzt, sobald einer der beiden Schalter betätigt wurde. Diese Schleife wird abgebrochen, wenn einer der Eingänge nicht mehr false ist. Wurde der „Yes“-Button gedrückt, es soll also ein Rechner hinzugefügt werden, wird das Eingabefeld „Enter Adress(es)“ angezeigt und in einer WHILE-Schleife gewartet, bis alle Internet-Adressen eingegeben wurden und die „Ready“-Taste gedrückt wurde. Die Größe des resultierenden Arrays wird bestimmt und dieses Array in einen String umgewandelt, bei dem als Trennzeichen <CR><LF> zwischen den Adressen steht. Dieser String wird in „Names.sys“ abgespeichert. Programmteil 3: Sektionsbestimmung Die Schalter und Eingabeelemente aus dem letzten Programmteil und der „OK“-Button werden ausgeblendet. Der Cluster „Section“ wird eingeblendet. Dem Textfeld wird die Aufforderung zur Bestimmung der eigenen Sektion zugeordnet. Der Cluster „Section“ wird mit der „Unbundle by name“-Anweisung aufgetrennt. Mit der Funktion „Witch Input is true.vi“ wird festgestellt, ob einer Setup.vi - Seite 182 der Eingänge (der Schalter im Cluster) gleich true ist und wenn ja, welcher. War einer der Eingänge true, wird der Programmerker erhöht und die herausgefundene Sektion (inkrementiert, da die Positionsnummern bei eins, statt bei null beginnen) in der „Vacuum.ini“ abgespeichert. Programmteil 4: Initialisierung des Systems Dem Textfeld wird die Mitteilung über die Initialisierung des Systems zugeordnet. Die Dateien „State.ini“, „Scan.ini“ und „Statistics.inf“ werden mit null, bzw. der aktuellen Uhrzeit initialisiert und in den entsprechenden Verzeichnissen abgespeichert. Programmteil 5: Automatisches Kopieren des GEO600-Programms Noch nicht vorhanden. Setup.vi - Seite 183 Programm: Show AutoScan Data II.vi Eingabe: Span Port Ausgabe: From - to Y-Scale X-Scale Style X-Scale Grid Names Plot Names Data Changes Actual Time Resolution out Kurzbeschreibung: Unterprogramm zu „Show AutoScan Data.vi“. Aufruf der Skalierung und der Formatierung der AutoScan Daten in Abhängigkeit der Zeitspanne Programmbeschreibung: Die aktuelle Zeit wird bestimmt und ausgegeben. Abhängig davon, welche Größe „Span“ annimmt (0-3), wie groß also der betrachtete Zeitraum sein soll, wird das Programm „Scale Show AutoScan Masses.vi“ aufgerufen. Bei der Darstellung wird auf die Auflösung im ersten Fall, Anzeige der letzten drei Stunden, verzichtet. Der entsprechende Eingang am Unterprogramm wird nicht belegt. In den anderen drei Fällen, Anzeige der letzten 24 Stunden, der letzten drei Tage und der letzten sieben Tage, kann eine frei definierbare Auflösung gewählt werden. Diese Wert sind bislang auf null gesetzt. Es werden interne Werte benutzt. Siehe hierzu die Programmbeschreibung zu „Scale Show AutoScan Masses.vi“. Die aus diesem Programm resultierenden Werte (Y-Scale, X- Scale Style, X-Scale Grid Names, From - to, Resolution out und Changes) werden ausgegeben. Show AutoScan Data II.vi - Seite 184 Das Programm „Make AutoScan Data showable.vi“ stellt alle für den Zeitraum geltenden Daten zusammen und formatiert sie so, daß sie mit der „Resolution out“ dargestellt werden können. Als Eingaben werden hierzu der Port, die aktuelle Zeit und die gewählte Zeitspanne benötigt. Heraus kommen die formatierten Daten und die Namen der zusammengestellten Daten. Show AutoScan Data II.vi - Seite 185 Programm: Show AutoScan Data.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Darstellung der AutoScan Daten Bedienung: Diese Statistikfunktion kann vom Hauptbildschirm aus aufgerufen werden. Kopfzeile: Die wichtigsten Eingabeelemente befinden sich in der Kopfzeile. Um eine statistische Auswertung zu starten, muß ein Massenspektrometer gewählt werden, das Grundlage einer Auswertung sein soll. Sind die Sektion und/ oder der Port nicht bekannt, kann über „Search...“ anhand einer Skizze des Systems ein Massenspektrometer ausgewählt werden. Der Schieber in der Mitte legt den zu betrachtenden Zeitraum fest. Es besteht die Wahlmöglichkeit, die Druckentwicklung der AutoScanMassen der letzten drei Stunden, die letzten 24 Stunden, die letzten drei Tage oder die letzten sieben Tage zu verfolgen. Endpunkt dieser Zeitrechnung ist immer der Augenblick, in dem die Auswertung gestartet wurde. Der Schalter „Show“ startet die Zusammenstellung der Daten. Soll dieses Programm beendet werden , drückt man den „Quit“-Button. Wird eine Auswertung über mehrere Tage gestartet, wird in diesem Feld der betrachtete Zeitraum eingetragen. Das Ergebnis einer Auswertung wird in Kurvenform dargestellt. Jeder durch AutoScan definierten Masse wird eine Farbe zugeordnet. Die Zuordnung befindet sich rechts oben. Die jeweiligen Massenzahlen werden links neben den Farben eingetragen (Beispiel: Plot 0 trägt den Namen H, für Wasserstoff). Es werden maximal sieben Massen dargestellt. Show AutoScan Data.vi - Seite 186 Die letzte Kurve mit dem Namen „change“ taucht im Diagramm nur als Teiler auf. Mit diesem werden die Zeitpunkte gekennzeichnet, in denen Änderungen in der AutoScan-Konfiguration durchgeführt wurden. Druckverläufe, die auf der einen Seite noch vorhanden waren und auf der anderen nicht mehr, kennzeichnen das Löschen bzw. Hinzufügen der betreffenden Masse aus oder in die AutoScan-Konfiguration. Programmbeschreibung: Die Datei „Vaccum.ini“ wird geöffnet. Aus ihr wird der Name der Sektion, in der der aufrufende Rechner steht, gewonnen. Dieser Wert wird mittels einer „local variable“ als Default bei der Anzeige der Sektion auf dem Bildschirm benutzt (siehe oben). Die Variable „Search“ wird auf false gesetzt und der zu suchende Port auf null: kein Port ausgewählt. Um den Suchvorgang einzuleiten, wird auf „Search“ gedrückt. Show AutoScan Data.vi - Seite 187 Hierdurch wird das Unterprogramm „Get Position Numbers in other Sections.vi“ gestartet. Ergebnis ist ein Array, in dem die Sektion und die Port Nummer des gewählten Massenspektrometers vorhanden sind. „Show“ leitet die Zusammenstellung der Daten ein. Zunächst wird überprüft, ob die gewählte Sektion der eigenen entspricht. Ist dies der Fall, werden über das Unterprogramm „Show AutoScan Data II.vi“ alle Daten zusammengetragen (Y-Scale, X-Scale Style, X-Scale Grid Names, From - to, Plot Names, Data, Changes, Resolution out, Actual time). Sind die gewählte und die eigene Sektion unterschiedlich, muß dem Rechner der Sektion, über die das gewünschte Massenspektrometer verwaltet wird, die Anweisung geschickt werden, daß diese alle Daten zusammenstellt und anschließend zurückschickt. Dieses wird über die Anweisung „Axx“ erreicht. „xx“ steht hier als Platzhalter, an deren Stelle die PortNummer des Massenspektrometers in der Zielsektion eingesetzt wird. Als Parameter wird der gewählte „Span“ mitgeschickt. Es erfolgt eine Abfrage, ob durch die „Send“-Anweisung die gewünschten Daten bereits mit zurückgeschickt wurden. Ist dies nicht der Fall, wird mit der Anweisung „Communication C - C (Receive).vi“ auf das Ergebnis gewartet. Die aufgrund der Übertragung in einen String verpackten Daten werden durch die Funktion „AutoScan Data-String to Data.vi“ in die zur Anzeige benötigten Daten zurückgewandelt. Das Array „Plot Names“ enthält nur die sieben Namen der darzustellenden Massen. Es wird durch den Namen „change“ erweitert. Die Definition dieser Namen in der Anzeige erfolgt in einer FORSchleife in zwei Schritten. Zunächst wird der aktive Plot gesetzt. Show AutoScan Data.vi - Seite 188 Im zweiten Schritt wird der Name an die Stelle des aktiven Plots eingesetzt. Zu beachten ist hierbei, daß die Masse 0 (Null) nicht existiert und daher auch nicht in die Liste aufgenommen werden darf. Die Daten werden aufgeteilt. Jedes Array wird einzeln behandelt. Hier sind die ersten drei dargestellt. Für jedes Datenarray wird die Schrittweite eins und der Anfangspunkt x0 mit eins festgelegt. Dies erfolgt für die Darstellung in einer „Bundle“Anweisung. Alle „ge-bundle-ten“ Daten werden in einem Array zusammengefaßt und der „Waveform Chart“ zugeführt. Ausnahme dieser Prozedur ist das Array, das die Änderungen der Konfigurationen enthält. Über die Funktion „Format Changes-data-Array.vi“ wird ein eigenständiges Datenarray erzeugt, das nur aus Nullen und an den Änderungen aus Einsen besteht. Das Bundlen erfolgt analog zu den Datenarrays. Show AutoScan Data.vi - Seite 189 Programm: Show Full Scan.vi Eingabe: Path (port.sys) Ausgabe: keine Kurzbeschreibung: Manueller Abruf des Spektrums eines Massenspektrometers Bedienung: Es können folgende Einstellungen zum Aufruf der Messung eines kompletten Spans vorgenommen werden: • Massen (von - bis) • Bereich (von - bis; logarithmische Darstellung; Eingabe in 1E-x), • Accuracy (Genauigkeit: 1 =Schnelldurchlauf - 5 =genaueste Anzeige) • Multiplier Gain Factor (kein Multiplier, E2→*100, E3→*1000) • Port-Nummer • Sektionsnummer (diese und die Port-Nummer sind komfortabler durch die „Search...“-Funktion zu bestimmen Sind alle Werte eingestellt, kann die Messung über „Run“ gestartet werden. Der „Run“-Button verschwindet und stattdessen wird ein Button „Abort running“ eingeblendet. Soll die Messung abgebrochen werden, ist dieser Button zu betätigen. Mit „Exit“ kann man diese Option verlassen. Eine laufende Messung muß hierzu aber vorher abgebrochen werden. Show full Scan.vi - Seite 190 Programmbeschreibung: Die Arrays „Enter mass span“ und „Log axis (1E-x)“ legen die Darstellung des Koordinatensystems fest. Die Anzeige der Massen wird um eine erweitert, jedoch wird diese Masse nicht gemessen. Beispiel: Wahl der Massen von 1 - 50. Masse 0 wird im Koordinatensystem angezeigt, aber nicht gemessen. Die Messung des Eingabewertes von „Log Axis“ wird in dem Unterprogramm „Read full Span“ um den höchsten Druck reduziert, da dieser nicht zur Darstellung käme. Beispiel: Wahl des Bereichs von 1E-7 bis 1E-12 mbar. 1E-7 mbar wird obere Horizontale des Koordinatensystems, der letzte gemessene (und dargestellte) Bereich ist aber nur 1E-8 mbar. Vor der Darstellung und der Übergabe der Werte zur Messung erfolgt eine Überprüfung, ob die Koordinaten in der richtigen Reihenfolge eingegeben wurden (der größte Druck oben → entspricht der kleineren Zahl), und mindestens eine Zehnerpotenz zwischen diesen Angaben liegt. Sind diese Bedingungen nicht erfüllt, erfolgt eine entsprechende Korrektur. Weiterhin wird der maximale Wert für die Messungen zum Schutz der Filaments auf 1E-7 mbar begrenzt. Bei der Eingabe der Massen ist keine Korrektur erforderlich, da Eingaben in umgekehrter Reihenfolge zu keinen Fehlmessungen führen würden. Show full Scan.vi - Seite 191 Die Meßgeschwindigkeit und -genauigkeit wird über die Accuracy definiert. Der Wert „1“ zeigt hierbei die niedrigste Auflösung und damit auch eine hohe Fehlerrate, aber er zeichnet sich durch eine hohe Geschwindigkeit aus. Der höchste Wert, „5“, besitzt die höchste Auflösung und damit die geringste Meßungenauigkeit, aber eine solche Messung dauert auch am längsten (bei Masse 1-50 im Bereich 1E-7 mbar bis 1E-12 mbar mit Multiplier ca. 9 min.) Nicht alle Massenspektrometer sind mit einem Multiplier ausgestattet. Über den „Text ring“ (Anzeige von vordefinierten Texten) „Multiplier“ hat man die Wahlmöglichkeiten kein Multiplier, Verstärkung E2 (=*100) und Verstärkung E3 (=*1000). Entsprechend verschiebt sich der mögliche Meßbereich auf bis zu 1E-14 mbar. Eine Rückmeldung, ob das gewählte Massenspektrometer tatsächlich mit einem Multiplier ausgestattet war, erfolgt nicht. Folglich ist ohne Kenntnis der Verwendung der Anschlüsse auch nicht nachvollziehbar, ob die Messung mit oder ohne Multiplier ausgeführt wurde. Die Eingabe der Port-Nummer erfolgt über den realen Namen (Port 1, Port 2,...). Die interne Nummerierung beginnt bei COM0, daher muß der eingegebene Wert noch dekrementiert werden. Die Eingabe der Sektion geschieht über einen Text Ring. Es stehen Zentralhaus, Endhaus 1 und Endhaus 2 zur Verfügung. Die komfortablere Variante der Eingabe der Port/ Sektionsdaten ist, über die „Search...“-Funktion aus einer Skizze des Systems das richtige Massenspektrometer herauszusuchen. Hierdurch werden Fehleingaben vermieden. Das Drücken des „Search...“-Buttons startet das Unterprogramm „Get Position Numbers in other Sections.vi“. Ergebnis ist ein Array, das die Port Nummer und die dazugehörige Sektionskennziffer enthält. Über den „Exit“-Button kann dieses Programm verlassen werden. Voraussetzung: Es darf keine Messung gestartet sein! Show full Scan.vi - Seite 192 Die Messung wird über den „Run“-Button gestartet. Während der Messung werden alle Eingabemöglichkeiten deaktiviert. Eine Korrektur der eingegebenen Werte ist nur durch den Abbruch der Messung möglich (→ s. Read Full Span). Sämtliche Eingabeelemente werden durch „Attribute Nodes“ disabled. Durch die Eingabe „Zwei“ werden die Elemente grau dargestellt. Zum Zeitpunkt des Beginns der Messung werden das Datum und die aktuelle Uhrzeit festgehalten. Wird der Scan später ausgedruckt, ist somit eine Sortiermöglichkeit gegeben. Zunächst werden alle verfügbaren Informationen über das gewählte Massenspektrometer gesammelt und der Multiplier gesetzt. Diese Aufgabe übernimmt das Programm „Read full Scan-Get info.vi“. Wurde das gewünschte Massenspektrometer gefunden (ohne Fehlermeldung: „Port not found“), wird aus dem gewählten Druckmeßbereich eine FOR-Schleife gebildet, deren Anzahl der Durchläufe sich nach der Anzahl der gewählten Druckdekaden richtet. Der aktuelle Druckmeßbereich (Druckdekade) wird durch den minimalen Druck (die höchste Zahl: 1E-10 Torr = Dekade 10) minus dem mit jedem Durchlauf steigenden Index der FORSchleife errechnet. In dieser FOR-Schleife wird das Ergebnis einer Messung direkt von der Maßeinheit Torr in mbar umgerechnet. Der Umrechnungsfaktor ist 760/1033. Außerdem wird nach Beendigung der Messung einer Druckdekade das Ergebnis in der oben beschriebenen „Waveform Chart“ dargestellt. Soll das Ergebnis nicht nur angezeigt, sondern auch verschickt werden, ist hierfür der Indikator „Measurement out“ vorgesehen. Die nächste CASE-Anweisung bezieht sich auf das Verschicken bzw. das Empfangen einer Messung: Wurde von einem sektionsfremden Rechner ein Scan angefordert, wird das Ergebnis per Internet an den aufrufenden Rechner zurückgeschickt. Show full Scan.vi - Seite 193 Beim Aufruf dieses Programms zur Anzeige wird der Schalter „Answer“ auf true geschaltet. Somit erfolgt keine eigene Messung mehr, sondern die Daten werden durch „Measurement in“ empfangen. Alle Daten, egal ob gesendet oder gemessen, werden auf ein ShiftRegister geführt. Für den Fall, daß eine eigene Messung stattfinden soll („Answer“ = false), wird eine weitere CASE-Anweisung geöffnet. Tritt ein Fehler auf, z.B. in Form eines für die Massenspektrometer zu hohen Drucks, darf keine weitere Messung durchgeführt werden. Soll eine Messung von einem anderen Rechner durchgeführt werden, muß diesem die entsprechende Anweisung gegeben werden (s.u.). Dieses darf aber nur einmal passieren. Diese beiden Bedingungen sind durch jeweils ein Shift-Register gekennzeichnet. Ist eine Bedingung erfüllt, wird das Register auf true geschaltet. Ist eines der Register gleich true, wird keine Messung mehr durchgeführt. Ein bis dahin gemessenes Ergebnis bleibt erhalten, wird aber nicht mehr verändert. Dieses Ergebnis kommt zur Anzeige und die Fehlermeldung, der Scan sei unvollständig, erscheint. Ist keines der Register true, wird eine weitere CASE-Anweisung geöffnet. Hier erfolgt die Entscheidung, ob eine Messung mit diesem Rechner durchgeführt werden soll, oder ob ein anderer Rechner mit der Messung beauftragt wird. Es wurde bereits festgestellt, ob die gewählte und die eigene Sektion die gleichen Kennziffern besitzen. Ist dies nicht der Fall, werden alle für die Messung nötigen Daten durch die Funktion „Full Scan- Command to String.vi“ in einen String umgewandelt und dieser als Parameter mit der Anweisung „GFS“ an den Zielrechner verschickt. Der Merker (Shift-Register) für das Senden eines Kommandos wird auf true gesetzt, somit greift die letzte CASE-Anweisung (s.o.). Für den Fall, daß die Zielsektion und die eigene übereinstimmen, werden alle Eingabewerte an das Unterprogramm „Read Full Scan“ weitergegeben. Es wird nur eine Messung (die dieser Dekade) durchgeführt, dann erfolgt die Rückkehr in dieses Programm. Das Fehler-Shift-Register wird durch den Ausgang „Cancelled?“ beeinflußt. Show full Scan.vi - Seite 194 Auf dem Hauptbildschirm wird die gerade bearbeitete Dekade mit dem Indikator „Dekade“ angezeigt. Konnte ein Meßwert nicht eindeutig bestimmt werden (Meßwert liegt oberhalb der maximalen Anzeige), so erscheint eine Dialogbox mit der Aufforderung, diese Messung in einem größeren Bereich zu wiederholen, da das jetzige Ergebnis unvollständig ist (uneindeutige Meßwerte werden nicht angezeigt!). Wurde die Messung abgebrochen, erscheint eine Dialogbox, die noch einmal auf diesen Abbruch hinweist. Die Anweisung wird nur ausgeführt, wenn Null größer ist als das Minimum des gemessenen Scans (-1 ist im Scan vorhanden). Nach Beendigung einer Messung wird aus den einzelnen Partialdrücken der Gesamtdruck durch Summation gebildet. Die Nutzung des Summenzeichens ist hierbei nicht ausreichend. Bedingt durch ein Rauschen, das gerade bei der Messung in sehr niedrigen Druckdekaden auftritt, würde das Ergebnis verfälscht werden. Eine kleine Abhilfe schafft eine FOR-Schleife, in der jede gemessene Masse mit dem niedrigsten Druckmeßwert verglichen wird. Nur wenn der gemessene Wert größer ist als der Minimalwert, wird dieser zu dem Ergebnis addiert. Zur Beendigung des Meßvorganges wird die Konfigurationsdatei „port.sys“ noch einmal aktualisiert. Ein bisher noch nicht erwähnter Aspekt ist die Gewinnung der eigenen Sektionsnummer. Wurde die Testversion aktiviert (nur im Programm möglich), wird die eingestellt Sektion als die eigene behandelt. Show full Scan.vi - Seite 195 Ist die Testversion deaktiviert, wird die Datei „Vacuum.ini“ geöffnet. In ihr ist die Kennziffer der Sektion enthalten. Diese wird gelesen und als Konstante (Default-Wert) über eine „Local Variable“ dem Indikator „Section“ zugeführt. Der Wert wird weiterhin zur Überprüfung, ob ein Sendevorgang eingeleitet werden soll, benutzt (s.o.). Show full Scan.vi - Seite 196 Programm: Show Leak Check.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Durchführung des Lecktests Bedienung: Dieses Programm ist vom Hauptbildschirm über „Leakcheck“ und in dem erscheinenden Dialogfenster über „He-Leakcheck“ erreichbar. Alle einstellbaren Parameter befinden sich auf der rechten Seite des Bildschirms: Vor Beginn einer Messung müssen zwei Massenspektrometer eingegeben werden, die in der näheren Umgebung des zu untersuchenden Bereichs liegen. Die Positionsnummern können aus dem Bild entnommen werden. Wichtig: Es dürfen nur gültige Ziffern eingegeben werden, also ausschließlich Ziffern, die im Bild dargestellt werden! Falls nötig, können die Meßparameter verändert werden. Normalerweise wird das Gas Helium (Masse 4) für die Lecksuche benutzt. Wird ein anderes Gas gewählt, ist die entsprechende Massenzahl unter „mass“ einzutragen. Eine „Accuracy“ (= Geschwindigkeit, Auflösung) von drei ist für die Lecksuche ausreichend. Bei Bedarf kann diese verändert werden. Die höchste Auflösung wird mit fünf erreicht, die niedrigste Auflösung, aber höchste Geschwindigkeit mit null. Die nächsten beiden Schalter definieren den Druckmeßbereich. In diesem Beispiel liegt dieser von 1E-11 Torr (!) bis 1E-7 Torr. Im unteren Kasten kann gewählt werden, ob nur in deaktivierten Sektoren oder in allen Sektoren gemessen werden soll. Vorteil der Messung in deaktivierten Sektoren ist, daß bestehende Routinemessungen nicht durch die durchgeführte Lecksuche unterbrochen werden. Achtung: Die betreffenden Sektoren müssen vorher deaktiviert werden! Sind alle Parameter eingestellt, kann die Messung mit dem „Start“Button begonnen werden. Eine Unterbrechung durch nochmaliges Betätigen von „Start“ ist jederzeit möglich. Jede Veränderung der Massenspektrometer-Kombination führt zunächst zur Beendigung der Messungen. Mit dem „Quit“-Button wird dieses Programm verlassen. Show Leak Check.vi - Seite 197 Tritt ein Fehler auf, erscheint dieser Button in der rechten oberen Ecke. Die verfügbaren Massenspektrometer werden durch die Ziffern in diesem Bild gekennzeichnet. Alle Meßgeräte, die nicht Massenspektrometer sind, werden ausgeblendet. Wird der „Start“-Button gedrückt, erscheint im Kasten oben rechts die gewählte Massenspektrometer-Kombination und daneben der bei diesen Geräten gemessene Partialdruck der gewählten Masse. Programmbeschreibung: Der „Start“-Button wird auf false gesetzt und der Button „Measurement failed“ auf blinkend und unsichtbar. Das Programm „Get all Quadrupoles (Port_all).vi“ wird aufgerufen. Die Vergleichsstelle „ungleich null“ ist mit dem Schalter verbunden, bei dem die Auswahl zwischen den aktivierten oder allen Sektoren getroffen wird. Mit diesem Wert gleich eins (nur aktive Sektoren) wird jeweils nur die „port.sys“-Datei zur Zusammenstellung von Massenspektrometer-Daten benutzt, anderenfalls die „port.all“-Datei. Show Leak Check.vi - Seite 198 Eine FOR-Schleife wird 38 mal durchlaufen. Aus dem erzeugten Array mit den Informationen über die vorhandenen Massenspektrometer wird durch den Index nacheinander die Port Nummer kontrolliert. Ist diese Ziffer größer als null, also ein Massenspektrometer vorhanden, wird der zu dieser Position gehörige Button im Bild eingeblendet, ansonsten wird er unsichtbar. Eine WHILE-Schleife wird geöffnet. Diese wird so lange durchlaufen, bis der „Quit“-Button gedrückt wird. Es werden drei Shift-Register erzeugt. In dem ersten wird das Array mit der Massenspektrometer-Kombination zwischengespeichert. Das zweite Shift-Register fungiert als Merker, ob eine Messung fehlgeschlagen ist und das dritte als Merker für das Ergebnis der letzten Partialdruckmessung. Die neue Definition der MassenspektrometerKombination wird auf das Shift-Register geführt. Es wird überprüft, ob der aktuelle Wert von der alten Kombination abweicht. Ist dies der Fall, wird der „Start“-Button auf false gesetzt, eine laufende Messung damit unterbrochen. Weiterhin wird der Merker zu Anzeige eines Fehlers zurückgesetzt. Wurde keine Änderung in der Kombination durchgeführt, passiert nichts. Der Wert des Merkers wird ungeändert auf das Shift-Register geführt. Beim Auftreten eines Fehlers wird der Warnhinweis immer erst beim nächsten Durchlauf der WHILESchleife angezeigt. Show Leak Check.vi - Seite 199 Wird der „Start“-Button gedrückt, so wird eine FOR-Schleife geöffnet, die zweimal durchlaufen wird. Mit der „Index Array“-Anweisung wird jeweils einer der beiden Massenspektrometer ausgewählt und die Positionsnummer zusammen mit den Parametern der Funktion „Get Leak Check.vi“ zugeführt. Die Ergebnisse werden durch die Wahl „enable indexing“ zu einem Array verbunden. Das Ergebnisarray sowie die gewählte Massenspektrometer-Kombination werden dem Cluster (Anzeige) zugeführt. Hierzu wird die „Bundle by name“-Anweisung benutzt. Sie funktioniert nur, wenn eine Konstante mit „n named elements“ eingegeben wird. Das Ergebnisarray wird dahin überprüft, ob sich eine -1, also ein fehlerhaftes Ergebnis darin befindet. Dies geschieht mit der „Array Max & Min“-Anweisung. Das Minimum wird überprüft, ob es kleiner als null ist. Ist dies der Fall, wird der Merker für die Anzeige des Fehlers auf true gesetzt. Weiterhin wird überprüft, ob einer der beiden Partialdrücke steigt. Hierzu wird die Funktion „Value in Span.vi“ benutzt. Der im Shift-Register vorhandene letzte Maximalwert wird mit dem neuen Maximum verglichen. Ist die Druckerhöhung größer als 10% des alten Wertes, ist dies möglicherweise ein Indikator dafür, daß ein Leck gefunden wurde. Ist dies der Fall, wird die Anzeige für den Partialdruck blinkend geschaltet. Show Leak Check.vi - Seite 200 Programm: Show Pressure TPG300- Central-Cluster.vi Show Pressure TPG300- Endhouse 1.vi Show Pressure TPG300- Endhouse 2.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Anzeige der Drücke aller Drucksensoren einer Sektion Bedienung: Durch Drücken der „Show Pressure“-Taste auf dem Hauptbildschirm wird dieses Programm erreicht. Auf dem Bildschirm erscheint auf der linken Seite eine Skizze der Sektion (hier: Zentralhaus) mit den aus der Konfiguration bereits bekannten Numerierungen. Im Bild sind sogenannte „Slides“ angebracht, die den Druck des jeweiligen Drucksensors anzeigen. Der Bereich ist hier zwischen 1E-7 mbar und 1E-9 mbar, dem wohl am häufigsten vorkommenden Druck gewählt. Show Pressure TPG300- CC - EH1 - EH2.vi - Seite 201 Im Bild oben sind noch alle möglichen Positionen dargestellt. Nach dem Start des Programms werden die Positionen, die keine Drucksensoren (TPG300) enthalten, gelöscht. Dieser Plan dient nur der Übersicht. Eine detailliertere Aufstellung befindet sich auf der rechten Seite. In diesem Kasten wird eine Tabelle angezeigt, die auf der linken Seite die Ziffer der Position und auf der rechten Seite den dazugehörigen Meßwert enthält. Diese Liste wird, je nach Anzahl der vorhandenen Meßgeräte, erweitert. Im Beispiel links wurde eine Anzahl von vier Drucksensoren angenommen. Maximal kann die Anzahl der möglichen Konfigurationen (18, bzw. 16) dargestellt werden. Die Bedienung der Anzeigen findet an den Elementen oben rechts statt. Hier befindet sich ein Schieber, an dem eingestellt werden kann, ob eine neue Messung gewünscht wird (update), oder ob die letzte durchgeführte Messung zur Anzeige gebracht werden soll (last data). Mit dem Button „Show“ werden die Druckmeßwerte angezeigt (neu oder aus einer Datei). In dem Indikator „Measured at:“ werden die Uhrzeit und das Datum der Messung angezeigt. Für etwaige Ausdrucke ist dies eine Sortierhilfe. Mit dem „Close“-Button wird dieses Programm beendet und auf den Hauptbildschirm zurückgekehrt. Programmbeschreibung: Die Programme der einzelnen Sektionen unterscheiden sich nur in der Anzahl der verfügbaren Konfigurationen (und der Bilder der Sektion). Es wird hier am Beispiel der Sektion Zentralhaus die Funktionsweise der Programme erläutert. Eine WHILE-Schleife wird geöffnet. Sie wird so lange durchlaufen, bis der „Close“-Button gedrückt wird. Show Pressure TPG300- CC - EH1 - EH2.vi - Seite 202 Der Beginn des Statistikpfades wird definiert. Erst das Drücken des „Show“-Buttons löst die Programmbearbeitung aus, sonst passiert nichts. Der Schieber, ob ein update gestartet werden oder ob auf eine Datei zugegriffen werden soll, ist eine umfunktionierte numerische Anzeige. Sie kann die Werte null und eins annehmen, durch die eine CASE-Anweisung geöffnet wird. Der Pfad zu den Statistiken, also den abgespeicherten Meßwerten, wird geöffnet und mit „List Directory“ ein String-Array erzeugt, das alle verfügbaren Speicherungen beinhaltet. Die Größe des Arrays wird ermittelt und die letzte Messung ausgewählt. Der gefundene Dateiname wird mit der „Build Path“-Anweisung mit dem bisherigen Pfad verbunden, diese Datei geöffnet und deren Inhalt gelesen. Ergebnis ist ein 2D-Array, das aus der CASE-Struktur geführt wird. Für den Fall, daß eine neue Messung durchgeführt werden soll, ein sogenanntes „update“, tritt folgendes Programm in Kraft: Show Pressure TPG300- CC - EH1 - EH2.vi - Seite 203 Die eigentliche Messung wird durch das Programm „Get data from all pressure sensors.vi“ übernommen. Es muß ein Drucklimit definiert werden, das bei Überschreiten einen Alarm auslöst. Dieser Wert wurde hier mit 1E-4 mbar festgelegt. Das Ergebnis ist ein 2D-Array, das aus der CASE-Struktur geführt wird. Die Größe des 2D-Array wird bestimmt. In diesem Array sind die Messungen des gesamten Tages enthalten. Die erste Spalte (0) enthält die jeweiligen Meßzeitpunkte. Eine Messung besteht aus jeweils zwei Zeilen. Die erste Zeile enthält die Meßwerte und die zweite Zeile die Positionsnummern, an denen gemessen wurde. Die letzten beiden Zeilen werden selektiert. Sie enthalten die aktuellsten Meßergebnisse, und davon die erste Spalte (Zeit) gelöscht. Diese beiden Funktionen werden in der „Array Subset“-Anweisung vereinigt. Die beiden Zeilen werden durch die „Select Array-line.vi“-Anweisung getrennt und nach außen geführt. Zur Anzeige der Meßzeit (Uhrzeit + Datum) wird das erste Element, das die Zeit in Sekunden enthält, aus dem Array getrennt. Hierzu wird das Element der letzten Zeile benutzt. Diese Angabe liegt bereits durch die Größenbestimmung des Arrays vor. Die Angabe der Sekunden bezieht sich laut der „Get Date/ Time in Seconds“-Funktion auf den 1. Januar 1904 12:00 am Universalzeit. Mit Hilfe der „Convert time.vi“-Funktion wird diese Zeit in ein darstellbares Format gebracht: DD.MM HH:MM (= Datum . Monat Stunden : Minuten). Show Pressure TPG300- CC - EH1 - EH2.vi - Seite 204 Das Ergebnis wird in dem Indikator „Measured at:“ ausgegeben. Die beiden getrennten Arrays mit den Meßwerten bzw. den dazugehörigen Positionsangaben werden durch die „Bundle“-Anweisung in einen Cluster umgewandelt und angezeigt. Es handelt sich hierbei um die Tabelle auf der rechten Seite des Bildschirms. Die Größe eines Arrays wird bestimmt und damit die Größe der darzustellenden Tabellen über zwei „Attribute Nodes“ (Number of Rows) festgelegt. Diese Werte müssen nun noch dargestellt werden. Ein Array mit 18 (16) Elementen, die jeweils 0 (null) enthalten, wird erzeugt. In diesem Array werden die Druckmeßwerte gesammelt. Eine FOR-Schleife wird 18 (16) mal durchlaufen. In dem Array der Positionsnummern aus der Messung wird mittels Index der FOR-Schleife überprüft, ob die Position in dem Array vorhanden ist, d.h. ob eine Messung an dieser Position durchgeführt wurde. Ist die Anzahl der gefundenen Positionen größer oder gleich eins, also eine Messung vorhanden, wird die Position der Positionsnummer in dem Array dazu benutzt, den Druckmeßwert, der für diese Position bestimmt wurde, zu selektieren und in dem neuen Array auf dem durch den Index markierten Platz zu positionieren. Wurde die indexierte Position nicht gefunden, bleibt der Platz im Zielarray unbesetzt. Das Ergebnis wird in den „Slides“ dargestellt. Die nicht genutzten (nicht mit Drucksensoren besetzten) Positionen werden gelöscht. Hierzu wird eine weitere FOR-Schleife durchlaufen, die prüft, ob der Druckmeßwert der entsprechenden Position im Array kleiner oder gleich null ist. Wenn ja, wird das „Slide“ unsichtbar gemacht. Show Pressure TPG300- CC - EH1 - EH2.vi - Seite 205 Programm: Show Tunneltest.vi Eingabe: - Ausgabe: - Kurzbeschreibung: Durchführung des Tunneltests Bedienung: Dieses Programm ist vom Hauptbildschirm über „Leakcheck“ und in dem erscheinenden Dialogfenster über „Tunnelcheck“ erreichbar. Beim Aufruf dieses Programms sind im unteren Teil des Bildschirms die sogenannten Preferences, die Eigenschaften einer durchzuführenden Messung, sichtbar. Es kann gewählt werden, ob der Tunneltest auf das Tube 1 zwischen dem Zentralhaus und dem Endhaus 1 oder das Tube 2 zwischen dem Zentralhaus und dem Endhaus 2 bezogen werden soll. Weiterhin muß die Masse definiert werden, die Grundlage für die Messung sein soll. Möglich sind alle Werte zwischen eins und 200, sinnvoll ist allerdings, z.B. Stickstoff (N, Masse 14, bzw. 28) zu wählen, der in der Atmosphäre häufig vorkommt. Außerdem kann die „Accuracy“ die Geschwindigkeit und Meßgenauigkeit eingestellt werden. Möglich sind Werte von null (niedrige Genauigkeit, hohe Geschwindigkeit) bis fünf (hohe Genauigkeit, geringe Geschwindigkeit). In der rechten oberen Ecke befindet sich der Schalter zum einschalten des Meßvorganges, der Schalter zur Definition der Abstände zwischen den Massenspektrometer und der „Quit“-Button. Nachdem eine Messung mit „Start measurement“ gestartet wurde, wechselt der Schalter zu „Stop measurement“. Ein weiteres Betätigen hält die Messung an. Mit Einschalten des Meßvorganges erscheint unter diesen drei Schaltern ein „Reset“-Button. Sollen Änderungen in den Preferences durchgeführt werden, muß dieser Knopf gedrückt werden. Ein weiteres Betätigen des „Start measurement“-Buttons würde die Aktualisierung des bisherigen Ergebnisses bewirken. Show Tunneltest.vi - Seite 206 Die Eingabe der Abstände ist nur einmalig erforderlich. Mit dem „Quit“-Button verläßt man dieses Programm. „Start measurement“ läßt anstelle der Preferences ein Bild des gewählten Rohrs erscheinen und die Messung mit der gewünschten Masse beginnt. In diesem Diagramm wird das Ergebnis, der Druckverlauf des Partialdrucks der gewählten Masse im Rohr, dargestellt. Es stehen insgesamt sieben Massenspektrometer im Rohr zur Messung zur Verfügung. Die Werte dazwischen wurden nach dem Newton’ schen Interpolationsverfahren angenähert. Die Beschriftung der X-Achse entspricht der Angabe in Prozent der gesamten Wegstrecke vom Fixpunkt im Zentralhaus aus gemessen. Um das ermittelte Maximum der Funktion zu erhalten, betätigt man den „Result“-Button. Dieser vergrößert sich dann und stellt das gewünschte Ergebnis dar. Dieser Schalter wird erst nach dem ersten Start einer Messung sichtbar. Programmbeschreibung: Die für diese Programm geltende Testversion kann durch den Schalter ausgeschaltet werden. Hierzu muß dieser auf true umgeschaltet werden. Die Testversion unterstützt lediglich das Umschalten auf die unterschiedlichen Fenster (Preferences, Tube1 und Tube 2). Konkrete Funktionen werden hiermit nicht unterstützt. Das eigentliche Programm (Testversion = true) läuft in einer WHILE-Schleife, die so lange durchlaufen wird, bis der „Quit“-Button gedrückt wird. Beim Betätigen des Schalters „Set distances“ wird das Unterprogramm „Set diShow Tunneltest.vi - Seite 207 stances.vi“ aufgerufen und die Eingabe der Entfernungen damit ermöglicht. Ein Shift-Register wird als Merker für eine boolsche Konstante erzeugt. Aufgabe dieses Merkers ist es den Schalter „Result“ unsichtbar zu machen und ihn damit zu sperren, solange noch kein Ergebnis vorliegt. Sobald zum ersten Mal eine Messung beendet wurde, wird der Schalter entriegelt (angezeigt) und ein Ergebnis kann abgerufen werden. Das Ergebnis („Result“) ist nur nach der manuellen Beendigung einer Messung verfügbar („Stop measurement“) . Dieser Zustand trifft ebenfalls auf den „Reset“-Knopf zu. Dieser Schalter wird auch erst nach Beendigung der ersten Messung sichtbar und seine Funktion damit wählbar. Während einer Messung verschwinden diese beiden Schalter wieder. Die Funktionen „Quit“ und „Set distances“ sind nur verfügbar, wenn keine Messung aktiv ist. Während einer Messung werden diese beiden Schalter disabled und grau dargestellt. Wurde eine Messung mit „Start measurement“ aktiviert, werden die Daten aus dem Preferences-Cluster mit Hilfe der Anweisung „Unbundle by Name“ zusammen mit der Information über die Port-Konfiguration aus der Funktion „Get all Quadrupoles (port_all).vi“, bei der durch das Setzten des Eingangs auf false alle MassenspektrometerKonfiguration ausgewählt werden, dem Unterprogramm „Get Tunnel-Check.vi“ zugeführt. Mit der boolschen Variable aus den Preferences für die Wahl des Rohrs (Tube) wird entweder Rohr 1 (false) oder Rohr 2 (true) dargestellt. Ergebnis des Programms „Get Tunnel-Check.vi“ ist ein Array mit sieben Meßwerten von den Massenspektrometern aus dem gewählten Rohr. Diese werden zusammen mit der boolschen Variable für das Rohr der Funktion „Interpolationpolynom of Newton.vi“ zugeführt. In diesem Unterprogramm wird aus den sieben Punkten eine darstellbare Funktion interpoliert. Das Ergebnis wird zur Anzeige gebracht. Show Tunneltest.vi - Seite 208 Eine weitere Funktion des Unterprogramms ist das Finden des Maximums der interpolierten Funktion. Die Entfernung von den festgelegten Fixpunkten wird mit ausgegeben. Nach der Umwandlung in jeweils einen String, wird ein zusammenhängender String gebildet, in dem auf die Anstände hingewiesen wird. Dieser String wird auf ein Shift-Register geführt. Die Messung wird beendet. Durch den Vergleich mit null wird der „Start“-Button auf false, also auf „Aus“ gestellt. Das Shift-Register für die Verriegelung der Schalter (s.o.) wird auf true gesetzt. Somit ist das Anklicken des „Reset“-Buttons und des „Result“-Buttons möglich. Der „Result“-Button: Wurde eine Messung beendet, ist dieser Button sichtbar. Der Schalter soll klein oben links in der Ecke sein, solange er nicht betätigt wurde. Wurde er angeklickt um das Ergebnis abzufragen, soll er größer werden und den entsprechenden Text (s.o.) anzeigen. Die Position und die Größe des „Waveform Chart“ wird bestimmt. Aus der Position werden die Koordinaten der linken oberen Ecke gewonnen und aus den Abmaßen die Ausdehnung auf der XAchse. Der vergrößerte Knopf soll 1/3 mal so groß sein, wie die Anzeige der Kurve. Die Breite wird daher durch drei geteilt. „U32“ ist nur eine Konvertierung in ein anderes Zahlenformat und hat mit der Berechnung der Position nichts zu tun. Solange der Button nicht gedrückt wird, werden seine Schaltflächen mit dem Text „Result“ gefüllt. Er wird, in Bezug auf das „Waveform Chart“, um eine Position nach links und Show Tunneltest.vi - Seite 209 50 Pixel nach oben verschoben. Seine Maße sind durch diesen Cluster festgelegt. Diese Informationen werden den „Attribute Nodes“ des Schalters zugeführt. Wurde der Taster betätigt, ändert sich sein Erscheinungsbild: Der Schalter wird in die horizontale Mitte des „Waveform Chart“ verschoben und der obere Rand zehn Pixel darüber positioniert. Die Größe wird durch den Cluster festgelegt. Der Button überdeckt das Chart und ragt unten etwa gleich viel wie oben über. Der Text der Schaltflächen entspricht dem vorher festgelegten aus dem ShiftRegister. Bei nochmaligem Betätigen verkleinert sich der Schalter wieder. Show Tunneltest.vi - Seite 210 Programm: Sort Files.vi Eingabe: All Files Sort Indicator Ausgabe: Selected Files Kurzbeschreibung: Sortieren von Files in aufsteigender Reihenfolge abhängig von dem gewählten Indikator Programmbeschreibung: Die Größe des Arrays mit den Filenamen wird festgestellt (Es werden hier nur Filenamen genannt, da dieses Programm zu diesem Zweck eingesetzt wird). Die Größe bestimmt die Anzahl der Durchläufe einer FOR-Schleife. Zwei Shift-Register werden erzeugt. Das obere enthält später die nach dem „Sort Indicator“ selektierten Filenamen und das untere Register dient als Zähler für das Zielarray. Mit dem Index der FOR-Schleife wird ein String aus dem Array gelöst. Dieser gilt als Eingabewert in der „Replace Array Element“Anweisung. Verändertes Array ist dabei das Zielarray aus dem ShiftRegister. Das Element wird durch den Zähler indexiert. Mit der „Split String“-Anweisung wird überprüft, ob sich der gesuchte Buchstabe aus „Sort Indicator“ (normalerweise das „M“) in dem selektierten Filenamen befindet. Ist dies nicht der Fall (siehe Bild oben rechts) wird der Zähler nicht erhöht. Beim nächsten Durchlauf wird das Element im Zielarray durch das Neue ersetzt. Außerdem wird die boolsche Konstante true ausgegeben (siehe unten). Befand sich der „Sort Indicator“ in dem Filenamen, wird der Zähler inkrementiert. Somit bleibt der Name im Zielarray bestehen. Zusätzlich wird in diesem Fall die boolsche Konstante false ausgegeben. Sort files.vi - Seite 211 Die Ausgabe der Konstanten erfüllt den Zweck, wenn zum Schluß kein File mehr gefunden wurde, das den Indikator enthielt, das Zielarray um ein falsches Element zu groß ist. Dieses letzte Element muß gelöscht werden. War hingegen das letzte überprüfte Element eines, das den Indikator enthielt, ist das Zielarray bereits korrekt und darf nicht mehr verändert werden. Diese selektierten Files können nun sortiert werden. Diese Aufgabe übernimmt die „Sort 1D Array“-Anweisung. Das Ergebnis wird über „Selected Files“ ausgegeben. Sort files.vi - Seite 212 Programm: Status Pressure Sensor.vi Eingabe: Port number Location Status Ausgabe: Output Retry! Kurzbeschreibung: Kontrolle des bei der Abfrage eines Druckmeßwertes eines TPG300 erhaltenen Statuswortes (erste Ziffer im ASCII-Protokoll) 0 - Meßdaten in Ordnung 1 - Underrange 2 - Overrange 3 - Meßstellenfehler 4 - Meßstelle aus 5 - keine Hardware gefunden Programmbeschreibung: Der Status ist eine Zahl zwischen null und fünf. Die Auswertung kann also durch eine CASE-Anweisung stattfinden. Die Location wird schon als String angegeben, die Port-Nummer muß erst noch in das Textformat umgewandelt werden. Status 0 - kein Fehler „Retry“ ist false: keine Wiederholung nötig. „Output“ ist true: der gemessene Wert ist gültig. Status 1 - Underrange „Retry“ ist false: mit dem gewählten Drucksensor ist keine Messung möglich. „Output“ ist false: der gemessene Wert ist ungültig. Status 2 - Overrange „Retry“ ist false: mit dem gewählten Drucksensor ist keine Messung möglich. „Output“ ist false: der gemessene Wert ist ungültig. Status 3 - Meßstellenfehler Es kann sich auch um einen Softwarefehler handeln! „Retry“ ist true: Nach Behebung des Fehlers ist eine erneute Messung möglich. Status Pressure Sensor.vi - Seite 213 „Output“ ist false: der gemessene Wert ist ungültig. Es erscheint eine Dialogbox, die auf diesen Fehler hinweist. Falls möglich, kann dieser repariert und durch klicken des <OK>-Buttons die Messung wiederholt werden. Status 4 - Meßstelle ausgeschaltet Eine Dialogbox weist auf diesen Fehler hin. Nach dem Einschalten des entsprechenden TPG300 kann die Messung durch Klicken des <Retry>-Buttons wiederholt werden. Dann wird „Retry“ gleich true. Soll dieser Fehler zunächst übergangen werden, kann durch Klicken des <NEXT>-Buttons „Retry“ auf false gesetzt werden. Die Messung wird nicht wiederholt. „Output“ ist false: Der (nicht) gemessene Wert ist ungültig. Status 5 - keine Hardware gefunden Eine Dialogbox weist auf diesen Fehler hin. Wahrscheinliches Auftreten dieses Fehlers: Fehler in der Konfiguration oder ein Schnittstellenkabel/eine Schnittstelle ist defekt/nicht angeschlossen. „Retry“ ist false: Bei fehlender Hardware kann auch keine Messung wiederholt werden. „Output“ ist false: Der (nicht) gemessene Wert ist ungültig. Status Pressure Sensor.vi - Seite 214 Programm: Talk Active Internet.vi Eingabe: Machine Port Input End Session Ausgabe: Connection ID out Port out Kurzbeschreibung: Aktiver Dialog mit einem anderen Rechner durch TCP Programmbeschreibung: Der Eingang „Port“ wird direkt zum Ausgang „Port out“ durchgeschliffen. Mit „Machine“ wird der Zielrechner festgelegt. „Machine“ enthält die Internet-Adresse des Zielrechners. Die Zahl „1500“ kennzeichnet den Timeout in Millisekunden (hier: 1,5 s). So lange wird gewartet, bis eine Verbindung abgebrochen wird. Diese drei Eingaben werden der Anweisung „TCP Open Connection.vi“ zugeführt, die den Kontakt zum Zielrechner herstellt. Durch die „Connection ID“, die Identifikation der aufrechterhaltenen Verbindung zum Zielrechner, wird das „Talk Module Active.vi“ aktiviert. Dieses Modul stellt die Kommunikation zwischen den Rechner her (unidirektional). Eingabeparameter sind hier der „Input“ (Texteingabe) und „End Session“ (vorzeitiger Abbruch der Kommunikation). Die Verbindung wird durch die „TCP Close Connection.vi“-Anweisung beendet. Zum Schluß folgt die Fehlerbehandlung. Mit der Eingabe null werden alle Meldungen per Dialogfenster unterdrückt. Talk Active Internet.vi - Seite 215 Programm: Talk Module Active.vi Eingabe: Connection ID Input Line User Stop Error In (No Error) Ausgabe: Connection ID out Error out Kurzbeschreibung: Durchführung einer interaktiven (umgewandelt in unidirektional) Kommunikation zwischen zwei Rechnern mittels TCP, Sender. Programmbeschreibung: Es wird festgestellt, ob bereits ein Fehler (z.B. beim Verbindungsaufbau zum Zielrechner) aufgetreten ist. Ist dies der Fall, werden die Connection ID und dieser Fehlercode direkt zum Ausgang geführt. Es erfolgt keine Bearbeitung. Ist bisher kein Fehler aufgetreten, wird die Connection ID ebenfalls zum Ausgang geführt. Der Eingabe „Input Line“ wird ein Carriage Return/ Line Feed und das Steuerzeichen „\04“, daß das Ende der Übertragung kennzeichnet, angehängt. Das Ergebnis kann im Indikator „Local“ angesehen werden. Wurde keine Unterbrechung der Verbindung registriert, wird der entstandene String mit der Anweisung „TCP Write.vi“ an den Zielrechner übertragen. Der Schalter „EOF stop“ stammt aus der ursprünglichen Version, die als Beispiel im LabVIEW-Programm enthalten war. Dieser Schalter diente zur Unterbrechung der Verbindung, wenn während des interaktiven Datenaustauschs ein Fehler auftrat. Die Umwandlung in die unidirektionale Funktionsweise dieses Programms macht ihn für die weitere Übertragung überflüssig. War dieser Schalter true, wurde das Fehlerregister gelöscht und mit „No EOC Error.vi“ gesetzt (Connection Closed). Tritt während der Übertragung des Strings ein Fehler auf, wird dieser Schalter gesetzt, die Verbindung unterbrochen und eine entsprechende Fehlermeldung ausgegeben. Am Ende wird der Schalter „EOF stop“ wieder zurückgesetzt. Talk Module Active.vi - Seite 216 Programm: Talk Module Passive.vi Eingabe: Connection ID User Stop Error In (No Error) Ausgabe: Connection ID out Stopped Remote Error out Nothing Read Kurzbeschreibung: Durchführung einer interaktiven (umgewandelt in unidirektional) Kommunikation zwischen zwei Rechnern mittels TCP, Empfänger. Programmbeschreibung: Der String „Remote“ wird über eine „local variable“ mit einem leeren String initialisiert. Es wird festgestellt, ob bereits ein Fehler (z.B. beim Verbindungsaufbau zum Zielrechner) aufgetreten ist. Ist dies der Fall, werden die Connection ID und dieser Fehlercode direkt zum Ausgang geführt. Es erfolgt keine Bearbeitung. Ist bisher kein Fehler aufgetreten, wird die „Connection ID“ ebenfalls zum Ausgang geführt. Ein Shift-Register wird initialisiert. In ihm werden die übertragenen Daten gesammelt. Die Anweisung „TCP Read.vi“ schaut nach, ob an der durch „Connection ID“ definierten Verbindung Daten übermittelt wurden. Es wird eine maximale Länge von 512 Bytes definiert. Wichtig ist die Begrenzung: Der Timeout, das heißt der Abbruch des Lesevorgangs erfolgt nach 100 ms. Läßt man diesen Eingang unbeTalk Module Passive.vi - Seite 217 schaltet werden 60 s als Timeout-Grenze angenommen. In dieser Zeit werden alle anderen Programme angehalten. Die Anweisung „Not Time Out Error.vi“ setzt einen Timeout-Fehler zurück. Der Fehlercluster wird mit der „Unbundle“-Anweisung aufgeteilt. Bei Auftreten eines Fehlers wird die WHILE-Schleife abgebrochen. Zusätzliche Bedingung zum Abbruch ist die Anzahl der Durchläufe der WHILE-Schleife. Der Leseversuch wird viermal wiederholt, bevor der Abbruch erfolgt. Erfolgt ein Abbruch der WHILE-Schleife innerhalb dieser fünf Versuche, ist durch die Negation der Ausgang „Nothing Read“ gleich false. Erfolgte der Abbruch wegen der Überschreitung dieses Limits, wird der Ausgang gleich true. Der aus der „TCP Read.vi“-Anweisung hervorgehende String (in der Regel ein Zeichen), wird auf seine Länge hin überprüft. Ist ein Zeichen vorhanden (siehe Bild oben), wird überprüft, ob es sich um das Steuerzeichen „\04“ handelt, daß das Ende der Übertragung signalisiert. Dies wird mit der „Split String“-Anweisung erreicht. Das neue Zeichen wird an die Zeichenkette aus dem ShiftRegister gehängt. Wurde das Steuerzeichen registriert, wird der Ausgang „Stopped“ auf true gesetzt. Somit kann leicht überprüft werden, ob die Übertragung vollständig war, oder ob die Übertragung aufgrund eines Fehlers abgebrochen wurde. Ist der String ein leerer String, passiert nichts. Der bisher vorhandene String wird wieder auf das Shift-Register geführt und kein Signal zum Abbruch gegeben. Der Zuletzt geänderte String wird in „Remote“ angezeigt, bzw. ausgegeben. „No EOC Error.vi“ setzt einen vorhandenen „Connection closed“Fehler zurück. Der Fehlercluster wird über „Error Out“ ausgegeben. Talk Module Passive.vi - Seite 218 Programm: Talk Passive Internet.vi Eingabe: Port Ausgabe: Error? Received String Kurzbeschreibung: Passiver Dialog (Antwort) mit einem anderen Rechner via TCP Programmbeschreibung: Das „TCP Listen.vi“ veranlaßt den aufrufenden Rechner nach einem Versuch eines Verbindungsaufbaus mit diesem Rechner zu suchen. Die Suche ist zeitlich auf 1,5 s begrenzt, um nicht alle anderen Programme zu sperren. Es kann ein beliebiger Port festgelegt werden. Default-Wert ist 6342. Dieses Programm existiert in ähnlicher Form als Beispiel in der LabVIEW-Library. Der vorhandene Port-Wert wurde übernommen. Wurde ein Verbindungsaufbau registriert, wird die reservierte Identifikation „Connection ID“ und ein eventuell aufgetretener Fehlercode an das Unterprogramm „Talk Module Passive.vi“ weitergegeben. In diesem Programm findet die Übermittlung (Empfang) der Daten statt. Das Ergebnis des Transfers wird in „Received String“ ausgegeben. Die „Connection ID“ und der Fehlercluster werden an die Anweisung „TCP Close Connection.vi“ weitergegeben, wo die Verbindung beendet wird. Der Fehlercluster wird der Fehlerbehandlungsroutine „General Error Handler.vi“ zugeführt. Ein aufgetretener Fehler wird durch den Indikator „Error?“ ausgegeben. Alle Anzeigen werden durch die Eingabe von 0 (Null) ignoriert. Die verwendeten Dialogboxen unterbrechen alle laufenden Programme. Talk Passive Internet.vi - Seite 219 Programm: Value in span.vi Eingabe: New Value Old Value Ausgabe: In Span (+/- 10%) Span (+/- 10%) Kurzbeschreibung: Vergleich zweier Werte. Maximale Abweichung des neuen von dem alten Wert: 10% Programmbeschreibung: Der alte Wert wird mit 0,1 multipliziert. Ergebnis ist die 10%Spanne, um die der neue Wert um den Alten schwanken darf. Dieses Ergebnis wird in „Span (+/- 10%)“ ausgegeben. Die ermittelte Abweichung wird zu dem alten Wert addiert, bzw. von dem alten Wert abgezogen. Der neue Wert wird mit dem daraus entstehenden Intervall verglichen. Ist der neue Wert kleiner als der alte Wert plus der Abweichung und größer als der alte Wert minus der Abweichung, wird der Schalter „In Span (+/- 10%)“ gleich true. Ist diese Bedingung nicht erfüllt, wird der Schalter gleich false. Value in span.vi - Seite 220 Programm: Witch Input is true.vi Eingabe: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Ausgabe: One ist true Number of true Kurzbeschreibung: Zehn Eingänge werden überprüft, ob einer true ist. Wenn ja, welcher? Programmbeschreibung: Voraussetzung: Es kann immer nur ein Eingang true sein, niemals mehrere. Durch die Verwendung in dem Programm „Get PositionNumbers in other Sections.vi“ wird dies gewährleistet. Jeder Eingang erhält eine CASE-Struktur. Alle CASE-Strukturen sind in Reihe geschaltet. Eingangswerte dieser Reihenschaltung sind für „One is True“ gleich false und für „Number of true“ gleich 0 (Null). Sind die Eingänge (1 ... 10) gleich false, werden diese Default-Werte nur weitergereicht und schließlich über die Indikatoren ausgegeben (siehe Eingang 2). Ist aber einer der Eingänge gleich true, im Bild alle außer Eingang 2, wird „One is true“ gleich true gesetzt und eine Konstante, die der Ziffer des Eingangs entspricht, wird auf den Indikator „Number of true“ geleitet. Witch Input is true.vi - Seite 221