5. 2. 10. Das Unit CALIBRATE

 

Eine genaue Messung ist nur möglich, wenn ein statischer Abgleich der Manometer durch die Prozedur static vorgenommen wird. Es können die Nullpunktabgleiche für Pk. PAIv und V durchgeführt werden. /2/

 

Dazu werden die Skalen der Manometer auf dem Bildschirm dargestellt. Über Zeiger ist der Augenblickswert der Manometer sichtbar, welcher außerdem noch als Zahlenwert angezeigt wird. Zur Kalibrierung muss der Programmbenutzer die Nullpunktregler der Manometer verdrehen, bis ein Nullpunktabgleich vorliegt. Der Maximum Abgleich ist nur für Pk und PAlv möglich, da nur diese beiden Manometer über einen Maximalwertabgleich verfügen. Die Maximalwerte können ebenfalls auf dem Bildschirm abgelesen werden. Auf Maustastendruck wird die Prozedur verlassen.

 

Die Nullpunkte und Maximawerte der auf dem Bildschirm dargestellten Skalen müssen mit den Anzeigen der Manometer übereinstimmen, ansonsten liegt ein Hardwarefehler in den Interfaceschaltungen vor (=> Abgleich der Interfaceschaltungen Kap. 10.2. ).

 

Noch nicht implementiert ist die dynamische Kalibrierung zur Ermittlung des Volumen eines Probanden.

 



5. 2. 11. Das Unit BODY

 

Im Unit BODY sollen das Verschlussdruckdiagramm und das Druckströmungs- diagramm aufgenommen werden.

 

Dazu ist eine Messwertaufnahme von Pk, PAIv und V notwendig. Die Plethysmographenkabine soll über den Computer mittels einer A/D-Karte mit I/O-Port gesteuert werden. Zusätzlich sind die Temperatur und die Luftfeuchtigkeit innerhalb der Kammer, sowie der Luftdruck außerhalb der Kammer zu messen.

 

Das Verschlussdruckdiagramm Pk/V und das Druckströmungsdiagramm Pk/PAlv sollen grafisch dargestellt werden. Beide Kurven werden zur Bestimmung des bronchialen Strömungswiderstandes (Resistance R) benötigt. Bei der anschließenden Auswertung wird der Kammerdruck Pk als uninteressante Zwischengröße eliminiert. /1, 21/

 

Allgemein gilt­:

 

       PAlv

R = -------

         V

 

Das Unit BODY ist als eigenständiger Programmblock gestaltet, auf den nur über die Prozedur body_main zugegriffen werden kann.

Zunächst sind die Konstanten für die Kanalnummern des Multiplexers fest­gelegt. Die folgende Tabelle gibt einen Überblick:

 

Kanalnummer

Messgröße

Mess rösse

Konstante

0

Kammerdruck

k_pk

1

Alveolardruck

k_pa

2

Strömung

k_v

3

Temperatur

k_t

4

Feuchtigkeit

k_f

5

Luftdruck

k_l

 

Bild 36:   Kanalnummerbelegung des Multiplexers

 

Es sind 9 boolesche Variablen definiert, die über den Zustand der BODY-Ebene Auskunft geben. Sie zeigen die Öffnungszustände der Plethysmographenkabine (closed_door, closed_chamber, ready_to_measure) und den aktiven Mess­zustand (P_V_active, TGVin_active, TGVex_active) an.

Aufgenommene Messungen werden nicht gelöscht, wenn no_delete wahr ist.

bodyprogram und end_of_body werden zur Steuerung des BODY-Menüs verwendet.

 

Zur weiteren Erklärung zeigt Bild 37 die Struktur der BODY-Ebene:

 

 

Bild 37:   Struktur der BODY-Ebene ­

 

Das BODY-Menü besteht aus 8 Fenstern und 13 Buttons.

 

 

Bild 38:   Darstellung des BODY-Menüs

 

Das BODY-Menü wird durch die Prozedur draw_body_main erzeugt. Bevor eine Messung durchgeführt werden kann, muss im Menü DATA ein Patient eingegeben werden, damit eine einwandfreie Zuordnung der Messwerte erfolgen kann.

 

