# Transfer ASCII data from oscilloscope to PC

This program demonstrates using the `:DISK:FILE:ASCii:READ?` query to transfer ASCII data from a file on the oscilloscope to the PC. The query takes the filename of the ASCII source file as the argument . The PyVISA `query()` method is used to return the data. The program then places the data in an ASCii file in the script's folder.

The program transfers the file's data and not the file. The program uses the same filename for the saved file on the PC, but any filename could have been used. To confirm that the data has been correctly transferred, simply open the file in a text editor.

Python strings use a newline character '\n' to indicate the end of a line and the newline character is automatically translated to '\r\n' when written to a text file. Since the returned data includes '\r\n' at the end of every line, these characters become '\r\r\n' in the saved file. To avoid this the program replaces every instance of '\r\n' with '\n'.

## Example Script

disk-file-read-ascii.py

    #!python3

    """This program illustrates transferring an ASCII text file
    from the oscilloscope disk to the host computer in the
    Infiniium XR8 oscilloscope.
    """

    # Import modules.
    import pyvisa
    import sys

    # Global variables.
    oscilloscope_visa_address = "TCPIP0::localhost::hislip0,4880::INSTR"
    timeout = 20000  # 20 seconds.
    standard_folder = "C:\\Users\\pw5670\\Documents\\Keysight\\Infiniium\\"

    def exit_program():
        """Exit program."""

        # Close connection to oscilloscope.
        sys.stdout.write("Closing oscilloscope connection.\n")
        Infiniium.write(":SYSTem:GTLocal")  # Unlock GUI.
        Infiniium.clear()  # Clear oscilloscope communications interface.
        Infiniium.close()  # Close communications interface to oscilloscope.
        rm.close()  # Close resource manager.
        print("End of program.")
        sys.exit()

    def check_error_queue(when):
        """Check error queue."""

        errors_found = False
        while True:
            # Keep reading errors until "No error".
            error_string = Infiniium.query(":SYSTem:ERRor:NEXT? DIAGnostic")
            if error_string:  # If there is an error string value.

                if error_string.find("0,", 0, 2) == -1:  # Not "No error".
                    errors_found = True
                    print(f"ERROR: {error_string}")

                else:  # "No error"
                    break

            else:  # :SYSTem:ERRor:NEXT? DIAGnostic should always return string.
                errors_found = True
                print("ERROR: :SYSTem:ERRor:NEXT? DIAGnostic returned nothing.")
                break

        if errors_found:
            print(f"Exited because error(s) found when: '{when}'")
            exit_program()

    # ==========================================================
    # Main program:
    # ==========================================================

    # Connect and initialize oscilloscope.
    rm = pyvisa.ResourceManager("C:\\Windows\\System32\\visa64.dll")
    try:
        Infiniium = rm.open_resource(oscilloscope_visa_address)
    except Exception:
        print(
            f"Unable to connect to oscilloscope at {oscilloscope_visa_address}. Aborting program."
        )
        sys.exit()

    Infiniium.timeout = timeout  # Set global timeout.
    Infiniium.clear()  # Clear the instrument bus.
    # Lock GUI happens automatically.

    # Move file from the oscilloscope disk to the local computer.
    print("Getting the ASCII file from oscilloscope.")
    protocol_listing_file = f"{standard_folder}listing.csv"
    file_string = Infiniium.query(f':DISK:FILE:ASCii:READ? "{protocol_listing_file}"')
    f = open(protocol_listing_file, "wt")
    f.write(file_string)
    f.close()
    print(f"Oscilloscope file copied to local computer: {protocol_listing_file}")

    # Check error queue.
    check_error_queue("End of program")

    # Exit program.
    exit_program()