Commit a6cf717f authored by Falko Schumann's avatar Falko Schumann 💩

Merge branch 'feature/ueberarbeitung-subsegana' into develop

parents 092ba8c7 fe350418
/bin/
/.gradle/
/.settings/
/build/
# Gradle
build/
.gradle/
gradle.properties
# IntelliJ IDEA
out/
.idea/
*.iml
# Eclipse
bin/
.settings/
.project
.pmd
.checkstyle
.classpath
.antlr-eclipse
.checkstyle
.pmd
Versionsverlauf
===============
Änderungsprotkoll
=================
Alle wichtigen Änderungen an diesem Projekt werden in dieser Datei dokumentiert.
Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/),
und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/).
## [Noch nicht veröffentlicht]
- Skriptstatus wurde beim Abbruch eines Skriptlaufs nicht korrekt aktualisiert.
Das führte dazu, dass ein abgebrochenes Skript erst nach dem Neustart des
UDA-Servers erneut ausgeführt werden konnte.
## [1.4.0] - 2018-12-12
### Geändert
* Verwendet Version 3.0.0 der Funktionen Fuzzy.
### Behoben
* Skriptstatus wurde beim Abbruch eines Skriptlaufs nicht korrekt
aktualisiert. Das führte dazu, dass ein abgebrochenes Skript erst nach dem
Neustart des UDA-Servers erneut ausgeführt werden konnte.
## [1.3.2]
### Geändert
* NERZ: Umstellung auf Gradle, Build durch FTB und Bereitstellung auf
NERZ-Repositories
## 1.3.1
### Geändert
* Beim Anlagen von Skripten und Skriptläufen wird der Parameter
`VerwaltungDynamischerObjekt` der AOE berücksichtigt, statt die Objekte im
Defaultbereich der SW-Einheit abzulegen.
## 1.3.0
### Geändert
* Umstellung auf Java 8 und UTF-8.
## [Version 1.3.2]
## 1.2.0
- NERZ: Umstellung auf Gradle, Build durch FTB und Bereitstellung auf NERZ-Repositories
### Geändert
## Version 1.3.1
* Umstellung auf Maven-Build.
- Beim Anlagen von Skripten und Skriptläufen wird der Parameter
"VerwaltungDynamischerObjekte" der AOE berücksichtigt statt die
Objekte im Default-Bereich der SWE abzulegen.
## 1.1.4
## Version 1.3.0
### Behoben
- Umstellung auf Java 8 und UTF-8
* Korrekturen in den ausgelieferten Testwerkzeugen
## Version 1.2.0
## 1.0.1
- Umstellung auf Maven-Build
### Hinzugefügt
## Version 1.1.4
* Abfragefunktionen für Archivdaten über "datenLesen" eingebaut, d.h. im
Skript benutzbar. Die Funktion liefert jedoch immer ein leeres Feld zurück.
- Korrekturen in den ausgelieferten Testwerkzeugen
### Geändert
## Version 1.0.1
* Fehlermeldungen werden entsprechend der Testspezifikation dargestellt.
- Abfragefunktionen für Archivdaten über "datenLesen" eingebaut, d.h. im Skript benutzbar.
Die Funktion liefert jedoch immer ein leeres Feld zurück.
- Fehlermeldungen werden entsprechend der Testspezifikation dargestellt
- Problem mit der Übertragung des Passworts für Skriptläufe beseitigt
### Behoben
## Version 1.0:
* Problem mit der Übertragung des Passworts für Skriptläufe beseitigt.
Folgende Funktionen sind nicht vollständig implementiert:
## 1.0.0
- Abfrage von Archivdaten über die Funktion "datenLesen" über
Datenverteiler-Systemobjekte, da das Release der Kernsoftware
und ein damit kooperierendes Archivsystem nicht rechtzeitig
zur Verfügung stand
- Ausgabe von Fehlermeldungen ist in den Testspezifikationen
und den technischen Anforderungen nicht kompatibel beschrieben und
Bedarf noch der entgültigen Festlegung
### Folgende Funktionen sind nicht vollständig implementiert
* Abfrage von Archivdaten über die Funktion `datenLesen` über
Datenverteiler-Systemobjekte, da das Release der Kernsoftware und ein damit
kooperierendes Archivsystem nicht rechtzeitig zur Verfügung stand.
* Ausgabe von Fehlermeldungen ist in den Testspezifikationen und den
technischen Anforderungen nicht kompatibel beschrieben und Bedarf noch der
entgültigen Festlegung.
[Noch nicht veröffentlicht]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.ibv.uda/compare/v1.3.2...HEAD
[Version 1.3.2]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.ibv.uda/compare/v1.3.1...v1.3.2
[Version 1.2]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.ibv.uda/compare/v1.3.1...v1.3.2
[Noch nicht veröffentlicht]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.ibv.uda/compare/v1.4.0...HEAD
[1.4.0]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.ibv.uda/compare/v1.3.2...v1.4.0
[1.3.2]: https://gitlab.nerz-ev.de/ERZ/SWE_de.bsvrz.ibv.uda/compare/v1.3.1...v1.3.2
Hinweise zur Bearbeitung / Beteiligung
======================================
Für Änderungen an dem Projekt ist zuerst ein Eintrag (Issue) mit dem Tag "Feature-Wunsch" oder "Bug"
anzulegen, damit die übernommen Änderungen auch einem Problem und einer potentiell erfolgten Diskussion
zugeordnet werden können. Solange das Fehler- und Änderungsmanagement noch über die bisherigen NERZ-Bugtracker
abgewickelt wird, ist zudem eine Referenz auf den dortigen Eintrag vorzunehmen.
Start der Applikation aus den Quellen
-------------------------------------
1. Datei `gradle.properties.example` nach `gradle.properties` kopieren.
2. Parameter in `gradle.properties` prüfen und gegebenenfalls anpassen.
3. Applikation starten: `./gradlew run`
* Die `passwd` mit den Anmeldedaten liegt standardmäßig unter
`config/datenverteiler/passwd`. Der Nutzer _Tester_ ist vorkonfiguriert.
* Die Logdateien der Applikation werden standardmäßig nach `build/debug`
geschrieben.
Organisatorisches
-----------------
Für Änderungen an dem Projekt ist zuerst ein Eintrag (Issue) mit dem Tag
"Feature-Wunsch" oder "Bug" anzulegen, damit die übernommen Änderungen auch
einem Problem und einer potentiell erfolgten Diskussion zugeordnet werden
können. Solange das Fehler- und Änderungsmanagement noch über die bisherigen
NERZ-Bugtracker abgewickelt wird, ist zudem eine Referenz auf den dortigen
Eintrag vorzunehmen.
Vor der Bearbeitung sollte man den entsprechenden Eintrag persönlich übernehmen
und einen Bugfix- oder Feature-Branch anlegen.
und einen Bugfix-Branch oder Feature-Branch anlegen.
Feature-Branches werden benannt als "feature/{name}", Bugfix-Branches als "hotfix/{name}".
Der Name sollte beschreiben, was innerhalb des Branches geändert wird und **nicht den Name des Bearbeiters**.
Feature-Branches werden benannt als "feature/{name}", Bugfix-Branches als
"hotfix/{name}". Der Name sollte beschreiben, was innerhalb des Branches
geändert wird und __nicht den Name des Bearbeiters__.
Feature-Wünsche werden auf Basis des "develop"-Branches umgesetzt und führen letztendlich zu einem Release einer
neuen Version auf dem zweiten Level, d.h. 0.1.0 wird mindestens 0.2.0 oder in der Hauptversion, d. h. aus z. B. 1.x.y wird 2.0.0, wenn **keine** Abwärtskompatibilität besteht.
Feature-Wünsche werden auf Basis des "develop"-Branches umgesetzt und führen
letztendlich zu einem Release einer neuen Version auf dem zweiten Level, d.h.
0.1.0 wird mindestens 0.2.0 oder in der Hauptversion, d.h. aus z.B. 1.x.y wird
2.0.0, wenn __keine__ Abwärtskompatibilität besteht.
Bugfixes sollten auf dem "master"-Branch beruhen und führen zu einer neuen Version auf dem dritten Level, d.h. aus 0.1.0 wird 0.1.1.
Die Änderungen werden dann natürlich auch in den "develop"-Branch gemerged. Damit können Bugfixes kurzfristig erfolgen
ohne den Zwang gleich alle Änderungen, die sich schon im Develop-Zweig befinden mit zu veröffentlichen.
Bugfixes sollten auf dem "master"-Branch beruhen und führen zu einer neuen
Version auf dem dritten Level, d.h. aus 0.1.0 wird 0.1.1. Die Änderungen werden
dann natürlich auch in den "develop"-Branch gemerged. Damit können Bugfixes
kurzfristig erfolgen ohne den Zwang gleich alle Änderungen, die sich schon im
Develop-Zweig befinden mit zu veröffentlichen.
Werden im Rahmen eines Auftrags mehrere Feature-Wünsche oder Bugfixes bearbeitet, kann auch einheitlich vom "develop"-Branch gemerged werden (konkrete Abstimmung im Zweifelsfall mit der NERZ-FTB).
Werden im Rahmen eines Auftrags mehrere Feature-Wünsche oder Bugfixes
bearbeitet, kann auch einheitlich vom "develop"-Branch gemerged werden (konkrete
Abstimmung im Zweifelsfall mit der NERZ-FTB).
Branches sollten nur für einen **einzelnen Eintrag** angelegt werden.
Die Branches können nach dem Merge in den Ursprungs-Branch entfernt werden (Das Löschen erfolgt automatisch,
wenn der entsprechende Haken beim Anlegen des Merge-Request gesetzt wird).
Branches sollten nur für einen __einzelnen Eintrag__ angelegt werden. Die
Branches können nach dem Merge in den Ursprungs-Branch entfernt werden (Das
Löschen erfolgt automatisch, wenn der entsprechende Haken beim Anlegen des
Merge-Request gesetzt wird).
Ein Merge-Request sollte folgende Punkte berücksichtigen:
- die Änderungen, die mit dem Request verbunden sind sollten in kurzer prägnanter Form in das CHANGELOG-File eingetragen werden. Der Eintrag erfolgt dabei im Abschnitt "Noch nicht veröffentlicht". Die Versionsnummer wird dort erst beim Release ergänzt (also letztlich bei der Übernahme durch die NERZ-FTB).
- wenn es notwendig ist, neue Features oder Änderungen zu beschreiben muss das README-File angepasst werden
- Änderungen am Code sollten keinen auskommentierten alten Code enthalten, für den Zugriff auf die Historie ist ja GIT vorgesehen
- die bearbeiteten Einträge sollten im Kommentar für den jeweiligen Commit oder für den Merge-Request mit "Fixes #{Eintragsnummer}" um die Zuordnung zu erhalten und das automatische Schließen zu ermöglichen
**Abgelehnte Merge-Request brauchen nicht gelöscht werden!**
Angemerkte und diskutierte Probleme, die eine Übernahme verhindern, sollten stattdessen bearbeitet werden bis der Merge-Request übernommen werden kann. **Ein neuer Request ist nicht erforderlich!**
* Die Änderungen, die mit dem Request verbunden sind sollten in kurzer
prägnanter Form in das CHANGELOG-File eingetragen werden. Der Eintrag
erfolgt dabei im Abschnitt "Noch nicht veröffentlicht". Die Versionsnummer
wird dort erst beim Release ergänzt (also letztlich bei der Übernahme durch
die NERZ-FTB).
* Wenn es notwendig ist, neue Features oder Änderungen zu beschreiben muss das
README-File angepasst werden.
* Änderungen am Code sollten keinen auskommentierten alten Code enthalten, für
den Zugriff auf die Historie ist ja Git vorgesehen.
* Die bearbeiteten Einträge sollten im Kommentar für den jeweiligen Commit
oder für den Merge-Request mit "Fixes #{Eintragsnummer}" um die Zuordnung zu
erhalten und das automatische Schließen zu ermöglichen.
__Abgelehnte Merge-Request brauchen nicht gelöscht werden!__ Angemerkte und
diskutierte Probleme, die eine Übernahme verhindern, sollten stattdessen
bearbeitet werden bis der Merge-Request übernommen werden kann. __Ein neuer
Request ist nicht erforderlich!__
Segment 6 Intelligente Bewertungsverfahren (IBV), SWE 6.3 Umfassende Datenanalyse
=================================================================================
Segment Intelligente Bewertungsverfahren, SWE Umfassende Datenanalyse
=====================================================================
## Übersicht
Übersicht
---------
Die Umfassende Datenanalyse stellt ein Modul innerhalb des Datenverteilersystems
zur Verfügung, mit dem Skripte und Skriptläufe zur Auswertung von Daten im
......@@ -11,9 +12,11 @@ Das Modul wird mit den üblichen Startparametern für Datenverteilerapplikatione
gestartet.
Die Klasse zum Starten des Moduls ist:
de.bsvrz.ibv.uda.uda.UmfassendeDatenanalyse
Zusätzliche optionale Parameter:
-udaModul die PID des UdaModuls, dessen Daten verwaltet werden sollen.
die PID kann entweder ein UdaModul selbst repräsentieren oder
einen Konfigurationsbereich. Im zweiten Fall werden alle UdaModule
......@@ -26,6 +29,7 @@ Zusätzliche optionale Parameter:
Zur Ausführung der Softwareeinheit sind folgende zusätzliche Bibliothen bzw. Softwareeinheiten
erforderlich:
antlr.jar Bestandteil des Parsers für UdaSkripte (im Paket enthalten)
de.bsvrz.sys.funclib.bitctrl
Allgemeine Funktionen
......@@ -39,8 +43,22 @@ Attributgruppen der Softwareeinheit ist nicht erfoderlich.
Eine Testapplikation zum Zugriff auf die "Umfassende Datenanalyse" wird gesondert bereitgestellt,
ist aber nicht Bestandteil des Projekts VRZ3.
# Disclaimer
Start der Applikation aus den Quellen
-------------------------------------
1. Datei `gradle.properties.example` nach `gradle.properties` kopieren.
2. Parameter in `gradle.properties` prüfen und gegebenenfalls anpassen.
3. Applikation starten: `./gradlew run`
* Die `passwd` mit den Anmeldedaten liegt standardmäßig unter
`config/datenverteiler/passwd`. Der Nutzer _Tester_ ist vorkonfiguriert.
* Die Logdateien der Applikation werden standardmäßig nach `build/debug`
geschrieben.
Disclaimer
----------
Segment 6 Intelligente Bewertungsverfahren, SWE 6.3 Umfassende Datenanalyse
Copyright (C) 2007 BitCtrl Systems GmbH
......@@ -60,7 +78,8 @@ this program; if not, write to the Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Kontakt
Kontakt
-------
BitCtrl Systems GmbH<br>
Weißenfelser Straße 67<br>
......
-exportcontents: de.bsvrz.ibv.uda.*
-sources: true
Bundle-Name: Umfassende Datenanalyse
Import-Package: *; version=!
Bundle-Vendor: BitCtrl Systems GmbH
Automatic-Module-Name: de.bsvrz.ibv.uda
//--------------------------------------------------------------------
// NERZ-SWE-Plugin
//--------------------------------------------------------------------
plugins {
id "de.bsvrz.gradle.nerzswe" version "0.7.1"
id "de.bsvrz.gradle.nerzswe" version "0.13.0"
id "biz.aQute.bnd.builder" version "4.0.0"
}
//--------------------------------------------------------------------
// Weitere Plugin
//--------------------------------------------------------------------
apply plugin: 'antlr'
//--------------------------------------------------------------------
......@@ -15,27 +18,45 @@ apply plugin: 'antlr'
//--------------------------------------------------------------------
group = 'de.bsvrz.ibv'
version = '1.3.3-SNAPSHOT'
description = 'Umfassende Datenanalyse'
version = '1.4.0-SNAPSHOT'
description = 'Segment Intelligente Bewertungsverfahren, SWE Umfassende Datenanalyse'
// Properties des NERZ-SWE-Plugins: f
// Properties des NERZ-SWE-Plugins:
nerzswe {
sweStatus = 'BETA'
sweDatum = ''
mainClassName = 'de.bsvrz.ibv.uda.uda.UmfassendeDatenanalyse'
sweStatus = 'BETA'
sweDatum = ''
mainClassName = 'de.bsvrz.ibv.uda.uda.UmfassendeDatenanalyse'
}
//--------------------------------------------------------------------
// Application-Plugin
//--------------------------------------------------------------------
apply plugin: 'application'
mainClassName = nerzswe.mainClassName
run {
args = [
'-datenverteiler=' + project.findProperty('datenverteiler'),
'-benutzer=' + project.findProperty('benutzer'),
'-authentifizierung=' + project.findProperty('authentifizierung'),
'-debugFilePath=' + project.findProperty('debugFilePath'),
'-debugLevelStdErrText=' + project.findProperty('debugLevelStdErrText'),
'-debugLevelFileText=' + project.findProperty('debugLevelFileText'),
'-udaRoot=' + project.findProperty('udaRoot')
]
}
//--------------------------------------------------------------------
// Abhängigkeiten
//--------------------------------------------------------------------
String kernsoftware_version = '3.9.7'
dependencies {
compile group: 'de.bsvrz.dav', name: 'de.bsvrz.dav.daf', version: kernsoftware_version
compile group: 'com.bitctrl', name: 'com.bitctrl', version: '2.0.1'
compile group: 'de.bsvrz.puk', name: 'de.bsvrz.puk.param.lib', version: '2.3.3'
compile group: 'de.bsvrz.sys', name: 'de.bsvrz.sys.funclib.dynobj', version: '1.3.1'
compile group: 'de.bsvrz.iav', name: 'de.bsvrz.iav.gllib', version: '2.3.7'
compile group: 'de.bsvrz.iav', name: 'de.bsvrz.iav.fuzzylib', version: '1.8.2'
testCompile group: 'junit', name: 'junit', version: '4.12'
implementation group: 'de.bsvrz.dav', name: 'de.bsvrz.dav.daf', version: kernsoftware_version
implementation group: 'de.bsvrz.sys', name: 'de.bsvrz.sys.funclib.dynobj', version: '1.3.1'
implementation group: 'de.bsvrz.sys', name: 'de.bsvrz.sys.funclib.bitctrl', version: '2.20.0-SNAPSHOT'
implementation group: 'de.bsvrz.iav', name: 'de.bsvrz.iav.fuzzylib', version: '3.0.0-SNAPSHOT'
implementation group: 'com.bitctrl', name: 'com.bitctrl', version: '2.0.1'
testImplementation group: 'junit', name: 'junit', version: '4.12'
}
datenverteiler = localhost:8083
benutzer = Tester
authentifizierung = config/datenverteiler/passwd
debugFilePath = build/
debugLevelStdErrText = CONFIG
debugLevelFileText = CONFIG
udaRoot = build/udaDaten
ausgabe "Ausdrücke: " # Ausdrücke:
ausgabe "Ausdrücke: " # Ausdrücke:
a = [1, 2, 3, 4, 5]
a[6] = -a[2] * a[3] + a[4]
a[7] = nicht (a[2] >= a[4])
......
......@@ -6,11 +6,11 @@ ContainerZugriffsFehler
ArgumentFehler
DatenZugriffsFehler
Fehler
typ = Fehler zusatztext = "Folgefehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 20 ursprnglicherFehler = (typ = Fehler zusatztext = "ursprnglicher Fehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 18 ursprnglicherFehler = (typ = Fehler zusatztext = "auswahl war 7" funktion = fehlerErzeugen skript = Fehler.uda zeile = 16))
typ = Fehler zusatztext = "Folgefehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 20 ursprünglicherFehler = (typ = Fehler zusatztext = "ursprünglicher Fehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 18 ursprünglicherFehler = (typ = Fehler zusatztext = "auswahl war 7" funktion = fehlerErzeugen skript = Fehler.uda zeile = 16))
typ = Fehler zusatztext = "Folgefehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 20
ohne Fehlerprfung:
typ = Fehler zusatztext = "Folgefehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 20 ursprnglicherFehler = (typ = Fehler zusatztext = "ursprnglicher Fehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 18 ursprnglicherFehler = (typ = Fehler zusatztext = "auswahl war 7" funktion = fehlerErzeugen skript = Fehler.uda zeile = 16))
mit Fehlerrckgabe:
ohne Fehlerprüfung:
typ = Fehler zusatztext = "Folgefehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 20 ursprünglicherFehler = (typ = Fehler zusatztext = "ursprünglicher Fehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 18 ursprünglicherFehler = (typ = Fehler zusatztext = "auswahl war 7" funktion = fehlerErzeugen skript = Fehler.uda zeile = 16))
mit Fehlerrückgabe:
ArithmetischerFehler
1.7976931348623157E308
SymbolUndefiniertFehler
......
ausgabe "Fehlerobjekte:" # Fehlerobjekte:
funktion fehlerErzeugen(auswahl)
wenn auswahl = 1 dann
rckgabe ArithmetischerFehler("auswahl war " & auswahl)
rückgabe ArithmetischerFehler("auswahl war " & auswahl)
sonst wenn auswahl = 2 dann
rckgabe SymbolUndefiniertFehler("auswahl war " & auswahl)
rückgabe SymbolUndefiniertFehler("auswahl war " & auswahl)
sonst wenn auswahl = 3 dann
rckgabe ObjektZugriffsFehler("auswahl war " & auswahl)
rückgabe ObjektZugriffsFehler("auswahl war " & auswahl)
sonst wenn auswahl = 4 dann
rckgabe ContainerZugriffsFehler("auswahl war " & auswahl)
rückgabe ContainerZugriffsFehler("auswahl war " & auswahl)
sonst wenn auswahl = 5 dann
rckgabe ArgumentFehler("auswahl war " & auswahl)
rückgabe ArgumentFehler("auswahl war " & auswahl)
sonst wenn auswahl = 6 dann
rckgabe DatenZugriffsFehler("auswahl war " & auswahl)
rückgabe DatenZugriffsFehler("auswahl war " & auswahl)
sonst
fehlermeldung = Fehler("auswahl war " & auswahl)
wenn fehler(fehlermeldung) dann
fehlermeldung2 = Fehler("ursprnglicher Fehler: ", fehlermeldung)
fehlermeldung2 = Fehler("ursprünglicher Fehler: ", fehlermeldung)
wenn fehler(fehlermeldung2) dann
rckgabe Fehler("Folgefehler: ", fehlermeldung2)
rückgabe Fehler("Folgefehler: ", fehlermeldung2)
ende wenn
ende wenn
ende wenn
......@@ -32,41 +32,41 @@ ausgabe fehlerErzeugen(6) # DatenZugriffsFehler
ergebnis = fehlerErzeugen(7)
ausgabe ergebnis # Fehler
ausgabe ergebnis.meldung() # typ = Fehler zusatztext = "Folgefehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 20 ursprnglicherFehler = (typ = Fehler zusatztext = "ursprnglicher Fehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 18 ursprnglicher Fehler = (typ = Fehler zusatztext = "auswahl war 7" funktion = fehlerErzeugen skript = Fehler.uda zeile = 16))
ausgabe ergebnis.meldung() # typ = Fehler zusatztext = "Folgefehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 20 ursprünglicherFehler = (typ = Fehler zusatztext = "ursprünglicher Fehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 18 ursprünglicher Fehler = (typ = Fehler zusatztext = "auswahl war 7" funktion = fehlerErzeugen skript = Fehler.uda zeile = 16))
ausgabe ergebnis.meldung(1) # typ = Fehler zusatztext = "Folgefehler: " funktion = fehlerErzeugen skript = Fehler.uda zeile = 20
ausgabe "ohne Fehlerprfung:" # ohne Fehlerprfung:
ohne fehlerprfung fehlerErzeugen(7)
mit fehlerausgabe fehlerErzeugen(7) # typ = Fehler zusatztext = "Folgefehler: " funktion = fehlerErzeugen skript = QS-01.06.00.00.00-PrSpez-1.0 [IBV].uda zeile = 427 ursprnglicherFehler = (typ = Fehler zusatztext = "ursprnglicher Fehler: " funktion = fehlerErzeugen skript = QS-01.06.00.00.00-PrSpez-1.0 [IBV].uda zeile = 425 ursprnglicher Fehler = (typ = Fehler zusatztext = "auswahl war 7" funktion = fehlerErzeugen skript = QS-01.06.00.00.00-PrSpez-1.0 [IBV].uda zeile = 423 ursprnglicher Fehler =))
ausgabe "mit Fehlerrckgabe:" # mit Fehlerrckgabe:
# mit fehlerrckgabe fehlerErzeugen(7) # Fehler
# mit Fehlerrckgabe fhrt zum Beenden des Skripts, da das Ergebnis des Ausdrucks ein Fehler ist
# der als Rckgabewert geliefert wird
ausgabe "ohne Fehlerprüfung:" # ohne Fehlerprüfung:
ohne fehlerprüfung fehlerErzeugen(7)
mit fehlerausgabe fehlerErzeugen(7) # typ = Fehler zusatztext = "Folgefehler: " funktion = fehlerErzeugen skript = QS-01.06.00.00.00-PrSpez-1.0 [IBV].uda zeile = 427 ursprünglicherFehler = (typ = Fehler zusatztext = "ursprünglicher Fehler: " funktion = fehlerErzeugen skript = QS-01.06.00.00.00-PrSpez-1.0 [IBV].uda zeile = 425 ursprünglicher Fehler = (typ = Fehler zusatztext = "auswahl war 7" funktion = fehlerErzeugen skript = QS-01.06.00.00.00-PrSpez-1.0 [IBV].uda zeile = 423 ursprünglicher Fehler =))
ausgabe "mit Fehlerrückgabe:" # mit Fehlerrückgabe:
# mit fehlerrückgabe fehlerErzeugen(7) # Fehler
# mit Fehlerrückgabe führt zum Beenden des Skripts, da das Ergebnis des Ausdrucks ein Fehler ist
# der als Rückgabewert geliefert wird
ausgabe 5 div 0 # ArithmetischerFehler
ausgabe konstant.GrteZahl + 1 # ArithmetischerFehler
# Der Ausdruck kann keinen Fehler liefern , da es keine Mglichkeit gibt,
# einen Zahlenberlauf bei einer Addition zu erkennen
ausgabe konstant.GrößteZahl + 1 # ArithmetischerFehler
# Der Ausdruck kann keinen Fehler liefern , da es keine Möglichkeit gibt,
# einen Zahlenüberlauf bei einer Addition zu erkennen
ausgabe nichtDefinierteFunktion(3,5,696) # SymbolUndefiniertFehler
ausgabe ergebnis.nichtDefinierteMethode() # ObjektZugriffsFehler
ausgabe fehlerErzeugen(1, 2) # ArgumentFehler
ausgabe "hallo" * 4 # ArgumentFehler
ausgabe mq1.datenLesen("atg.existiertNicht", "logischPLgeprueftT") # DatenZugriffsFehler
# es wird ein ObjektZugriffsFehler geliefert, weil das Objekt "mq1" ein Objekt vom
# Typ SymbolUndefiniertFehler ist, der keine Funktion "datenLesen" untersttzt
# Typ SymbolUndefiniertFehler ist, der keine Funktion "datenLesen" unterstützt
ausgabe mq1.datenLesen("atg.verkehrswerteT", "existiertNicht") # DatenZugriffsFehler
# es wird ein ObjektZugriffsFehler geliefert, weil das Objekt "mq1" ein Objekt vom
# Typ SymbolUndefiniertFehler ist, der keine Funktion "datenLesen" untersttzt
# Typ SymbolUndefiniertFehler ist, der keine Funktion "datenLesen" unterstützt
funktion selbstdefiniertenFehlerProvozieren(x)
# wenn fehler(x) dann
# die WennBedingung hat keinen Sinn und wurde entfernt, um den gewnschten Fehler zu erzeugen
# die WennBedingung hat keinen Sinn und wurde entfernt, um den gewünschten Fehler zu erzeugen
wenn x = 5 dann
# Fehlerbehandlung
# rckgabe EigenerQuadratFehler("Argument nicht vom Typ Zahl")
rckgabe Fehler("Argument nicht vom Typ Zahl")
# rückgabe EigenerQuadratFehler("Argument nicht vom Typ Zahl")
rückgabe Fehler("Argument nicht vom Typ Zahl")
sonst
rckgabe x*x
rückgabe x*x
ende wenn
# ende wenn
# das Ende der WennBedingung, siehe oben wurde entfern
......
Felder und Listen (incl. anzahl):
feld: 1000
# Zustnde: 4
# Zustnde: 4
zustndeListe[1]: frei
zustndeListe[-1]: stau
zustndeListe[-2]: zh
zustndeListe[5]: ContainerZugriffsFehler
zustnde[17]: lebhaft
zustnde[16]: undefiniert
zustndeListe[6]: undefiniert
# Zustände: 4
# Zustände: 4
zuständeListe[1]: frei
zuständeListe[-1]: stau
zuständeListe[-2]: zäh
zuständeListe[5]: ContainerZugriffsFehler
zustände[17]: lebhaft
zustände[16]: undefiniert
zuständeListe[6]: undefiniert
falsch
einfgen, anhngen:
einfügen, anhängen:
container[2]: 15
container[7]: 1
container[-1]: 16
element, lschen:
element, löschen:
element 1: 17
element -1: 16
element 0: ContainerZugriffsFehler
element 15: ContainerZugriffsFehler
gelscht: 5
gelscht: 8
gelscht: ContainerZugriffsFehler
gelscht: ContainerZugriffsFehler
gelöscht: 5
gelöscht: 8
gelöscht: ContainerZugriffsFehler
gelöscht: ContainerZugriffsFehler
Selektion:
f
f
......
Verkehrsstärke:
untere Grenze: 0.0
obere Grenze: 2000.0
niedrig:
untere Grenze: 350.0
obere Grenze: 500.0
w: Verkehrsstärke{sehrNiedrig: 0.0, niedrig: 0.0, mittel: 0.5, hoch: 0.5, sehrHoch: 0.0}
Defuzzyfiziert: 26.37
Maximum: 0.667
Algebraische Summe: 0.778
Minimum: 0.333
Algebraisches Produkt: 0.222
Gammaoperator: 0.324
Gammaoperator als algebraisches Produkt: 0.222
Gammaoperator als algebraische Summe: 0.778
Komplement: 0.83
v= LinguistischeVariable("Verkehrsstrke", 0, 2000, LinguistischerTerm("sehrNiedrig", 0, 250, "sehr niedrig"), LinguistischerTerm("niedrig", 350, 500), LinguistischerTerm("mittel", 700, 1000), LinguistischerTerm("hoch",1200, 1500), LinguistischerTerm("sehrHoch", 1700, 2000, "sehr hoch"))
ausgabe v.name & ":" # Verkehrsstrke:
ausgabe "untere Grenze: " & v.untereGrenze # untere Grenze: 0
ausgabe "obere Grenze: " & v.obereGrenze # obere Grenze: 2000
v= LinguistischeVariable("Verkehrsstärke", 0, 2000, LinguistischerTerm("sehrNiedrig", 0, 250, "sehr niedrig"), LinguistischerTerm("niedrig", 350, 500), LinguistischerTerm("mittel", 700, 1000), LinguistischerTerm("hoch",1200, 1500), LinguistischerTerm("sehrHoch", 1700, 2000, "sehr hoch"))
ausgabe v.name & ":" # Verkehrsstärke:
ausgabe "untere Grenze: " & v.untereGrenze # untere Grenze: 0.0
ausgabe "obere Grenze: " & v.obereGrenze # obere Grenze: 2000.0
lts = v.terme
t = lts[2]
ausgabe t.name & ":" # niedrig:
ausgabe "untere Grenze: " & t.untereGrenze # untere Grenze: 350
ausgabe "obere Grenze: " & t.obereGrenze # obere Grenze: 500
ausgabe "untere Grenze: " & t.untereGrenze # untere Grenze: 350.0
ausgabe "obere Grenze: " & t.obereGrenze # obere Grenze: 500.0
w = v.fuzzyfiziere(1100)
ausgabe "w: " & w # w: sehr niedrig: 0 niedrig: 0 mittel: 0.5 hoch: 0.5 sehr hoch: 0
# Ausgabeformat wie folgt:
#w: Verkehrsstrke{sehrNiedrig: 0.0, niedrig: 0.0, mittel: 0.5, hoch: 0.5, sehrHoch: 0.0}
w2 = v.fuzzywert()
mit fehlerausgabe w2.zugehrigkeit("mittel", 0.1)
mit fehlerausgabe w2.zugehörigkeit("mittel", 0.1)
w2.hoch = 0.3
w2[5].zugehrigkeit = 0.6
w2[5].zugehörigkeit = 0.6
v = LinguistischeVariable("Regelstrom", 0, 50, LinguistischerTerm("sehrKlein", 0, 10, "sehr klein"), LinguistischerTerm("klein", 20, 20), LinguistischerTerm("mittel", 30, 30), LinguistischerTerm("gro", 40, 50))
v = LinguistischeVariable("Regelstrom", 0, 50, LinguistischerTerm("sehrKlein", 0, 10, "sehr klein"), LinguistischerTerm("klein", 20, 20), LinguistischerTerm("mittel", 30, 30), LinguistischerTerm("groß", 40, 50))
w = v.fuzzywert()
w.klein = 1/3
w.mittel = 2/3
......@@ -26,56 +24,37 @@ erg = v.defuzzyfiziere(w)
erg = erg * 100 + 0.5
erg = erg div 1
erg = erg /100
ausgabe "Defuzzyfiziert: " & erg # Defuzzyfiziert: 26.36
# die Eingabewert sind ganzzahlig, deshalb ist das Ergebnis ebenfalls nur ganzzahlig.
# Defuzzyfiziert: 26.00
ausgabe "Maximum: " & max(w.klein, w.mittel) # Maximum: 0.66666666666667
# Fuzzy-Berechnungen erfolgen mit Float-Genauigkeit
# Maximum: 0.6666667
#
ausgabe "Algebraische Summe: " & algSumme(w.klein, w.mittel) # Algebraische Summe: 0.77777777777778
# Fuzzy-Berechnungen erfolgen mit Float-Genauigkeit
# Algebraische Summe: 0.7777778
#
ausgabe "Defuzzyfiziert: " & erg # Defuzzyfiziert: 26.37
ausgabe "Maximum: " & max(w.klein, w.mittel) # Maximum: 0.667
ausgabe "Algebraische Summe: " & algSumme(w.klein, w.mittel) # Algebraische Summe: 0.778
ausgabe "Minimum: " & min(w.klein, w.mittel) # Minimum: 0.33333333333333
# Fuzzy-Berechnungen erfolgen mit Float-Genauigkeit
# Minimum: 0.33333334
#
ausgabe "Algebraisches Produkt: " & algProdukt(w.klein, w.mittel) # Algebraisches Produkt: 0.22222222222222
# Fuzzy-Berechnungen erfolgen mit Float-Genauigkeit
# Algebraisches Produkt: 0.22222224
#
ausgabe "Gammaoperator: " & gamma(0.3, w.klein, w.mittel) # Gammaoperator: 0.32359954293801
# Fuzzy-Berechnungen erfolgen mit Float-Genauigkeit
# Gammaoperator: 0.32359958
#
ausgabe "Gammaoperator als algebraisches Produkt: " & gamma(0, w.klein, w.mittel) # Gammaoperator als algebraisches Produkt: 0.22222222222222
# Fuzzy-Berechnungen erfolgen mit Float-Genauigkeit
# Gammaoperator als algebraisches Produkt: 0.22222224
#
ausgabe "Gammaoperator als algebraische Summe: " & gamma(1, w.klein, w.mittel) # Gammaoperator als algebraische Summe: 0.77777777777778
# Fuzzy-Berechnungen erfolgen mit Float-Genauigkeit
# Gammaoperator als algebraische Summe: 0.7777778
#
ausgabe "Komplement: " & komplement(0.17) # Komplement: 0.83
####################################
#Verkehrsstrke:
#untere Grenze: 0
#obere Grenze: 2000
#Verkehrsstärke:
#untere Grenze: 0.0
#obere Grenze: 2000.0
#niedrig:
#untere Grenze: 350
#obere Grenze: 500
#w: Verkehrsstrke{sehrNiedrig: 0.0, niedrig: 0.0, mittel: 0.5, hoch: 0.5, sehrHoch: 0.0}
#Defuzzyfiziert: 26.0