Commit f59e221b authored by LorenzoMonti's avatar LorenzoMonti
Browse files

UI and comments changes

parent 2c6aa6f9
Loading
Loading
Loading
Loading
+70 −70
Original line number Diff line number Diff line
@@ -6,18 +6,18 @@ import pyvisa


class Anritsu_MS2830A():
    '''
    """
    Python class for the Anritsu MS2830A Signal Source Analyzer
    
    '''
    """

    def __init__(self, name, address = 'GPIB::18::INSTR'):
        '''
        """
        Initializes 
        Input:
            name (string)    : name of the instrument
            address (string) : GPIB address
        '''
        """
        
        logging.info(__name__ + ' : Initializing instrument')
        
@@ -35,15 +35,15 @@ class Anritsu_MS2830A():
            exit()

    def who_am_i(self):
        '''
        """
        default comand in order to know which is the instrument connected
        '''
        """
        return str(self._visainstrument.query('*IDN?'))

    def set_reset(self):
        '''
        """
        reset command
        '''
        """
        return self._visainstrument.write('*RST')

    def self_test(self):
@@ -59,9 +59,9 @@ class Anritsu_MS2830A():
        return self._visainstrument.write('INST SPECT')

    def get_resourcelist(self, resource_man):
        '''
        """
        gets the list of available resources
        '''
        """
        return self._list_res

    ######################################
@@ -69,27 +69,27 @@ class Anritsu_MS2830A():
    ######################################
   
    def do_set_resolutionBW(self, BW):
        '''
        """
        sets the resolution bandwidth
        '''
        """
        self._visainstrument.write('RB %e'%(BW))

    def do_get_resolutionBW(self):
        '''
        """
        gets the resolution bandwidth
        '''
        """
        return float(self._visainstrument.query('RB?'))

    def do_set_videoBW(self, BW):
        '''
        """
        sets the video bandwidth
        '''
        """
        self._visainstrument.write('VB %e'%(BW))

    def do_get_videoBW(self):
        '''
        """
        gets the video bandwidth
        '''
        """
        return float(self._visainstrument.query('VB?'))
    
    ######################################
@@ -97,21 +97,21 @@ class Anritsu_MS2830A():
    ######################################

    def do_get_sweeptime(self):
        '''
        """
        gets the center frequency
        '''
        """
        return float(self._visainstrument.query('swe:time?'))

    def set_trace_points_sweeptime(self, points):
        '''
        """
        sets the trace point for time sweep
        '''
        """
        self._visainstrument.write('SWE:POIN %i' % (points))

    def get_trace_points_sweeptime(self):
        '''
        """
        query the trace point for time sweep
        '''
        """
        return int(self._visainstrument.query('SWE:POIN?'))

    #def do_get_sweeptime_averages(self):
