17
5 Prototypische Implementierung zur Gerätesteuerung und Auswertung von Analysedaten Mit dem konzeptionellen Entwurf zur Gerätesteuerung und Auswertung von Analysedaten ist die Grundlage zur Erstellung des Softwareproduktes „Uni- Stat“ geschaffen. Vor der eigentlichen Implementierung stellt sich jedoch die Frage, in welcher Programmiersprache das Programm entwickelt werden soll. Neben den so genannten Rahmenbedingungen wie zum Beispiel Platt- formunabhängigkeit, besonders gutes Laufzeitverhalten, kurze Entwick- lungszeiten durch Nutzung von Design-Vorlagen, sind nicht zuletzt auch die persönlichen Präferenzen des Entwicklers ausschlaggebend für die Wahl der geeigneten Programmiersprache und damit auch die Wahl einer geeigneten Programmierumgebung. Nach den gestellten Anforderungen aus dem zweiten Kapitel soll die Softwa- re unter dem Betriebssystem „Microsoft Windows 2000“ lauffähig sein. Un- ter dieser Maßgabe und der bereits angesprochenen möglichen Präferenzen des Entwicklers ist die Entscheidung bezüglich der Wahl der Programmier- sprache auf Delphi 7 gefallen. Weitere Vor- und Nachteile von Delphi 7 sol- len an dieser Stelle nicht näher betrachtet werden. Die Bezeichnungen der im Fachkonzept entwickelten Modelle und Modellele- mente wurden bereits so gewählt, dass daraus äquivalent Methoden und Klassen ableitbar sind. Damit wird sichergestellt, dass zu jeder Zeit und auf einfache Weise ein Bezug vom Quelltext zu den Modellen und umgekehrt hergestellt werden kann. 5.1 Vereinfachtes Klassenmodell Das nachfolgende Klassenmodell [Abb. 25] ist eine vereinfachte Darstellung der tatsächlichen Klassenstruktur und dient hauptsächlich der Dokumentati- on der wesentlichen Programmkomponenten und der Zuordnung der benö- tigten Methoden zu ihren Klassen. Die Formulare (Programmoberflächen) entsprechen der Notation „Tfm+For- mularname“ oder „TDlg+Dialogname“ und sind von der Delphi-Klasse TForm“ abgeleitet. Das Hauptformular ist „TfmUniStat“. Von diesem Formular aus werden alle 45

5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

  • Upload
    votuong

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

5 Prototypische Implementierung zur Gerätesteuerung und

Auswertung von Analysedaten

Mit dem konzeptionellen Entwurf zur Gerätesteuerung und Auswertung von

Analysedaten ist die Grundlage zur Erstellung des Softwareproduktes „Uni-

Stat“ geschaffen. Vor der eigentlichen Implementierung stellt sich jedoch die

Frage, in welcher Programmiersprache das Programm entwickelt werden

soll. Neben den so genannten Rahmenbedingungen wie zum Beispiel Platt-

formunabhängigkeit, besonders gutes Laufzeitverhalten, kurze Entwick-

lungszeiten durch Nutzung von Design-Vorlagen, sind nicht zuletzt auch die

persönlichen Präferenzen des Entwicklers ausschlaggebend für die Wahl der

geeigneten Programmiersprache und damit auch die Wahl einer geeigneten

Programmierumgebung.

Nach den gestellten Anforderungen aus dem zweiten Kapitel soll die Softwa-

re unter dem Betriebssystem „Microsoft Windows 2000“ lauffähig sein. Un-

ter dieser Maßgabe und der bereits angesprochenen möglichen Präferenzen

des Entwicklers ist die Entscheidung bezüglich der Wahl der Programmier-

sprache auf Delphi 7 gefallen. Weitere Vor- und Nachteile von Delphi 7 sol-

len an dieser Stelle nicht näher betrachtet werden.

Die Bezeichnungen der im Fachkonzept entwickelten Modelle und Modellele-

mente wurden bereits so gewählt, dass daraus äquivalent Methoden und

Klassen ableitbar sind. Damit wird sichergestellt, dass zu jeder Zeit und auf

einfache Weise ein Bezug vom Quelltext zu den Modellen und umgekehrt

hergestellt werden kann.

