diff --git a/dho10004000_programmingguide_en.pdf b/dho10004000_programmingguide_en.pdf new file mode 100644 index 0000000..337ed08 Binary files /dev/null and b/dho10004000_programmingguide_en.pdf differ diff --git a/main.py b/main.py deleted file mode 100644 index 066896a..0000000 --- a/main.py +++ /dev/null @@ -1,6 +0,0 @@ -def main(): - print("Hello from rigol-py-rig!") - - -if __name__ == "__main__": - main() diff --git a/pyproject.toml b/pyproject.toml index 5354f37..1e12783 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,4 +4,11 @@ version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.14" -dependencies = [] +dependencies = [ + "matplotlib>=3.10.8", + "numpy>=2.4.3", + "psutil>=7.2.2", + "pyvisa>=1.16.2", + "pyvisa-py>=0.8.1", + "zeroconf>=0.148.0", +] diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..6c5370e --- /dev/null +++ b/src/main.py @@ -0,0 +1,30 @@ +from rigol_py_rig.rigol import RigolOsc + +import matplotlib.pyplot as plt + + +# uv +def main(): + osc = RigolOsc("TCPIP::10.112.1.9::INSTR") + print(osc.getTrigStatus()) + osc.single() + + depth = osc.getMemoryDepth() + # osc.setPoints(depth) + + ret = osc.channels[0].getWaveform() + + print(osc.channels[0].getOffset()) + + print(f"Y inc {osc.channels[0].getYincrement()}") + print(f"X inc {osc.channels[0].getXincrement()}") + + print(f"Y orogin {osc.channels[0].getYOrigin()}") + print(f"Y reference {osc.channels[0].getYReference()}") + + plt.plot(ret) + plt.show() + + +if __name__ == "__main__": + main() diff --git a/src/rigol_py_rig/__init__.py b/src/rigol_py_rig/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/rigol_py_rig/rigol.py b/src/rigol_py_rig/rigol.py new file mode 100644 index 0000000..85cfb80 --- /dev/null +++ b/src/rigol_py_rig/rigol.py @@ -0,0 +1,145 @@ +import wave +from pyvisa.resources.resource import Resource +import pyvisa +from enum import Enum + +import numpy as np + +CHANNEL_COUNT = 4 + + +class TrigState(Enum): + TD = 0 + WAIT = (1,) + RUN = (2,) + AUTO = (3,) + STOP = (4,) + + +class Channel: + def __init__(self, index, instr): + self.index = index + self.instr = instr + self.enabled = False + self.probe = 1 + self.scale_V = 1e-1 + + self.setProbe(self.probe) + self.setVScale(self.scale_V) + + def setProbe(self, probe: float): + self.instr.write(f":CHANnel{self.index}:PROBe {probe}") + + def setVScale(self, scale: float): + self.instr.write(f":CHANnel{self.index}:SCALe {scale}") + + def getWaveformRaw(self): + self.instr.write(f":WAVeform:SOURce CHANnel{self.index}") + self.instr.write(":WAV:DATA?") + response = self.instr.read_raw() + print(f"total resp len: {len(response)}") + data_start_offset = int(response[1:2].decode("ASCII")) + 2 + data_len = (len(response) - data_start_offset) // 2 * 2 + + print(f"data len{data_len}") + + print(f" raw data byte count:{len(response[data_start_offset:])}") + print(f"data offset: {data_start_offset}") + + dt = np.dtype("