Hallo Liebes Forum,
ich habe schon viel Wissenswertes aus dem Forum rausholen können, dafür erst mal danke. Aber jetzt bin ich an einer Hürde angelangt die ich nicht überblicke. Kein Buch, kein Google und auch das schöne Forum konnte mir noch keine Lösung bringen. Vielleicht fehlen mir auch nur die richtigen Suchbeiriffe zu dem Problem.
Ich habe ein Modul (xyz.py) geschrieben, dass von einer Serial Daten von einem µC holt. Dieses unktioniert, nun möchte ich die Daten in einem Modul (globalevar.py) global für andere Modul zu Verfügung stellen, so dass jedes Modul unabhängig die Daten lesen kann. Da die Daten 10 sek. erneuert werden, ist ein Auslagerung auf Datei nicht möglich. (PI – SD-Karte).
Wie bekommt man die Variable global in ein Modul rein?
Wenn ich die Daten vom xyz auf globalevar schiebe und diese wieder einlese funktioniert alles underbar. Komme ich mit einem anderen Modul, bekomme ich die Fehlermeldung das die Var nicht definiert ist.
Wenn ich mir die Daten direkt von xyz holen will, funktioniert das nur mit einem Modul. Da beim import xyz das ganze Modul aufgerufen wird und die Serial dabei immer mit initialisiert wird, d.h es kommt dann zu eine Fehlermeldung das COM1 schon geöffnet ist. Selbst wenn ich from xys import Funktion aufrufe wird immer das ganze Modul erst ausgefühlt.
Für Anregungen um das Problem zubeheben würde ich mich freuen.
Schöne Grüß
Alfred
Globale Variable
@alfred
Globale Namen auf Modulebene verwendet man nur für konstante Werte, ein Beispiel ist z. B. ``math.pi``. In Deinem Fall würde das auch nicht funktionieren, da das Modul einmal beim Import eingelesen wird und selbst bei einer Veränderung diese nicht irgendwie magisch an das importierende Modul propagiert wird.
Schreib doch eine Funktion, über die Du dann die gewünschten Werte abrufen kannst ``xyz.get_any_values()``.
mutetella
Globale Namen auf Modulebene verwendet man nur für konstante Werte, ein Beispiel ist z. B. ``math.pi``. In Deinem Fall würde das auch nicht funktionieren, da das Modul einmal beim Import eingelesen wird und selbst bei einer Veränderung diese nicht irgendwie magisch an das importierende Modul propagiert wird.
Schreib doch eine Funktion, über die Du dann die gewünschten Werte abrufen kannst ``xyz.get_any_values()``.
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit
)
-
BlackJack
@alfred: Der Code auf Modulebene wird nur beim ersten Import ausgeführt, das heisst wenn dort der Code zum Verbinden mit dem µC steht wird der *nicht* bei jedem Import ausgeführt. Ich habe so ein bisschen den Verdacht Du meinst nicht nur das importieren von verschiedenen Modulen innerhalb eines Programms sondern verschiedene Programme die unabhängig voneinander laufen. In dem Fall könnte man zum Beispiel einen Server schreiben bei dem die anderen Programme den aktuellen Wert abfragen können, oder eine dauerhafte Verbindung aufbauen können über die sie die aktuellen Werte empfangen.
Man kann auf einem Raspi übrigens problemlos alle 10 Sekunden etwas in eine Datei schreiben. Wenn diese Datei einen Systemneustart nicht überleben muss, dann braucht man die vielleicht auch nicht auf die SD-Karte schreiben. Je nach dem welches Betriebssystem Du auf dem Gerät verwendest gibt es vielleicht schon RAM-Disks auf die man speichern kann. Ansonsten könnte man sich so etwas auch selber anlegen.
Man kann auf einem Raspi übrigens problemlos alle 10 Sekunden etwas in eine Datei schreiben. Wenn diese Datei einen Systemneustart nicht überleben muss, dann braucht man die vielleicht auch nicht auf die SD-Karte schreiben. Je nach dem welches Betriebssystem Du auf dem Gerät verwendest gibt es vielleicht schon RAM-Disks auf die man speichern kann. Ansonsten könnte man sich so etwas auch selber anlegen.
Hallo,
danke für die schnellen Antworten.
Ja genau das ist mein Problem.
xyz.py
ser = serial.Serial();
...
def empfang():
...
def daten()
...
d.h ich müsste dann die initialisiert in eine Funktion einschließen. Das macht Sinn.
Besten Dank für die schnelle Hilft.
Schöne Grüß
Alfred
danke für die schnellen Antworten.
Ja genau das ist mein Problem.
xyz.py
ser = serial.Serial();
...
def empfang():
...
def daten()
...
d.h ich müsste dann die initialisiert in eine Funktion einschließen. Das macht Sinn.
Besten Dank für die schnelle Hilft.
Schöne Grüß
Alfred