5.1 Vereinfachtes Klassenmodell

Das nachfolgende Klassenmodell [Abb. 25] ist eine vereinfachte Darstellung

der tatsächlichen Klassenstruktur und dient hauptsächlich der Dokumentati-

on der wesentlichen Programmkomponenten und der Zuordnung der benö-

tigten Methoden zu ihren Klassen.

Die Formulare (Programmoberflächen) entsprechen der Notation „Tfm+For-

mularname“ oder „TDlg+Dialogname“ und sind von der Delphi-Klasse

„TForm“ abgeleitet.

Das Hauptformular ist „TfmUniStat“. Von diesem Formular aus werden alle

45

Page 2: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

weiteren Programmfunktionen gesteuert. Das Formular für die Kalibrierung

wird in der Klasse „TfmCalibration“ definiert. Alle weiteren Formularklassen

sind nur wegen der Vollständigkeit in das Klassendiagramm aufgenommen

und übernehmen keine tragende Rolle.

Die Klasse „TMaschine“ kapselt alle wesentlichen Attribute und Methoden,

die für die Kommunikation mit der Prüfmaschine, das heißt indirekt über den

Umsetzer, benötigt werden. „TMaschine“ erbt, wie auch die Klasse „TCia-

ComPort“ direkt von „TComponent“.

Die Klasse „TConfig“ wird von „TMaschine“ instanziiert und kapselt insbe-

sondere Eigenschaften, die bei Programmstart geladen und bei Program-

mende wieder gespeichert werden müssen.

46

Page 3: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

47

Abb. 25, Klassendiagramm "UniStat v0.8.1-beta"

ComPo

rt 1..1

Config 1..1 M

aschine

1..1

TMaschine

+ComPort:T CiaCom Port +Config:T Config

+Prepare4ByteSignal(hex:string ): vo id+StartCal ibration(): vo id+StopCal ibration(): vo id+StartT est(): vo id+InterruptT est(): void+ContinueT est(): void+StopT est(): vo id+SendCal ibrationValueT oContro l ler(Power:T M axPower , Value:int ): void-SendCom m and(cm d:string ): void

TComponent

TfmUniStat

+M aschine:T M aschine

-DataAvai lable(Sender:T Object ): void-Cal ibrate(Kanal :char , Value:int ): double-FindCom ponentByT ag(com p:T Com ponent , aT ag:int ): T Com ponent-SetAppLang(Sender:T Object , newLang:string ): void-InsertIntoT able(Sender:T Object , aX:double , aY:double ): void-SetSQL(Sender:T Object ): vo id-SetSQLNiveau(Sender:T Object ): void

TForm

TConfig

-ReadValuesFrom Ini (): void-SaveValuesT oIn i (): void-Ini tValues(): void

TCiaComPort

TfmCalibration

-DataAvai lable(Sender:T Object ): void-Correction(Sender:T Object , Nul l :WideString , M ax:WideString ): WideString

TfmSettings TDlgPassword TfmDiagramm

TfmDatabaseTfmCountDown

Page 4: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

5.2 Programmteile und externe Module

Die prototypische Umsetzung des Konzeptes zur Gerätesteuerung und Aus-

wertung von Analysedaten erfolgte mit Delphi 7 ohne Änderungen. Der vor-

liegende Prototyp „UniStat Version 0.8.1-beta“ [Abb. 26] ist das Ergebnis

der Umsetzung aller wesentlichen Anforderungen und der konzeptionell aus-

gearbeiteten Festlegungen. Die Programmversion übertrifft dabei in hohem

Maße die Erwartungen an einen einfachen Prototypen und überzeugt damit

von einem guten Zusammenspiel aller eingesetzten Komponenten und Werk-

zeuge.

Auf eine explizite Beschreibung aller Quelltexte wird in dieser Arbeit verzich-

tet. Während der Entwicklung wurde stets darauf geachtet, „sprechende“

Bezeichner für Objekte, Attribute und Methoden zu verwenden. An kriti-

schen Stellen ist der Quelltext direkt mit Kommentaren versehen, wodurch

eine zusätzliche gute Lesbarkeit gewährleistet wird.

48

Abb. 26, UniStat Version 0.8.1-beta

Page 5: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

