79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
import pyvisa
|
|
import matplotlib.pyplot as plt
|
|
|
|
# Initialize VISA resource manager
|
|
rm = pyvisa.ResourceManager()
|
|
analyzer_address = None
|
|
print(rm.list_resources())
|
|
rm.list_resources()
|
|
|
|
# Automatically detect the analyzer
|
|
for device in rm.list_resources():
|
|
try:
|
|
inst = rm.open_resource(device)
|
|
idn_response = inst.query("*IDN?")
|
|
if "PZ4000" in idn_response: # Adjust based on actual model identifier
|
|
analyzer_address = device
|
|
break
|
|
inst.close()
|
|
except Exception:
|
|
pass
|
|
|
|
# Proceed if analyzer found
|
|
if analyzer_address:
|
|
analyzer = rm.open_resource(analyzer_address)
|
|
|
|
# Set waveform data format and byte order
|
|
analyzer.write(":WAVEFORM:FORMAT FLOAT")
|
|
analyzer.write(":WAVEFORM:BYTEORDER MSB")
|
|
|
|
# Query sample rate to calculate the actual time duration of each block
|
|
sample_rate = float(analyzer.query(":WAVEFORM:SRATE?"))
|
|
block_size = 50 # Number of points per block
|
|
update_interval = block_size / sample_rate # Calculate update time based on sample rate
|
|
start = 0
|
|
end = start + block_size
|
|
|
|
# Set up plotting
|
|
plt.ion()
|
|
fig, ax = plt.subplots()
|
|
time_data = []
|
|
wave_data = []
|
|
|
|
try:
|
|
while True:
|
|
# Configure the waveform start and end points for the sliding window
|
|
analyzer.write(f":WAVEFORM:START {start}")
|
|
analyzer.write(f":WAVEFORM:END {end}")
|
|
|
|
# Retrieve waveform data
|
|
raw_data = analyzer.query_binary_values(":WAVEFORM:SEND?", datatype='f', container=list)
|
|
|
|
# Update time and waveform data for plotting
|
|
time_data = [i / sample_rate for i in range(len(raw_data))]
|
|
wave_data = raw_data
|
|
|
|
# Update plot
|
|
ax.clear()
|
|
ax.plot(time_data, wave_data, label="Instantaneous Value")
|
|
ax.set_title("Instantaneous Waveform")
|
|
ax.set_xlabel("Time (s)")
|
|
ax.set_ylabel("Amplitude")
|
|
ax.legend()
|
|
|
|
plt.draw()
|
|
plt.pause(update_interval) # Use the calculated interval to sync with the data capture time
|
|
|
|
# Increment the start and end points for the next block (sliding window)
|
|
start += block_size
|
|
end += block_size
|
|
|
|
except KeyboardInterrupt:
|
|
print("Measurement stopped.")
|
|
finally:
|
|
analyzer.close()
|
|
plt.ioff()
|
|
plt.show()
|
|
else:
|
|
print("Analyzer not found.")
|