@@ -121,16 +121,16 @@ class Anritsu_MS2830A():
    #        return self.get_sweeptime()     
    
    def set_continuous_sweep_mode(self,value):
        '''
        """
        value='ON' Continuous sweep
        value='OFF' Single sweep
        '''
        """
        self._visainstrument.write('INIT:CONT %s'%(value))   

    def sweep(self):
        '''
        """
        perform a sweep and wait for it to finish
        '''
        """
        self._visainstrument.write('INIT; *WAI')    

    ######################################
@@ -138,56 +138,56 @@ class Anritsu_MS2830A():
    ######################################

    def do_set_centerfreq(self, centerfreq):
        '''
        """
        sets the center frequency
        '''
        """
        self._visainstrument.write('CNF %i' % (centerfreq))

    def do_get_centerfreq(self):
        '''
        """
        gets the center frequency
        '''
        """
        return float(self._visainstrument.query('CNF?'))

    def do_set_freqspan(self, freqspan):
        '''
        """
        sets the frequency span
        '''
        """
        self._visainstrument.write('freq:span %e'%(freqspan))
    
    def do_get_freqspan(self):
        '''
        """
        gets the frequency span
        
        '''
        """
        return float(self._visainstrument.query('freq:span?'))

    def do_set_startfreq(self, freq):
        '''
        """
        sets the start frequency
        
        '''
        """
        self._visainstrument.write('STF %i'%(freq))

    def do_get_startfreq(self):
        '''
        """
        gets the start frequency
        
        '''
        """
        return float(self._visainstrument.query('STF?'))

    def do_set_stopfreq(self, freq):
        '''
        """
        sets the stop frequency
        
        '''
        """
        self._visainstrument.write('SOF %i'%(freq))

    def do_get_stopfreq(self):
        '''
        """
        gets the stop frequency
        
        '''
        """
        return float(self._visainstrument.query('SOF?'))
        
    ######################################
@@ -195,26 +195,26 @@ class Anritsu_MS2830A():
    ######################################

    def do_set_powerunit(self,unit):
        '''
        """
        sets the unit for powers
        provide unit as a string! ("DBm")
        '''
        """
        self._visainstrument.write('unit:pow %s'%(unit))
        
    def do_get_powerunit(self):
        '''
        """
        gets the power unit for powers
        '''
        """
        return self._visainstrument.query('unit:pow')
        
    def do_get_averages(self):
        '''
        """
        Get number of averages
        Input:
            None
        Output:
            number of averages
        '''
        """
        
        return int(self._visainstrument.query(':AVER:COUNT?'))

@@ -223,37 +223,37 @@ class Anritsu_MS2830A():
    ######################################

    def set_zoom_spot_marker(self,number = 1,type = "SPOT"):
        '''
        """
        sets the zoom spot
        '''
        """
        self._visainstrument.write('CALC:MARK:WIDT:TYPE %i,%s'%(number,type))

    def set_marker(self,marker,frequency):
        '''
        """
        sets marker number marker to frequency
        
        '''
        """
        self._visainstrument.write('calc:mark%i:x %e'%(marker, frequency))
        self.enable_marker(marker)
    
    def get_marker(self,marker):
        '''
        """
        gets frequency of marker
        
        '''
        """
        return float(self._visainstrument.query('calc:mark%i:x?'%(marker)))
    
    def get_marker_level(self,marker):
        '''
        """
        gets power level of indicated marker
        
        '''
        """
        return float(self._visainstrument.query('calc:mark%i:y?'%(marker)))

    def enable_marker(self,marker,state='ON'):
        '''
        """
        marker: ON or OFF
        '''
        """
        self._visainstrument.write('CALC:MARK%i %s'%(marker,state))           

    ######################################