Äquivalent zum Klassenmodell zeigt die Abbildung 27 die physischen Module

zur logischen Klassenstruktur, wie sie auch im Dateisystem („dcu“-Dateien)

wiederzufinden sind. In die zwei zusätzlichen Module „uDmUniStat“ und

„uStringManipulation“ wurden mehrfach verwendete Methoden und Typdefi-

nitionen ausgelagert.

49

Abb. 27, Komponentendiagramm "UniStat v0.8.1-beta"

uUniStat

TfmUniStat

uMaschine

TMaschine TConfig

uCiaCom Port

TCiaComPort

uCalibration

TfmCalibration

uStringManipulation

uDatabase

TfmDatabase

uDiagramm

TfmDiagramm

uDmUniStat

TdmUniStat

uPassword

TDlgPassword

uSettings

TfmSettings

uCountDown

TfmCountDown

Page 6: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

Der kompilierte Prototyp der Version 0.8.1-beta befindet sich in der Datei

„UniStat.exe“ und liegt zusammen mit den Modulen im Programmordner

[Abb. 28].

5.3 Implementierung der benötigten Methoden

Dieses Kapitel beschreibt unter direktem Bezug auf das DV-Konzept [Kapitel

4.2.3 Benötigte Methoden] die Implementierung der einzelnen Methoden.

5.3.1 COM-Port auslesen

Die Methode „DataAvailable“ ist eine Thread-Methode. Durch Übergabe an

den COM-Port-Thread und Öffnen des COM-Ports bleibt diese Methode

solange parallel zur Anwendung aktiv, bis der COM-Port wieder geschlossen

wird. „DataAvailable“ liest dabei kontinuierlich jedes Byte des COM-Port-

Puffers aus und übergibt es als hexadezimalen Wert an die Methode

„Prepare4ByteSignal“ [Tab. 9] zur Weiterverarbeitung. Bis zu dieser Stelle

sind die Methoden aus den Tabellen 7 und 8 identisch implementiert. Ihr

Unterschied besteht in einer abweichenden Manipulation der Program-

moberfläche beziehungsweise der Datenbank.

50

Abb. 28, Programmordner "UniStat v0.8.1-beta"

Page 7: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

Methode private procedure DataAvailable(Sender: TObject);

Klasse TfmUniStat = class(TForm)

Eingabe - Sender: Formular-Objekt von TfmUniStat

Ausgabe keine

Tab. 7, Methode "DataAvailable, [TfmUniStat]"

„DataAvailable“ aus Tabelle 7 korrigiert entsprechend die empfangenen

Werte und schreibt sie in die ausgewählte Tabelle der Projekt-Datenbank

(siehe auch Tab. 13, Methode "Calibrate" und Tab. 23, Methode

"InsertIntoTable") und stellt sie anschließend im Weg-Belastungs-Diagramm

des Hauptfensters grafisch dar.

Methode private procedure DataAvailable(Sender: TObject);

Klasse TfmCalibration = class(TForm)

Eingabe - Sender: Formular-Objekt von TfmCalibration

Ausgabe keine

Tab. 8, Methode "DataAvailable, [TfmCalibration]"

„DataAvailable“ der Klasse „TfmCalibration“ [Tab. 8] sorgt für eine kontinu-

ierliche Aktualisierung und grafischen Darstellung der empfangenen Daten

im Kalibrierungsfenster. Des Weiteren schafft sie durch die Ermittlung ent-

sprechender Mittelwerte der empfangenen Daten die Grundlage für die Be-

rechnung der Korrekturfaktoren und Korrekturwerte [Abb. 5 und Abb. 6].

Methode public procedure Prepare4ByteSignal(hex: string);

Klasse TMaschine = class(TComponent)

Eingabe - hex: hexadezimale Zeichenkette

Ausgabe keine

Tab. 9, Methode "Prepare4ByteSignal"

Für den Aufbau, die Analyse und Zerlegung der 32-Bit-Folgen ist die

Methode „Prepare4ByteSignal“ zuständig. Sie akkumuliert die durch

„DataAvailable“ an sie übergebenen Werte zu gültigen 32-Bit-Folgen und

zerlegt diese im Anschluss in die gemäß Tabelle 2 definierten Bestandteile.

5.3.2 Steuerungsbefehle senden

