# -*- coding: utf-8 -*- """ Control de un osciloscopio Tektronix de la serie TBS1052B-EDU desde una PC via puerto USB. Ejemplo basico. Para mas informacion consultar el manual: "TBS1000-EDU Programmer Manual" que se encuentra en la pagina web de Tektronix y de la materia. """ import pyvisa as visa import time rm = visa.ResourceManager() instrumentos = rm.list_resources() print(instrumentos) # Esto lista todos los dispositivos disponibles, uno de los cuales # deberia ser "USB0::0x0699::0x0368::C017044::INSTR", donde los terminos # indican "puerto::marca::modelo::nro_de_serie" del instrumento. # Elijo el elemento que corresponde en instrumentos #Con ese nombre abro el vinculo con el osciloscopio osc=rm.open_resource(instrumentos[2]) #osc=rm.open_resource('USB0::0x0699::0x0363::C065093::INSTR') #with rm.open_resource(instrumentos[0]) as osc: # Ahora le pido al osciloscopio algo elemental: que se identifique. # Si da error, la comunicacion no esta correctamente establecida y carece # de sentido continuar ejecutando el resto del programa. print("IDN: " + osc.query('*IDN?')) # Pregunta la identificacion y la escribe la identificacion en la pantalla. # EJEMPLOS DE COMUNICACION # 1) PREGUNTAMOS el modo en que esta acoplando el canal 1 print("Acoplamiento: " + osc.query('CH1:COUPling?')) # 2) ESPECIFICAMOS que el acoplamiento del canal 1 (CH1) sea DC (CC en # castellano). osc.write('CH1:COUPling DC') # El canal queda acoplado en DC indepen- # dientemente del acoplamiento que tuviese # 3) ESPECIFICAMOS la magnitud a medir en la medición 1 #PREGUNTAMOS cual es el valor numerico de la medicion 1, #es el mismo valor que aparece en pantalla osc.write('HORizontal:MAIn:SCAle 0.1') osc.write('CH1:SCAle 0.2') osc.write('MEASU:MEAS1:SOURCE CH1') osc.write('MEASU:MEAS1:TYPE PK2pk') time.sleep(1) VppU=osc.query('MEASU:MEAS1:UNIts?') Vpp1=float(osc.query('MEASU:MEAS1:VAL?')) #print('CH1 Vpp= '+Vpp1+VppU) print(Vpp1) # 4) PREGUNTAMOS cual es el valor numerico de una medicion inmediata. #esta medición no apracere en pantalla, es más rápida osc.write('MEASU:IMMed:SOURCE CH1') osc.write('MEASU:IMMed:TYPe PERIOD') Periodo1=osc.query('MEASU:IMMed:VALue?') PeriodoUnit=osc.query('MEASU:IMMed:UNI?') #da como resultado un string print("Periodo CH1 = "+ Periodo1) print(PeriodoUnit) # 5) ESPECIFICAMOS que la fuente (SOURCE) de la medicion 3 sea el canal 2, # y que ademas, la medicion consista en el valor RMS. osc.write('MEASU:MEAS3:SOURCE CH1') osc.write('MEASU:MEAS3:TYPE CRMs') time.sleep(2) CRMS1=osc.query_ascii_values('MEASU:MEAS3:VAL?') #da como resultado una lista con números float print('Ch1 VRMS = '+str(CRMS1)) # input(' Apretar cualquier tecla para continuar ') # # 6) PREGUNTAMOS cual es el valor RMS inmediato del canal 1, este valor #lo toma en el momento de medir no lo muestra en pantalla osc.write('MEASUrement:IMMed:SOU CH1; TYPe CRMs') #osc.write('MEASUrement:IMMed:TYPe CRMs') VRMS=osc.query('MEASUrement:IMMed:VALue?;UNI?') print(VRMS) osc.write('MEASUREMENT:IMMED:SOURCE2?; TYPE PHAse') fase=osc.query('MEASUrement:IMMed:VALue?;UNI?') print(fase) osc.close() #cerramos la comunicación del(osc) #borramos el objeto