simstb 0.6.0a1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- simstb-0.6.0a1/LICENSE.txt +15 -0
- simstb-0.6.0a1/PKG-INFO +96 -0
- simstb-0.6.0a1/README.md +74 -0
- simstb-0.6.0a1/pyproject.toml +51 -0
- simstb-0.6.0a1/src/sim_basis/__init__.py +0 -0
- simstb-0.6.0a1/src/sim_basis/resources/CONTRIBUTING.md +6 -0
- simstb-0.6.0a1/src/sim_basis/resources/LICENSE.txt +15 -0
- simstb-0.6.0a1/src/sim_basis/resources/README.md +74 -0
- simstb-0.6.0a1/src/sim_basis/resources/config.toml +29 -0
- simstb-0.6.0a1/src/sim_basis/resources/daten/anaaus.txt +8 -0
- simstb-0.6.0a1/src/sim_basis/resources/daten/anaein.txt +8 -0
- simstb-0.6.0a1/src/sim_basis/resources/daten/digaus.txt +16 -0
- simstb-0.6.0a1/src/sim_basis/resources/daten/digein.txt +16 -0
- simstb-0.6.0a1/src/sim_basis/resources/docs/SimSTB-Benutzerdokumentation.pdf +0 -0
- simstb-0.6.0a1/src/sim_basis/resources/docs/beispiel.py +34 -0
- simstb-0.6.0a1/src/sim_basis/resources/modelle.json +13 -0
- simstb-0.6.0a1/src/sim_basis/simstb_dateizugriff.py +70 -0
- simstb-0.6.0a1/src/sim_basis/simstb_konfig.py +57 -0
- simstb-0.6.0a1/src/sim_basis/simstb_logger.py +33 -0
- simstb-0.6.0a1/src/sim_basis/version.py +3 -0
- simstb-0.6.0a1/src/sim_schnittstelle/__init__.py +0 -0
- simstb-0.6.0a1/src/sim_schnittstelle/simulator.py +93 -0
- simstb-0.6.0a1/src/sim_werkzeuge/__init__.py +0 -0
- simstb-0.6.0a1/src/sim_werkzeuge/images/band_links.gif +0 -0
- simstb-0.6.0a1/src/sim_werkzeuge/images/band_rechts.gif +0 -0
- simstb-0.6.0a1/src/sim_werkzeuge/images/band_stopp.gif +0 -0
- simstb-0.6.0a1/src/sim_werkzeuge/images/led_blau.png +0 -0
- simstb-0.6.0a1/src/sim_werkzeuge/images/led_grau.png +0 -0
- simstb-0.6.0a1/src/sim_werkzeuge/images/led_gruen.png +0 -0
- simstb-0.6.0a1/src/sim_werkzeuge/images/simstb.ico +0 -0
- simstb-0.6.0a1/src/sim_werkzeuge/simstb_cli.py +75 -0
- simstb-0.6.0a1/src/sim_werkzeuge/simstb_datenaufzeichner.py +250 -0
- simstb-0.6.0a1/src/sim_werkzeuge/simstb_generator.py +250 -0
- simstb-0.6.0a1/src/sim_werkzeuge/simstb_gui.py +486 -0
- simstb-0.6.0a1/src/sim_werkzeuge/simstb_init.py +72 -0
- simstb-0.6.0a1/src/sim_werkzeuge/simstb_modell_1.py +124 -0
- simstb-0.6.0a1/src/sim_werkzeuge/simstb_modell_2.py +121 -0
- simstb-0.6.0a1/src/sim_werkzeuge/simstb_modelle.py +121 -0
- simstb-0.6.0a1/src/sim_werkzeuge/simstb_setzer.py +57 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
Copyright (c) 2026 Markus Breuer
|
|
3
|
+
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files,
|
|
5
|
+
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish,
|
|
6
|
+
distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
|
7
|
+
subject to the following conditions:
|
|
8
|
+
|
|
9
|
+
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or
|
|
10
|
+
substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
13
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
|
14
|
+
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
|
|
15
|
+
THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
simstb-0.6.0a1/PKG-INFO
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: simstb
|
|
3
|
+
Version: 0.6.0a1
|
|
4
|
+
Summary: SimSTB - Simulator für analoge und digitale Ein- und Ausgänge
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE.txt
|
|
7
|
+
Author: Markus Breuer
|
|
8
|
+
Author-email: markus.breuer@berufskolleg-aachen.de
|
|
9
|
+
Requires-Python: >=3.10,<4.0.0
|
|
10
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
+
Requires-Dist: filelock (>=3.25.0,<4.0.0)
|
|
18
|
+
Requires-Dist: screeninfo (>=0.8.1,<0.9.0)
|
|
19
|
+
Requires-Dist: toml (>=0.10.2,<0.11.0)
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# SimSTB - Simulationsumgebung für digitale und analoge Ein- und Ausgänge
|
|
23
|
+
|
|
24
|
+
Die Simulationsumgebung SimSTB ist für die Ausbildung im Bereich Python-Programmierung geeignet. Sie ist insbesondere für den Unterricht bei (elektro)technischen Schülern gedacht.
|
|
25
|
+
|
|
26
|
+
Oft muss ein Programm nicht nur über die Konsole oder eine graphische Oberfläche mit dem Benutzer kommunizieren, sondern auch über analoge und digitale Schnittstellen mit einem technischen System. Die Simulationsumgebung SimSTB erlaubt es, dies für Schulungszwecke auch ohne zusätzliche Hardware
|
|
27
|
+
mittels Simulation durchzuführen.
|
|
28
|
+
|
|
29
|
+
Durch das Einbinden des Simulatorpakets `sim` stehen dem Schüler vier einfach zu nutzende Funktionen für die digitale und analoge Ein- und Ausgabe zur Verfügung. Die analogen und digitalen Werte können über eine graphische Oberfläche bequem überwacht und gesetzt werden.
|
|
30
|
+
|
|
31
|
+
## Installation
|
|
32
|
+
|
|
33
|
+
1. Installieren Sie das Simulator-Paket mit dem Befehl `pip install sim`
|
|
34
|
+
2. Prüfen Sie mit `pip list`, ob das Paket installiert wurde.
|
|
35
|
+
3. Prüfen Sie mit `simstb_cli --version`, ob das Kommandozeilenwerkzeug korrekt installiert wurde.
|
|
36
|
+
4. Bauen Sie mit `simstb_cli --init` die Laufzeitumgebung auf. Hierzu wird ein Ordner `sim` mit der Laufzeitumgebung im aktuellen Arbeitsverzeichnis angelegt. Achten Sie darauf, sich beim Aufruf im richtigen Verzeichnis zu befinden.
|
|
37
|
+
5. Kontrollieren Sie, ob folgende Verzeichnis-Struktur und Dateien vorhanden sind.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
SIM
|
|
41
|
+
│ config.toml
|
|
42
|
+
│ CONTRIBUTING.md
|
|
43
|
+
│ LICENSE.txt
|
|
44
|
+
│ modelle.json
|
|
45
|
+
│ README.md
|
|
46
|
+
│
|
|
47
|
+
├───data
|
|
48
|
+
│ anaaus.txt
|
|
49
|
+
│ anaein.txt
|
|
50
|
+
│ digaus.txt
|
|
51
|
+
│ digein.txt
|
|
52
|
+
│
|
|
53
|
+
└───doc
|
|
54
|
+
beispiel.py
|
|
55
|
+
SimSTB-Benutzerdokumentation.pdf
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
6. Erstellen Sie eine Umgebungsvariable namens `SIMSTB_WURZEL`, welches auf das Simulationsverzeichnis zeigt.
|
|
59
|
+
|
|
60
|
+
## Benutzung
|
|
61
|
+
|
|
62
|
+
### 1. Simulations Steuerung und Monitor
|
|
63
|
+
|
|
64
|
+
Mit Hilfe des Programms simstb_gui können Sie digitalen und analogen Ein- und Ausgänge überwachen und die Eingänge setzen. Die Werte werden im Sekundentakt aktualisiert. Starten können Sie das Simulator GUI mit in der Kommandozeile mit `simstb_gui` oder `simstb_cli --gui`.
|
|
65
|
+
|
|
66
|
+
### 2. Erstellung eigener Programme für die Simulationsumgebung SimSTB
|
|
67
|
+
|
|
68
|
+
Mit Hilfe der vier Funktionen:
|
|
69
|
+
|
|
70
|
+
- digEin
|
|
71
|
+
- digAus
|
|
72
|
+
- anaEin
|
|
73
|
+
- anaAus
|
|
74
|
+
|
|
75
|
+
können Sie eigene Python-Programme schreiben. Sie können deren Ausgaben mit der Simulationsumgebung überwachen und die Eingänge setzen.
|
|
76
|
+
|
|
77
|
+
Um die vier Funktionen zu nutzen, müssen Sie die Simulatorschnittstelle mit `import sim_schnittstelle.simulator as sim` importieren.
|
|
78
|
+
|
|
79
|
+
In der Datei __SimSTB-Benutzerdokumentation.pdf__ finden Sie eine ausführrliche Beschreibung. Ebenso finden Sie in der Dokumentation die Beispieldatei beispiel.py.
|
|
80
|
+
|
|
81
|
+
## Dokumentation
|
|
82
|
+
|
|
83
|
+
| Dokument | Inhalt |
|
|
84
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
85
|
+
| README | Erster Überblick über das Projekt SimSTB; diese lesen Sie gerade |
|
|
86
|
+
| SimSTB-Benutzerdokumentation | Benutzerdokumentation; beschreibt wie Sie die Simulationsumgebung installieren und benutzen; wenn Sie die Simulationsumgebung nur nutzen und keine eigenen Änderungen vornehmen wollen, das einzige Dokument, was Sie lesen sollten. |
|
|
87
|
+
| beispiel.py | Beispielprogramm für den Umgang mit der Simulatorschnittstelle. |
|
|
88
|
+
|
|
89
|
+
## Version
|
|
90
|
+
|
|
91
|
+
V 0.6.1
|
|
92
|
+
|
|
93
|
+
## License
|
|
94
|
+
|
|
95
|
+
[MIT](LICENSE.txt) © [Markus Breuer].
|
|
96
|
+
|
simstb-0.6.0a1/README.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# SimSTB - Simulationsumgebung für digitale und analoge Ein- und Ausgänge
|
|
2
|
+
|
|
3
|
+
Die Simulationsumgebung SimSTB ist für die Ausbildung im Bereich Python-Programmierung geeignet. Sie ist insbesondere für den Unterricht bei (elektro)technischen Schülern gedacht.
|
|
4
|
+
|
|
5
|
+
Oft muss ein Programm nicht nur über die Konsole oder eine graphische Oberfläche mit dem Benutzer kommunizieren, sondern auch über analoge und digitale Schnittstellen mit einem technischen System. Die Simulationsumgebung SimSTB erlaubt es, dies für Schulungszwecke auch ohne zusätzliche Hardware
|
|
6
|
+
mittels Simulation durchzuführen.
|
|
7
|
+
|
|
8
|
+
Durch das Einbinden des Simulatorpakets `sim` stehen dem Schüler vier einfach zu nutzende Funktionen für die digitale und analoge Ein- und Ausgabe zur Verfügung. Die analogen und digitalen Werte können über eine graphische Oberfläche bequem überwacht und gesetzt werden.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
1. Installieren Sie das Simulator-Paket mit dem Befehl `pip install sim`
|
|
13
|
+
2. Prüfen Sie mit `pip list`, ob das Paket installiert wurde.
|
|
14
|
+
3. Prüfen Sie mit `simstb_cli --version`, ob das Kommandozeilenwerkzeug korrekt installiert wurde.
|
|
15
|
+
4. Bauen Sie mit `simstb_cli --init` die Laufzeitumgebung auf. Hierzu wird ein Ordner `sim` mit der Laufzeitumgebung im aktuellen Arbeitsverzeichnis angelegt. Achten Sie darauf, sich beim Aufruf im richtigen Verzeichnis zu befinden.
|
|
16
|
+
5. Kontrollieren Sie, ob folgende Verzeichnis-Struktur und Dateien vorhanden sind.
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
SIM
|
|
20
|
+
│ config.toml
|
|
21
|
+
│ CONTRIBUTING.md
|
|
22
|
+
│ LICENSE.txt
|
|
23
|
+
│ modelle.json
|
|
24
|
+
│ README.md
|
|
25
|
+
│
|
|
26
|
+
├───data
|
|
27
|
+
│ anaaus.txt
|
|
28
|
+
│ anaein.txt
|
|
29
|
+
│ digaus.txt
|
|
30
|
+
│ digein.txt
|
|
31
|
+
│
|
|
32
|
+
└───doc
|
|
33
|
+
beispiel.py
|
|
34
|
+
SimSTB-Benutzerdokumentation.pdf
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
6. Erstellen Sie eine Umgebungsvariable namens `SIMSTB_WURZEL`, welches auf das Simulationsverzeichnis zeigt.
|
|
38
|
+
|
|
39
|
+
## Benutzung
|
|
40
|
+
|
|
41
|
+
### 1. Simulations Steuerung und Monitor
|
|
42
|
+
|
|
43
|
+
Mit Hilfe des Programms simstb_gui können Sie digitalen und analogen Ein- und Ausgänge überwachen und die Eingänge setzen. Die Werte werden im Sekundentakt aktualisiert. Starten können Sie das Simulator GUI mit in der Kommandozeile mit `simstb_gui` oder `simstb_cli --gui`.
|
|
44
|
+
|
|
45
|
+
### 2. Erstellung eigener Programme für die Simulationsumgebung SimSTB
|
|
46
|
+
|
|
47
|
+
Mit Hilfe der vier Funktionen:
|
|
48
|
+
|
|
49
|
+
- digEin
|
|
50
|
+
- digAus
|
|
51
|
+
- anaEin
|
|
52
|
+
- anaAus
|
|
53
|
+
|
|
54
|
+
können Sie eigene Python-Programme schreiben. Sie können deren Ausgaben mit der Simulationsumgebung überwachen und die Eingänge setzen.
|
|
55
|
+
|
|
56
|
+
Um die vier Funktionen zu nutzen, müssen Sie die Simulatorschnittstelle mit `import sim_schnittstelle.simulator as sim` importieren.
|
|
57
|
+
|
|
58
|
+
In der Datei __SimSTB-Benutzerdokumentation.pdf__ finden Sie eine ausführrliche Beschreibung. Ebenso finden Sie in der Dokumentation die Beispieldatei beispiel.py.
|
|
59
|
+
|
|
60
|
+
## Dokumentation
|
|
61
|
+
|
|
62
|
+
| Dokument | Inhalt |
|
|
63
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
64
|
+
| README | Erster Überblick über das Projekt SimSTB; diese lesen Sie gerade |
|
|
65
|
+
| SimSTB-Benutzerdokumentation | Benutzerdokumentation; beschreibt wie Sie die Simulationsumgebung installieren und benutzen; wenn Sie die Simulationsumgebung nur nutzen und keine eigenen Änderungen vornehmen wollen, das einzige Dokument, was Sie lesen sollten. |
|
|
66
|
+
| beispiel.py | Beispielprogramm für den Umgang mit der Simulatorschnittstelle. |
|
|
67
|
+
|
|
68
|
+
## Version
|
|
69
|
+
|
|
70
|
+
V 0.6.1
|
|
71
|
+
|
|
72
|
+
## License
|
|
73
|
+
|
|
74
|
+
[MIT](LICENSE.txt) © [Markus Breuer].
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# General project configuration ######################################################################
|
|
2
|
+
|
|
3
|
+
[project]
|
|
4
|
+
name = "simstb"
|
|
5
|
+
version = "0.6.0a1"
|
|
6
|
+
description = "SimSTB - Simulator für analoge und digitale Ein- und Ausgänge"
|
|
7
|
+
authors = [
|
|
8
|
+
{name = "Markus Breuer",email = "markus.breuer@berufskolleg-aachen.de"}
|
|
9
|
+
]
|
|
10
|
+
license = {text = "MIT"}
|
|
11
|
+
readme = "README.md"
|
|
12
|
+
requires-python = ">=3.10,<4.0.0"
|
|
13
|
+
|
|
14
|
+
# Dependencies needed for production ######################################################################
|
|
15
|
+
|
|
16
|
+
dependencies = [
|
|
17
|
+
"filelock (>=3.25.0,<4.0.0)",
|
|
18
|
+
"toml (>=0.10.2,<0.11.0)",
|
|
19
|
+
"screeninfo (>=0.8.1,<0.9.0)"
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
# Dependencies only needed for development ######################################################################
|
|
23
|
+
|
|
24
|
+
[tool.poetry.group.dev.dependencies]
|
|
25
|
+
pytest =">=9.0.2,<10.0.0"
|
|
26
|
+
black = ">=26.1.0,<27.0.0"
|
|
27
|
+
flake8 = ">=7.3.0,<8.0.0"
|
|
28
|
+
pylint = ">=4.0.5,<5.0.0"
|
|
29
|
+
|
|
30
|
+
# Werkzeug Einstellungen #################################################################################
|
|
31
|
+
|
|
32
|
+
[tool.poetry]
|
|
33
|
+
package-mode = true
|
|
34
|
+
packages = [
|
|
35
|
+
{include = "sim_basis", from = "src"},
|
|
36
|
+
{include = "sim_schnittstelle", from = "src" },
|
|
37
|
+
{include = "sim_werkzeuge", from = "src" }
|
|
38
|
+
]
|
|
39
|
+
include = ["src/sim_basis/resources/**/*"]
|
|
40
|
+
|
|
41
|
+
[tool.poetry.scripts]
|
|
42
|
+
simstb_gui = "sim_werkzeuge.simstb_gui:main"
|
|
43
|
+
simstb_cli = "sim_werkzeuge.simstb_cli:main"
|
|
44
|
+
|
|
45
|
+
[build-system]
|
|
46
|
+
requires = ["poetry-core>=2.0.0,<3.0.0"]
|
|
47
|
+
build-backend = "poetry.core.masonry.api"
|
|
48
|
+
|
|
49
|
+
[tool.pytest.ini_options]
|
|
50
|
+
testpaths = ["tests"]
|
|
51
|
+
python_files = ["test_*.py"]
|
|
File without changes
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# SimSTB - Simulationsumgebung für digitale und analoge Ein- und Ausgänge
|
|
2
|
+
|
|
3
|
+
Es gibt mehrere Möglichkeiten zum Projet SimSTB beizutragen:
|
|
4
|
+
- Benutzen Sie privat oder im Unterrichtseinsatz SimSTB und geben Sie Erfahrungen zurück.
|
|
5
|
+
- Erstellen Sie Unterrichtseinheiten, die auf SimSTB basieren.
|
|
6
|
+
- Erstellen Sie Modelle, die zusammen mit SimSTB genutzt werden können.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
Copyright (c) 2026 Markus Breuer
|
|
3
|
+
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files,
|
|
5
|
+
to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish,
|
|
6
|
+
distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
|
7
|
+
subject to the following conditions:
|
|
8
|
+
|
|
9
|
+
The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or
|
|
10
|
+
substantial portions of the Software.
|
|
11
|
+
|
|
12
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
13
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
|
|
14
|
+
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
|
|
15
|
+
THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# SimSTB - Simulationsumgebung für digitale und analoge Ein- und Ausgänge
|
|
2
|
+
|
|
3
|
+
Die Simulationsumgebung SimSTB ist für die Ausbildung im Bereich Python-Programmierung geeignet. Sie ist insbesondere für den Unterricht bei (elektro)technischen Schülern gedacht.
|
|
4
|
+
|
|
5
|
+
Oft muss ein Programm nicht nur über die Konsole oder eine graphische Oberfläche mit dem Benutzer kommunizieren, sondern auch über analoge und digitale Schnittstellen mit einem technischen System. Die Simulationsumgebung SimSTB erlaubt es, dies für Schulungszwecke auch ohne zusätzliche Hardware
|
|
6
|
+
mittels Simulation durchzuführen.
|
|
7
|
+
|
|
8
|
+
Durch das Einbinden des Simulatorpakets `sim` stehen dem Schüler vier einfach zu nutzende Funktionen für die digitale und analoge Ein- und Ausgabe zur Verfügung. Die analogen und digitalen Werte können über eine graphische Oberfläche bequem überwacht und gesetzt werden.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
1. Installieren Sie das Simulator-Paket mit dem Befehl `pip install sim`
|
|
13
|
+
2. Prüfen Sie mit `pip list`, ob das Paket installiert wurde.
|
|
14
|
+
3. Prüfen Sie mit `simstb_cli --version`, ob das Kommandozeilenwerkzeug korrekt installiert wurde.
|
|
15
|
+
4. Bauen Sie mit `simstb_cli --init` die Laufzeitumgebung auf. Hierzu wird ein Ordner `sim` mit der Laufzeitumgebung im aktuellen Arbeitsverzeichnis angelegt. Achten Sie darauf, sich beim Aufruf im richtigen Verzeichnis zu befinden.
|
|
16
|
+
5. Kontrollieren Sie, ob folgende Verzeichnis-Struktur und Dateien vorhanden sind.
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
SIM
|
|
20
|
+
│ config.toml
|
|
21
|
+
│ CONTRIBUTING.md
|
|
22
|
+
│ LICENSE.txt
|
|
23
|
+
│ modelle.json
|
|
24
|
+
│ README.md
|
|
25
|
+
│
|
|
26
|
+
├───data
|
|
27
|
+
│ anaaus.txt
|
|
28
|
+
│ anaein.txt
|
|
29
|
+
│ digaus.txt
|
|
30
|
+
│ digein.txt
|
|
31
|
+
│
|
|
32
|
+
└───doc
|
|
33
|
+
beispiel.py
|
|
34
|
+
SimSTB-Benutzerdokumentation.pdf
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
6. Erstellen Sie eine Umgebungsvariable namens `SIMSTB_WURZEL`, welches auf das Simulationsverzeichnis zeigt.
|
|
38
|
+
|
|
39
|
+
## Benutzung
|
|
40
|
+
|
|
41
|
+
### 1. Simulations Steuerung und Monitor
|
|
42
|
+
|
|
43
|
+
Mit Hilfe des Programms simstb_gui können Sie digitalen und analogen Ein- und Ausgänge überwachen und die Eingänge setzen. Die Werte werden im Sekundentakt aktualisiert. Starten können Sie das Simulator GUI mit in der Kommandozeile mit `simstb_gui` oder `simstb_cli --gui`.
|
|
44
|
+
|
|
45
|
+
### 2. Erstellung eigener Programme für die Simulationsumgebung SimSTB
|
|
46
|
+
|
|
47
|
+
Mit Hilfe der vier Funktionen:
|
|
48
|
+
|
|
49
|
+
- digEin
|
|
50
|
+
- digAus
|
|
51
|
+
- anaEin
|
|
52
|
+
- anaAus
|
|
53
|
+
|
|
54
|
+
können Sie eigene Python-Programme schreiben. Sie können deren Ausgaben mit der Simulationsumgebung überwachen und die Eingänge setzen.
|
|
55
|
+
|
|
56
|
+
Um die vier Funktionen zu nutzen, müssen Sie die Simulatorschnittstelle mit `import sim_schnittstelle.simulator as sim` importieren.
|
|
57
|
+
|
|
58
|
+
In der Datei __SimSTB-Benutzerdokumentation.pdf__ finden Sie eine ausführrliche Beschreibung. Ebenso finden Sie in der Dokumentation die Beispieldatei beispiel.py.
|
|
59
|
+
|
|
60
|
+
## Dokumentation
|
|
61
|
+
|
|
62
|
+
| Dokument | Inhalt |
|
|
63
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
64
|
+
| README | Erster Überblick über das Projekt SimSTB; diese lesen Sie gerade |
|
|
65
|
+
| SimSTB-Benutzerdokumentation | Benutzerdokumentation; beschreibt wie Sie die Simulationsumgebung installieren und benutzen; wenn Sie die Simulationsumgebung nur nutzen und keine eigenen Änderungen vornehmen wollen, das einzige Dokument, was Sie lesen sollten. |
|
|
66
|
+
| beispiel.py | Beispielprogramm für den Umgang mit der Simulatorschnittstelle. |
|
|
67
|
+
|
|
68
|
+
## Version
|
|
69
|
+
|
|
70
|
+
V 0.6.1
|
|
71
|
+
|
|
72
|
+
## License
|
|
73
|
+
|
|
74
|
+
[MIT](LICENSE.txt) © [Markus Breuer].
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Konfigurationsdatei für den Simulator SimSTB
|
|
2
|
+
# alle Pfade ausgehend von der Umgebungsvariablen SIMSTB_WURZEL
|
|
3
|
+
|
|
4
|
+
# Log-Datei und Log-Level
|
|
5
|
+
LOGDATEI = "./simstb.log"
|
|
6
|
+
LOGLEVEL = "INFO"
|
|
7
|
+
|
|
8
|
+
# Namen und Position der Austauschdateien
|
|
9
|
+
ANAAUS = "data/anaaus.txt"
|
|
10
|
+
ANAEIN = "data/anaein.txt"
|
|
11
|
+
DIGAUS = "data/digaus.txt"
|
|
12
|
+
DIGEIN = "data/digein.txt"
|
|
13
|
+
|
|
14
|
+
# Anzahl der Kanäle
|
|
15
|
+
DIGMAXLAENGE = 16
|
|
16
|
+
ANAMAXLAENGE = 8
|
|
17
|
+
|
|
18
|
+
# GUI-Farben
|
|
19
|
+
AKTIVE_BACKGROUND = "#90EE90"
|
|
20
|
+
HAUPT_BACKGROUND = "#b7d7e8"
|
|
21
|
+
BLOCK_BACKGROUND = "#cfe0e8"
|
|
22
|
+
|
|
23
|
+
# Intervall in Sekunden für die Aktualisierung der Anzeige
|
|
24
|
+
INTERVALL = 1
|
|
25
|
+
|
|
26
|
+
# Signalformen für analogen Zufallgenerator
|
|
27
|
+
SIGNALFORMEN = ["Zufall", "Sinus", "Rechteck", "Dreieck"]
|
|
28
|
+
|
|
29
|
+
MODELL_DATEI = "./modelle.json"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
""" SimSTB - Simulatorschnittstelle - Beispieldatei für die Nutzung der Schnittstelle
|
|
2
|
+
Das Modul Simulatorschnittstelle stellt vier Funktionen
|
|
3
|
+
zur Simulation digitaler und analoger Ein- und Ausgaben bereit
|
|
4
|
+
Name, Organisaion: Markus Breuer, STMB
|
|
5
|
+
Erstellt, Letzte Änderung: 21.06.2023, 05.03.2026
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import time
|
|
9
|
+
import sim_schnittstelle.simulator as sim
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def test():
|
|
13
|
+
""" Testfunktion """
|
|
14
|
+
ende = False
|
|
15
|
+
print("Beispielprogramm für Simulationsumgebung")
|
|
16
|
+
print("----------------------------------------")
|
|
17
|
+
print("Die am analogen Eingang Kanal 0 liegenden Eingangssignale")
|
|
18
|
+
print("werden im Sekundentakt eingelesen. Beendet wird das Einlesen,")
|
|
19
|
+
print("sobald am digitalen Eingang Kanal 0 eine 1 anliegt.")
|
|
20
|
+
print("Am Ende werden noch ein digitales und analoges Ausgabesignal gesetzt.")
|
|
21
|
+
|
|
22
|
+
while ende is not True:
|
|
23
|
+
wert = sim.ana_ein(0) # Einlesen eines analogen Eingabesignals über Kanal 0
|
|
24
|
+
print(wert)
|
|
25
|
+
time.sleep(1)
|
|
26
|
+
ende = sim.dig_ein(0) # Einlesen eines digitalen Eingabesignals über Kanal 0
|
|
27
|
+
|
|
28
|
+
sim.dig_aus(15, 1) # Ausgabe eines digitalen Ausgabesignals über Kanal 15
|
|
29
|
+
sim.ana_aus(7, -123.456) # Ausgabe eines analogen Ausgabesignals über Kanal 7
|
|
30
|
+
|
|
31
|
+
print("Beispielprogramm beendet")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
test()
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
""" SimSTB - Dateizugriff auf Austauschdateien
|
|
2
|
+
Das Modul Dateizugriff stellt zwei Funktionen zum Lesen und Schreiben der Austauschdateien
|
|
3
|
+
zur Verfügung. Die Datenübergabe erfolgt jeweils als Liste.
|
|
4
|
+
Name, Organisaion: Markus Breuer, STMB
|
|
5
|
+
Erstellt, Letzte Änderung: 28.07.2021, 15.03.2026
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import filelock
|
|
9
|
+
import logging
|
|
10
|
+
import sim_basis.simstb_konfig as kfg
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
class DateiZugriff:
|
|
14
|
+
"""Klasse zum Zugriff auf die Austauschdateien"""
|
|
15
|
+
|
|
16
|
+
def __init__(self, dateiname, max_laenge):
|
|
17
|
+
"""Konstruktor des Datenzugriffs auf die Austauschdateien"""
|
|
18
|
+
self.logger = logging.getLogger(__name__)
|
|
19
|
+
self.dateiname = dateiname
|
|
20
|
+
self.max_laenge = max_laenge
|
|
21
|
+
konfigkonfigmanager = kfg.Konfig()
|
|
22
|
+
self.konfig = konfigkonfigmanager.konfiguration_bereitstellen()
|
|
23
|
+
if dateiname in [self.konfig["DIGEIN"], self.konfig["DIGAUS"]]:
|
|
24
|
+
self.reset_daten = ["0"] * self.max_laenge
|
|
25
|
+
else:
|
|
26
|
+
self.reset_daten = ["0.0"] * self.max_laenge
|
|
27
|
+
|
|
28
|
+
def lesen_alle(self):
|
|
29
|
+
"""Zeilenweises einlesen der Daten und Rückgabe als Liste"""
|
|
30
|
+
try:
|
|
31
|
+
daten = []
|
|
32
|
+
# Erstelle ein FileLock-Objekt
|
|
33
|
+
lock_path = str(Path(self.dateiname).with_suffix(".lock"))
|
|
34
|
+
lock = filelock.FileLock(lock_path)
|
|
35
|
+
# Versuche, die Datei zu sperren und darauf zuzugreifen
|
|
36
|
+
with lock:
|
|
37
|
+
with open(self.dateiname, "r", encoding="utf8") as eingabedatei:
|
|
38
|
+
for zeile in eingabedatei:
|
|
39
|
+
zeile = zeile.replace(",", ".") # deutsches Komma in Austauschdatei
|
|
40
|
+
zeile = zeile.rstrip("\n")
|
|
41
|
+
daten = daten + [zeile]
|
|
42
|
+
# Prüfen, ob die Anzahl der Daten stimmt
|
|
43
|
+
if len(daten) != self.max_laenge:
|
|
44
|
+
self.logger.error(
|
|
45
|
+
f"Dateizugriff lesen_alle 1 - Falsche Anzahl an Daten: Datei {self.dateiname}, gelesen: {len(daten)}, erwartet: {self.max_laenge} -> alles auf 0 gesetzt"
|
|
46
|
+
)
|
|
47
|
+
self.schreiben_alle(self.reset_daten)
|
|
48
|
+
daten = self.reset_daten
|
|
49
|
+
except:
|
|
50
|
+
# Fehler beim Lesen der Datei
|
|
51
|
+
self.logger.error(f"Dateizugriff lesen_alle 2 - Allgemeine Exception: Datei {self.dateiname} -> alles auf 0 gesetzt")
|
|
52
|
+
self.schreiben_alle(self.reset_daten)
|
|
53
|
+
daten = self.reset_daten
|
|
54
|
+
|
|
55
|
+
return daten
|
|
56
|
+
|
|
57
|
+
def schreiben_alle(self, daten):
|
|
58
|
+
"""Komplettes zurückschreiben aller Daten einer Austauschdatei"""
|
|
59
|
+
# Erstelle ein FileLock-Objekt
|
|
60
|
+
lock_path = str(Path(self.dateiname).with_suffix(".lock"))
|
|
61
|
+
lock = filelock.FileLock(lock_path)
|
|
62
|
+
with lock:
|
|
63
|
+
try:
|
|
64
|
+
with open(self.dateiname, "w", encoding="utf8") as ausgabedatei:
|
|
65
|
+
for wert in daten:
|
|
66
|
+
zeile = str(wert) + "\n"
|
|
67
|
+
zeile = zeile.replace(".", ",") # deutsches Komma in Austauschdatei
|
|
68
|
+
ausgabedatei.write(zeile)
|
|
69
|
+
except:
|
|
70
|
+
self.logger.error(f"Dateizugriff schreiben_alle - Allgemeine Exception: Datei {self.dateiname} -> alles auf 0 gesetzt")
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""simstb_konfig.py - SimSTB - Konfigurationsdaten
|
|
2
|
+
Das Modul Konfiguration stellt zentrale Konfigurationsdaten, wie z.B.
|
|
3
|
+
Längen, Dateinamen inkl. Pfad oder Signalformen zur Verfügung.
|
|
4
|
+
Name, Organisaion: Markus Breuer, STMB
|
|
5
|
+
Erstellt, Letzte Änderung: 28.07.2021, 20.03.2026
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
import os
|
|
10
|
+
import sys
|
|
11
|
+
import toml
|
|
12
|
+
import threading
|
|
13
|
+
|
|
14
|
+
# Default name for the configuration file
|
|
15
|
+
KONFIG_DATEINAME = "config.toml"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class Konfig:
|
|
19
|
+
"""Klasse mit zentralen Konfigurationsdaten"""
|
|
20
|
+
|
|
21
|
+
_konfig = None # Klassenvariable für die Konfiguration
|
|
22
|
+
_lock = threading.Lock() # Sperre für thread-sichere Zugriffe
|
|
23
|
+
|
|
24
|
+
def __init__(self, konfig_dateiname=KONFIG_DATEINAME):
|
|
25
|
+
"""Konstruktor der Klasse"""
|
|
26
|
+
with Konfig._lock:
|
|
27
|
+
if Konfig._konfig is None: # Nur laden, wenn noch nicht geladen
|
|
28
|
+
self.konfig_dateiname = konfig_dateiname
|
|
29
|
+
if "SIMSTB_CONFIG_FILE" in os.environ:
|
|
30
|
+
# Overwrite default value with environment value
|
|
31
|
+
self.konfig_dateiname = Path(os.environ["SIMSTB_CONFIG_FILE"])
|
|
32
|
+
# Absoluten Pfad zur Konfigurationsdatei ermitteln
|
|
33
|
+
try:
|
|
34
|
+
basisverzeichnis = Path(os.getenv("SIMSTB_WURZEL"))
|
|
35
|
+
except Exception as e:
|
|
36
|
+
print("Umgebungsvariable SIMSTB_WURZEL nichtgesetzt -> Bitte Umgebungsvariable SIMSTB_WURZEL setzen -> Programmabbruch")
|
|
37
|
+
sys.exit(1)
|
|
38
|
+
self.konfig_dateiname = basisverzeichnis / self.konfig_dateiname
|
|
39
|
+
# Konfigurationsdaten aus der TOML-Datei laden
|
|
40
|
+
try:
|
|
41
|
+
Konfig._konfig = toml.load(self.konfig_dateiname)
|
|
42
|
+
except Exception as e:
|
|
43
|
+
msg = f"Fehler beim Laden der Konfigurationsdatei:{self.konfig_dateiname}"
|
|
44
|
+
raise FileNotFoundError(msg) from e
|
|
45
|
+
# Relative Pfade durch absolute Pfade ersetzen
|
|
46
|
+
schluesselliste = ["LOGDATEI", "MODELL_DATEI", "ANAAUS", "ANAEIN", "DIGAUS", "DIGEIN"]
|
|
47
|
+
basisverzeichnis = Path(os.getenv("SIMSTB_WURZEL"))
|
|
48
|
+
for schluessel in schluesselliste:
|
|
49
|
+
if schluessel in Konfig._konfig:
|
|
50
|
+
Konfig._konfig[schluessel] = str(basisverzeichnis / Konfig._konfig[schluessel])
|
|
51
|
+
# Konfiguration ergänzen
|
|
52
|
+
Konfig._konfig["BASISVERZEICHNIS"] = str(basisverzeichnis)
|
|
53
|
+
Konfig._konfig["KONFIG_DATEINAME"] = str(self.konfig_dateiname)
|
|
54
|
+
|
|
55
|
+
def konfiguration_bereitstellen(self):
|
|
56
|
+
"""Stellt die Konfigurationsdaten bereit"""
|
|
57
|
+
return Konfig._konfig
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
""" SimSTB - Logger
|
|
2
|
+
Das Modul Logger stellt eine Funktion zur Speicherung von Log-Informationen bereit.
|
|
3
|
+
Name, Organisaion: Markus Breuer, STMB
|
|
4
|
+
Erstellt, Letzte Änderung: 10.01.2025, 20.03.2026
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import sim_basis.simstb_konfig as kfg
|
|
8
|
+
import logging
|
|
9
|
+
import threading
|
|
10
|
+
|
|
11
|
+
_logging_lock = threading.Lock()
|
|
12
|
+
_logging_initialisiert = False
|
|
13
|
+
|
|
14
|
+
def logging_einrichten():
|
|
15
|
+
"""Richtet die Logging-Konfiguration ein"""
|
|
16
|
+
global _logging_initialisiert
|
|
17
|
+
with _logging_lock:
|
|
18
|
+
if not _logging_initialisiert:
|
|
19
|
+
konfigmanager = kfg.Konfig()
|
|
20
|
+
konfig = konfigmanager.konfiguration_bereitstellen()
|
|
21
|
+
logdateiname = konfig["LOGDATEI"]
|
|
22
|
+
loglevel = konfig.get("LOGLEVEL", "INFO").upper()
|
|
23
|
+
logging.basicConfig(filename=logdateiname, level=loglevel,
|
|
24
|
+
format="%(asctime)s [PID:%(process)d] [TID:%(thread)d] [%(levelname)s] %(name)s: %(message)s",
|
|
25
|
+
datefmt="%d.%m.%Y %H:%M:%S"
|
|
26
|
+
)
|
|
27
|
+
# Gezielt die Logger von benutzter Drittsoftware ausschalten
|
|
28
|
+
logging.getLogger("filelock").setLevel(logging.CRITICAL)
|
|
29
|
+
logging.getLogger("tkinter").setLevel(logging.CRITICAL)
|
|
30
|
+
# Log-Informationen über Initialisieren des Loggings
|
|
31
|
+
logger = logging.getLogger(__name__)
|
|
32
|
+
logger.info("Logging initialisiert (Logdatei: %s, Loglevel: %s)", logdateiname, loglevel)
|
|
33
|
+
_logging_initialisiert = True
|
|
File without changes
|