Die Methode „SendCommand“ [Tab. 10] formatiert die ihr übergebene hexa-

dezimale Zeichenfolge in ihre numerische Entsprechung und sendet das Er-

51

Page 8: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

gebnis an den geöffneten COM-Port.

Analog zum DV-Konzept [Kapitel 4.2.3] kapseln die in Tabelle 11 zusammen-

gefassten Methoden unter Nutzung von „SendCommand“ die jeweiligen Be-

fehlsfolgen zur Steuerung der Härteprüfmaschine. Um eine bessere Referenz

zum DV-Konzept zu gewährleisten, ist jeweils unter der Methodendeklarati-

on in Tabelle 11 die deutsche Bedeutung angegeben.

Methode private procedure SendCommand(cmd: string);

Klasse TMaschine = class(TComponent)

Eingabe - cmd: hexadezimale Zeichenfolge

Ausgabe keine

Tab. 10, Methode "SendCommand"

Methode public procedure StartCalibration;

„Kalibrierungsmodus aktivieren“

public procedure StopCalibration;

„Kalibrierungsmodus deaktivieren“

public procedure StartTest;

„Härteprüfung starten“

public procedure InterruptTest;

„Härteprüfung anhalten“

public procedure ContinueTest;

„Härteprüfung fortsetzen“

public procedure StopTest;

„Härteprüfung stoppen“

Klasse TMaschine = class(TComponent)

Eingabe keine

Ausgabe keine

Tab. 11, Methoden "Steuerungsbefehle"

5.3.3 Kalibrierungswert senden

Mit der in Tabelle 12 deklarierten Methode lässt sich ein ganzzahliger Wert

(„Value“) in Abhängigkeit seines Messbereiches („Power“) an den COM-Port

senden. „SendCalibrationValueToController“ nutzt dabei ebenfalls die Me-

thode „SendCommand“ [Tab. 10]. Unter Beachtung des in Tabelle 5 (Daten-

format "Steuerungssoftware") definierten Datenformates [„K11“ bis „K0“],

52

Page 9: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

wandelt „SendCalibrationValueToController“ den übergebenen ganzzahligen

Wert vor dem Senden entsprechend um.

„TMaxPower“ definiert hierbei einen Aufzählungstyp (p5kp, p10kp, p15kp,

p25kp, p30kp, p31kp, p62kp, p125kp, p187kp, p250kp), mit dessen Hilfe die

Zuordnung der möglichen Messbereiche zum Befehlssatz [Tab. 1] erfolgen

kann.

Methode public procedure SendCalibrationValueToController

(Power: TMaxPower; Value: integer);

Klasse TMaschine = class(TComponent)

Eingabe - Power: gewählter Messbereich vom Typ „TMaxPower“

- Value: ganzzahliger Messwert

Ausgabe keine

Tab. 12, Methode "SendCalibrationValueToController"

5.3.4 Messwerte korrigieren

Aufgerufen von der Methode „DataAvailable“ [Tab. 7] liefert „Calibrate“ den

jeweils korrigierten Wert zu dem Eingabeparameter „Value“. Die Eingabe

„Kanal“ entscheidet innerhalb der Funktion „Calibrate“ über die zu verwen-

denden Korrekturwerte und Korrekturfaktoren.

Methode private function Calibrate

(Kanal: char; Value: integer): Double;

Klasse TfmUniStat = class(TForm)

Eingabe - Kanal: benötigter Kanal 'X' oder 'Y'

- Value: zu kalibrierender ganzzahliger Wert

Ausgabe - Ergebnis: gebrochenrationale Zahl

Tab. 13, Methode "Calibrate"

Als Grundlage zur Berechnung dienen die von der Methode „Correcti-

on“ [Tab. 14] zur Verfügung gestellten Korrekturfaktoren, gemäß den Abbil-

dungen 5 und 6, welche nach erfolgreicher „Kalibrierung“ global zur Verfü-

gung stehen.

53

Page 10: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

Methode private function Correction

(Sender: TObject; Null, Max: WideString): WideString;

Klasse TfmCalibration = class(TForm)

Eingabe - Sender: Formular-Objekt von TfmCalibration

- Null: Mittelwert der Untergrenze [Abb. 5 und 6]

