A Demo on how to interface with an instrument#
First step#
create a resource manager object
create an instance for Keysight Instruments
import time
import numpy as np
import matplotlib.pyplot as plt
import visa
rm = visa.ResourceManager()
Second Step:#
Understand write and read functions with pyvisa
Understand query function with pyvisa
Understand SCPI command
tips for quickly check SCPI command (use EXFO manual as an example)
Connect to Laser Source#
## Open Connection
tls = rm.open_resource('GPIB0::20::INSTR')
tls.timeout = 10000
## Reset Laser
tls.write('*RST')
complete = tls.query('*OPC?')
## Query ID
tls.query('*IDN?')
Connect to Polarization Synthesizer#
## Open Connection
polsyn = rm.open_resource('GPIB0::10::INSTR')
polsyn.timeout = 10000
## Reset Power Meter
polsyn.write('*RST')
complete = polsyn.query('*OPC?')
##Query ID
polsyn.query('*IDN?')
Connect to Power Meter#
## Open Connection
mppm = rm.open_resource('GPIB0::10::INSTR')
mppm.timeout = 10000
## Reset Power Meter
mppm.write('*RST')
complete = mppm.query('*OPC?')
##Query ID
mppm.query('*IDN?')
Setup Laser Source#
tls_wave = '1550e-9'
tls_power = '-10'
tls_mod = 1
tls_mod_freq = 100e-3
## Setup Wavelength
tls.write('SOUR0:WAVE ' + tls_wave)
## Setup Power
tls.write('SOUR0:POW:UNIT 0')
tls.write('SOUR0:POW '+ tls_power)
## Setup Modulation
## Turn On Output Power
tls.write('OUTP0:STAT 1')
Setup Polarization Synthesizer - Scramble Polarization#
polsyn.write('PCON:SCR:ENAB 1')
Setup Power Meter#
mppm_wave = '1550e-9'
## Setup Wavelength
mppm.write('SENS1:POW:WAV ' + mppm_wave)
Query Single Channel Power - ASCII#
mppm.query('READ1:POW?')
Query All Channel Power - Binary Block#
mppm.query_binary_values('READ:POW:ALL?','f',False)
Setup Power Meter for Logging Operation#
mppm_points = '1000'
mppm_avg = '1ms'
## Stop Previous Logging
mppm.write('SENs1:FUNC:STAT LOGG,STOP')
## Manual Range Mode
mppm.write('SENS1:POW:RANGE:AUTO 0')
mppm.write('SENS1:POW:GAIN:AUTO 0')
## Set Range
mppm.write('SENS1:POW:RANG 10DBM')
## CME - Continuous Measurement Trigger Mode
mppm.write('TRIG1:INPUT CME')
## Setup Logging Points and Averaging Time
mppm.write('SENS1:FUNC:PAR:LOGG %s,%s'%(mppm_points,mppm_avg))
## Change Units to Watt
mppm.write('SENS1:POW:UNIT 1')
Start Logging, Trigger Measurement, Query for Logging Complete#
## Start Logging
mppm.write('SENS1:FUNC:STAT LOGG,STAR')
## Trigger Logging
mppm.write('TRIG 1')
## Query Logging Complete
while True:
progress = mppm.query('SENS1:FUNC:STATE?')
print ('Chan1: ' + progress)
time.sleep(1)
if 'COMPLETE' in progress:
break
Query Logging Power Measurements - Binary Block#
## Query Data
power = mppm.query_binary_values('SENS1:FUNC:RESULT?','f', False)
Stop Logging#
mppm.write('SENS1:FUNC:STAT LOGG,STOP')
Disable Polarization Scrambling#
polsyn.write('PCON:SCR:ENAB 0')
Plot Logging Data#
#Convert list to Array of Float to Plot Data
power_array = np.array(power)
#Plot Waveform
plt.plot(power_array)
plt.show()
Close Instruments#
mppm.close()
polsyn.close()
tls.close()