Seite 1 von 1

Auf serial aus main in einem Modul zugreifen

Verfasst: Freitag 26. Januar 2018, 20:39
von Elektrix
Hallo allerseits,

ich bin neu hier im Forum, habe schon ein paar Sachen gelesen und finde hier viele gute Infos. Ich schreibe gerade mein erstes Projekt in python3 und hänge an einem Problem, das wahrscheinlich eine ziemliche Anfängerfrage ist. Ich habe aber in diversen Tutorials, bei der Internetsuche und auch hier bisher nichts passendes gefunden. Liegt wahrscheinlich daran, daß ich nicht weiß wie ich die Frage korrekt formuliere.

Ich habe zum testen ein kurzes Hauptprogramm geschrieben, in dem mit serial eine serielle Schnittstelle geöffnet wird. Dann habe ich eine Funktion, die auf die Schnittstelle schreibt. Aus meiner Sicht macht es Sinn, die Schnittstelle nur einmal zu öffnen und nicht bei jedem Schreib- oder Lesevorgang neu zu initialisieren. Alles gut, solange das Hauptprogramm und die Funktion in der gleichen Datei sind. Sobald ich die Funktion in ein Modul auslagere kann ich in der Funktion nicht mehr auf die Schnittstelle zugreifen.

Code: Alles auswählen

...
import serial

def serial_write(data):
  ser.write(data)
  ....
  return # mit returncode

ser = serial.Serial(***Schnittstellenparameter***)
ser.open()

returncode = serial_write(***bytearray***)
So wie hier läuft der Code. Die Funktion ist natürlich umfangreicher, aber mir geht es nur um das beschriebene Problem. Wenn ich die Funktion in ein Modul packe und importiere sagt er mir, daß ser in der Funktion nicht definiert ist.

Wen mir jemand weiterhelfen könnte würde es mich sehr freuen.

Viele Grüße und noch einen schönen Abend

Elektrix

Re: Auf serial aus main in einem Modul zugreifen

Verfasst: Freitag 26. Januar 2018, 21:01
von noisefloor
Hallo,

du musst dann beim Aufruf der Funktion die Instanz von Serial übergeben, dann kannst du auch in der importierten Funktion darauf zu greifen. Vom Prinzip so:

Modul:

Code: Alles auswählen

def serial_write(ser, data):
  ser.write(data)
  ....
  return # mit returncode
Main:

Code: Alles auswählen

import serial
from foo import serial_write
 
ser = serial.Serial(***Schnittstellenparameter***)
ser.open()
returncode = serial_write(ser, ***bytearray***)
Gruß, noisefloor

Re: Auf serial aus main in einem Modul zugreifen

Verfasst: Freitag 26. Januar 2018, 21:13
von Elektrix
Danke für die superschnelle und kompetente Antwort!!

Code geändert, funktioniert :D

Wenn ich wieder eine Frage habe melde ich mich gerne wieder. Mit dem Fragen beantworten ists momentan noch nicht so weit her...

Kennzeichnet ihr hier gelöste Fragen im Titel auch mit [gelöst] oder so?

Viele Grüße

Elektrix

Re: Auf serial aus main in einem Modul zugreifen

Verfasst: Freitag 26. Januar 2018, 21:28
von __deets__
Nein, so ein feature gibt es hier nicht.

Re: Auf serial aus main in einem Modul zugreifen

Verfasst: Freitag 26. Januar 2018, 21:29
von noisefloor
Hallo,

eine "gelöst" Markierung gibt's hier nicht. Du könntest den Betreff ändern, aber auch das ist hier nicht gängige Praxis.

Gruß, noisefloor