- Max: Mittelwert der Obergrenze [Abb. 5 und 6]

Ausgabe - Ergebnis: gebrochenrationale Zahl als Zeichenkette

Tab. 14, Methode "Correction"

5.3.5 Anwendungssprache ändern

Gemäß den Anforderungen soll es möglich sein, die Anwendungssprache

zwischen Deutsch, Englisch und Russisch ändern zu können. Mit den Stan-

dard-Delphi-Komponenten lassen sich jedoch keine Multi-Byte-Zeichen dar-

stellen, wie es beispielsweise für den kyrillischen Zeichensatz nötig wäre.

Eine Lösung kann hier die Nutzung von unicode-fähigen Komponenten wie

etwa die „TntWare Delphi Unicode Controls“ [TNT] sein. Im Projekt „Uni-

Stat“ konnten diese Komponenten mit Erfolg eingesetzt werden.

Methode private procedure SetAppLang

(Sender: TObject; newLang: string);

Klasse TfmUniStat = class(TForm)

Eingabe - Sender: Formular-Objekt von TfmUniStat

- newLang: 'english', 'german' oder 'russian'

Ausgabe keine

Tab. 15, Methode "SetAppLang"

Das Ändern der Applikationssprache erfolgt mit der Methode

„SetAppLang“ [Tab. 15]. Anhand des ihr übergebenen Sprachschlüssels

(„newLang“) wird die passende Textdatei (hier: english.txt, german.txt oder

russian.txt) initialisiert und zeilenweise ausgewertet.

Die Textdateien befinden sich im Programmpfad [Abb. 28] im Verzeichnis

„languages“, sie sind UTF8-kodiert und entsprechen dem Schema nach Ab-

bildung 29.

54

Page 11: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

Methode private function FindComponentByTag

(comp: TComponent; aTag: integer): TComponent;

Klasse TfmUniStat = class(TForm)

Eingabe - comp: Komponente der Applikation

- aTag: ganzzahliger Wert gemäß „sprache.txt“

Ausgabe - Ergebnis: Komponente der Applikation mit „aTag“ oder „nil“

Tab. 16, Methode "FindComponentByTag"

Die Methode „FindComponentByTag“ aus Tabelle 16 wird von der Methode

„SetAppLang“ aufgerufen. Durch einen rekursiven Suchalgorithmus ermit-

telt sie die passende Komponente zum „aTag“, deren Eigenschaft „Text“

oder „Caption“ dann durch „SetAppLang“ geändert werden kann. Vorausset-

zung für eine erfolgreiche Suche ist allerdings, dass die Eigenschaft „Tag“

jeder übersetzungsrelevanten Komponente entsprechend gepflegt ist. Der

„Tag“ muss aus acht Ziffern (mit führender Null) bestehen und sollte nach

dem Muster aus Abbildung 29 aufgebaut sein. Die Textdateien sind beliebig

erweiterbar und die Textfelder können jederzeit angepasst werden.

55

Abb. 29, Textdatei Auszug "german.txt"

Page 12: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

5.3.6 Programmeinstellungen laden

Direkt nach dem Programmstart wird die Methode „InitValues“ [Tab. 17]

aufgerufen. Sollte „InitValues“ die Konfigurationsdatei „UniStat.ini“ nicht

finden, wird diese automatisch im Programmverzeichnis neu erstellt. Des

Weiteren sorgt „InitValues“ für eine Initialisierung der in Kapitel 4.2.3

[Tab. 6] angegebenen Parameter.

Methode private procedure InitValues;

Klasse TConfig = class()

Eingabe keine

Ausgabe keine

Tab. 17, Methode "InitValues"

„ReadValuesFromIni“ [Tab. 18] wird im Anschluss an „InitValues“ ausge-

führt und liest die Konfigurationsdatei „UniStat.ini“ ein. Mit allen gültigen

Werten aus der Konfigurationsdatei überschreibt „ReadValuesFromIni“ die

Initialwerte aus Tabelle 6.

Methode private procedure ReadValuesFromIni;

Klasse TConfig = class()

Eingabe keine

Ausgabe keine

Tab. 18, Methode "ReadValuesFromIni"

Das Format der Konfigurationsdatei „UniStat.ini“ zeigt Abbildung 30. Der

