Die Forschung wurde von ECSEL JU im Rahmen des Projekts H2020 826060 AI4DI – Künstliche Intelligenz für die Digitalisierung der Industrie unterstützt. AI4DI wird vom österreichischen Bundesministerium für Verkehr, Innovation und Technologie (BMVIT) im Rahmen des Programms „IKT der Zukunft“ zwischen Mai 2019 und April 2022 gefördert. Weitere Informationen sind unter https://iktderzukunft.at/de/ abrufbar.
ASP-Modelldiagnosetool basierend auf dem Theoremlöser CLINGO 5.4.1.
„diagnose“ ist eine ausführbare Datei, die alle notwendigen Bibliotheken wie CLINGO 5.4.1 enthält. Diese Datei ist nur unter MAC OS ausführbar. „diagnose_win.exe“ ist die ausführbare Datei für Windows-Systeme einschließlich aller Bibliotheken zum Ausführen von CLINGO 5.4.1.
Um die Python-Skripte (Python 3.6.15) aufzurufen und zu verwenden, ist eine Clingo-Installation (Version 5.4.1) erforderlich, die durch Erstellen einer Conda-Umgebung basierend auf der vordefinierten bereitgestellten Datei im Umgebungsverzeichnis erfolgen kann:
cd environment
conda env create -f environment.yml
conda activate diagnose
Wenn ein Python-Import des Tools erforderlich ist, kann man die Klasse diagnose.py zum Importieren in das zugehörige Python-Skript verwenden. Das Argument-Wörterbuch „Einstellungen“ für diese Klasse ist in main_diagnose.py zu sehen (siehe optionale Argumente).
| Argument | Argument | Description |
| ------ | ------ | ------ |
| --help | -h | show this help message and exit |
| --index | -i | index to identify actual call (E.g.: time, call counter, etc.) |
| --file | -f | load ASP model file |
| --path | -p | load ASP model directory path |
| --faultsize | -fault | size of faults to search |
| --hidediagoutput | -hidediag | hide diagnose output in terminal (no argument needed) |
| --output | -out | define output file name and path for CSV (overview result) and JSON (detailed results) / default path: actual directory and file name with date and time |
| --json | -j | JSON output file is written (no argument needed) |
| --csv | -c | CSV output file is written (no argument needed) |
| --answersets | -a | number of answer sets (0: all, 1: compute one answer set, 2: two answer sets, ... |
| --observation | -obs | add additional observation file to ground with ASP file (e.g.: example.pl) |
| --adapt | -adapt | adapt data (comment out all constraints ':- not no_ab(X)' |
| --strongfaults | -strongfaults | use argument to activate search for strong fault 'only' or 'without' constraints, if argument is not used strong faults constraints are not implemented. choices=["only", "without"] |
application/diagnose --index "0" --path data/asp_test_data --faultsize 3 --answersets 0 --output application/filename --json --csv --hidediagoutput --strongfaults "only"
python app/main_diagnose.py --index "*" --path data/asp_test_data --faultsize 3 --answersets 0 --output application/filename --json --csv --strongfaults "without"
python app/main_diagnose.py --index "1" --file testfile.pl --faultsize 3 --answersets 0 --output application/filename --json --csv
Nachdem die Berechnung abgeschlossen ist, können die Daten basierend auf dem angegebenen Ausgabedateinamen (--output) und Pfad in einer CSV-Datei (--csv) und einer JSON-Datei (--json) gespeichert werden. Wenn das Tool in einer Schleife mit demselben Ausgabedateinamen aufgerufen wird, werden die Dateien mit den neuen Daten erweitert. Dies ist nützlich, wenn die Diagnose beispielsweise auf einem zeitabhängigen System durchgeführt wird und für jeden Zeitschritt eine Diagnose ausgeführt wird. Um den Anruf zu verfolgen, verwenden Sie die Indexoption (--index). Dies ermöglicht beispielsweise das Hinzufügen des korrelierten Zeitschritts zur Identifizierung der Daten. (z. B.: Zeit: 0,01 -> Index=0,01, Zeit: 0,02 -> Index=0,02, ...)
Der Header der CSV-Datendatei: „Index, Model,Time 0,Time 1,Time 2,Time 3,NoD 0,NoD 1,NoD 2,NoD 3,ASPDiagTime“
Z.B:
Index,Model,Time 0,Time 1,NoD 0,NoD 1,ASPDiagTime
0,test_heater_circuit.pl,0.007652997970581055,0.009721755981445312,0,1,0.017589092254638672
1,test_heater_circuit.pl,0.007380962371826172,0.010998964309692383,0,0,0.018507003784179688
2,test_heater_circuit.pl,0.007673025131225586,0.0077838897705078125,0,0,0.015599727630615234
Die JSON-Datei wird mit dem Dateinamen und den zugehörigen Daten mit detaillierten Diagnoseergebnissen gespeichert.
Z.B:
[
{
"0": {
"test_heater_circuit.pl": [
{
"diag time": 0.007652997970581055,
"fault size": 0,
"diag found": 0,
"diag": [],
"observation": [
"val(int(tm),between(t_low, null),0)."
]
},
{
"diag time": 0.009721755981445312,
"fault size": 1,
"diag found": 1,
"diag": [
[
"ab(sw)"
]
],
"observation": [
"val(int(tm),between(t_low, null),0)."
]
}
]
}
},
{
"1": {
"test_heater_circuit.pl": [
{
"diag time": 0.007380962371826172,
"fault size": 0,
"diag found": 0,
"diag": [],
"observation": [
"val(int(tm),between(t_low, null),0).",
"val(int(tm),between(t_low, null),1)."
]
},
{
"diag time": 0.010998964309692383,
"fault size": 1,
"diag found": 0,
"diag": [],
"observation": [
"val(int(tm),between(t_low, null),0).",
"val(int(tm),between(t_low, null),1)."
]
}
]
}
},
{
"2": {
"test_heater_circuit.pl": [
{
"diag time": 0.007673025131225586,
"fault size": 0,
"diag found": 0,
"diag": [],
"observation": [
"val(int(tm),between(t_low, null),0).",
"val(int(tm),between(t_low, null),1).",
"val(int(tm),between(t_low, null),2)."
]
},
{
"diag time": 0.0077838897705078125,
"fault size": 1,
"diag found": 0,
"diag": [],
"observation": [
"val(int(tm),between(t_low, null),0).",
"val(int(tm),between(t_low, null),1).",
"val(int(tm),between(t_low, null),2)."
]
}
]
}
}
]
Verwenden Sie die Conda-Umgebung, um die ausführbare Datei für das entsprechende Betriebssystem mit dem folgenden Befehl zu erstellen.
pyinstaller --onefile app/main_diagnose.py --name diagnose --distpath application/ --specpath application/ --hidden-import cffi