Keysight UXR Library parts

Keysightオシロスコープをご使用の方で参考になるかもしれないと思い作成しました。

'''python:UXR.py

    import pyvisa
    
    class KeysightUXR:
        def __init__(self, resource):
          
            Initialize the oscilloscope connection.
            :param resource: VISA resource string (e.g., 'TCPIP0::192.168.1.100::inst0::INSTR')
            self.rm = pyvisa.ResourceManager()
            self.scope = self.rm.open_resource(resource)
            self.scope.timeout = 5000  # Set timeout to 5 seconds
        
        def get_id(self):
            """ Get the oscilloscope ID. """
            return self.scope.query('*IDN?')
        
        def reset(self):
            """ Reset the oscilloscope. """
            self.scope.write('*RST')
        
        def autoscale(self):
            """ Perform autoscale on the oscilloscope. """
            self.scope.write(':AUToscale')
        
        def set_timebase(self, scale):
            """
            Set the timebase scale.
            :param scale: Timebase scale in seconds per division
            """
            self.scope.write(f':TIMebase:SCALe {scale}')
        
        def set_channel(self, channel, state=True):
            """
            Enable or disable a channel.
            :param channel: Channel number (1, 2, 3, ...)
            :param state: True to enable, False to disable
            """
            self.scope.write(f':CHANnel{channel}:DISPlay {int(state)}')
        
        def set_trigger(self, level):
            """
            Set the trigger level.
            :param level: Trigger level in volts
            """
            self.scope.write(f':TRIGger:LEVel {level}')
        
        def measure_voltage_peak_to_peak(self, channel):
            """
            Measure the peak-to-peak voltage of a channel.
            :param channel: Channel number
            """
            self.scope.write(f':MEASure:VPP CHAN{channel}')
            return self.scope.query(':MEASure:VPP?')
        
        def measure_frequency(self, channel):
            """
            Measure the frequency of a channel.
            :param channel: Channel number
            """
            self.scope.write(f':MEASure:FREQuency CHAN{channel}')
            return self.scope.query(':MEASure:FREQuency?')
        
        def get_waveform(self, channel):
            """
            Get waveform data from a specified channel.
            :param channel: Channel number
            """
            self.scope.write(f':WAVeform:SOURce CHAN{channel}')
            self.scope.write(':WAVeform:FORMat ASCII')
            return self.scope.query(':WAVeform:DATA?')
        
        def save_setup(self, filename):
            """
            Save oscilloscope setup to a file.
            :param filename: File name
            """
            self.scope.write(f':DISK:SAVE:SETup "{filename}"')
        
        def load_setup(self, filename):
            """
            Load oscilloscope setup from a file.
            :param filename: File name
            """
            self.scope.write(f':DISK:LOAD:SETup "{filename}"')
        
        def save_waveform(self, filename):
            """
            Save waveform data to a file.
            :param filename: File name
            """
            self.scope.write(f':DISK:SAVE:WAVeform "{filename}"')
        
        def load_waveform(self, filename):
            """
            Load waveform data from a file.
            :param filename: File name
            """
            self.scope.write(f':DISK:LOAD:WAVeform "{filename}"')
        
        def close(self):
            """ Close the oscilloscope connection. """
            self.scope.close()
            self.rm.close()
    
    # Example Usage
    if __name__ == "__main__":
        osc = KeysightUXR('TCPIP0::192.168.1.100::inst0::INSTR')
        print(osc.get_id())
        osc.autoscale()
        osc.set_timebase(0.001)
        osc.set_trigger(0.5)
        print(osc.measure_voltage_peak_to_peak(1))
        print(osc.measure_frequency(1))
        osc.save_setup('setup.stp')
        osc.load_setup('setup.stp')
        osc.save_waveform('waveform.wfm')
        osc.load_waveform('waveform.wfm')
        osc.close()
'''