Transfer binary data from PC to Infiniium system
This program demonstrates using the :DISK:FILE:WRITe? query to transfer binary data from a file on the host computer PC to the system running the Infiniium application. The binary file is a screen image that is in the script's folder. Any png file will work as long as it is named test_image.png. The program transfers the file's data and not the file. The data is placed in a new file on the Infiniium system named test_image.png.
Example Script
disk-file-write.py
#!python3
"""This program illustrates transferring a file from the host
computer to the disk 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.
# Send file from the local computer to the oscilloscope disk.
print("Sending a binary file to the Infiniium system.")
image_file = f"{standard_folder}screen_image.png"
f = open(image_file, "rb")
file_bytes = f.read()
f.close()
message = f':DISK:FILE:WRITe? "{image_file}",'
Infiniium.write_binary_values(message, file_bytes, datatype="s")
success_or_failure = Infiniium.read().strip()
if success_or_failure == "1":
print(f"File is on Infiniium system: {image_file}")
else:
print(f"FAILURE writing file to Infiniium system: {image_file}")
# Check error queue.
check_error_queue("End of program")
# Exit program.
exit_program()