diff --git a/DeviceController.py b/DeviceController.py index 107917d..7429a29 100644 --- a/DeviceController.py +++ b/DeviceController.py @@ -5,7 +5,8 @@ OUTDIR = "logs" os.makedirs(OUTDIR, exist_ok=True) class DeviceController: - def __init__(self, dev): + def __init__(self, sess, dev): + self.sess = sess # <— Session referenzieren self.dev = dev self.cmdq = queue.Queue() self.stop_evt = threading.Event() @@ -23,45 +24,36 @@ class DeviceController: self.cmdq.put(("stop", None)) def set_mode(self, ch, mode): - self.cmdq.put(("mode", (ch, mode))) - - def shutdown(self): - self.stop() - self.stop_evt.set() - self.reader_t.join() - self.writer_t.join() + # BUGFIX: nicht rekursiv sich selbst aufrufen! + self.dev.channels[ch].mode = mode def reader_loop(self): while not self.stop_evt.is_set(): - # Befehle abarbeiten (non-blocking) try: cmd, arg = self.cmdq.get_nowait() if cmd == "start" and not self.running: - # kontinuierlich laufen lassen (0 == unendlich) - self.dev.run(0) # ← per-Gerät-Start + # Continuous Session-Stream starten (für alle Devices) + self.sess.start(0) # <— statt dev.run(0) self.running = True elif cmd == "stop" and self.running: - self.dev.cancel() # ← per-Gerät-Stop (sofort) - # optional sauber aus: self.dev.off() - self.dev.flush(-1, True) # Read-Queue leeren + self.sess.end() # <— Session sauber beenden + # optional: Puffer leeren + # self.sess.flush(-1, True) # falls verfügbar in deiner Version self.running = False elif cmd == "mode": - ch, mode = arg # ch: 0 (A) / 1 (B) - self.set_mode(ch, mode) + ch, mode = arg + self.dev.channels[ch].mode = mode except queue.Empty: pass if self.running: - # blockierend n Samples holen try: - data = self.dev.read([], CHUNK, -1, False) # pysmu mappt auf [ [VA,IA,VB,IB], ... ] - # In einfachem CSV-Beispiel loggen wir nur Spannungen A/B: - # data ist Liste von 4-Float-Arrays + # Lies jeweils CHUNK Samples (blockierend bis voll) + data = self.dev.read(CHUNK, -1) # -> [[VA, IA, VB, IB], ...] vsA = [row[0] for row in data] vsB = [row[2] for row in data] self.writer_q.put((time.time(), vsA, vsB)) except Exception: - # bei Überlauf o.ä. kurz atmen und weiter time.sleep(0.001) else: time.sleep(0.01)