Ist ein Patient eingegeben worden, wird überprüft, ob die Plethysmographen­kabine ein Ready-Signal liefert, welches anzeigt, ob die Kabine eingeschaltet und bereit zur Messung ist. Ist dieses nicht der Fall, erscheint eine Alarm­box , die auf diesen Fehler hinweist. Der Programmbenutzer muss eine Überprüfung der Hardware vornehmen und den Fehler beseitigen.

 

Der Fehler kann folgende Ursachen haben:

·        die Messkabine ist ausgeschaltet

·        der Schalter des Tastenfeldes an der Messkabine steht auf "MANUELL"

·        das Verbindungskabel zwischen Messkabine und Mess-Schrank ist nicht an­geschlossen

·        das Verbindungskabel zwischen Mess-Schrank und Computer ist nicht an­geschlossen

·        es liegt ein Fehler in der Hardware für die Ansteuerung des Tastenfeldes vor

 

Durch Betätigung einer Maustaste wird im Programmablauf fortgefahren, ohne eine weitere Überprüfung des Ready-Signals vorzunehmen. Das Ready­-Signal wird bei jedem Aufbau des BODY-Menüs überprüft.

 

Nach dem Aufbau des BODY-Menüs erfolgt eine Messwertaufnahme der Temperatur, des Luftdruckes und der Luftfeuchtigkeit. Die Messwerte werden einheitenrichtig oben rechts im Ergebnisfenster des Menüs angezeigt. Diese Messwerte werden nach jeder Messung erneut aufgenommen und angezeigt.

Wenn kein Button betätigt wird und keine Messung durchgeführt wird, ist die Anzeige für das Kammerdruckmanometer aktiv. Es wird ständig der aktuelle Kammerdruck angezeigt.

 

Durch die Bedienungsvorschrift für die Plethysmographenkabine ist festge­legt, dass zuerst die Kammertür, dann das Kammerventil und zuletzt das Referenzgefäß geschlossen werden muss. /2/

Deshalb wird auch im Programm diese Reihenfolge eingehalten. Eine andere Reihenfolge ist nicht möglich. Bei Betätigung des Buttons DOOR wird an den Port 0 der A/D-Karte der Wert 01H geliefert. Dadurch ziehen die Relais der Messkabine zum Schließen der Kammertür an. Die Kammertür kann geschlossen werden. Eine Abfrage, ob die Tür wirklich geschlossen ist, erfolgt nicht, ist also durch den Programmbenutzer sicher zu stellen. Die Farbe des DOOR-Buttons wechselt von grau nach rot, um den aktiven Zustand anzuzeigen. Wurde die Tür geschlossen, kann der Button CHAMB betätigt werden. Das bewirkt das Schließen des Kammerventils. Dann kann REF. betätigt werden, um das Referenzgefäß zu schließen. Alle drei Buttons sind jetzt rot (aktiv).

 

Port 0 als Ausgang geschaltet (Bit = 1: high , Bit = 0: low)

 

Bit 7 : nicht belegt

Bit 6 : endinspiratorisch

Bit 5 : von Hand

Bit 4 : endexspiratorisch

Bit 3 : Auslöser

Bit 2 : Referenzgefäß

Bit 1 : Kammerventil

Bit 0 : Tür

 

Bild 39:   Belegung von Port 0 der A/D-Karte

 

Soll die Kabine geöffnet werden, muss in umgekehrter Reihenfolge (also zuerst REF. dann CHAMB und dann DOOR ) verfahren werden, um die Manometer des Plethysmographen durch eine plötzliche Druckschwankung nicht zu zer­stören. Ein Betätigen des Buttons DOOR vor den beiden anderen Knöpfen bewirkt ebenfalls ein Öffnen der Kammer. Durch Zeitverzögerungsschleifen wird dennoch die richtige Reihenfolge eingehalten. Die Buttons sind nun wieder grau dargestellt. Die Zustände der Buttons wird in den dazuge­hörenden Variablen gespeichert.

 

Wird vor dem Schließen des Referenzgefäßes ein anderer Button außer DOOR, CHAMB oder REF. betätigt, gibt das Programm eine Fehlermeldung über eine Alarmbox aus. Die Fehlermeldung weist auf das korrekte Schließen der Kammer hin.

 

