cleanup
This commit is contained in:
parent
3438754409
commit
460c070063
@ -1,4 +1,5 @@
|
|||||||
import wave
|
import wave
|
||||||
|
import time
|
||||||
from pyvisa.resources.resource import Resource
|
from pyvisa.resources.resource import Resource
|
||||||
import pyvisa
|
import pyvisa
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
@ -22,8 +23,8 @@ class Channel:
|
|||||||
self.index = index
|
self.index = index
|
||||||
self.instr = instr
|
self.instr = instr
|
||||||
self.enabled = False
|
self.enabled = False
|
||||||
self.probe = 1
|
self.probe = 10
|
||||||
self.scale_V = 1e-1
|
self.scale_V = 5
|
||||||
|
|
||||||
self.setProbe(self.probe)
|
self.setProbe(self.probe)
|
||||||
self.setVScale(self.scale_V)
|
self.setVScale(self.scale_V)
|
||||||
@ -38,15 +39,9 @@ class Channel:
|
|||||||
self.instr.write(f":WAVeform:SOURce CHANnel{self.index}")
|
self.instr.write(f":WAVeform:SOURce CHANnel{self.index}")
|
||||||
self.instr.write(":WAV:DATA?")
|
self.instr.write(":WAV:DATA?")
|
||||||
response = self.instr.read_raw()
|
response = self.instr.read_raw()
|
||||||
print(f"total resp len: {len(response)}")
|
|
||||||
data_start_offset = int(response[1:2].decode("ASCII")) + 2
|
data_start_offset = int(response[1:2].decode("ASCII")) + 2
|
||||||
data_len = (len(response) - data_start_offset) // 2 * 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("<u2")
|
dt = np.dtype("<u2")
|
||||||
datapoints = np.frombuffer(
|
datapoints = np.frombuffer(
|
||||||
response[(data_start_offset) : (data_start_offset + data_len)], dtype=dt
|
response[(data_start_offset) : (data_start_offset + data_len)], dtype=dt
|
||||||
@ -102,9 +97,9 @@ class Channel:
|
|||||||
|
|
||||||
def genTimeArray(self, waveform):
|
def genTimeArray(self, waveform):
|
||||||
x_delta = self.getXincrement()
|
x_delta = self.getXincrement()
|
||||||
time = np.arange(0, len(waveform) * x_delta, x_delta)
|
tim = np.arange(0, len(waveform) * x_delta, x_delta)
|
||||||
|
|
||||||
return time
|
return tim
|
||||||
|
|
||||||
|
|
||||||
class RigolOsc:
|
class RigolOsc:
|
||||||
@ -117,8 +112,14 @@ class RigolOsc:
|
|||||||
|
|
||||||
def single(self): # arm single mode
|
def single(self): # arm single mode
|
||||||
self.instr.write(":SINGle")
|
self.instr.write(":SINGle")
|
||||||
|
self.instr.query("*OPC?")
|
||||||
|
time.sleep(0.01) # Either this, or RUN before triggering
|
||||||
|
print(self.getTrigStatus())
|
||||||
|
|
||||||
while self.getTrigStatus() != TrigState.STOP:
|
while self.getTrigStatus() != TrigState.STOP:
|
||||||
pass
|
print(self.getTrigStatus())
|
||||||
|
|
||||||
|
# continue
|
||||||
|
|
||||||
def getTrigStatus(self):
|
def getTrigStatus(self):
|
||||||
ret = self.instr.query(":TRIGger:STATus?")
|
ret = self.instr.query(":TRIGger:STATus?")
|
||||||
@ -150,3 +151,9 @@ class RigolOsc:
|
|||||||
depth = int(float(ret))
|
depth = int(float(ret))
|
||||||
print(depth)
|
print(depth)
|
||||||
return depth
|
return depth
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.instr.write(":RUN")
|
||||||
|
|
||||||
|
def setTimescale(self, timebase: float):
|
||||||
|
self.instr.write(f":TIMebase:MAIN:SCALe {timebase}")
|
||||||
|
|||||||
@ -1,96 +0,0 @@
|
|||||||
import wave
|
|
||||||
from pyvisa.resources.resource import Resource
|
|
||||||
import pyvisa
|
|
||||||
from enum import Enum
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
|
|
||||||
class Waveform(Enum):
|
|
||||||
SINE = "SINE"
|
|
||||||
SQUARE = "SQUARE"
|
|
||||||
RAMP = "RAMP"
|
|
||||||
PULSE = "PULSE"
|
|
||||||
NOISE = "NOISE"
|
|
||||||
ARB = "ARB"
|
|
||||||
|
|
||||||
|
|
||||||
class ChannelID(Enum):
|
|
||||||
CH1 = 1
|
|
||||||
CH2 = 2
|
|
||||||
|
|
||||||
|
|
||||||
CHANNEL_COUNT = 2
|
|
||||||
|
|
||||||
|
|
||||||
class Channel:
|
|
||||||
def __init__(self, channel_id: ChannelID, instr: Resource):
|
|
||||||
self.id = channel_id
|
|
||||||
self.index = channel_id.value
|
|
||||||
self.instr = instr
|
|
||||||
|
|
||||||
# ---- Basic waveform ----
|
|
||||||
def set_waveform(self, waveform: Waveform):
|
|
||||||
self.instr.write(f"C{self.index}:BSWV WVTP,{waveform.value}")
|
|
||||||
|
|
||||||
def set_frequency(self, freq: float):
|
|
||||||
self.instr.write(f"C{self.index}:BSWV FRQ,{freq}")
|
|
||||||
|
|
||||||
def set_amplitude(self, amplitude: float):
|
|
||||||
self.instr.write(f"C{self.index}:BSWV AMP,{amplitude}")
|
|
||||||
|
|
||||||
def set_offset(self, offset: float):
|
|
||||||
self.instr.write(f"C{self.index}:BSWV OFST,{offset}")
|
|
||||||
|
|
||||||
# ---- Output control (merged) ----
|
|
||||||
def set_output(self, state: bool):
|
|
||||||
cmd = "ON" if state else "OFF"
|
|
||||||
self.instr.write(f"C{self.index}:OUTP {cmd}")
|
|
||||||
|
|
||||||
# ---- Convenience ----
|
|
||||||
def apply_sine(self, freq: float, amp: float, offset: float = 0):
|
|
||||||
self.set_waveform(Waveform.SINE)
|
|
||||||
self.set_frequency(freq)
|
|
||||||
self.set_amplitude(amp)
|
|
||||||
self.set_offset(offset)
|
|
||||||
|
|
||||||
# ---- Query ----
|
|
||||||
def get_frequency(self) -> float:
|
|
||||||
response = self.instr.query(f"C{self.index}:BSWV?")
|
|
||||||
return float(response.split(",")[1])
|
|
||||||
|
|
||||||
|
|
||||||
class GenChannels:
|
|
||||||
def __init__(self, instr: Resource):
|
|
||||||
self.instr = instr
|
|
||||||
self.channels = {
|
|
||||||
ChannelID.CH1: Channel(ChannelID.CH1, instr),
|
|
||||||
ChannelID.CH2: Channel(ChannelID.CH2, instr),
|
|
||||||
}
|
|
||||||
|
|
||||||
def __getitem__(self, ch: ChannelID) -> Channel:
|
|
||||||
return self.channels[ch]
|
|
||||||
|
|
||||||
|
|
||||||
class SiglentGen:
|
|
||||||
def __init__(self, visa_address: str):
|
|
||||||
rm = pyvisa.ResourceManager()
|
|
||||||
self.instr: Resource = rm.open_resource(visa_address)
|
|
||||||
|
|
||||||
self.channels = GenChannels(self.instr)
|
|
||||||
|
|
||||||
self.initialize()
|
|
||||||
|
|
||||||
# ---- Initialization ----
|
|
||||||
def initialize(self):
|
|
||||||
self.instr.write("*RST")
|
|
||||||
self.instr.write("*CLS")
|
|
||||||
|
|
||||||
# ---- Global commands ----
|
|
||||||
def identify(self) -> str:
|
|
||||||
return self.instr.query("*IDN?")
|
|
||||||
|
|
||||||
def close(self):
|
|
||||||
self.instr.close()
|
|
||||||
|
|
||||||
def get_error(self):
|
|
||||||
return self.instr.query("SYST:ERR?")
|
|
||||||
Loading…
Reference in New Issue
Block a user