FUNCTION_GENERATOR_DS1047Z
Download Flojoy Studio to try this app
  
 Controls the function generator, AKA 'Source' 1 and 2. Requires a CONNECTION_DS1074Z node at the start of the app to connect with
the instrument. The VISA address will then be listed under 'connection'.
This node should also work with compatible DS1000Z oscilloscopes  Params:    connection : VisaConnection  The VISA address (requires the CONNECTION_DS1074Z node).   source : int  Control source 1 or 2.   source_on : bool  Turn the wavefunction generator on (True) or off (False.)   impedance : str  Use high (~1e6) or 50 Ohm impedance.   frequency : float  The output frequency, in Hz.   phase : float = 0  The output frequency, in degrees.   align_phases : bool  Align the phases of source 1 and 2 (use after both phases are set).   function : str  Choose the desired wavefunction shape.   amplitude : float  Peak-to-peak amplitude, in V.   voltage_offset : float  The vertical voltage offset, in V.   ramp_symmetry : float = 0,  The symmetry of the ramp wavefunction, if used. 0-100%.   duty_cycle : float = 0,  The duty cycle of the pulse wavefunction, if used. 0-100%.     Returns:    out : DataContainer  String: summary of channel settings.    
Python Code
from flojoy import flojoy, DataContainer, String, VisaConnection
from typing import Optional, Literal
@flojoy(inject_connection=True)
def FUNCTION_GENERATOR_DS1047Z(
    connection: VisaConnection,
    source: Literal[1, 2] = 1,
    source_on: bool = True,
    impedance: Literal["highZ", "50"] = "50",
    frequency: float = 1e5,
    phase: float = 0,
    align_phases: bool = True,
    function: Literal[
        "sin",
        "squ",
        "ramp",
        "pulse",
        "noise",
        "DC",
        "ext",
        "sinc",
        "exprise",
        "expfall",
        "ECG",
        "gauss",
        "lorentz",
        "haversine",
    ] = "sin",
    amplitude: float = 0.1,
    voltage_offset: float = 0,
    ramp_symmetry: float = 0,
    duty_cycle: float = 0,
    default: Optional[DataContainer] = None,
) -> String:
    """Controls the function generator, AKA 'Source' 1 and 2.
    Requires a CONNECTION_DS1074Z node at the start of the app to connect with
    the instrument. The VISA address will then be listed under 'connection'.
    This node should also work with compatible DS1000Z oscilloscopes
    Parameters
    ----------
    connection: VisaConnection
        The VISA address (requires the CONNECTION_DS1074Z node).
    source: int
        Control source 1 or 2.
    source_on: bool
        Turn the wavefunction generator on (True) or off (False.)
    impedance: str
        Use high (~1e6) or 50 Ohm impedance.
    frequency: float
        The output frequency, in Hz.
    phase: float = 0
        The output frequency, in degrees.
    align_phases: bool
        Align the phases of source 1 and 2 (use after both phases are set).
    function: str
        Choose the desired wavefunction shape.
    amplitude: float
        Peak-to-peak amplitude, in V.
    voltage_offset: float
        The vertical voltage offset, in V.
    ramp_symmetry: float = 0,
        The symmetry of the ramp wavefunction, if used. 0-100%.
    duty_cycle: float = 0,
        The duty cycle of the pulse wavefunction, if used. 0-100%.
    Returns
    -------
    DataContainer
        String: summary of channel settings.
    """
    rigol = connection.get_handle()
    s = f"Wavefunction settings:   Source: {source} "
    if source_on:
        rigol.write(f":OUTPut{source} ON")
        s += "ON , "
    else:
        rigol.write(f":OUTPut{source} OFF")
        s += "OFF , "
    s += f"Impedance: {impedance}, "
    if impedance == "50":
        rigol.write(f":OUTPut{source}:IMPedance FIFTy")
    else:
        rigol.write(f":OUTPut{source}:IMPedance OMEG")
    s += f"Function: {function}, "
    rigol.write(f":SOURce{source}:FUNC {function}")
    s += f"Frequency: {frequency} Hz, Phase: {phase} degrees, "
    s += f"Amplitude: {amplitude} V, Offset: {voltage_offset} V, "
    rigol.write(f":SOURce{source}:FREQ {frequency}")
    rigol.write(f":SOURce{source}:PHASe {phase}")
    rigol.write(f":SOURce{source}:VOLT {amplitude}")
    rigol.write(f":SOURce{source}:VOLTage:OFFSet {voltage_offset}")
    if function == "ramp":
        rigol.write(f":SOURce{source}:FUNCtion:RAMP:SYMMetry {ramp_symmetry}")
    elif function == "pulse":
        rigol.write(f":SOURce{source}:PULSe:DCYCle {duty_cycle}")
    if align_phases:
        rigol.write(":PHASe:INIT")
    return String(s=s)
Videos
Control DS1000Z oscilloscope with Flojoy
Example App
Having problems with this example app? Join our Discord community and we will help you out!
In this example the FUNCTION_GENERATOR_DS1047Z block is used to control the source function of the Rigol DS1047Z oscilloscope.
A CONNECTION_DS1047Z block must first be used to make the connection between Flojoy and the instrument.
Three different functions are used, and TIMER functions are used to delay the time between each one allowing the changes to take effect.