Nach dem Schließen ist ready_to_measure wahr und es kann mit den Messungen begonnen werden. Zunächst muss die Art der Messung über P/V, TGVin oder TGVex gewählt werden. Bei Aktivierung von P/V wird das Fenster für das Druckströmungsdiagramm aktiviert (roter Rand). Nun kann über MEAS1 - MEAS3 eine Messung ausgelöst werden. Über die Kanalnummer­konstanten wird der Multiplexer zwischen den beiden Messgrößen hin- und hergeschaltet. Die Messwerte werden in einem Datenfeld zur Zwischen­speicherung abgelegt und über einen Maßstabsfaktor grafisch auf dem Bildschirm dargestellt.

 

Bei Betätigung der rechten Maustaste wird der Messvorgang abgebrochen und es kann ein anderer Menüpunkt ausgeführt werden.

 

Wird die linke Maustaste gedrückt, wird ebenfalls der Messvorgang abge­brochen und die Messwerte aus dem Zwischenspeicherfeld werden in das Datenfeld des aktuellen Patientendatensatzes umgerechnet und auf der Festplatte abgespeichert.

 

 

Bild 40:   Prozedur zur Messwertaufnahme ( hier: measure_1 )

 

Nach dem Abspeichern der Messwerte wird das Datenfeld zur Zwischen­speicherung komplett gelöscht, um bei weiteren Messungen keine falschen Messwerte zu enthalten. Weiterhin werden die Messwerte für Temperatur, Feuchtigkeit und Luftdruck auf der Festplatte gespeichert.

 

Über DELETE lassen sich die dargestellten Messungen löschen. Die bereits gespeicherten Messungen können nicht direkt gelöscht werden, sondern nur durch Überschreiben mit einer neuen Messung. Zum Löschen einer darge­stellten Messung muss zuerst die Messart gewählt werden. Nach DELETE kann dann eine Messung über MEAS1 - MEAS3 mit der linken Maustaste gelöscht werden. Wird ein anderer Button oder die rechte Maustaste betätigt, wird die Löschprozedur abgebrochen.

 

Die aufgenommenen Messkurven können über RECORD auf einem ange­schlossenen Drucker ausgegeben werden. Bei RECORD wird die Prozedur data_record des Units DATA aufgerufen.

 

Über den Button INFO wird in die Prozedur body_info in der Unit INFO verzweigt. Hier werden Hinweise zur BODY-Ebene und zu Bedienung der BODY-Ebene auf dem Bildschirm ausgegeben.

 

Ein Betätigen des Buttons END L2 beendet das BODY-Unterprogramm. Es werden alle Fenster deaktiviert. REF.,CHAMB und DOOR werden, ohne Überprüfung ihres Zustandes, in der richtigen Reihenfolge geöffnet.

 

Alle BODY-Variablen werden auf ihren Ausgangswert zurückgesetzt. Das Programm kehrt zurück nach Level 1 und baut das Hauptmenü auf.

 

 

Bild 41:   die Prozedur body_main

 



5. 2. 12. Die Units SPIRO, FLOW und STATISTIK

 

Die Units SPIRO, FLOW und STATISTIK sind in dieser Diplomarbeit noch nicht ausgebaut. Sie bestehen z.Zt. nur aus Leerschleifen.

 

Im Unit SPIRO sollen spirometrische Messungen durchgeführt werden. Dabei wird das Atemvolumen über der Zeit gemessen (V/t).

 

Das Volumen-Strömungsdiagramm (V/V) soll in der Unit FLOW aufge­nommen werden.

 

Wenn diese Units in einer späteren Diplomarbeit ausgearbeitet werden, muss das Record der Patientendaten dementsprechend angepasst werden (s. Kap. 5. 2. 2.).

 

Das Unit STATISTIK ist zur statistischen Auswertung von Messergebnissen vorgesehen. Dazu sollen von der Festplatte die Messreihen aller Patienten geladen und ausgewertet werden. Es sollen z. B. Mittelwerte, Standard­abweichungen oder Verteilungsfunktionen berechnet und grafisch dargestellt werden.

 



5. 2. 13. Das Unit RTI820

 

Das Unit RTI820 ist die Softwareschnittstelle zur A/D-Karte RTI 820 von ANALOG DEVICE. Im Unit RTI820 werden die Routinen zur Analog-Digital­-Wandlung, Digital-Analog-Wandlung, Digital-Eingabe und Digital-Ausgabe bereitgestellt. Die Routinen sind in der Quelldatei "RTI820.ASM" als Assemblerunterprogramme vorhanden. Das Unit RTI820 enthält lediglich die Pascaldefinitionen und Aufrufe der Assemblerroutinen. Diese werden über die assemblierte Okjektdatei "RTI820.OBJ" mit der Compileranweisung $L zur Unit RTI820 hinzugelinkt. /3/

