try fix
This commit is contained in:
parent
84763ec07a
commit
8ebabc9546
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user