frappy/ftune.py
2025-01-09 09:59:33 +01:00

128 lines
4.7 KiB
Python

import PySimpleGUI as sg
import time
import sys
sys.path.append(r'/Users/bartkowiak/Programs/frappy/frappy')
from secop.client import SecopClient
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
from numpy.random import rand
import numpy as np
def draw_figure(canvas, figure):
figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
figure_canvas_agg.draw()
figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1)
return figure_canvas_agg
def upd_flim(inp):
return int(inp)
def connection_handler(sec,status,IP,port, cstate):
if cstate == -1 and status == False:
try :
cstate = 1
#sock.connect((IP,int(port)))
sec = SecopClient(IP+':'+port)
sec.connect()
sec.setParameter('f','control',False)
status = False
except :
cstate = -1
status = True
elif status == True and cstate == 1 :
status = False
sec.disconnect()
#sock.close()
cstate = -1
return cstate, status,sec
def new_xy(sec, cstate):
xn = 0
yn = 0
if cstate == 1:
try:
xn = sec.getParameter('roi0','i')[0]
yn = sec.getParameter('roi0','q')[0]
except:
pass
return xn, yn
def send_new_f(sec, cstate, freq):
if cstate == 1:
freq = sec.setParameter('f','basefreq',freq)
return freq
# THIS IS THE MAIN LOOP
def main(): # define the main loop
freq = '10000000'
f_start = 39000000
f_end = 42000000
new_f = f_start
down = True
down2 = True
cstate = -1
tstart = time.time()
x = np.array([])
y = np.array([])
IP = 'pc13252'
port = '5000'
sec = SecopClient(IP+':'+port)
layout = [ [sg.Text('Frequency Tuner)')],
[sg.Text('IP\t\t:',font= ("Helvetica",22)),sg.InputText(key='_IP_',default_text=IP,font= ("Helvetica",22),size=(15,1))],
[sg.Text('PORT\t\t:',font= ("Helvetica",22)),sg.InputText(key='_PORT_',default_text=port,font= ("Helvetica",22),size=(15,1)),sg.T(' ' * 41), sg.Button('connect',key='connect',font= ("Helvetica",22))],
[sg.Text('Start Frequency\t:',font= ("Helvetica",22)),sg.InputText(key='_f_start_', default_text='39000000',font= ("Helvetica",22),size=(15,1))],
[sg.Text('Stop Frequency\t:',font= ("Helvetica",22)),sg.InputText(key='_f_end_',default_text='45000000',font= ("Helvetica",22),size=(15,1))],
[sg.Slider(range=(f_start, f_end),key='_SLtune_', orientation='h',font= ("Helvetica",22), size=(35, 20), default_value=f_start),sg.T(' ' * 2),sg.Button('sweep',key='sweep',font= ("Helvetica",22))],
[sg.Canvas(size=(640, 480), key='-CANVAS-')],
[sg.Button('Exit',font= ("Helvetica",22)),sg.T(' ' * 150),sg.Button('Clear Plot',key='clp',font= ("Helvetica",22))] ] # a couple of buttons
window = sg.Window('Frequency tuner', layout, finalize=True)
canvas_elem = window['-CANVAS-']
canvas = canvas_elem.TKCanvas
# draw the intitial scatter plot
fig, ax = plt.subplots()
ax.grid(True)
fig_agg = draw_figure(canvas, fig)
while True:
# Event Loop
event, values = window.Read(timeout=0.5)
if event in (None, 'Exit'): # checks if user wants to exit
if cstate == 1:
connection_handler(sec,True,values['_IP_'],values['_PORT_'],cstate)
break
if event == 'connect':
down = not down
window['connect'].Update(('disconnect','connect')[down])
cstate, down, sec = connection_handler(sec,down,values['_IP_'],values['_PORT_'],cstate)
if event == 'sweep':
down2 = not down2
window['sweep'].Update(('sweeping','sweep')[down2])
#if event in ('_SL8_','_SL6_','_SL4_','_SL2_'): # the two lines of code needed to get button and run command
#freq = update_freq(inp=[values['_SL8_'],values['_SL6_'],values['_SL4_'],values['_SL2_']])
if down2 == False:
if time.time() - tstart > 1.:
tstart = time.time()
new_f = int(int(values['_SLtune_']) + (int(values['_f_end_'])-int(values['_f_start_']))/200)
send_new_f(sec,cstate,new_f)
window['_SLtune_'].Update(value=new_f)
if event == 'clp':
x = np.array([])
y = np.array([])
window['_SLtune_'].Update(range=(int(values['_f_start_']),int(values['_f_end_'])))
xn,yn = new_xy(sec,cstate)
ax.cla()
ax.grid(True)
x = np.append(x,xn)
y = np.append(y,yn)
ax.plot(x, y)
fig_agg.draw()
window.Close()
if __name__ == '__main__':
main()