import pyvisa import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import time from qolab.hardware.scope import SDS1104X from qolab.hardware.rf_generator import AgilentE8257D from qolab.feedback import PID from qolab.data import TraceSetSameX, TraceXY, Trace def adjustRF(pid, scope, rfgen): errorTrace = Trace("error") errorTrace.config['unit']='V' timeTrace = Trace("time") timeTrace.config['unit']='S' errorLog = TraceXY("error") errorLog.x = timeTrace errorLog.y = errorTrace log = TraceSetSameX("timelog") log.addTrace(errorLog) # while True: for i in range(0,100): timenow = time.time() ch1=scope.getTrace(1, decimate=False) err = np.mean(ch1.y.values) fdbck = pid.feedback(err) freq0 = rfgen.getFreqFixed() freq = freq0 + fdbck rfgen.setFreqFixed(freq) print(f'error = {err}, feedback = {fdbck}, request freq = {freq}') log.addPointToTrace(timenow) log.addPointToTrace(err, "error") plt.clf() log.plot() time.sleep(.01) return log if __name__ == '__main__': print("testing") rm = pyvisa.ResourceManager() instr_scope=rm.open_resource('TCPIP::192.168.0.61::INSTR') scope = SDS1104X(instr_scope) instr_rfgen=rm.open_resource('TCPIP::192.168.0.114::INSTR') rfgen = AgilentE8257D(instr_rfgen) print('------ Header start -------------') print(str.join('\n', scope.getHeader())) print(str.join('\n', rfgen.getHeader())) print('------ Header ends -------------') ch1 = scope.getTrace(1) traces = scope.getAllTraces() freqZero = 6834687190 freqDeltaM2 = 6835387164 SweepSpan = 10000 rfgen.stopFrequencySweep() rfgen.setFreqFixed(freqDeltaM2+100) pid = PID(100,400,0, sign=-1) log=adjustRF(pid, scope, rfgen)