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 festgelegt. 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 Messzustand
(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 Plethysmographenkabine ein Ready-Signal liefert, welches
anzeigt, ob die Kabine eingeschaltet und bereit zur Messung ist. Ist dieses
nicht der Fall, erscheint eine Alarmbox , 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 angeschlossen
·
das Verbindungskabel zwischen Mess-Schrank und Computer ist
nicht angeschlossen
·
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 festgelegt, 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 zerstö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
dazugehö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 Kanalnummerkonstanten wird der Multiplexer zwischen den
beiden Messgrößen hin- und hergeschaltet. Die Messwerte werden in einem
Datenfeld zur Zwischenspeicherung 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 abgebrochen 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 Zwischenspeicherung 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 dargestellten 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 angeschlossenen
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 aufgenommen
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, Standardabweichungen 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
Schattenregistern, 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 Datenaustausch 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 Benutzern 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 Zeitpunkten 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 Funktionen 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 Ausgabewertes durch den D/A-Wandler ausgegeben. /8/
Bei der Ein- und Ausgabe von digitalen Werten
entscheidet das DIO CONFIGURATION 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
Datenbyte 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 geschaltet 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 Tastenfeldes einen definierten Zustand. Das Programm INIT_REL enthält nur
einen Befehl:
program
init_rel;
uses
rti820;
begin
dout(0,$00);
end.