# -*- coding: utf-8 -*-
"""
Created on Mon Dec 13 10:40:31 2021
@author: Martin.Mihaylov
"""
import numpy as np
import pyvisa as visa
[docs]
class MS4647B:
'''
This function is using pyvisa to connect to Instruments. Please install PyVisa before using it.
'''
def __init__(self, resource_str):
'''
Connect to Device and print the Identification Number.
'''
self._resource = visa.ResourceManager('@py').open_resource(resource_str)
print(self._resource.query('*IDN?'))
[docs]
def query(self, message):
return self._resource.query(message)
[docs]
def write(self, message):
return self._resource.write(message)
[docs]
def Close(self):
print('Instrument Anritsu MS4647B is closed!')
return self._resource.close()
# =============================================================================
# Get the instrument Serial Number and Model
# =============================================================================
[docs]
def getIdn(self):
'''
Returns
-------
TYPE str
Device Serial Number and Model
'''
return self.query("*IDN?").split('\n')[0]
# =============================================================================
# Return to local
# =============================================================================
[docs]
def RTL(self):
'''
Returns
-------
None.
Description: Send all devices to local operation. No query
'''
self.write('RTL')
# =============================================================================
# Ask
# =============================================================================
[docs]
def ask_SubSystem(self):
'''
Returns
-------
TYPE str
The :SENSe:HOLD subsystem command sets the hold function for all
channels on a per-instrument basis
'''
return self.query(':SENSe:HOLD:FUNCtion?').split('\n')[0]
[docs]
def ask_SweepCount(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
TYPE
Description: Query only. Outputs the averaging sweep count for the
indicated channel.
'''
if type(ChanNumber) == int:
return float(self.query(':SENS'+str(ChanNumber)+':AVER:SWE?').split('\n')[0])
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_TestSet(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
TYPE
Query State of TS3739.
'''
if type(ChanNumber) == int:
return self.query(':SENS'+str(ChanNumber)+':TS3739:STATe?').split('\n')[0]
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_SysErrors(self):
'''
Returns
-------
TYPE
Description: Query only. Outputs the number of errors in the error queue.
'''
return self.query(':SYST:ERR:COUN?').split('\n')[0]
[docs]
def ask_StatOperation(self):
'''
Returns
-------
TYPE
Description: Query only. Outputs the value of the operation status
condition reg.
Range: 0 to 32767
Default Value: 0
'''
return self.query(':STAT:OPER:COND?').split('\n')[0]
[docs]
def ask_StatOperationRegister(self):
'''
Returns
-------
TYPE str
Sets the value of the operation status enable register.
Outputs the value of the operation status enable register.
'''
return self.query(':STATus:OPERation:ENABle?').split('\n')[0]
[docs]
def ask_FreqSpan(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
TYPE : float
Optional query. Span is automatically calculated as Stop Frequency minus
Start Frequency. The query returns the resulting span in Hertz.
'''
if type(ChanNumber) == int:
return float(self.query(':SENSe'+str(ChanNumber)+':FREQuency:SPAN?').split('\n')[0])
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_CenterFreq(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
TYPE : float
Optional query. Center frequency is automatically calculated using Stop Frequency and Start
Frequency as:
Fc = ((Fstop - Fstart)/2) + Fstart
'''
if type(ChanNumber) == int:
return float(self.query(':SENSe'+str(ChanNumber)+':FREQuency:CENTer?').split('\n')[0])
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_CWFreq(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
TYPE : float
Sets the CW frequency of the indicated channel. Outputs the CW
frequency of the indicated channel.
The output parameter is in Hertz.
'''
if type(ChanNumber) == int:
return float(self.query(':SENS'+str(ChanNumber)+':FREQ:CW?').split('\n')[0])
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_DataFreq(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
TYPE : str
Outputs the frequency list for the indicated channel
'''
if type(ChanNumber) == int:
return self.query(':SENSe'+str(ChanNumber)+':FREQuency:DATA?').split('\n')[0]
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_SweepChannelStatus(self):
'''
Returns
-------
TYPE : str
The query outputs the On/Off state of the option to sweep only the active
channel
'''
return self.query(':DISP:ACT:CHAN:SWE:STAT?').split('\n')[0]
[docs]
def ask_AssignetDataPort(self,value):
'''
Parameters
----------
value : int/float
the N(ports number) for the .sNp data output.
Raises
------
ValueError
Error message
Returns
-------
TYPE : str
Outputs the data port pair assigned to use when creating an sNp data
file on the indicated channel.
'''
value = str(value)
if value in ['1','2','3','4']:
return self.query('FORMat:S'+str(value)+'P:PORT?').split('\n')[0]
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_RFState(self):
'''
Returns
-------
TYPE : str
Outputs the RF on/off state in Hold
'''
return self.query(':SYST:HOLD:RF?').split('\n')[0]
[docs]
def ask_SetAverageState(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
TYPE : str
Outputs the averaging function on/off status on the indicated channel.
'''
if type(ChanNumber) == int:
return self.query(':SENS'+str(ChanNumber)+':AVER?').split('\n')[0]
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_AverageFunctionType(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
TYPE : str
Outputs the averaging function type of point-by-point or sweep-by-sweep.
'''
if type(ChanNumber) == int:
return self.query(':SENS'+str(ChanNumber)+':AVER:TYP?').split('\n')[0]
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_AverageCount(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
TYPE : float
Outputs the averaging count for the indicated channel.
'''
if type(ChanNumber) == int:
return float(self.query(':SENS'+str(ChanNumber)+':AVER:COUN?').split('\n')[0])
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_TransferData(self,name,portNumb):
'''
Parameters
----------
name : str
File Name
portNumb : int
the N(ports number) for the .sNp data output.
Returns
-------
TYPE : str
The query outputs the disk file data to the
GPIB. The file must exist
Hard coded path on the VNA = 'C:/tmp/'
'''
path = 'C:/tmp/'
path = str(path) + str(name)+'_.s' + str(portNumb) + 'p'
return self.query(':MMEM:TRAN? '+'"' + path + '"')
[docs]
def ask_TransferDataCSV(self,name):
'''
Parameters
----------
name : str
File Name
Returns
-------
TYPE : str
The query outputs the disk file data to the
GPIB. The file must exist
Hard coded path on the VNA = 'C:/tmp/'
'''
path = 'C:/tmp/'
path = str(path) + str(name)+'_.csv'
return self.query(':MMEM:TRAN? '+'"' + path + '"')
[docs]
def ask_ResolutionBW(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Returns
-------
TYPE : float
The command sets the IF bandwidth for the indicated channel. The query outputs the IF
bandwidth for the indicated channel.
'''
return float(self.query(':SENS'+str(ChanNumber)+':BAND?').split('\n')[0])
[docs]
def ask_PowerOnPort(self,segment,ChanNumber):
'''
Parameters
----------
segment : int
Selected Source. Can be from 1-16
ChanNumber : int
Channel Number 1,2,3...
Returns
-------
Value: float
Outputs the power level of the indicated port on the indicated channel.
'''
stSegment = np.arange(1,17,1)
stChanNumber = np.arange(1,5,1)
if segment in stSegment and ChanNumber in stChanNumber:
return float(self.query(':SOUR'+str(segment)+':POW:PORT'+str(ChanNumber)+'?').split('\n')[0])
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def ask_SmoothingState(self, ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Returns
-------
TYPE
Query outputs the smoothing on/off status for the indicated channel and active trace.
1 = ON
2 = OFF
'''
return float(self.query(':CALC'+str(ChanNumber)+':SMO?').split('\n')[0])
[docs]
def ask_DisplayTrace(self):
'''
Returns
-------
TYPE
Query only. Outputs the Active Channel number.
'''
return self.query(':DISPlay:WINDow:ACTivate?')
[docs]
def ask_DisplayCount(self):
'''
Returns
-------
TYPE
Query the number of displayed channels.
'''
return float(self.query(':DISP:COUN?').split('\n')[0])
[docs]
def ask_DisplayTitle(self):
'''
Returns
-------
TYPE
Outputs the user title for the channel
indicated
'''
return self.query(':DISP:WIND1:TITL?')
[docs]
def ask_SelectParameter(self):
'''
Returns
-------
The query outputs only the selected parameter.
'''
return self.query(':CALC1:PAR1:DEF?').split('\n')[0]
[docs]
def ask_SweepDelay(self):
'''
Returns
-------
Outputs the sweep delay time of the indicated channel.
'''
return self.query(':SENS1:SWE:DEL?')
[docs]
def ask_SweepTime(self):
'''
Returns
-------
Outputs the Sweep Time of the indicated channel.
'''
return float(self.query(':SENS1:SWE:TIM?'))
# =============================================================================
# Set
# =============================================================================
[docs]
def set_ClearAverage(self,ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Description: Clears and restarts the averaging sweep count of the
indicated channel.
Raises
------
ValueError
Error message
Returns
-------
None.
'''
if type(ChanNumber) == int:
self.write(':SENS'+str(ChanNumber)+':AVER:CLE')
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_SubSystemHold(self):
'''
Returns
-------
None.
Sets the hold function for all channels on a per-instrument basis.
The sweep is stopped.
'''
self.write(':SENS:HOLD:FUNC HOLD')
[docs]
def set_SubSystemSing(self):
'''
Returns
-------
None.
The sweep restarts and sweeps until the end of the
sweep, at which point it sets the end of sweep status bit and
stops.
'''
self.write(':SENS:HOLD:FUNC SING')
[docs]
def set_SubSystemCont(self):
'''
Returns
-------
None.
The sweep is sweeping continuously
'''
self.write(':SENS:HOLD:FUNC CONT')
[docs]
def set_DisplayScale(self):
'''
Returns
-------
None.
Description: Auto scales all traces on all channels.
'''
self.write(':DISPlay:Y:AUTO')
[docs]
def set_TS3739(self,ChanNumber,state):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
state : str/int
The :SENSe{1-16}:TS3739 subsystem commands are used to configure and
control the VectorStar ME7838x Broadband/Millimeter-Wave 3738A Test Set.
Raises
------
ValueError
Error message
Returns
-------
None.
'''
if type(ChanNumber) == int:
if state in ['ON','OFF',1,0]:
self.write(':SENS'+str(ChanNumber)+':TS3739 '+ str(state))
else:
raise ValueError('Unknown input! See function description for more info.')
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_ClearError(self):
'''
Returns
-------
None.
Description: Clears the contents of the error queue.
'''
self.write(':SYST:ERR:CLE')
[docs]
def set_DisplayColorReset(self):
'''
Returns
-------
None.
Resets all colors and inverted colors to their normal default values.
'''
self.write(':DISP:COL:RES')
[docs]
def set_StatOperationRegister(self,value):
'''
Parameters
----------
value : TYPE
Sets the value of the operation status enable register.
Outputs the value of the operation status enable register.
The input parameter is a unitless number.
Range: 0 to 65535
Returns
-------
None.
'''
value = int(value)
self.write(':STAT:OPER:ENAB '+str(value))
[docs]
def set_StartFreq(self,ChanNumber,value):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
value : int/str in form - 10E+9
Sets the start value of the sweep range of the indicated channel.
The input parameter is in Hertz, Meters, or Seconds.
Raises
------
ValueError
Error message
Returns
-------
None.
'''
if type(ChanNumber) == int:
self.write(':SENSe'+str(ChanNumber)+':FREQuency:STARt '+str(value))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_StopFreq(self,ChanNumber,value):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
value : int/str in form - 10E+9
Sets the stop value of the sweep range of the indicated channel.
The input parameter is in Hertz, Meters, or Seconds.
Raises
------
ValueError
Error message
Returns
-------
None.
'''
if type(ChanNumber) == int:
self.write(':SENSe'+str(ChanNumber)+':FREQuency:STOP '+str(value))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_CenterFreq(self,ChanNumber,value):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
value : int/str in form - 10E+9
Sets the center value of the sweep range of the indicated channel.
Outputs the center value of the sweep range of the indicated channel
Raises
------
ValueError
Error message
Returns
-------
None.
'''
if type(ChanNumber) == int:
self.write(':SENS'+str(ChanNumber)+':FREQ:CENT '+str(value))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_CWFreq(self,ChanNumber,value):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
value : int/str in form - 10E+9
Sets the CW frequency of the indicated channel. Outputs the CW
frequency of the indicated channel.
Raises
------
ValueError
Error message
Returns
-------
None.
'''
if type(ChanNumber) == int:
self.write(':SENS'+str(ChanNumber)+':FREQ:CW '+str(value))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_SweepChannelStatus(self,state):
'''
Parameters
----------
state : str/int
The command turns On/Off the option to sweep only the active channel
Raises
------
ValueError
Error message
Returns
-------
None.
'''
if state in ['ON','OFF',1,0]:
self.write(':DISP:ACT:CHAN:SWE:STAT '+ str(state))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_AssignetDataPort(self,ChanNumber,value1,value2):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
value1 : int
value2 : int
The command assigns the data port pair to use when creating an sNp
data file on the indicated channel. The use of Port 3 and/or Port 4
requires a 4-port VNA instrument
PORT12 | PORT13 | PORT14 | PORT23 | PORT24 | PORT34
Raises
------
ValueError
Error message
Returns
-------
None.
'''
value1 = str(value1)
value2 = str(value2)
if type(ChanNumber) == int:
if value1 in ['1','2','3','4']:
self.write(':CALC'+str(ChanNumber)+':FORM:S'+str(value1)+'P:PORT PORT'+str(value1)+str(value2))
else:
raise ValueError('Unknown input! See function description for more info.')
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_RFState(self,state):
'''
Parameters
----------
state : str/int
Sets the RF on/off state in Hold.
Raises
------
ValueError
Error message
Returns
-------
None.
'''
if state in ['ON','OFF',1,0]:
self.write(':SYST:HOLD:RF '+ str(state))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_SetAverageState(self,ChanNumber,state):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
state : int/str
Turns averaging on/off for the indicated channel (Turns on and Off the averaging for all channels).
Raises
------
ValueError
Error message
Returns
-------
None.
'''
if type(ChanNumber) == int:
if state in ['ON','OFF',1,0]:
self.write(':SENS'+str(ChanNumber)+':AVER '+ str(state))
else:
raise ValueError('Unknown input! See function description for more info.')
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_AverageFunctionType(self,ChanNumber,state):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
state : str
Sets the averaging function type to point-by-point or sweep-by-sweep.
POIN | SWE
Default Value: POIN
Raises
------
ValueError
Error message
Returns
-------
None.
'''
if type(ChanNumber) == int:
if state in ['SWE','POIN']:
self.write(':SENS'+str(ChanNumber)+':AVER:TYP '+ str(state))
else:
raise ValueError('Unknown input! See function description for more info.')
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_AverageCount(self,ChanNumber,value):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
value : int
Sets the averaging count for the indicated channel. The channel must
be turned on.
The input parameter is a unitless number.
Range: 1 to 1024
Default Value: 1
Raises
------
ValueError
Error message
Returns
-------
None.
'''
value = str(value)
if type(ChanNumber) == int:
self.write(':SENS'+str(ChanNumber)+':AVER:COUN '+str(value))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_ResolutionBW(self,ChanNumber,value):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
value : int/floa/str
The command sets the IF bandwidth for the indicated channel. The query outputs the IF
bandwidth for the indicated channel.
Raises
------
ValueError
Error message
Returns
-------
None.
'''
value = str(value)
if type(ChanNumber) == int:
self.write(':SENS'+str(ChanNumber)+':BAND '+str(value))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_PowerOnPort(self,segment,ChanNumber,value):
'''
Parameters
----------
segment : int
Selected Source. Can be from 1-16
ChanNumber : int
Channel Number 1,2,3...
value : int/floa/str
Sets the power level of the indicated port on the indicated channel.
Raises
------
ValueError
Error message
Returns
-------
None.
'''
stSegment = np.arange(1,17,1)
stChanNumber = np.arange(1,5,1)
if segment in stSegment and ChanNumber in stChanNumber:
self.write(':SOUR'+str(segment)+':POW:PORT'+str(ChanNumber)+' '+str(value))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_SmoothingState(self, ChanNumber, state):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
state : str/int
can be int or str form the list ['ON','OFF',1,0]
Raises
------
ValueError
Error message
Returns
-------
The command sets the smoothing aperture for the indicated channel and active trace.
'''
if type(ChanNumber) == int:
if state in ['ON','OFF',1,0]:
self.write(':CALC'+str(ChanNumber)+':SMO '+ str(state))
else:
raise ValueError('Unknown input! See function description for more info.')
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_SmoothingAPERture(self, ChanNumber, value):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
value : int
Percentage smoothing between 0 to 100
Raises
------
ValueError
Error message
Returns
-------
The command sets the smoothing aperture for the indicated channel and active trace.
'''
if type(ChanNumber) == int:
self.write(':CALC'+str(ChanNumber)+'SMO:APER '+ str(float(value)))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_DisplayTrace(self, ChanNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
The command sets the active channel to the indicated number. When the VNA is set to
100,000 point mode, the number of channels is
'''
if type(ChanNumber) == int:
self.write(':DISP:WIND'+str(ChanNumber)+ ':ACT')
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_DisplayCount(self,ChannelNumber):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
None: Sets the number of displayed channels. When the VNA is in 25,000 point mode, the
number of channels can only be 1 (one), 2, 3, 4, 6, 8, 9, 10, 12, or 16 channels. If the
channel display is set to a non-listed number (5, 7, 11, 13, 14, 15), the instrument is set to
the next higher channel number. If a number of greater than 16 is entered, the
instrument is set to 16 channels. If the instrument is set to 100,000 points, any input
results in 1 (one) channel. Outputs the number of displayed channels.
'''
if type(ChannelNumber) == int:
self.write(':DISP:COUN ' + str(ChannelNumber))
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_DisplayTitle(self, ChannelName):
'''
Parameters
----------
ChanNumber : int
Channel Number 1,2,3...
Raises
------
ValueError
Error message
Returns
-------
None: Sets the user title for the channel indicated.
'''
if type(ChannelName) == str:
self.write(':DISP:WIND1:TITL ' + ChannelName)
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_SelectParameter(self, S_Param):
'''
Parameters
----------
S_Param : str
S-Parameter selected.
Raises
------
ValueError
Error message
Returns
-------
None: Select an S-Parameter. 16 S-Parameters for 4 Ports config can be selected.
'''
S_Paramls = ['S11','S12','S13','S14','S21','S22','S23','S24','S31','S32','S33','S34','S41','S42','S43','S44']
if type(S_Param) == str:
if S_Param in S_Paramls:
self.write(':CALC1:PAR1:DEF ' + S_Param)
else:
raise ValueError('Unknown input! See function description for more info.')
else:
raise ValueError('Unknown input! See function description for more info.')
[docs]
def set_SweepDelay(self, time):
'''
Parameters
----------
time : float
Sets the sweep delay time of the indicated channel.
Returns
-------
None.
'''
self.write(':SENS1:SWE:DEL ' + str(time))
[docs]
def set_SweepTime(self, time):
'''
Parameters
----------
time : float
Sets the Sweep Time of the indicated channel.
Returns
-------
None.
'''
self.write(':SENS1:SWE:TIM ' + str(time))
# =============================================================================
# Save
# =============================================================================
[docs]
def SaveData(self,name,portNumb):
'''
Parameters
----------
name : str
File Name
portNumb : TYPE
The N(ports number) for the .sNp data output.
Description: Stores a data file of the type specified by the filename
extension.No query.
Hard coded path on the VNA = 'C:/tmp/'
Returns
-------
None.
'''
path = 'C:/tmp/'
path = str(path) +str(name) +'_.s' + str(portNumb) + 'p'
self.write(':MMEM:STOR '+'"' + path + '"')
[docs]
def SaveDataCSV(self,name):
'''
Parameters
----------
name : str
File Name
portNumb : TYPE
The N(ports number) for the .sNp data output.
Description: Stores a data file of the type specified by the filename
extension.No query.
Hard coded path on the VNA = 'C:/tmp/'
Returns
-------
None.
'''
path = 'C:/tmp/'
path = str(path) +str(name) +'_.csv'
self.write(':MMEM:STOR '+'"' + path + '"')
[docs]
def SaveImage(self,name):
'''
Parameters
----------
name : str
File Name
portNumb : TYPE
The N(ports number) for the .sNp data output.
Description: Stores a data file of the type specified by the filename
extension.No query.
Hard coded path on the VNA = 'C:/tmp/'
Returns
-------
None.
'''
path = 'C:/tmp/Image/'
path = str(path) +str(name) +'_.png'
self.write(':MMEMory:STORe:IMAGe '+'"' + path + '"')
[docs]
def DeleteData(self,name,portNumb):
'''
Parameters
----------
name : str
File Name
portNumb : TYPE
The N(ports number) for the .sNp data output.
Delete a disk, file, or directory. Use caution with this command as there is no recovery
operation in case of a user mistake or error. No query
Hard coded path on the VNA = 'C:/tmp/'
Returns
-------
None.
'''
path = 'C:/tmp/'
path = str(path) +str(name) +'_.s' + str(portNumb) + 'p'
self.write(':MMEMory:DEL ' + '"' + path + '"')
[docs]
def DeleteDataCSV(self,name):
'''
Parameters
----------
name : str
File Name
portNumb : TYPE
The N(ports number) for the .sNp data output.
Delete a disk, file, or directory. Use caution with this command as there is no recovery
operation in case of a user mistake or error. No query
Hard coded path on the VNA = 'C:/tmp/'
Returns
-------
None.
'''
path = 'C:/tmp/'
path = str(path) +str(name) +'_.csv'
self.write(':MMEMory:DEL ' + '"' + path + '"')
[docs]
def SaveTransferData(self,file,path,name,portNumb):
'''
Parameters
----------
file : str
File data extracted from function ask_TransferData
path : str
Where on the PC to save the data
name : str
Name of the File
portNumb : int/str
The N(ports number) for the .sNp data output.
Write a text File with the transferred data
Returns
-------
None.
'''
readinglines = file.splitlines()
with open(str(path) + '/'+str(name)+'.s'+str(portNumb)+'p', 'w') as f:
for line in readinglines:
f.write(line)
f.write('\n')
[docs]
def SaveTransferDataCSV(self,file,path,name):
'''
Parameters
----------
file : str
File data extracted from function ask_TransferData
path : str
Where on the PC to save the data
name : str
Name of the File
portNumb : int/str
The N(ports number) for the .sNp data output.
Write a text File with the transferred data
Returns
-------
None.
'''
readinglines = file.splitlines()
with open(str(path) + '/'+str(name)+'.csv', 'w') as f:
for line in readinglines:
f.write(line)
f.write('\n')