hier enthaltene Abschnitt „[Statistic]“ besitzt nur informativen Charakter

und ist nicht für den Programmablauf entscheidend. Welche Programmein-

stellungen sich in den einzelnen Abschnitten der Konfigurationsdatei wieder-

finden, zeigt Tabelle 19.

56

Page 13: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

Abschnitt Programmeinstellungen

[AdditionX] Additionsfehler X-Kanal

[CorrectionValuesX] Korrekturfaktor X-Kanal

[AdditionY] Additionsfehler Y-Kanal

[CorrectionValuesY] Korrekturfaktoren für den Y-Kanal der Messbereiche

5; 10; 15,5; 25; 30; 31,2; 62,5; 125; 187,5; 250 [kp]

[COM-Port] letzter verwendeter COM-Port

[MaxOfPower] letzter verwendeter Messbereich

[NumberOfValuesForN0]

Anzahl der abzuwartenden Messwerte beim Start der

Härteprüfung

[TimeOfInterrupt] Unterbrechungszeit der Härteprüfung in Sekunden

Tab. 19, Abschnitte der Konfigurationsdatei „UniStat.ini“

57

Abb. 30, Konfigurationsdatei "UniStat.ini"

Page 14: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

5.3.7 Programmeinstellungen speichern

Äquivalent zum Laden der Programmeinstellungen erfolgt auch das

Speichern. Mit dem Programmende wird automatisch die Methode

„SaveValuesToIni“ [Tab. 20] aufgerufen. Sie speichert gemäß den Vorgaben

aus den Tabellen 6 und 19 alle Programmeinstellungen in der

Konfigurationsdatei „UniStat.ini“ [Abb. 30].

Methode private procedure SaveValuesToIni;

Klasse TConfig = class()

Eingabe keine

Ausgabe keine

Tab. 20, Methode "SaveValuesToIni"

5.3.8 Datenbank anbinden

Für die Arbeit mit dem Programm „UniStat“ zur Gerätesteuerung und Aus-

wertung von Analysedaten muss zu Beginn ein Projekt, im Sinne einer Da-

tenbank geladen werden. Hierzu sind einige Typ-Deklarationen notwendig,

deren Ort und Syntax der Abbildung 31 entnommen werden kann.

Im „Projekt öffnen“-Dialog der Anwendung („TfmUniStat“) werden der

Verbindungsstring „ConnectionString“ und weitere Eigenschaften von

„ADOConnect“ dynamisch gesetzt. Der folgende Quelltextauszug beinhaltet

die Syntax zu dieser Datenbankanbindung, deren genauer Aufbau dem

Delphi-Verbindungsassistenten entnommen wurde. Die Eigenschaft

„Filename“ des Öffnen-Dialoges beinhaltet den Dateinamen der aktuell zu

ladenden Datenbank (z.B. „UniStat.mdb“).

58

Abb. 31, Komponente "uDmUniStat"

uDmUniStat

TdmUniStat

+ADOConnect:T ADOConnection +quSelectXY:T ADOQuery +quSelectNiveauY:T ADOQuery +quInsertInto:T ADOQuery +quDele teAl l :T ADOQuery +quCreateT able:T ADOQuery

Page 15: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

with dmUniStat.ADOConnect dobegin if Connected then Connected := False; ConnectionString := 'Provider=MSDASQL.1;'+ 'Persist Security Info=False;Mode=ReadWrite;'+ 'Extended Properties="DBQ='+ TntOpenDialogProjects.FileName + ';Driver={Microsoft Access-Treiber (*.mdb)};'+ 'DriverId=25;FIL=MS Access;MaxBufferSize=2048;MaxScanRows=8;'+ 'PageTimeout=5;SafeTransactions=0;Threads=3;UID=admin;'+ 'UserCommitSync=Yes;"'; CommandTimeout := 30; ConnectOptions := coConnectUnspecified; CursorLocation := clUseClient; DefaultDatabase :=''; IsolationLevel := ilCursorStability; KeepConnection := True; LoginPrompt := False; Connected := True;end;

Wenn die Eigenschaft „Connected“ von „ADOConnect“ auf „True“ gesetzt

wird, ist die Datenbankverbindung aktiv.

