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.
Files changed (39) hide show
  1. simstb-0.6.0a1/LICENSE.txt +15 -0
  2. simstb-0.6.0a1/PKG-INFO +96 -0
  3. simstb-0.6.0a1/README.md +74 -0
  4. simstb-0.6.0a1/pyproject.toml +51 -0
  5. simstb-0.6.0a1/src/sim_basis/__init__.py +0 -0
  6. simstb-0.6.0a1/src/sim_basis/resources/CONTRIBUTING.md +6 -0
  7. simstb-0.6.0a1/src/sim_basis/resources/LICENSE.txt +15 -0
  8. simstb-0.6.0a1/src/sim_basis/resources/README.md +74 -0
  9. simstb-0.6.0a1/src/sim_basis/resources/config.toml +29 -0
  10. simstb-0.6.0a1/src/sim_basis/resources/daten/anaaus.txt +8 -0
  11. simstb-0.6.0a1/src/sim_basis/resources/daten/anaein.txt +8 -0
  12. simstb-0.6.0a1/src/sim_basis/resources/daten/digaus.txt +16 -0
  13. simstb-0.6.0a1/src/sim_basis/resources/daten/digein.txt +16 -0
  14. simstb-0.6.0a1/src/sim_basis/resources/docs/SimSTB-Benutzerdokumentation.pdf +0 -0
  15. simstb-0.6.0a1/src/sim_basis/resources/docs/beispiel.py +34 -0
  16. simstb-0.6.0a1/src/sim_basis/resources/modelle.json +13 -0
  17. simstb-0.6.0a1/src/sim_basis/simstb_dateizugriff.py +70 -0
  18. simstb-0.6.0a1/src/sim_basis/simstb_konfig.py +57 -0
  19. simstb-0.6.0a1/src/sim_basis/simstb_logger.py +33 -0
  20. simstb-0.6.0a1/src/sim_basis/version.py +3 -0
  21. simstb-0.6.0a1/src/sim_schnittstelle/__init__.py +0 -0
  22. simstb-0.6.0a1/src/sim_schnittstelle/simulator.py +93 -0
  23. simstb-0.6.0a1/src/sim_werkzeuge/__init__.py +0 -0
  24. simstb-0.6.0a1/src/sim_werkzeuge/images/band_links.gif +0 -0
  25. simstb-0.6.0a1/src/sim_werkzeuge/images/band_rechts.gif +0 -0
  26. simstb-0.6.0a1/src/sim_werkzeuge/images/band_stopp.gif +0 -0
  27. simstb-0.6.0a1/src/sim_werkzeuge/images/led_blau.png +0 -0
  28. simstb-0.6.0a1/src/sim_werkzeuge/images/led_grau.png +0 -0
  29. simstb-0.6.0a1/src/sim_werkzeuge/images/led_gruen.png +0 -0
  30. simstb-0.6.0a1/src/sim_werkzeuge/images/simstb.ico +0 -0
  31. simstb-0.6.0a1/src/sim_werkzeuge/simstb_cli.py +75 -0
  32. simstb-0.6.0a1/src/sim_werkzeuge/simstb_datenaufzeichner.py +250 -0
  33. simstb-0.6.0a1/src/sim_werkzeuge/simstb_generator.py +250 -0
  34. simstb-0.6.0a1/src/sim_werkzeuge/simstb_gui.py +486 -0
  35. simstb-0.6.0a1/src/sim_werkzeuge/simstb_init.py +72 -0
  36. simstb-0.6.0a1/src/sim_werkzeuge/simstb_modell_1.py +124 -0
  37. simstb-0.6.0a1/src/sim_werkzeuge/simstb_modell_2.py +121 -0
  38. simstb-0.6.0a1/src/sim_werkzeuge/simstb_modelle.py +121 -0
  39. 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.
@@ -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
+
@@ -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,8 @@
1
+ 0
2
+ 0
3
+ 0
4
+ 0
5
+ 0
6
+ 0
7
+ 0
8
+ 0
@@ -0,0 +1,8 @@
1
+ 0,0
2
+ 0,0
3
+ 0,0
4
+ 0,0
5
+ 0,0
6
+ 0,0
7
+ 0,0
8
+ 0,0
@@ -0,0 +1,16 @@
1
+ 0
2
+ 0
3
+ 0
4
+ 0
5
+ 0
6
+ 0
7
+ 0
8
+ 0
9
+ 0
10
+ 0
11
+ 0
12
+ 0
13
+ 0
14
+ 0
15
+ 0
16
+ 0
@@ -0,0 +1,16 @@
1
+ 0
2
+ 0
3
+ 0
4
+ 0
5
+ 0
6
+ 0
7
+ 0
8
+ 0
9
+ 0
10
+ 0
11
+ 0
12
+ 0
13
+ 0
14
+ 0
15
+ 0
16
+ 0
@@ -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,13 @@
1
+ [
2
+ {
3
+ "nr": 1,
4
+ "name": "Modell 1 - LED Streifen",
5
+ "exe": "simstb_modell_1.exe"
6
+ },
7
+ {
8
+ "nr": 2,
9
+ "name": "Modell 2 - Fließband (in Arbeit)",
10
+ "exe": "simstb_modell_2.exe"
11
+ }
12
+
13
+ ]
@@ -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
@@ -0,0 +1,3 @@
1
+ # Build Data, automatisch generiert, nicht manuell ändern!
2
+ SIMSTB_VERSION='0.6.0a1'
3
+ SIMSTB_VERSION_DATE='22.03.2026'
File without changes