@@ -261,31 +261,31 @@ class Anritsu_MS2830A():
    ######################################  

    def set_amplitude_scale(self, scale):
        '''
        """
        sets amplitude scale (log)
        
        '''
        """
        self._visainstrument.write('LOGSCALEDIV %i' %(scale))

    def get_amplitude_scale(self):
        '''
        """
        gets amplitude scale
        
        '''
        """
        return self._visainstrument.query('LOGSCALEDIV?')

    def set_reference_level(self, db):
        '''
        """
        sets reference level
        
        '''
        """
        self._visainstrument.write('RLV %iDBM' %(db))

    def get_reference_level(self):
        '''
        """
        gets reference level
        
        '''
        """
        return self._visainstrument.query('RLV?')

    ######################################
@@ -303,10 +303,10 @@ class Anritsu_MS2830A():
        return trace
    
    def get_frequencies(self):
        '''
        """
        returns an array with the frequencies of the points returned by get_trace()
        ideally suitable as x-axis for plots
        '''
        """
        return np.linspace(self.get_startfreq(),self.get_stopfreq(),self.set_trace_points_sweeptime())

    def get_storagemode(self):
+35 −0
Original line number Diff line number Diff line
@@ -7,6 +7,11 @@ import json
from math import log10


"""
Python module that contains utily functions for the Anritsu MS2830A Signal Source Analyzer and measurements
    
"""
  
def set_SPA_for_measure(ms2830a, config_file, manual_command):
        """
        This method allows to set the Anritsu MS2830A for the measurements
@@ -50,7 +55,10 @@ def set_SPA_for_measure(ms2830a, config_file, manual_command):
        return log_list

def plot_lineplot(trace):
        """
        Plot trace retrieved from Anritsu MS2830A Signal Source Analyzer
        
        """
        x = np.arange(len(trace)) # x axis
        dataset = pd.DataFrame({"points": x , "dbM": trace})

@@ -60,16 +68,28 @@ def plot_lineplot(trace):


def save_data_as_csv(trace):
        """
        Utility function for saving data in csv extension
        
        """
        dataset = pd.DataFrame(trace)
        dataset.to_csv("../data/measure-" + str(datetime.datetime.now()) + ".csv")

def read_config_file(filename):
        """
        Utility function for reading configuration file (JSON)
        
        """
        data = []
        with open(filename, 'r') as file:
                data = file.read()
        return json.loads(data)

def write_config_file(filename, confDict):
        """
        Utility function for writing configuration file (JSON)
        
        """
        json_obj = json.dumps(confDict, indent=4)
        with open(filename, 'w') as file:
                file.write(json_obj)
@@ -81,22 +101,29 @@ def write_config_file(filename, confDict):
def W2dBm(W):
    """
    Function to convert from W to dBm
    
    """
    return 10. * log10(W) + 30

def dBm2W(dBm):
    """
    Function to convert from dBm to W
    
    """
    return 10**((dBm)/10.) / 1000

def getWatts(dBm):
    """
    Function to return a list of watts values
    
    """
    return map(dBm2W, dBm)

def getCalculus(traces):
    """
    Function that returns useful calculus from trace data
    
    """
    dMeasure = traces[4] - traces[0]
    drMeasure = traces[4] / traces[0]

@@ -112,6 +139,10 @@ def getCalculus(traces):
############################

def clear_message(self, trace_number):
        """
        UI function

        """
        if(trace_number == 0):
                self.Message1.configure(background="green", font=("Helvetica",24))
        elif(trace_number == 1):
@@ -128,6 +159,10 @@ def clear_message(self, trace_number):
                self.Message5.configure(background="green", font=("Helvetica",24))

def clear_background(self):
        """
        UI function
        
        """
        self.Message1.configure(background="#d9d9d9", font=("Helvetica", 10))
        self.Message2.configure(background="#d9d9d9", font=("Helvetica", 10))
        self.Message3.configure(background="#d9d9d9", font=("Helvetica", 10))

src/asd.csv

0 → 100644
+5002 −0

File added.

Preview size limit exceeded, changes collapsed.

+3 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@

import sys
from tkinter import Radiobutton
from tkinter.constants import DISABLED
from typing import Text
from matplotlib.pyplot import text

@@ -105,6 +106,8 @@ class UserInterface:
        configuration_tab.configuration(self, self.TNotebook1, config_interface, config_file)
        measure_tab.measure(self,self.TNotebook1)
        
        self.TNotebook1.tab(2, state=DISABLED)

if __name__ == '__main__':
    vp_start_gui()

+35 −21
Original line number Diff line number Diff line
from logging import disable
from tkinter import Tk
from tkinter.constants import DISABLED
from tkinter.font import NORMAL
import Anritsu_MS2830A as SPA
import Utils
import logging
@@ -27,10 +29,14 @@ def configuration(self, TNotebook1, config_interface, config_file):
    h_text = 0.029
    w_text = 0.291

    y_button = 0.739
    y_button = 0.749
    h_button = 40
    w_button = 150
    
    # fonts
    font_label = ("Arial",10)
    font_title = ("Arial",12)

    ##################################
    # 	          TAB 2	        	 #
    ##################################
@@ -39,49 +45,53 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.TNotebook1.add(self.TNotebook1_t2, padding=3)
    self.TNotebook1.tab(1, text="Configuration",compound="left",underline="-1",)

    self.LabelTitleConfig = tk.Label(self.TNotebook1_t2)
    self.LabelTitleConfig.place(relx=0.005, rely=0.014, height=h_label, width=w_label)
    self.LabelTitleConfig.configure(text='''Configuration''', font=font_title)

    self.Label1 = tk.Label(self.TNotebook1_t2)
    self.Label1.place(relx=x_label, rely=0.042, height=h_label, width=w_label)
    self.Label1.place(relx=x_label, rely=0.052, height=h_label, width=w_label)
    self.Label1.configure(text='''Start frequency''')

    self.Label2 = tk.Label(self.TNotebook1_t2)
    self.Label2.place(relx=x_label, rely=0.113, height=h_label, width=w_label)
    self.Label2.place(relx=x_label, rely=0.123, height=h_label, width=w_label)
    self.Label2.configure(text='''Stop Frequency''')

    self.Label3 = tk.Label(self.TNotebook1_t2)
    self.Label3.place(relx=x_label, rely=0.184, height=h_label, width=w_label)
    self.Label3.place(relx=x_label, rely=0.194, height=h_label, width=w_label)
    self.Label3.configure(text='''Sweep Trace Points''')

    self.Label4 = tk.Label(self.TNotebook1_t2)
    self.Label4.place(relx=x_label, rely=0.255, height=h_label, width=w_label)
    self.Label4.place(relx=x_label, rely=0.265, height=h_label, width=w_label)
    self.Label4.configure(text='''Resolution Bandwith''')

    self.Label5 = tk.Label(self.TNotebook1_t2)
    self.Label5.place(relx=x_label, rely=0.326, height=h_label, width=w_label)
    self.Label5.place(relx=x_label, rely=0.336, height=h_label, width=w_label)
    self.Label5.configure(text='''Video Bandwith''')

    self.Label6 = tk.Label(self.TNotebook1_t2)
    self.Label6.place(relx=x_label, rely=0.397, height=h_label, width=w_label)
    self.Label6.place(relx=x_label, rely=0.407, height=h_label, width=w_label)
    self.Label6.configure(text='''Amplitude log scale''')

    self.Label7 = tk.Label(self.TNotebook1_t2)
    self.Label7.place(relx=x_label, rely=0.468, height=h_label, width=w_label)
    self.Label7.place(relx=x_label, rely=0.478, height=h_label, width=w_label)
    self.Label7.configure(text='''Reference Level''')

    self.Label8 = tk.Label(self.TNotebook1_t2)
    self.Label8.place(relx=x_label, rely=0.539, height=h_label, width=w_label)
    self.Label8.place(relx=x_label, rely=0.549, height=h_label, width=w_label)
    self.Label8.configure(text='''Zoom Spot Marker number''')
    
    self.Label9 = tk.Label(self.TNotebook1_t2)
    self.Label9.place(relx=x_label, rely=0.61, height=h_label, width=w_label)
    self.Label9.place(relx=x_label, rely=0.62, height=h_label, width=w_label)
    self.Label9.configure(text='''Zoom Spot Marker type''')

    self.Label10 = tk.Label(self.TNotebook1_t2)
    self.Label10.place(relx=x_label, rely=0.681, height=h_label, width=w_label)
    self.Label10.place(relx=x_label, rely=0.691, height=h_label, width=w_label)
    self.Label10.configure(text='''Manual commands''')

    # entry
    self.Entry1 = tk.Entry(self.TNotebook1_t2)
    self.Entry1.place(relx=x_text, rely=0.042, relheight=h_text, relwidth=w_text)
    self.Entry1.place(relx=x_text, rely=0.052, relheight=h_text, relwidth=w_text)
    self.Entry1.configure(background="white")
    self.Entry1.configure(font="TkTextFont")
    self.Entry1.configure(selectbackground="blue")
@@ -89,7 +99,7 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.Entry1.insert(0, config_file["start_freq"])

    self.Entry2 = tk.Entry(self.TNotebook1_t2)
    self.Entry2.place(relx=x_text, rely=0.113, relheight=h_text, relwidth=w_text)
    self.Entry2.place(relx=x_text, rely=0.123, relheight=h_text, relwidth=w_text)
    self.Entry2.configure(background="white")
    self.Entry2.configure(font="TkTextFont")
    self.Entry2.configure(selectbackground="blue")
@@ -97,7 +107,7 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.Entry2.insert(0, config_file["stop_freq"])

    self.Entry3 = tk.Entry(self.TNotebook1_t2)
    self.Entry3.place(relx=x_text, rely=0.184, relheight=h_text, relwidth=w_text)
    self.Entry3.place(relx=x_text, rely=0.194, relheight=h_text, relwidth=w_text)
    self.Entry3.configure(background="white")
    self.Entry3.configure(font="TkTextFont")
    self.Entry3.configure(selectbackground="blue")
@@ -105,7 +115,7 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.Entry3.insert(0, config_file["sweep_trace_points"])

    self.Entry4 = tk.Entry(self.TNotebook1_t2)
    self.Entry4.place(relx=x_text, rely=0.255, relheight=h_text, relwidth=w_text)
    self.Entry4.place(relx=x_text, rely=0.265, relheight=h_text, relwidth=w_text)
    self.Entry4.configure(background="white")
    self.Entry4.configure(font="TkTextFont")
    self.Entry4.configure(selectbackground="blue")
@@ -113,7 +123,7 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.Entry4.insert(0, config_file["resolution_bandwith"])

    self.Entry5 = tk.Entry(self.TNotebook1_t2)
    self.Entry5.place(relx=x_text, rely=0.326, relheight=h_text, relwidth=w_text)
    self.Entry5.place(relx=x_text, rely=0.336, relheight=h_text, relwidth=w_text)
    self.Entry5.configure(background="white")
    self.Entry5.configure(font="TkTextFont")
    self.Entry5.configure(selectbackground="blue")
@@ -121,7 +131,7 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.Entry5.insert(0, config_file["video_bandwith"])

    self.Entry6 = tk.Entry(self.TNotebook1_t2)
    self.Entry6.place(relx=x_text, rely=0.397, relheight=h_text, relwidth=w_text)
    self.Entry6.place(relx=x_text, rely=0.407, relheight=h_text, relwidth=w_text)
    self.Entry6.configure(background="white")
    self.Entry6.configure(font="TkTextFont")
    self.Entry6.configure(selectbackground="blue")
@@ -129,7 +139,7 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.Entry6.insert(0, config_file["amplitude_log_scale"])

    self.Entry7 = tk.Entry(self.TNotebook1_t2)
    self.Entry7.place(relx=x_text, rely=0.468, relheight=h_text, relwidth=w_text)
    self.Entry7.place(relx=x_text, rely=0.478, relheight=h_text, relwidth=w_text)
    self.Entry7.configure(background="white")
    self.Entry7.configure(font="TkTextFont")
    self.Entry7.configure(selectbackground="blue")
@@ -137,7 +147,7 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.Entry7.insert(0, config_file["reference_level"])

    self.Entry8 = tk.Entry(self.TNotebook1_t2)
    self.Entry8.place(relx=x_text, rely=0.539, relheight=h_text, relwidth=w_text)
    self.Entry8.place(relx=x_text, rely=0.549, relheight=h_text, relwidth=w_text)
    self.Entry8.configure(background="white")
    self.Entry8.configure(font="TkTextFont")
    self.Entry8.configure(selectbackground="blue")
@@ -145,7 +155,7 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.Entry8.insert(0, config_file["zoom_spot_marker"][0])

    self.Entry9 = tk.Entry(self.TNotebook1_t2)
    self.Entry9.place(relx=x_text, rely=0.61, relheight=h_text, relwidth=w_text)
    self.Entry9.place(relx=x_text, rely=0.62, relheight=h_text, relwidth=w_text)
    self.Entry9.configure(background="white")
    self.Entry9.configure(font="TkTextFont")
    self.Entry9.configure(selectbackground="blue")
@@ -153,7 +163,7 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.Entry9.insert(0, config_file["zoom_spot_marker"][1])

    self.Entry10 = tk.Entry(self.TNotebook1_t2)
    self.Entry10.place(relx=x_text, rely=0.681, relheight=h_text, relwidth=w_text)
    self.Entry10.place(relx=x_text, rely=0.691, relheight=h_text, relwidth=w_text)
    self.Entry10.configure(background="white")
    self.Entry10.configure(font="TkTextFont")
    self.Entry10.configure(selectbackground="blue")
@@ -202,6 +212,9 @@ def configuration(self, TNotebook1, config_interface, config_file):
            self.Text1.insert(tk.END, "\nConfiguration\n")
            for log in log_list:
                self.Text1.insert(tk.END, "\t" + log + "\n")
            
            self.TNotebook1.tab(2, state=NORMAL)
            self.Button3.config(state=NORMAL)
        except:
            self.Text1.insert(tk.END, "\nConnection problem\n")

@@ -222,4 +235,5 @@ def configuration(self, TNotebook1, config_interface, config_file):
    self.Button3.place(relx=0.665, rely=y_button, height=h_button, width=w_button)
    self.Button3.configure(command=plot_data)
    self.Button3.configure(borderwidth="2")
    self.Button3.configure(state=DISABLED)
    self.Button3.configure(text='''Plot data''')
Loading