Skip to content

SCREENSHOT_MSO2X

Save a screenshot from a Tektronix MSO oscilloscope. Saves a screenshot locally (on the PC) and on the scope. Also outputs the image to Flojoy. Note the directory chosen on the scope must already exist. Requires a CONNECT_MSO2X block to create the connection. Tested on MSO22 and MSO24. Should be compatible with many Tektronix MSO series oscilloscopes. Input blocks - any (most) Output blocks - IMAGE, COMPUTER_VISION blocks Params: connection : VisaConnection The VISA address (requires the CONNECTION_MSO2X block). local_file_path : Directory Choose a file where the image will be saved locally. path_on_scope : str, default = "C:\screenshots\screenshot.png" The file name and path on the scope filename_pc : str The file name of the screenshot saved locally. auto_index : bool Adds '_XXX' to end of file name and increases that index automatically. Returns: out : Image The screenshot
Python Code
from typing import Optional
from flojoy import VisaConnection, flojoy, Image, DataContainer, Directory
from numpy import array
from time import sleep
from PIL import Image as im
from os import path


@flojoy(inject_connection=True)
def SCREENSHOT_MSO2X(
    connection: VisaConnection,
    local_file_path: Directory,
    input: Optional[DataContainer] = None,
    path_on_scope: str = "C:\\screenshots\\screenshot.png",
    filename: str = "screenshot.png",
    auto_index: bool = False,
) -> Image:
    """Save a screenshot from a Tektronix MSO oscilloscope.

    Saves a screenshot locally (on the PC) and on the scope.
    Also outputs the image to Flojoy.

    Note the directory chosen on the scope must already exist.

    Requires a CONNECT_MSO2X block to create the connection.

    Tested on MSO22 and MSO24. Should be compatible with many Tektronix MSO
    series oscilloscopes.

    Input blocks - any (most)
    Output blocks - IMAGE, COMPUTER_VISION blocks

    Parameters
    ----------
    connection : VisaConnection
        The VISA address (requires the CONNECTION_MSO2X block).
    local_file_path: Directory
        Choose a file where the image will be saved locally.
    path_on_scope: str, default = "C:\\screenshots\\screenshot.png"
        The file name and path on the scope
    filename_pc: str
        The file name of the screenshot saved locally.
    auto_index: bool
        Adds '_XXX' to end of file name and increases that index automatically.

    Returns
    -------
    Image
        The screenshot
    """

    # Local/PC file name definition
    file_pc = str(path.join(local_file_path.unwrap(), filename))
    if auto_index:
        i = 0
        check = file_pc[:-4] + "_" + str(i).zfill(3) + ".png"
        while path.exists(check):
            i += 1
            check = file_pc[:-4] + "_" + str(i).zfill(3) + ".png"
        file_pc = check

    # Retrieve oscilloscope instrument connection.
    scope = connection.get_handle()

    # Save the image on the scope.
    scope.commands.save.image.write(path_on_scope)

    # Adding delay for saving the image on the scope.
    sleep(1)

    # Read and transfer the screenshot to pc
    scope.commands.filesystem.readfile.write(path_on_scope)
    imageData = scope.read_raw()

    # Save screenshot locally
    with open(file_pc, "wb") as f:
        f.write(imageData)

    # Convert screenshot and output image to Flojoy canvas
    imageData = array(im.open(file_pc).convert("RGBA"))
    r = imageData[:, :, 0]
    g = imageData[:, :, 1]
    b = imageData[:, :, 2]
    a = imageData[:, :, 3]

    return Image(r=r, g=g, b=b, a=a)

Find this Flojoy Block on GitHub

Example

Having problems with this example app? Join our Discord community and we will help you out!
React Flow mini map

This app saves a screenshot on a MSO oscillioscope and extracts it to the local PC as well.

First the necessary blocks were added:

  • 1 CONNECT_MSO2X
  • 1 SCREENSHOT_MSO2X
  • 1 IMAGE

Set the connection parameter to the correct instrument for the two MSO blocks. Choose paths and filenames where to store the screenshot for both the oscilloscope and your computer.

When you run the app you can also see the data is imported into Flojoy and is show on the IMAGE block.