Die Methode „SetSQL“ [Tab. 21] wird immer dann aufgerufen, wenn sich Än-

derungen an dem Projekt selbst oder an den Datenbanktabellen (Diagram-

men) ergeben haben. In diesen Fällen passt „SetSQL“ die Abfragen („quSe-

lectNiveauY“, „quSelectXY“ und „quDeleteAll“) wie folgt an, so dass bei Be-

darf immer die Werte des aktuellen Diagramms aus der Datenbanktabelle

gelesen beziehungsweise gelöscht werden können:

with quSelectNiveauY do begin SQL.Clear; SQL.Add('SELECT y FROM ' + „aktuelles Diagramm (Tabelle)“ + ' GROUP BY y'); Prepared := True; end; with quSelectXY do begin SQL.Clear; SQL.Add('SELECT id,x,y FROM ' + „aktuelles Diagramm (Tabelle)“ + ' ORDER BY id'); Prepared := True; end; with quDeleteAll do begin SQL.Clear; SQL.Add('DELETE * FROM ' + „aktuelles Diagramm (Tabelle)“); Prepared := True; end;

Das Setzen der Eigenschaft „Prepared“ der einzelnen Abfragen auf „True“

59

Page 16: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

sorgt dafür, dass sie nach geringer Laufzeit einsatzbereit sind und die ge-

wünschten Ergebnisse liefern können.

Methode private procedure SetSQL(Sender: TObject);

Klasse TfmUniStat = class(TForm)

Eingabe - Sender: Formular-Objekt von TfmUniStat

Ausgabe keine

Tab. 21, Methode "SetSQL"

Des Weiteren bekommt der Anwender gemäß des Anforderungskataloges

aus Kapitel 2.2.4 (Anforderungen an die Auswertung) die Möglichkeit, über

ein Auswahlmenü das Niveau (untere Grenze) der Y-Werte bestimmen zu

können.

Methode private procedure SetSQLNiveau(Sender: TObject);

Klasse TfmUniStat = class(TForm)

Eingabe - Sender: Formular-Objekt von TfmUniStat

Ausgabe keine

Tab. 22, Methode "SetSQLNiveau"

Nach Wahl dieser Funktionalität wird durch die Methode „SetSQLNi-

veau“ [Tab. 22] die Abfrage „quSelectXY“ folgendermaßen modifiziert:

with dmUniStat.quSelectXY do begin SQL.Clear; SQL.Add('SELECT id,x,y FROM ' + „aktuelles Diagramm (Tabelle)“); SQL.Add('WHERE y>=' + „ausgewählter Y-Wert“ + ' ORDER BY id;'); Prepared := True; end;

Aufgerufen von der Methode „DataAvailable“ [Tab. 7, Methode

"DataAvailable, [TfmUniStat]"] passt „InsertIntoTable“ [Tab. 23] die SQL-

Anweisung „quInsertInto“ zum Einfügen der übergebenen Werte „aX“ und

„aY“ in die Datenbank an und führt diese im Anschluss („ExecSQL“) aus.

60

Page 17: 5 Prototypische Implementierung zur Gerätesteuerung und ... · PDF filesprache auf Delphi 7 gefallen. ... ComPort“ direkt von „TComponent“. Die Klasse „TConfig“ wird von

Methode private procedure InsertIntoTable

(Sender: TObject; aX, aY: double);

Klasse TfmUniStat = class(TForm)

Eingabe - Sender: Formular-Objekt von TfmUniStat

- aX: gebrochenrationale Zahl [für Kanal X]

- aY: gebrochenrationale Zahl [für Kanal Y]

Ausgabe keine

Tab. 23, Methode "InsertIntoTable"

Nach dem Schreibvorgang in die Datenbank übergibt „InsertIntoTable“ die

Werte „aX“ und „aY“ an eine weitere Methode zur grafischen Darstellung.

Die SQL-Anweisung wird wie folgt zusammengesetzt:

with dmUniStat.quInsertInto do begin SQL.Clear; SQL.Add('INSERT INTO ' + „aktuelles Diagramm (Tabelle)“ + ' (x,y) VALUES ('); SQL.Add(„X-Wert“ + ','); SQL.Add(„Y-Wert“ + ');'); Prepared := True; ExecSQL; end;

61