Die Routinen sind folgendermaßen definiert:

 

FUNCTION       ADC      ( Kanalnummer : Integer ) : Integer ; external ;

PROCEDURE DAC      ( Kanalnummer : Integer ; Ausgabewert : Integer ); external;

FUINCTION      DIN       ( Portnummer : Integer ) : Integer ; external ;

PROCEDURE DOUT   ( Portnummer : Integer ; Ausgabewert : Integer );  external ;

 

Die Kanalnummer steuert den Kanal des Multiplexers. Die Portnummer gibt einen der drei I/0-Ports der A/D-Karte an.

(Belegung der Kanalnummern wie im Kap. 5. 2. 11., Bild 36; Belegung der Portnummern wie im Kap. 5. 2. 11., Bild 39)

 

In dieser Diplomarbeit ist der Port 0 immer als Ausgang und der Port 1 immer als Eingang geschaltet.

Vom Port 1 wird das Bit 0 zur Erkennung des Ready-Signals der Messkabine verwendet. Die anderen Bits des Port 1 und der gesamte Port 2 sind nicht belegt.

 



5. 2. 14. Die Assemblerunterprogramme

 

Die Programmierung der A/D-Karte erfolgt aus Gründen der Übersichtlichkeit nicht durch direkte PORT-Adressierung mittels Turbo Pascal, sondern durch Assemblerprogrammierung mit dem MASM. Die direkte PORT-Adressierung würde hier, wegen der komplexen Struktur der Register der A/D-Karte, in jedem Fall große Schwierigkeiten bereiten (Programmierung von Schatten­registern, u.s.w.).

 

Der Datenaustausch mit der A/D-Karte erfolgt durch Polling. Dabei wird durch zyklisches Abfragen der A/D-Karte ein Abtastwert eingelesen. Dazu wird der Multiplexer über die passende Kanalnummer auf den richtigen Kanal gestellt, so dass zwischen den verschiedenen Messgrößen richtig hin­ und hergeschaltet wird.

 

Da die A/D-Karte über einen Interrupt Ausgang verfügt, könnte der Daten­austausch mit dem Computer auch über einen Interrupt erfolgen. Weil das dazugehörige Assemblerunterprogramm reentrant (ablaufinvariant) sein muss, hätte es den Rahmen dieser Diplomarbeit gesprengt.

(Ein reentrantes Programm ist ein Programm, das von mehreren Benut­zern gleichzeitig benutzt werden kann, z. B. von der A/D-Karte und der CPLI. Bei der Aufnahme von Messwerten in einen Speicherbereich darf der Abruf der Werte durch die CPLI nicht schneller sein, als das Hineinschreiben der Werte durch die A/D-Karte. Aufgrund der Interrupt Technik ist ein anderer Benutzer über den Programmzustand des aktiven Benutzers nicht informiert. Dazu ist eine Zeigerverwaltung notwendig, die für den jeweiligen Benutzer die richtige Einsprungmarkierung anzeigt. )

 

Für eine spätere Diplomarbeit ist die Interrupt Technik erstrebenswert, weil dadurch der Rechner entlastet wird und die Abtastung zu äquidistanten Zeit­punkten erfolgt. Dann kann die maximale Abtastfrequenz erreicht werden. Eine Erweiterung auf die Interrupt Technik ist ohne Probleme möglich, da das bestehende Programm modular aufgebaut ist.

 

Sämtliche Anweisungen, die in irgendeiner Form Prozessorbefehle oder Daten erzeugen, müssen sich innerhalb eines Segments befinden, d.h. von einer Deklaration der Form <Name> SEGMENT und <Name> ENDS eingerahmt sein. Kompilierte OBJ-Dateien, die in Turbo Pascal Programme aufgenommen werden sollen, dürfen nur ein einziges Codesegment deklarieren, das den Namen CODE haben muss. Der Zusatz PUBLIC legt fest, dass der Bezeichner CODE auch außerhalb des Maschinenprogramms, d.h. für den Linker von Turbo Pascal, verfügbar ist. Der Zusatz Byte legt fest, das die folgenden Befehlsbytes auf beliebigen Speicheradressen beginnen können und nicht explizit vom Linker auf einen Segment-Anfang geschoben werden müssen.

