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