Auf serial aus main in einem Modul zugreifen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Elektrix
User
Beiträge: 2
Registriert: Freitag 26. Januar 2018, 19:32

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
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Elektrix
User
Beiträge: 2
Registriert: Freitag 26. Januar 2018, 19:32

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
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein, so ein feature gibt es hier nicht.
Benutzeravatar
noisefloor
User
Beiträge: 3829
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Antworten