From 5c5befacae002430835203b85525762123f1733a Mon Sep 17 00:00:00 2001 From: Zychlix Date: Mon, 30 Mar 2026 15:37:33 +0200 Subject: [PATCH] Autoscale --- src/rigol_dho_lib/rigol.py | 49 ++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/src/rigol_dho_lib/rigol.py b/src/rigol_dho_lib/rigol.py index cce9a66..0a7fb96 100644 --- a/src/rigol_dho_lib/rigol.py +++ b/src/rigol_dho_lib/rigol.py @@ -1,4 +1,3 @@ -import wave import time from pyvisa.resources.resource import Resource import pyvisa @@ -29,6 +28,8 @@ class Channel: self.setProbe(self.probe) self.setVScale(self.scale_V) + self.last_scale = 1 # V/div + def setProbe(self, probe: float): self.instr.write(f":CHANnel{self.index}:PROBe {probe}") @@ -101,6 +102,37 @@ class Channel: return tim + def getVpp(self): + self.instr.write(f":MEASure:SOURce CHANnel{self.index}") + ret = self.instr.query(":MEASure:ITEM? VPP") + saturated = False + + vpp = float(ret) + + if vpp > 1e10: + saturated = True + + return vpp, saturated + + def getVrms(self): + self.instr.write(f":MEASure:SOURce CHANnel{self.index}") + ret = self.instr.query(":MEASure:ITEM? VRMS") + saturated = False + + rms = float(ret) + + if rms > 1e10: + saturated = True + + return rms, saturated + + def clampVscale(self, val): + if val > 100: + val = 100 + if val < 0.001: + val = 0.001 + return val + class RigolOsc: def __init__(self, visa_address: str): @@ -110,14 +142,21 @@ class RigolOsc: self.channels = [Channel(i + 1, self.instr) for i in range(CHANNEL_COUNT)] self.initialize() + def getChannel(self, channel_id: int) -> Channel: + if 0 < channel_id <= CHANNEL_COUNT: + return self.channels[channel_id - 1] + else: + raise Exception("Invalid channel id") + def single(self): # arm single mode self.instr.write(":SINGle") self.instr.query("*OPC?") time.sleep(0.01) # Either this, or RUN before triggering - print(self.getTrigStatus()) + # print(self.getTrigStatus()) while self.getTrigStatus() != TrigState.STOP: - print(self.getTrigStatus()) + continue + # print(self.getTrigStatus()) # continue @@ -135,7 +174,7 @@ class RigolOsc: return TrigState.STOP else: print("error") - print(ret) + # print(ret) raise (Exception("Unknown state")) def setPoints(self, points): @@ -149,7 +188,7 @@ class RigolOsc: ret = self.instr.query(":ACQuire:MDEPth?") depth = int(float(ret)) - print(depth) + # print(depth) return depth def run(self):