Die Anweisung ASSUME CS : CODE zeigt an, dass das CS-Register bei den folgenden Prozessorbefehlen auf das Segment CODE zeigt. /19/

 

Dann werden die Routinen definiert, die als PUBLIC auch außerhalb des Maschinenprogramms zur Verfügung stehen. Zwingendermassen mit den selben Bezeichnungen wie unter Turbo Pascal sind definiert:

 

ADC   : Analog-Digital-Wandlung

DAC   : Digital-Analog-Wandlung

DIN     : Digital Eingabe

DOUT : Digital Ausgabe

 

Obwohl ADC unter Turbo Pascal als function definiert ist, sind alle Funk­tionen und Prozeduren von MASM als proc bezeichnet. Der Zusatz far legt fest, dass unter Turbo Pascal diese Routine auch außerhalb der Unit RT1820 in anderen Units aufgerufen werden kann. Mit einer A/D-Wandlung kann erst begonnen werden, wenn das ADC STATUS BYTE Null ist. Dann ist die Karte bereit zur Wandlung. Die Kanalnummer muss vom Stack geholt werden und der entsprechende Kanal selektiert werden. Dadurch wird der Multiplexer auf die richtige Messgröße eingestellt. Die A/D-Wandlung wird durch Schreiben eines beliebigen Datenwortes in das CONVERT COMMAND Register gestartet. Das gesetzte Bit 4 des ADC STATUS BYTE zeigt ein Ende der Wandlung an. Dann kann über einen 16-Bit Zugriff der gewandelte Analogwert aus dem ADC-Low- und dem ADC-High-Byte gelesen werden. Der Wert muss sich beim Rücksprung in das Pascal Programm im AX-Register befinden, da Turbo Pascal Rückgabewerte für Funktionen im AX-Register erwartet.  /8/

 

 

Bild 42:   Struktogramm des Maschinenprogramms ADC

 

Für die D/A-Wandlung durch die Assemblerroutine DAC wird zuerst die Kanalnummer und dann der auszugebende Wert vom Stack geholt. Wenn das DAC-Statusbyte null ist, wird die Kanalnummer für den Demultiplexer eingestellt. Da in der eingesetzten Hardware kein Demultiplexer vorhanden ist, spielt die gewählte Kanalnummer keine Rolle. Für spätere Erweiterungen ist es jedoch sinnvoll, die Kanalnummer schon jetzt in das Programm mit einzubeziehen.

Nach Ausgabe des Low-Bytes des Ausgabewertes wird erneut das DAC Statusbyte geprüft. Sobald es null ist, wird auch das High-Byte des Ausgabe­wertes durch den D/A-Wandler ausgegeben.       /8/

 

Bei der Ein- und Ausgabe von digitalen Werten entscheidet das DIO CONFI­GURATION Register, welcher Port auf Eingang und welcher auf Ausgang geschaltet ist. Soll im Programm ein Port gesetzt werden, dürfen die anderen Ports dadurch nicht verändert werden. Weil das DIO CONFIGURATION Register ein read-only Register ist, wird im Maschinenprogramm ein Daten­byte reserviert, das als Schattenregister für die I/0-Konfiguration eingesetzt wird. Dadurch ist eine Verknüpfung mit dem DIO CONFIGURATION Register möglich. /8/

 

Mit DIN wird ein digitaler Wert in das AX-Register geladen und dem Turbo Pascal übergeben. Dabei wird mit Portnummer der Port ausgewählt. DOUT gibt den Wert Ausgabewert über den Port Portnummer aus. /8/

 

Weil beim Einschalten des Rechners der I/0-Port immer auf Eingang ge­schaltet wird, sollte beim Booten des Rechners das Programm INIT_REL.EXE gestartet werden. Es schaltet den Port 0 als Ausgang und gibt eine Null aus. Wird nun die Messkabine angeschlossen, haben die Schalter des Tasten­feldes einen definierten Zustand. Das Programm INIT_REL enthält nur einen Befehl:

 

program init_rel;

uses rti820;

begin

dout(0,$00);

end.