diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py
new file mode 100644
index 00000000..339d3c66
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py
@@ -0,0 +1,36 @@
+from flojoy import VisaDevice, flojoy, TextBlob
+from flojoy.connection_manager import DeviceConnectionManager
+
+
+@flojoy
+def CONNECT_DMM7510(
+ device: VisaDevice,
+) -> TextBlob:
+ """Open a VISA connection to a Keithley DMM7510.
+
+ Also sets the communication language to TSP.
+
+ Parameters
+ ----------
+ device: VisaDevice
+ The connected VISA device.
+
+ Returns
+ -------
+ device_addr: TextBlob
+ The IP or VISA address of the VISA device.
+ """
+
+ device_addr = device.get_address()
+
+ dmm = DeviceConnectionManager.tm.add_dmm(device_addr)
+ dmm.write("*LANG TSP")
+ lang = dmm.query("*LANG?")
+ if lang != "TSP":
+ raise ValueError(
+ "Command set language not set correctly. Try setting to 'TSP' manually."
+ )
+
+ DeviceConnectionManager.register_connection(device, dmm)
+
+ return TextBlob(text_blob=device_addr)
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/app.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/app.json
new file mode 100644
index 00000000..e257e336
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/app.json
@@ -0,0 +1,643 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "label": "RESET DMM7510",
+ "func": "RESET_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "RESET_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "type": "HARDWARE",
+ "data": {
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "label": "READ MEASUREMENT DMM7510",
+ "func": "READ_MEASUREMENT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "READ_MEASUREMENT_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "label": "MEASUREMENT PARAMS DMM7510",
+ "func": "MEASUREMENT_PARAMS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "autorange": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto range?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autorange",
+ "value": true
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range to measure with (i.e. the maximum).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "meas_range",
+ "value": 0.1
+ },
+ "autozero": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto zero?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autozero",
+ "value": true
+ },
+ "count": {
+ "type": "int",
+ "default": 1,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "NPLC": {
+ "type": "float",
+ "default": 1,
+ "desc": "The integration rate in number of clocks.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "NPLC",
+ "value": 1
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "label": "MEASUREMENT FILTER DMM7510",
+ "func": "MEASUREMENT_FILTER_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "on_off": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "off",
+ "desc": "Turn the filter on or off.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "on_off",
+ "value": "off"
+ },
+ "avg_type": {
+ "type": "select",
+ "options": [
+ "moving",
+ "repeat"
+ ],
+ "default": "moving",
+ "desc": "Use moving or repeating averaging.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "avg_type",
+ "value": "moving"
+ },
+ "count": {
+ "type": "int",
+ "default": 10,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "window": {
+ "type": "float",
+ "default": 0,
+ "desc": "The size of the window, in percent.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "window",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Filter settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "type": "HARDWARE",
+ "data": {
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "label": "FUNCTION DMM7510",
+ "func": "FUNCTION_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "DC voltage",
+ "DC current",
+ "AC voltage",
+ "AC current",
+ "2W resistance",
+ "4W resistance",
+ "temperature",
+ "capacitance",
+ "continuity",
+ "diode",
+ "period",
+ "frequency",
+ "DCV ratio"
+ ],
+ "default": "DC voltage",
+ "desc": "Select the measurement function",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "function",
+ "value": "DC voltage"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "type": "HARDWARE",
+ "data": {
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "label": "DIGITS DMM7510",
+ "func": "DIGITS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5",
+ "7.5"
+ ],
+ "default": "7.5",
+ "desc": "Number of digits for the DMM measurements?",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "digits",
+ "value": "6.5"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "label": "CONNECT DMM7510",
+ "func": "CONNECT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_DMM7510",
+ "param": "device",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py",
+ "selected": true
+ },
+ "position": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": " V"
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "sourceHandle": "default",
+ "target": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8default-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767input"
+ },
+ {
+ "source": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "sourceHandle": "default",
+ "target": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "targetHandle": "input",
+ "id": "reactflow__edge-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13default-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35input"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bfinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8einput"
+ },
+ {
+ "source": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "sourceHandle": "default",
+ "target": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767default-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aadinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13input"
+ },
+ {
+ "source": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "targetHandle": "default",
+ "id": "reactflow__edge-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35default-BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5default"
+ }
+ ],
+ "viewport": {
+ "x": 1181.2883637885323,
+ "y": 525.5787480876195,
+ "zoom": 1.0441212277180714
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/block_data.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/block_data.json
new file mode 100644
index 00000000..19481dbf
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/block_data.json
@@ -0,0 +1,20 @@
+{
+ "docstring": {
+ "long_description": "Also sets the communication language to TSP.",
+ "short_description": "Open a VISA connection to a Keithley DMM7510.",
+ "parameters": [
+ {
+ "name": "device",
+ "type": "VisaDevice",
+ "description": "The connected VISA device."
+ }
+ ],
+ "returns": [
+ {
+ "name": "device_addr",
+ "type": "TextBlob",
+ "description": "The IP or VISA address of the VISA device."
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/example.md b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/example.md
new file mode 100644
index 00000000..efee664b
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/example.md
@@ -0,0 +1,16 @@
+In this example, a DC voltage measurement was extracted from a Keithley DMM7510.
+
+First the necessary blocks were added:
+
+- `CONNECT_DMM7510`
+- `RESET_DMM7510`
+- `FUNCTION_DMM7510`
+- `DIGITS_DMM7510`
+- `MEASUREMENT_PARAMS_DMM7510`
+- `MEASUREMENT_FILTER_DMM7510`
+- `READ_DMM7510`
+- `BIG_NUMBER`
+
+The instrument address was set for each `DMM7510` block. The `FUNCTION_DMM7510` block was changed in order to extract the correct measurement. The parameters in `DIGITS_DMM7510`, `MEASUREMENT_PARAMS_DMM7510`, and `MEASUREMENT_FILTER_DMM7510` blocks were changed as necessary. The `READ_DMM7510` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/DIGITIZED_TIME_DMM7510.py b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/DIGITIZED_TIME_DMM7510.py
new file mode 100644
index 00000000..051f19b5
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/DIGITIZED_TIME_DMM7510.py
@@ -0,0 +1,67 @@
+from typing import Optional, Literal
+from flojoy import VisaConnection, flojoy, DataContainer, OrderedPair
+
+
+@flojoy(inject_connection=True)
+def DIGITIZED_TIME_DMM7510(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+ function: Literal[
+ "Digitize voltage",
+ "Digitize current",
+ ] = "Digitize voltage",
+ num_samples: int = 100,
+ sample_rate: float = 1e3,
+ range: float = 1,
+) -> OrderedPair:
+ """Measures digitized data vs time.
+
+ Requires a CONNECT_DMM7510 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_DMM7510 block).
+ function : select, default=Digitize voltage
+ Select the measurement function
+ num_samples : int, default=100
+ The number of points/samples to measure.
+ sample_rate : float, default=1000
+ The number of samples per second.
+ range : float, default=1
+ The range of the function measurement.
+
+ Returns
+ -------
+ OrderedPair
+ x: time
+ y: measurements
+ """
+
+ dmm = connection.get_handle()
+
+ if function == "Digitize voltage":
+ dmm.write("dmm.digitize.func = dmm.FUNC_DIGITIZE_VOLTAGE")
+ else:
+ dmm.write("dmm.digitize.func = dmm.FUNC_DIGITIZE_CURRENT")
+
+ dmm.write(f"dmm.digitize.range = {range}")
+ dmm.write(f"dmm.digitize.samplerate = {sample_rate}")
+ dmm.write(f"dmm.digitize.count = {num_samples}")
+
+ dmm.write("dmm.digitize.aperture = dmm.APERTURE_AUTO")
+ dmm.commands.dmm.digitize.inputimpedance = "dmm.IMPEDANCE_AUTO"
+
+ dmm.commands.buffer_var["defbuffer1"].capacity = num_samples
+ dmm.write("defbuffer1.clear()")
+ dmm.write("dmm.digitize.read()")
+
+ time = []
+ y = []
+ for cnt in range(1, num_samples + 1):
+ y.append(float(dmm.commands.buffer_var["defbuffer1"].readings[cnt]))
+ time.append(
+ float(dmm.commands.buffer_var["defbuffer1"].relativetimestamps[cnt])
+ )
+
+ return OrderedPair(x=time, y=y)
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/app.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/app.json
new file mode 100644
index 00000000..e257e336
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/app.json
@@ -0,0 +1,643 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "label": "RESET DMM7510",
+ "func": "RESET_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "RESET_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "type": "HARDWARE",
+ "data": {
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "label": "READ MEASUREMENT DMM7510",
+ "func": "READ_MEASUREMENT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "READ_MEASUREMENT_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "label": "MEASUREMENT PARAMS DMM7510",
+ "func": "MEASUREMENT_PARAMS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "autorange": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto range?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autorange",
+ "value": true
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range to measure with (i.e. the maximum).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "meas_range",
+ "value": 0.1
+ },
+ "autozero": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto zero?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autozero",
+ "value": true
+ },
+ "count": {
+ "type": "int",
+ "default": 1,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "NPLC": {
+ "type": "float",
+ "default": 1,
+ "desc": "The integration rate in number of clocks.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "NPLC",
+ "value": 1
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "label": "MEASUREMENT FILTER DMM7510",
+ "func": "MEASUREMENT_FILTER_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "on_off": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "off",
+ "desc": "Turn the filter on or off.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "on_off",
+ "value": "off"
+ },
+ "avg_type": {
+ "type": "select",
+ "options": [
+ "moving",
+ "repeat"
+ ],
+ "default": "moving",
+ "desc": "Use moving or repeating averaging.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "avg_type",
+ "value": "moving"
+ },
+ "count": {
+ "type": "int",
+ "default": 10,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "window": {
+ "type": "float",
+ "default": 0,
+ "desc": "The size of the window, in percent.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "window",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Filter settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "type": "HARDWARE",
+ "data": {
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "label": "FUNCTION DMM7510",
+ "func": "FUNCTION_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "DC voltage",
+ "DC current",
+ "AC voltage",
+ "AC current",
+ "2W resistance",
+ "4W resistance",
+ "temperature",
+ "capacitance",
+ "continuity",
+ "diode",
+ "period",
+ "frequency",
+ "DCV ratio"
+ ],
+ "default": "DC voltage",
+ "desc": "Select the measurement function",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "function",
+ "value": "DC voltage"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "type": "HARDWARE",
+ "data": {
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "label": "DIGITS DMM7510",
+ "func": "DIGITS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5",
+ "7.5"
+ ],
+ "default": "7.5",
+ "desc": "Number of digits for the DMM measurements?",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "digits",
+ "value": "6.5"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "label": "CONNECT DMM7510",
+ "func": "CONNECT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_DMM7510",
+ "param": "device",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py",
+ "selected": true
+ },
+ "position": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": " V"
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "sourceHandle": "default",
+ "target": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8default-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767input"
+ },
+ {
+ "source": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "sourceHandle": "default",
+ "target": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "targetHandle": "input",
+ "id": "reactflow__edge-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13default-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35input"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bfinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8einput"
+ },
+ {
+ "source": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "sourceHandle": "default",
+ "target": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767default-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aadinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13input"
+ },
+ {
+ "source": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "targetHandle": "default",
+ "id": "reactflow__edge-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35default-BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5default"
+ }
+ ],
+ "viewport": {
+ "x": 1181.2883637885323,
+ "y": 525.5787480876195,
+ "zoom": 1.0441212277180714
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/block_data.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/block_data.json
new file mode 100644
index 00000000..8ddc6220
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/block_data.json
@@ -0,0 +1,40 @@
+{
+ "docstring": {
+ "long_description": "Requires a CONNECT_DMM7510 block to create the connection.",
+ "short_description": "Measures digitized data vs time.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_DMM7510 block)."
+ },
+ {
+ "name": "function",
+ "type": "select, default=Digitize voltage",
+ "description": "Select the measurement function"
+ },
+ {
+ "name": "num_samples",
+ "type": "int, default=100",
+ "description": "The number of points/samples to measure."
+ },
+ {
+ "name": "sample_rate",
+ "type": "float, default=1000",
+ "description": "The number of samples per second."
+ },
+ {
+ "name": "range",
+ "type": "float, default=1",
+ "description": "The range of the function measurement."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "OrderedPair",
+ "description": "x: time\ny: measurements"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/example.md b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/example.md
new file mode 100644
index 00000000..efee664b
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/example.md
@@ -0,0 +1,16 @@
+In this example, a DC voltage measurement was extracted from a Keithley DMM7510.
+
+First the necessary blocks were added:
+
+- `CONNECT_DMM7510`
+- `RESET_DMM7510`
+- `FUNCTION_DMM7510`
+- `DIGITS_DMM7510`
+- `MEASUREMENT_PARAMS_DMM7510`
+- `MEASUREMENT_FILTER_DMM7510`
+- `READ_DMM7510`
+- `BIG_NUMBER`
+
+The instrument address was set for each `DMM7510` block. The `FUNCTION_DMM7510` block was changed in order to extract the correct measurement. The parameters in `DIGITS_DMM7510`, `MEASUREMENT_PARAMS_DMM7510`, and `MEASUREMENT_FILTER_DMM7510` blocks were changed as necessary. The `READ_DMM7510` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py
new file mode 100644
index 00000000..8e8c3b9a
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py
@@ -0,0 +1,44 @@
+from typing import Optional, Literal
+from flojoy import VisaConnection, flojoy, DataContainer, TextBlob
+
+
+@flojoy(inject_connection=True)
+def DIGITS_DMM7510(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+ digits: Literal["3.5", "4.5", "5.5", "6.5", "7.5"] = "7.5",
+) -> TextBlob:
+ """Changes the number of digits for measurements for the DMM7510.
+
+ Less digits is faster (but less accurate).
+
+ Requires a CONNECT_DMM7510 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_DMM7510 block).
+ digits : select, default=7.5,
+ Number of digits for the DMM measurements?
+
+ Returns
+ -------
+ TextBlob
+ Measurement settings
+ """
+
+ dmm = connection.get_handle()
+
+ match digits:
+ case "3.5":
+ dmm.commands.dmm.measure.displaydigits = "dmm.DIGITS_3_5"
+ case "4.5":
+ dmm.commands.dmm.measure.displaydigits = "dmm.DIGITS_4_5"
+ case "5.5":
+ dmm.commands.dmm.measure.displaydigits = "dmm.DIGITS_5_5"
+ case "6.5":
+ dmm.commands.dmm.measure.displaydigits = "dmm.DIGITS_6_5"
+ case "7.5":
+ dmm.commands.dmm.measure.displaydigits = "dmm.DIGITS_7_5"
+
+ return TextBlob(text_blob=f"Digits: {digits}")
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/app.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/app.json
new file mode 100644
index 00000000..e257e336
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/app.json
@@ -0,0 +1,643 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "label": "RESET DMM7510",
+ "func": "RESET_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "RESET_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "type": "HARDWARE",
+ "data": {
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "label": "READ MEASUREMENT DMM7510",
+ "func": "READ_MEASUREMENT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "READ_MEASUREMENT_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "label": "MEASUREMENT PARAMS DMM7510",
+ "func": "MEASUREMENT_PARAMS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "autorange": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto range?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autorange",
+ "value": true
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range to measure with (i.e. the maximum).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "meas_range",
+ "value": 0.1
+ },
+ "autozero": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto zero?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autozero",
+ "value": true
+ },
+ "count": {
+ "type": "int",
+ "default": 1,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "NPLC": {
+ "type": "float",
+ "default": 1,
+ "desc": "The integration rate in number of clocks.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "NPLC",
+ "value": 1
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "label": "MEASUREMENT FILTER DMM7510",
+ "func": "MEASUREMENT_FILTER_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "on_off": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "off",
+ "desc": "Turn the filter on or off.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "on_off",
+ "value": "off"
+ },
+ "avg_type": {
+ "type": "select",
+ "options": [
+ "moving",
+ "repeat"
+ ],
+ "default": "moving",
+ "desc": "Use moving or repeating averaging.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "avg_type",
+ "value": "moving"
+ },
+ "count": {
+ "type": "int",
+ "default": 10,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "window": {
+ "type": "float",
+ "default": 0,
+ "desc": "The size of the window, in percent.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "window",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Filter settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "type": "HARDWARE",
+ "data": {
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "label": "FUNCTION DMM7510",
+ "func": "FUNCTION_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "DC voltage",
+ "DC current",
+ "AC voltage",
+ "AC current",
+ "2W resistance",
+ "4W resistance",
+ "temperature",
+ "capacitance",
+ "continuity",
+ "diode",
+ "period",
+ "frequency",
+ "DCV ratio"
+ ],
+ "default": "DC voltage",
+ "desc": "Select the measurement function",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "function",
+ "value": "DC voltage"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "type": "HARDWARE",
+ "data": {
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "label": "DIGITS DMM7510",
+ "func": "DIGITS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5",
+ "7.5"
+ ],
+ "default": "7.5",
+ "desc": "Number of digits for the DMM measurements?",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "digits",
+ "value": "6.5"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "label": "CONNECT DMM7510",
+ "func": "CONNECT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_DMM7510",
+ "param": "device",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py",
+ "selected": true
+ },
+ "position": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": " V"
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "sourceHandle": "default",
+ "target": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8default-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767input"
+ },
+ {
+ "source": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "sourceHandle": "default",
+ "target": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "targetHandle": "input",
+ "id": "reactflow__edge-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13default-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35input"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bfinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8einput"
+ },
+ {
+ "source": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "sourceHandle": "default",
+ "target": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767default-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aadinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13input"
+ },
+ {
+ "source": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "targetHandle": "default",
+ "id": "reactflow__edge-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35default-BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5default"
+ }
+ ],
+ "viewport": {
+ "x": 1181.2883637885323,
+ "y": 525.5787480876195,
+ "zoom": 1.0441212277180714
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/block_data.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/block_data.json
new file mode 100644
index 00000000..f39edac4
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/block_data.json
@@ -0,0 +1,25 @@
+{
+ "docstring": {
+ "long_description": "Less digits is faster (but less accurate).\n\nRequires a CONNECT_DMM7510 block to create the connection.",
+ "short_description": "Changes the number of digits for measurements for the DMM7510.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_DMM7510 block)."
+ },
+ {
+ "name": "digits",
+ "type": "select, default=7.5,",
+ "description": "Number of digits for the DMM measurements?"
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": "Measurement settings"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/example.md b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/example.md
new file mode 100644
index 00000000..efee664b
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/example.md
@@ -0,0 +1,16 @@
+In this example, a DC voltage measurement was extracted from a Keithley DMM7510.
+
+First the necessary blocks were added:
+
+- `CONNECT_DMM7510`
+- `RESET_DMM7510`
+- `FUNCTION_DMM7510`
+- `DIGITS_DMM7510`
+- `MEASUREMENT_PARAMS_DMM7510`
+- `MEASUREMENT_FILTER_DMM7510`
+- `READ_DMM7510`
+- `BIG_NUMBER`
+
+The instrument address was set for each `DMM7510` block. The `FUNCTION_DMM7510` block was changed in order to extract the correct measurement. The parameters in `DIGITS_DMM7510`, `MEASUREMENT_PARAMS_DMM7510`, and `MEASUREMENT_FILTER_DMM7510` blocks were changed as necessary. The `READ_DMM7510` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py
new file mode 100644
index 00000000..1b88f752
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py
@@ -0,0 +1,72 @@
+from typing import Optional, Literal
+from flojoy import VisaConnection, flojoy, DataContainer, TextBlob
+
+
+@flojoy(inject_connection=True)
+def FUNCTION_DMM7510(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+ function: Literal[
+ "DC voltage",
+ "DC current",
+ "AC voltage",
+ "AC current",
+ "2W resistance",
+ "4W resistance",
+ "temperature",
+ "capacitance",
+ "continuity",
+ "diode",
+ "period",
+ "frequency",
+ "DCV ratio",
+ ] = "DC voltage",
+) -> TextBlob:
+ """Changes the measurement function for the DMM7510.
+
+ Requires a CONNECT_DMM7510 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_DMM7510 block).
+ function : select, default=DC voltage
+ Select the measurement function
+
+ Returns
+ -------
+ TextBlob
+ Measurement
+ """
+
+ dmm = connection.get_handle()
+
+ match function:
+ case "DC voltage":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_DC_VOLTAGE"
+ case "DC current":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_DC_CURRENT"
+ case "AC voltage":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_AC_VOLTAGE"
+ case "AC current":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_AC_CURRENT"
+ case "2W resistance":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_RESISTANCE"
+ case "4W resistance":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_4W_RESISTANCE"
+ case "temperature":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_TEMPERATURE"
+ case "capacitance":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_CAPACITANCE"
+ case "continuity":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_CONTINUITY"
+ case "diode":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_DIODE"
+ case "period":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_PERIOD"
+ case "frequency":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_FREQUENCY"
+ case "DCV ratio":
+ dmm.commands.dmm.measure.func = "dmm.FUNC_DCV_RATIO"
+
+ return TextBlob(text_blob=f"Measure {function}")
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/app.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/app.json
new file mode 100644
index 00000000..e257e336
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/app.json
@@ -0,0 +1,643 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "label": "RESET DMM7510",
+ "func": "RESET_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "RESET_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "type": "HARDWARE",
+ "data": {
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "label": "READ MEASUREMENT DMM7510",
+ "func": "READ_MEASUREMENT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "READ_MEASUREMENT_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "label": "MEASUREMENT PARAMS DMM7510",
+ "func": "MEASUREMENT_PARAMS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "autorange": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto range?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autorange",
+ "value": true
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range to measure with (i.e. the maximum).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "meas_range",
+ "value": 0.1
+ },
+ "autozero": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto zero?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autozero",
+ "value": true
+ },
+ "count": {
+ "type": "int",
+ "default": 1,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "NPLC": {
+ "type": "float",
+ "default": 1,
+ "desc": "The integration rate in number of clocks.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "NPLC",
+ "value": 1
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "label": "MEASUREMENT FILTER DMM7510",
+ "func": "MEASUREMENT_FILTER_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "on_off": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "off",
+ "desc": "Turn the filter on or off.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "on_off",
+ "value": "off"
+ },
+ "avg_type": {
+ "type": "select",
+ "options": [
+ "moving",
+ "repeat"
+ ],
+ "default": "moving",
+ "desc": "Use moving or repeating averaging.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "avg_type",
+ "value": "moving"
+ },
+ "count": {
+ "type": "int",
+ "default": 10,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "window": {
+ "type": "float",
+ "default": 0,
+ "desc": "The size of the window, in percent.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "window",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Filter settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "type": "HARDWARE",
+ "data": {
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "label": "FUNCTION DMM7510",
+ "func": "FUNCTION_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "DC voltage",
+ "DC current",
+ "AC voltage",
+ "AC current",
+ "2W resistance",
+ "4W resistance",
+ "temperature",
+ "capacitance",
+ "continuity",
+ "diode",
+ "period",
+ "frequency",
+ "DCV ratio"
+ ],
+ "default": "DC voltage",
+ "desc": "Select the measurement function",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "function",
+ "value": "DC voltage"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "type": "HARDWARE",
+ "data": {
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "label": "DIGITS DMM7510",
+ "func": "DIGITS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5",
+ "7.5"
+ ],
+ "default": "7.5",
+ "desc": "Number of digits for the DMM measurements?",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "digits",
+ "value": "6.5"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "label": "CONNECT DMM7510",
+ "func": "CONNECT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_DMM7510",
+ "param": "device",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py",
+ "selected": true
+ },
+ "position": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": " V"
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "sourceHandle": "default",
+ "target": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8default-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767input"
+ },
+ {
+ "source": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "sourceHandle": "default",
+ "target": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "targetHandle": "input",
+ "id": "reactflow__edge-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13default-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35input"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bfinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8einput"
+ },
+ {
+ "source": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "sourceHandle": "default",
+ "target": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767default-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aadinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13input"
+ },
+ {
+ "source": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "targetHandle": "default",
+ "id": "reactflow__edge-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35default-BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5default"
+ }
+ ],
+ "viewport": {
+ "x": 1181.2883637885323,
+ "y": 525.5787480876195,
+ "zoom": 1.0441212277180714
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/block_data.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/block_data.json
new file mode 100644
index 00000000..d3bb0476
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/block_data.json
@@ -0,0 +1,25 @@
+{
+ "docstring": {
+ "long_description": "Requires a CONNECT_DMM7510 block to create the connection.",
+ "short_description": "Changes the measurement function for the DMM7510.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_DMM7510 block)."
+ },
+ {
+ "name": "function",
+ "type": "select, default=DC voltage",
+ "description": "Select the measurement function"
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": "Measurement"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/example.md b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/example.md
new file mode 100644
index 00000000..efee664b
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/example.md
@@ -0,0 +1,16 @@
+In this example, a DC voltage measurement was extracted from a Keithley DMM7510.
+
+First the necessary blocks were added:
+
+- `CONNECT_DMM7510`
+- `RESET_DMM7510`
+- `FUNCTION_DMM7510`
+- `DIGITS_DMM7510`
+- `MEASUREMENT_PARAMS_DMM7510`
+- `MEASUREMENT_FILTER_DMM7510`
+- `READ_DMM7510`
+- `BIG_NUMBER`
+
+The instrument address was set for each `DMM7510` block. The `FUNCTION_DMM7510` block was changed in order to extract the correct measurement. The parameters in `DIGITS_DMM7510`, `MEASUREMENT_PARAMS_DMM7510`, and `MEASUREMENT_FILTER_DMM7510` blocks were changed as necessary. The `READ_DMM7510` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py
new file mode 100644
index 00000000..a2723ecf
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py
@@ -0,0 +1,55 @@
+from typing import Optional, Literal
+from flojoy import VisaConnection, flojoy, DataContainer, TextBlob
+
+
+@flojoy(inject_connection=True)
+def MEASUREMENT_FILTER_DMM7510(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+ on_off: Literal["on", "off"] = "off",
+ avg_type: Literal["moving", "repeat"] = "moving",
+ count: int = 10,
+ window: float = 0,
+) -> TextBlob:
+ """Changes the measurement filter settings for the DMM7510.
+
+ Requires a CONNECT_DMM7510 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_DMM7510 block).
+ on_off : select, default=off
+ Turn the filter on or off.
+ avg_type : select, default=moving
+ Use moving or repeating averaging.
+ count : int, default=10
+ The number of counts to average.
+ window : float, default=0
+ The size of the window, in percent.
+
+ Returns
+ -------
+ TextBlob
+ Filter settings
+ """
+ assert 0.0 <= window <= 100.0, "The window must be between 0 and 100."
+ assert count > 1, "The count must be greater than 1."
+
+ dmm = connection.get_handle()
+
+ if avg_type == "moving":
+ dmm.commands.dmm.measure.filter.type = "dmm.FILTER_MOVING_AVG"
+ else:
+ dmm.commands.dmm.measure.filter.type = "dmm.FILTER_REPEAT_AVG"
+
+ dmm.commands.dmm.measure.filter.count = count
+ dmm.commands.dmm.measure.filter.window = window
+
+ match on_off:
+ case "off":
+ dmm.commands.dmm.measure.filter.enable = "dmm.OFF"
+ case "on":
+ dmm.commands.dmm.measure.filter.enable = "dmm.ON"
+
+ return TextBlob(text_blob=f"Filter {on_off}")
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/app.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/app.json
new file mode 100644
index 00000000..e257e336
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/app.json
@@ -0,0 +1,643 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "label": "RESET DMM7510",
+ "func": "RESET_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "RESET_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "type": "HARDWARE",
+ "data": {
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "label": "READ MEASUREMENT DMM7510",
+ "func": "READ_MEASUREMENT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "READ_MEASUREMENT_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "label": "MEASUREMENT PARAMS DMM7510",
+ "func": "MEASUREMENT_PARAMS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "autorange": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto range?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autorange",
+ "value": true
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range to measure with (i.e. the maximum).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "meas_range",
+ "value": 0.1
+ },
+ "autozero": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto zero?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autozero",
+ "value": true
+ },
+ "count": {
+ "type": "int",
+ "default": 1,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "NPLC": {
+ "type": "float",
+ "default": 1,
+ "desc": "The integration rate in number of clocks.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "NPLC",
+ "value": 1
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "label": "MEASUREMENT FILTER DMM7510",
+ "func": "MEASUREMENT_FILTER_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "on_off": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "off",
+ "desc": "Turn the filter on or off.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "on_off",
+ "value": "off"
+ },
+ "avg_type": {
+ "type": "select",
+ "options": [
+ "moving",
+ "repeat"
+ ],
+ "default": "moving",
+ "desc": "Use moving or repeating averaging.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "avg_type",
+ "value": "moving"
+ },
+ "count": {
+ "type": "int",
+ "default": 10,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "window": {
+ "type": "float",
+ "default": 0,
+ "desc": "The size of the window, in percent.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "window",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Filter settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "type": "HARDWARE",
+ "data": {
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "label": "FUNCTION DMM7510",
+ "func": "FUNCTION_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "DC voltage",
+ "DC current",
+ "AC voltage",
+ "AC current",
+ "2W resistance",
+ "4W resistance",
+ "temperature",
+ "capacitance",
+ "continuity",
+ "diode",
+ "period",
+ "frequency",
+ "DCV ratio"
+ ],
+ "default": "DC voltage",
+ "desc": "Select the measurement function",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "function",
+ "value": "DC voltage"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "type": "HARDWARE",
+ "data": {
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "label": "DIGITS DMM7510",
+ "func": "DIGITS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5",
+ "7.5"
+ ],
+ "default": "7.5",
+ "desc": "Number of digits for the DMM measurements?",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "digits",
+ "value": "6.5"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "label": "CONNECT DMM7510",
+ "func": "CONNECT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_DMM7510",
+ "param": "device",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py",
+ "selected": true
+ },
+ "position": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": " V"
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "sourceHandle": "default",
+ "target": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8default-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767input"
+ },
+ {
+ "source": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "sourceHandle": "default",
+ "target": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "targetHandle": "input",
+ "id": "reactflow__edge-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13default-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35input"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bfinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8einput"
+ },
+ {
+ "source": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "sourceHandle": "default",
+ "target": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767default-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aadinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13input"
+ },
+ {
+ "source": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "targetHandle": "default",
+ "id": "reactflow__edge-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35default-BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5default"
+ }
+ ],
+ "viewport": {
+ "x": 1181.2883637885323,
+ "y": 525.5787480876195,
+ "zoom": 1.0441212277180714
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/block_data.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/block_data.json
new file mode 100644
index 00000000..91b116ac
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/block_data.json
@@ -0,0 +1,40 @@
+{
+ "docstring": {
+ "long_description": "Requires a CONNECT_DMM7510 block to create the connection.",
+ "short_description": "Changes the measurement filter settings for the DMM7510.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_DMM7510 block)."
+ },
+ {
+ "name": "on_off",
+ "type": "select, default=off",
+ "description": "Turn the filter on or off."
+ },
+ {
+ "name": "avg_type",
+ "type": "select, default=moving",
+ "description": "Use moving or repeating averaging."
+ },
+ {
+ "name": "count",
+ "type": "int, default=10",
+ "description": "The number of counts to average."
+ },
+ {
+ "name": "window",
+ "type": "float, default=0",
+ "description": "The size of the window, in percent."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": "Filter settings"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/example.md b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/example.md
new file mode 100644
index 00000000..efee664b
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/example.md
@@ -0,0 +1,16 @@
+In this example, a DC voltage measurement was extracted from a Keithley DMM7510.
+
+First the necessary blocks were added:
+
+- `CONNECT_DMM7510`
+- `RESET_DMM7510`
+- `FUNCTION_DMM7510`
+- `DIGITS_DMM7510`
+- `MEASUREMENT_PARAMS_DMM7510`
+- `MEASUREMENT_FILTER_DMM7510`
+- `READ_DMM7510`
+- `BIG_NUMBER`
+
+The instrument address was set for each `DMM7510` block. The `FUNCTION_DMM7510` block was changed in order to extract the correct measurement. The parameters in `DIGITS_DMM7510`, `MEASUREMENT_PARAMS_DMM7510`, and `MEASUREMENT_FILTER_DMM7510` blocks were changed as necessary. The `READ_DMM7510` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py
new file mode 100644
index 00000000..d3893322
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py
@@ -0,0 +1,57 @@
+from typing import Optional
+from flojoy import VisaConnection, flojoy, DataContainer, TextBlob
+
+
+@flojoy(inject_connection=True)
+def MEASUREMENT_PARAMS_DMM7510(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+ autorange: bool = True,
+ meas_range: float = 1,
+ autozero: bool = True,
+ count: int = 1,
+ NPLC: float = 1,
+) -> TextBlob:
+ """Changes the measurement settings for the DMM7510.
+
+ Requires a CONNECT_DMM7510 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_DMM7510 block).
+ autorange: bool, default=True,
+ Use auto range?
+ meas_range : float, default=1,
+ The range to measure with (i.e. the maximum).
+ autozero : bool, default=True,
+ Use auto zero?
+ count : int, default=1,
+ The number of counts to average.
+ NPLC : float, default=1,
+ The integration rate in number of clocks.
+
+ Returns
+ -------
+ TextBlob
+ Measurement settings
+ """
+ assert count > 0, "The count must be greater than 1."
+
+ dmm = connection.get_handle()
+
+ dmm.commands.dmm.measure.range = meas_range
+ if autorange:
+ dmm.commands.dmm.measure.autorange = "dmm.ON"
+ else:
+ dmm.commands.dmm.measure.autorange = "dmm.OFF"
+ if autozero:
+ dmm.commands.dmm.measure.autozero.enable = "dmm.ON"
+ else:
+ dmm.commands.dmm.measure.autozero.enable = "dmm.OFF"
+ dmm.commands.dmm.measure.nplc = NPLC
+ dmm.commands.dmm.measure.count = count
+
+ dmm.commands.dmm.measure.inputimpedance = "dmm.IMPEDANCE_AUTO"
+
+ return TextBlob(text_blob=f"Measure range: {dmm.commands.dmm.measure.range}")
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/app.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/app.json
new file mode 100644
index 00000000..e257e336
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/app.json
@@ -0,0 +1,643 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "label": "RESET DMM7510",
+ "func": "RESET_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "RESET_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "type": "HARDWARE",
+ "data": {
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "label": "READ MEASUREMENT DMM7510",
+ "func": "READ_MEASUREMENT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "READ_MEASUREMENT_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "label": "MEASUREMENT PARAMS DMM7510",
+ "func": "MEASUREMENT_PARAMS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "autorange": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto range?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autorange",
+ "value": true
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range to measure with (i.e. the maximum).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "meas_range",
+ "value": 0.1
+ },
+ "autozero": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto zero?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autozero",
+ "value": true
+ },
+ "count": {
+ "type": "int",
+ "default": 1,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "NPLC": {
+ "type": "float",
+ "default": 1,
+ "desc": "The integration rate in number of clocks.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "NPLC",
+ "value": 1
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "label": "MEASUREMENT FILTER DMM7510",
+ "func": "MEASUREMENT_FILTER_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "on_off": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "off",
+ "desc": "Turn the filter on or off.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "on_off",
+ "value": "off"
+ },
+ "avg_type": {
+ "type": "select",
+ "options": [
+ "moving",
+ "repeat"
+ ],
+ "default": "moving",
+ "desc": "Use moving or repeating averaging.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "avg_type",
+ "value": "moving"
+ },
+ "count": {
+ "type": "int",
+ "default": 10,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "window": {
+ "type": "float",
+ "default": 0,
+ "desc": "The size of the window, in percent.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "window",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Filter settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "type": "HARDWARE",
+ "data": {
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "label": "FUNCTION DMM7510",
+ "func": "FUNCTION_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "DC voltage",
+ "DC current",
+ "AC voltage",
+ "AC current",
+ "2W resistance",
+ "4W resistance",
+ "temperature",
+ "capacitance",
+ "continuity",
+ "diode",
+ "period",
+ "frequency",
+ "DCV ratio"
+ ],
+ "default": "DC voltage",
+ "desc": "Select the measurement function",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "function",
+ "value": "DC voltage"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "type": "HARDWARE",
+ "data": {
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "label": "DIGITS DMM7510",
+ "func": "DIGITS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5",
+ "7.5"
+ ],
+ "default": "7.5",
+ "desc": "Number of digits for the DMM measurements?",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "digits",
+ "value": "6.5"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "label": "CONNECT DMM7510",
+ "func": "CONNECT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_DMM7510",
+ "param": "device",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py",
+ "selected": true
+ },
+ "position": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": " V"
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "sourceHandle": "default",
+ "target": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8default-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767input"
+ },
+ {
+ "source": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "sourceHandle": "default",
+ "target": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "targetHandle": "input",
+ "id": "reactflow__edge-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13default-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35input"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bfinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8einput"
+ },
+ {
+ "source": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "sourceHandle": "default",
+ "target": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767default-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aadinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13input"
+ },
+ {
+ "source": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "targetHandle": "default",
+ "id": "reactflow__edge-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35default-BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5default"
+ }
+ ],
+ "viewport": {
+ "x": 1181.2883637885323,
+ "y": 525.5787480876195,
+ "zoom": 1.0441212277180714
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/block_data.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/block_data.json
new file mode 100644
index 00000000..f45281f4
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/block_data.json
@@ -0,0 +1,45 @@
+{
+ "docstring": {
+ "long_description": "Requires a CONNECT_DMM7510 block to create the connection.",
+ "short_description": "Changes the measurement settings for the DMM7510.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_DMM7510 block)."
+ },
+ {
+ "name": "autorange",
+ "type": "bool, default=True,",
+ "description": "Use auto range?"
+ },
+ {
+ "name": "meas_range",
+ "type": "float, default=1,",
+ "description": "The range to measure with (i.e. the maximum)."
+ },
+ {
+ "name": "autozero",
+ "type": "bool, default=True,",
+ "description": "Use auto zero?"
+ },
+ {
+ "name": "count",
+ "type": "int, default=1,",
+ "description": "The number of counts to average."
+ },
+ {
+ "name": "NPLC",
+ "type": "float, default=1,",
+ "description": "The integration rate in number of clocks."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": "Measurement settings"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/example.md b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/example.md
new file mode 100644
index 00000000..efee664b
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/example.md
@@ -0,0 +1,16 @@
+In this example, a DC voltage measurement was extracted from a Keithley DMM7510.
+
+First the necessary blocks were added:
+
+- `CONNECT_DMM7510`
+- `RESET_DMM7510`
+- `FUNCTION_DMM7510`
+- `DIGITS_DMM7510`
+- `MEASUREMENT_PARAMS_DMM7510`
+- `MEASUREMENT_FILTER_DMM7510`
+- `READ_DMM7510`
+- `BIG_NUMBER`
+
+The instrument address was set for each `DMM7510` block. The `FUNCTION_DMM7510` block was changed in order to extract the correct measurement. The parameters in `DIGITS_DMM7510`, `MEASUREMENT_PARAMS_DMM7510`, and `MEASUREMENT_FILTER_DMM7510` blocks were changed as necessary. The `READ_DMM7510` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py
new file mode 100644
index 00000000..f98ed566
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py
@@ -0,0 +1,29 @@
+from typing import Optional
+from flojoy import VisaConnection, flojoy, DataContainer, Scalar
+
+
+@flojoy(inject_connection=True)
+def READ_MEASUREMENT_DMM7510(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+) -> Scalar:
+ """Reads a single measurement from the DMM7510.
+
+ Requires a CONNECT_DMM7510 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_DMM7510 block).
+
+ Returns
+ -------
+ Scalar
+ Measurement
+ """
+
+ dmm = connection.get_handle()
+
+ c = float(dmm.commands.dmm.measure.read())
+
+ return Scalar(c=c)
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/app.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/app.json
new file mode 100644
index 00000000..e257e336
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/app.json
@@ -0,0 +1,643 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "label": "RESET DMM7510",
+ "func": "RESET_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "RESET_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "type": "HARDWARE",
+ "data": {
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "label": "READ MEASUREMENT DMM7510",
+ "func": "READ_MEASUREMENT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "READ_MEASUREMENT_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "label": "MEASUREMENT PARAMS DMM7510",
+ "func": "MEASUREMENT_PARAMS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "autorange": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto range?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autorange",
+ "value": true
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range to measure with (i.e. the maximum).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "meas_range",
+ "value": 0.1
+ },
+ "autozero": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto zero?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autozero",
+ "value": true
+ },
+ "count": {
+ "type": "int",
+ "default": 1,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "NPLC": {
+ "type": "float",
+ "default": 1,
+ "desc": "The integration rate in number of clocks.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "NPLC",
+ "value": 1
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "label": "MEASUREMENT FILTER DMM7510",
+ "func": "MEASUREMENT_FILTER_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "on_off": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "off",
+ "desc": "Turn the filter on or off.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "on_off",
+ "value": "off"
+ },
+ "avg_type": {
+ "type": "select",
+ "options": [
+ "moving",
+ "repeat"
+ ],
+ "default": "moving",
+ "desc": "Use moving or repeating averaging.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "avg_type",
+ "value": "moving"
+ },
+ "count": {
+ "type": "int",
+ "default": 10,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "window": {
+ "type": "float",
+ "default": 0,
+ "desc": "The size of the window, in percent.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "window",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Filter settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "type": "HARDWARE",
+ "data": {
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "label": "FUNCTION DMM7510",
+ "func": "FUNCTION_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "DC voltage",
+ "DC current",
+ "AC voltage",
+ "AC current",
+ "2W resistance",
+ "4W resistance",
+ "temperature",
+ "capacitance",
+ "continuity",
+ "diode",
+ "period",
+ "frequency",
+ "DCV ratio"
+ ],
+ "default": "DC voltage",
+ "desc": "Select the measurement function",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "function",
+ "value": "DC voltage"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "type": "HARDWARE",
+ "data": {
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "label": "DIGITS DMM7510",
+ "func": "DIGITS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5",
+ "7.5"
+ ],
+ "default": "7.5",
+ "desc": "Number of digits for the DMM measurements?",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "digits",
+ "value": "6.5"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "label": "CONNECT DMM7510",
+ "func": "CONNECT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_DMM7510",
+ "param": "device",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py",
+ "selected": true
+ },
+ "position": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": " V"
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "sourceHandle": "default",
+ "target": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8default-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767input"
+ },
+ {
+ "source": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "sourceHandle": "default",
+ "target": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "targetHandle": "input",
+ "id": "reactflow__edge-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13default-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35input"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bfinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8einput"
+ },
+ {
+ "source": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "sourceHandle": "default",
+ "target": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767default-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aadinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13input"
+ },
+ {
+ "source": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "targetHandle": "default",
+ "id": "reactflow__edge-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35default-BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5default"
+ }
+ ],
+ "viewport": {
+ "x": 1181.2883637885323,
+ "y": 525.5787480876195,
+ "zoom": 1.0441212277180714
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/block_data.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/block_data.json
new file mode 100644
index 00000000..1c0d3e78
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/block_data.json
@@ -0,0 +1,20 @@
+{
+ "docstring": {
+ "long_description": "Requires a CONNECT_DMM7510 block to create the connection.",
+ "short_description": "Reads a single measurement from the DMM7510.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_DMM7510 block)."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "Scalar",
+ "description": "Measurement"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/example.md b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/example.md
new file mode 100644
index 00000000..efee664b
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/example.md
@@ -0,0 +1,16 @@
+In this example, a DC voltage measurement was extracted from a Keithley DMM7510.
+
+First the necessary blocks were added:
+
+- `CONNECT_DMM7510`
+- `RESET_DMM7510`
+- `FUNCTION_DMM7510`
+- `DIGITS_DMM7510`
+- `MEASUREMENT_PARAMS_DMM7510`
+- `MEASUREMENT_FILTER_DMM7510`
+- `READ_DMM7510`
+- `BIG_NUMBER`
+
+The instrument address was set for each `DMM7510` block. The `FUNCTION_DMM7510` block was changed in order to extract the correct measurement. The parameters in `DIGITS_DMM7510`, `MEASUREMENT_PARAMS_DMM7510`, and `MEASUREMENT_FILTER_DMM7510` blocks were changed as necessary. The `READ_DMM7510` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py
new file mode 100644
index 00000000..d283639b
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py
@@ -0,0 +1,28 @@
+from typing import Optional
+from flojoy import VisaConnection, flojoy, DataContainer, TextBlob
+
+
+@flojoy(inject_connection=True)
+def RESET_DMM7510(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+) -> TextBlob:
+ """Resets the DMM7510 and clears buffers.
+
+ Requires a CONNECT_DMM7510 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_DMM7510 block).
+
+ Returns
+ -------
+ TextBlob
+ Reset
+ """
+
+ dmm = connection.get_handle()
+ dmm.commands.reset()
+
+ return TextBlob(text_blob="Reset DMM7510")
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/app.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/app.json
new file mode 100644
index 00000000..e257e336
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/app.json
@@ -0,0 +1,643 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "label": "RESET DMM7510",
+ "func": "RESET_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "RESET_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -365.98860382815104,
+ "y": -346.86520014985507
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "type": "HARDWARE",
+ "data": {
+ "id": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "label": "READ MEASUREMENT DMM7510",
+ "func": "READ_MEASUREMENT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "READ_MEASUREMENT_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 397.55459909996137,
+ "y": -348.39554945753986
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "label": "MEASUREMENT PARAMS DMM7510",
+ "func": "MEASUREMENT_PARAMS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "autorange": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto range?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autorange",
+ "value": true
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range to measure with (i.e. the maximum).",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "meas_range",
+ "value": 0.1
+ },
+ "autozero": {
+ "type": "bool",
+ "default": true,
+ "desc": "Use auto zero?",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "autozero",
+ "value": true
+ },
+ "count": {
+ "type": "int",
+ "default": 1,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "NPLC": {
+ "type": "float",
+ "default": 1,
+ "desc": "The integration rate in number of clocks.",
+ "overload": null,
+ "functionName": "MEASUREMENT_PARAMS_DMM7510",
+ "param": "NPLC",
+ "value": 1
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 122.53418479995364,
+ "y": -100.64663643022996
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "label": "MEASUREMENT FILTER DMM7510",
+ "func": "MEASUREMENT_FILTER_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "on_off": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "off",
+ "desc": "Turn the filter on or off.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "on_off",
+ "value": "off"
+ },
+ "avg_type": {
+ "type": "select",
+ "options": [
+ "moving",
+ "repeat"
+ ],
+ "default": "moving",
+ "desc": "Use moving or repeating averaging.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "avg_type",
+ "value": "moving"
+ },
+ "count": {
+ "type": "int",
+ "default": 10,
+ "desc": "The number of counts to average.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "count",
+ "value": 10
+ },
+ "window": {
+ "type": "float",
+ "default": 0,
+ "desc": "The size of the window, in percent.",
+ "overload": null,
+ "functionName": "MEASUREMENT_FILTER_DMM7510",
+ "param": "window",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Filter settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 128.40664152191533,
+ "y": -585.1213878287573
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "type": "HARDWARE",
+ "data": {
+ "id": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "label": "FUNCTION DMM7510",
+ "func": "FUNCTION_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "DC voltage",
+ "DC current",
+ "AC voltage",
+ "AC current",
+ "2W resistance",
+ "4W resistance",
+ "temperature",
+ "capacitance",
+ "continuity",
+ "diode",
+ "period",
+ "frequency",
+ "DCV ratio"
+ ],
+ "default": "DC voltage",
+ "desc": "Select the measurement function",
+ "overload": null,
+ "functionName": "FUNCTION_DMM7510",
+ "param": "function",
+ "value": "DC voltage"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -138.91561228691435,
+ "y": -348.39119615677674
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "type": "HARDWARE",
+ "data": {
+ "id": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "label": "DIGITS DMM7510",
+ "func": "DIGITS_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_DMM7510 block).",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "connection",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5",
+ "7.5"
+ ],
+ "default": "7.5",
+ "desc": "Number of digits for the DMM measurements?",
+ "overload": null,
+ "functionName": "DIGITS_DMM7510",
+ "param": "digits",
+ "value": "6.5"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement settings"
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py",
+ "selected": false
+ },
+ "position": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 118.60936692575538,
+ "y": -348.93898622831296
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "label": "CONNECT DMM7510",
+ "func": "CONNECT_DMM7510",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_DMM7510",
+ "param": "device",
+ "value": "TCPIP::169.254.200.12::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "path": "HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py",
+ "selected": true
+ },
+ "position": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -592.955723694826,
+ "y": -345.1619499307562
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": " V"
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 667.4303529715919,
+ "y": -398.3189188865829
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8",
+ "sourceHandle": "default",
+ "target": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_DMM7510-15768171-e9ac-447c-8fff-ed87ea37b4e8default-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767input"
+ },
+ {
+ "source": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "sourceHandle": "default",
+ "target": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "targetHandle": "input",
+ "id": "reactflow__edge-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13default-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35input"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bf",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_PARAMS_DMM7510-ea9be712-5545-4826-8a9e-80f5048e30bfinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-MEASUREMENT_FILTER_DMM7510-82e0a9bb-14c6-44ba-ae5a-bccc2dcd3e8einput"
+ },
+ {
+ "source": "RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767",
+ "sourceHandle": "default",
+ "target": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_DMM7510-759ea9c4-12e9-4f66-a90a-9444e9299767default-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aadinput"
+ },
+ {
+ "source": "FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aad",
+ "sourceHandle": "default",
+ "target": "DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13",
+ "targetHandle": "input",
+ "id": "reactflow__edge-FUNCTION_DMM7510-700a6612-0549-4c56-ab34-42c0f5001aaddefault-DIGITS_DMM7510-cbc0f55d-9956-4b13-bd09-d75d2876fa13input"
+ },
+ {
+ "source": "READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5",
+ "targetHandle": "default",
+ "id": "reactflow__edge-READ_MEASUREMENT_DMM7510-d02caf67-71e5-4cf2-8330-c0d1b2160f35default-BIG_NUMBER-666f96e9-7522-40be-a34d-47e7445876d5default"
+ }
+ ],
+ "viewport": {
+ "x": 1181.2883637885323,
+ "y": 525.5787480876195,
+ "zoom": 1.0441212277180714
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/block_data.json b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/block_data.json
new file mode 100644
index 00000000..6640c3c8
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/block_data.json
@@ -0,0 +1,20 @@
+{
+ "docstring": {
+ "long_description": "Requires a CONNECT_DMM7510 block to create the connection.",
+ "short_description": "Resets the DMM7510 and clears buffers.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_DMM7510 block)."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": "Reset"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/example.md b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/example.md
new file mode 100644
index 00000000..efee664b
--- /dev/null
+++ b/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/example.md
@@ -0,0 +1,16 @@
+In this example, a DC voltage measurement was extracted from a Keithley DMM7510.
+
+First the necessary blocks were added:
+
+- `CONNECT_DMM7510`
+- `RESET_DMM7510`
+- `FUNCTION_DMM7510`
+- `DIGITS_DMM7510`
+- `MEASUREMENT_PARAMS_DMM7510`
+- `MEASUREMENT_FILTER_DMM7510`
+- `READ_DMM7510`
+- `BIG_NUMBER`
+
+The instrument address was set for each `DMM7510` block. The `FUNCTION_DMM7510` block was changed in order to extract the correct measurement. The parameters in `DIGITS_DMM7510`, `MEASUREMENT_PARAMS_DMM7510`, and `MEASUREMENT_FILTER_DMM7510` blocks were changed as necessary. The `READ_DMM7510` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/PROTOCOLS/GPIB/PROLOGIX/summary.md b/blocks/HARDWARE/PROTOCOLS/GPIB/PROLOGIX/summary.md
new file mode 100644
index 00000000..d48d3d71
--- /dev/null
+++ b/blocks/HARDWARE/PROTOCOLS/GPIB/PROLOGIX/summary.md
@@ -0,0 +1,7 @@
+---
+title: Prologix
+description: "Welcome to Flojoy's Prologix Blocks page."
+---
+
+
+Coming soon...
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py
new file mode 100644
index 00000000..78f94f59
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py
@@ -0,0 +1,36 @@
+from typing import Optional
+from flojoy import VisaConnection, flojoy, DataContainer, TextBlob
+
+
+@flojoy(deps={"tm_devices": "1.0"}, inject_connection=True)
+def BEEP_2450(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+ duration: float = 0.25,
+ frequency: float = 2000,
+) -> TextBlob:
+ """Causes the 2450 to beep audibly.
+
+ Requires a CONNECT_2450 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_2450 block).
+ duration : float, default=0.25
+ The duration of the beep in seconds.
+ frequency : float, default=2000
+ The frequency, or tone, of the beep in Hz.
+
+ Returns
+ -------
+ TextBlob
+ Beep
+ """
+
+ # Retrieve oscilloscope instrument connection
+ smu = connection.get_handle()
+
+ smu.commands.beeper.beep(duration=duration, frequency=frequency)
+
+ return TextBlob(text_blob="BEEP")
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/app.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/app.json
new file mode 100644
index 00000000..bfc67574
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/app.json
@@ -0,0 +1,903 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "type": "HARDWARE",
+ "data": {
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "label": "BEEP 2450",
+ "func": "BEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "duration": {
+ "type": "float",
+ "default": 0.25,
+ "desc": "The duration of the beep in seconds.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "duration",
+ "value": 0.25
+ },
+ "frequency": {
+ "type": "float",
+ "default": 2000,
+ "desc": "The frequency, or tone, of the beep in Hz.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "frequency",
+ "value": 2000
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Beep"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py"
+ },
+ "position": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "label": "CONNECT 2450",
+ "func": "CONNECT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_2450",
+ "param": "device",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py"
+ },
+ "position": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "type": "HARDWARE",
+ "data": {
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "label": "IV SWEEP 2450",
+ "func": "IV_SWEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "sweep": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current"
+ ],
+ "default": "voltage",
+ "desc": "Select the sweep mode, the opposite unit is measured.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sweep",
+ "value": "voltage"
+ },
+ "sense": {
+ "type": "select",
+ "options": [
+ "2-wire",
+ "4-wire"
+ ],
+ "default": "2-wire",
+ "desc": "Use 2 or 4 wire sense/measurement mode.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sense",
+ "value": "2-wire"
+ },
+ "start": {
+ "type": "float",
+ "default": 0,
+ "desc": "The first x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "start",
+ "value": 0
+ },
+ "stop": {
+ "type": "float",
+ "default": 1,
+ "desc": "The last x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "stop",
+ "value": 1
+ },
+ "points": {
+ "type": "float",
+ "default": 100,
+ "desc": "The number of points between start and stop.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "points",
+ "value": 100
+ },
+ "measurement_time": {
+ "type": "float",
+ "default": 1,
+ "desc": "How long to measure a single point, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_time",
+ "value": 1
+ },
+ "measurement_delay": {
+ "type": "float",
+ "default": 0.05,
+ "desc": "How long to delay between two points, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_delay",
+ "value": 0.05
+ },
+ "y_limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "The limit of the measured value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "y_limit",
+ "value": 1
+ },
+ "source_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range of the x value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "source_range",
+ "value": 2
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair",
+ "desc": "Sweep values"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py"
+ },
+ "position": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "label": "MEASURE READ 2450",
+ "func": "MEASURE_READ_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_READ_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Reading"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py"
+ },
+ "position": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "label": "MEASURE SETTINGS 2450",
+ "func": "MEASURE_SETTINGS_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "measure": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current",
+ "resistance",
+ "power"
+ ],
+ "default": "voltage",
+ "desc": "Select the measure unit",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "measure",
+ "value": "voltage"
+ },
+ "wires": {
+ "type": "select",
+ "options": [
+ "2",
+ "4"
+ ],
+ "default": "2",
+ "desc": "Select 2-wire or 4-wire sense mode.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "wires",
+ "value": "2"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "6.5",
+ "desc": "Select the number of display digits.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "digits",
+ "value": "6.5"
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 0,
+ "desc": "The measurement range. 0 == AUTO.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "meas_range",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py"
+ },
+ "position": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "type": "HARDWARE",
+ "data": {
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "label": "OUTPUT 2450",
+ "func": "OUTPUT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "output": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "on",
+ "desc": "Turn the output on or off.",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "output",
+ "value": "on"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Output settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py"
+ },
+ "position": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "label": "RESET 2450",
+ "func": "RESET_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "RESET_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py"
+ },
+ "position": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "type": "HARDWARE",
+ "data": {
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "label": "SOURCE 2450",
+ "func": "SOURCE_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "current",
+ "voltage"
+ ],
+ "default": "voltage",
+ "desc": "The type of output to use.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "function",
+ "value": "voltage"
+ },
+ "level": {
+ "type": "float",
+ "default": 1,
+ "desc": "The fixed voltage or current to output.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "level",
+ "value": 1
+ },
+ "limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "Output limit (if function=voltage, current is limited and visa versa).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "limit",
+ "value": 1
+ },
+ "terminal": {
+ "type": "select",
+ "options": [
+ "front",
+ "rear"
+ ],
+ "default": "front",
+ "desc": "The panel to output from.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "terminal",
+ "value": "front"
+ },
+ "protect": {
+ "type": "select",
+ "options": [
+ "NONE",
+ "2V",
+ "5V",
+ "10V",
+ "20V",
+ "40V",
+ "60V",
+ "80V",
+ "100V",
+ "120V",
+ "140V",
+ "160V",
+ "180V"
+ ],
+ "default": "NONE",
+ "desc": "The overvoltage protection value.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "protect",
+ "value": "5V"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Source settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py"
+ },
+ "position": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "label": "LINE",
+ "func": "LINE",
+ "type": "VISUALIZATION",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|DataFrame|Matrix|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly Line visualization of the input data"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/LINE/LINE.py"
+ },
+ "position": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py"
+ },
+ "position": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "sourceHandle": "default",
+ "target": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06default-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29input"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010input"
+ },
+ {
+ "source": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "sourceHandle": "default",
+ "target": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "targetHandle": "input",
+ "id": "reactflow__edge-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9ddefault-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787input"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9input"
+ },
+ {
+ "source": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "sourceHandle": "default",
+ "target": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29default-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809einput"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7input"
+ },
+ {
+ "source": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "sourceHandle": "default",
+ "target": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "targetHandle": "default",
+ "id": "reactflow__edge-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010default-LINE-30feab30-6d4f-4274-8877-383382355e5fdefault"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "targetHandle": "default",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749default"
+ }
+ ],
+ "viewport": {
+ "x": 994.2991122110108,
+ "y": 573.4932402039965,
+ "zoom": 0.9719556784888205
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/block_data.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/block_data.json
new file mode 100644
index 00000000..770c608e
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/block_data.json
@@ -0,0 +1,30 @@
+{
+ "docstring": {
+ "long_description": "Requires a CONNECT_2450 block to create the connection.",
+ "short_description": "Causes the 2450 to beep audibly.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_2450 block)."
+ },
+ {
+ "name": "duration",
+ "type": "float, default=0.25",
+ "description": "The duration of the beep in seconds."
+ },
+ {
+ "name": "frequency",
+ "type": "float, default=2000",
+ "description": "The frequency, or tone, of the beep in Hz."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": "Beep"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/example.md b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/example.md
new file mode 100644
index 00000000..2faf7340
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/example.md
@@ -0,0 +1,19 @@
+In this example, a Keithley 2450 to generate 1V and then sweep between 0 and 1V.
+
+First the necessary blocks were added:
+
+- `CONNECT_2450`
+- `BEEP_2450`
+- `RESET_2450`
+- `SOURCE_2450`
+- `MEASURE_SETTINGS_2450`
+- `MEASUREMENT_READ_2450`
+- `IV_SWEEP_2450`
+- `BIG_NUMBER`
+- `LINE`
+
+The instrument address was set for each `2450` block. The `SOURCE_2450` block was changed in order to source 1V. The parameters in the `MEASURE_SETTINGS_2450` block were changed as necessary. The `MEASUREMENT_READ_2450` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The `IV_SWEEP_2450` block output was connected to the `LINE` plot to show the output of the sweep.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py
new file mode 100644
index 00000000..d372da48
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py
@@ -0,0 +1,34 @@
+from flojoy import VisaDevice, flojoy, TextBlob
+from flojoy.connection_manager import DeviceConnectionManager
+
+
+@flojoy(deps={"tm_devices": "1.0"})
+def CONNECT_2450(
+ device: VisaDevice,
+) -> TextBlob:
+ """Open a VISA connection to an Keithley 2450 SourceMeter.
+
+ Parameters
+ ----------
+ device: VisaDevice
+ The connected VISA device.
+
+ Returns
+ -------
+ device_addr: TextBlob
+ The IP or VISA address of the VISA device.
+ """
+
+ device_addr = device.get_address()
+
+ smu = DeviceConnectionManager.tm.add_smu(device_addr)
+ smu.write("*LANG TSP")
+ lang = smu.query("*LANG?")
+ if lang != "TSP":
+ raise ValueError(
+ "Command set language not set correctly. Try setting to 'TSP' manually."
+ )
+
+ DeviceConnectionManager.register_connection(device, smu)
+
+ return TextBlob(text_blob=device_addr)
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/app.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/app.json
new file mode 100644
index 00000000..bfc67574
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/app.json
@@ -0,0 +1,903 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "type": "HARDWARE",
+ "data": {
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "label": "BEEP 2450",
+ "func": "BEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "duration": {
+ "type": "float",
+ "default": 0.25,
+ "desc": "The duration of the beep in seconds.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "duration",
+ "value": 0.25
+ },
+ "frequency": {
+ "type": "float",
+ "default": 2000,
+ "desc": "The frequency, or tone, of the beep in Hz.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "frequency",
+ "value": 2000
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Beep"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py"
+ },
+ "position": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "label": "CONNECT 2450",
+ "func": "CONNECT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_2450",
+ "param": "device",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py"
+ },
+ "position": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "type": "HARDWARE",
+ "data": {
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "label": "IV SWEEP 2450",
+ "func": "IV_SWEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "sweep": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current"
+ ],
+ "default": "voltage",
+ "desc": "Select the sweep mode, the opposite unit is measured.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sweep",
+ "value": "voltage"
+ },
+ "sense": {
+ "type": "select",
+ "options": [
+ "2-wire",
+ "4-wire"
+ ],
+ "default": "2-wire",
+ "desc": "Use 2 or 4 wire sense/measurement mode.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sense",
+ "value": "2-wire"
+ },
+ "start": {
+ "type": "float",
+ "default": 0,
+ "desc": "The first x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "start",
+ "value": 0
+ },
+ "stop": {
+ "type": "float",
+ "default": 1,
+ "desc": "The last x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "stop",
+ "value": 1
+ },
+ "points": {
+ "type": "float",
+ "default": 100,
+ "desc": "The number of points between start and stop.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "points",
+ "value": 100
+ },
+ "measurement_time": {
+ "type": "float",
+ "default": 1,
+ "desc": "How long to measure a single point, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_time",
+ "value": 1
+ },
+ "measurement_delay": {
+ "type": "float",
+ "default": 0.05,
+ "desc": "How long to delay between two points, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_delay",
+ "value": 0.05
+ },
+ "y_limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "The limit of the measured value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "y_limit",
+ "value": 1
+ },
+ "source_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range of the x value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "source_range",
+ "value": 2
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair",
+ "desc": "Sweep values"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py"
+ },
+ "position": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "label": "MEASURE READ 2450",
+ "func": "MEASURE_READ_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_READ_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Reading"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py"
+ },
+ "position": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "label": "MEASURE SETTINGS 2450",
+ "func": "MEASURE_SETTINGS_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "measure": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current",
+ "resistance",
+ "power"
+ ],
+ "default": "voltage",
+ "desc": "Select the measure unit",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "measure",
+ "value": "voltage"
+ },
+ "wires": {
+ "type": "select",
+ "options": [
+ "2",
+ "4"
+ ],
+ "default": "2",
+ "desc": "Select 2-wire or 4-wire sense mode.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "wires",
+ "value": "2"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "6.5",
+ "desc": "Select the number of display digits.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "digits",
+ "value": "6.5"
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 0,
+ "desc": "The measurement range. 0 == AUTO.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "meas_range",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py"
+ },
+ "position": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "type": "HARDWARE",
+ "data": {
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "label": "OUTPUT 2450",
+ "func": "OUTPUT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "output": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "on",
+ "desc": "Turn the output on or off.",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "output",
+ "value": "on"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Output settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py"
+ },
+ "position": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "label": "RESET 2450",
+ "func": "RESET_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "RESET_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py"
+ },
+ "position": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "type": "HARDWARE",
+ "data": {
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "label": "SOURCE 2450",
+ "func": "SOURCE_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "current",
+ "voltage"
+ ],
+ "default": "voltage",
+ "desc": "The type of output to use.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "function",
+ "value": "voltage"
+ },
+ "level": {
+ "type": "float",
+ "default": 1,
+ "desc": "The fixed voltage or current to output.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "level",
+ "value": 1
+ },
+ "limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "Output limit (if function=voltage, current is limited and visa versa).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "limit",
+ "value": 1
+ },
+ "terminal": {
+ "type": "select",
+ "options": [
+ "front",
+ "rear"
+ ],
+ "default": "front",
+ "desc": "The panel to output from.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "terminal",
+ "value": "front"
+ },
+ "protect": {
+ "type": "select",
+ "options": [
+ "NONE",
+ "2V",
+ "5V",
+ "10V",
+ "20V",
+ "40V",
+ "60V",
+ "80V",
+ "100V",
+ "120V",
+ "140V",
+ "160V",
+ "180V"
+ ],
+ "default": "NONE",
+ "desc": "The overvoltage protection value.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "protect",
+ "value": "5V"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Source settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py"
+ },
+ "position": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "label": "LINE",
+ "func": "LINE",
+ "type": "VISUALIZATION",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|DataFrame|Matrix|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly Line visualization of the input data"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/LINE/LINE.py"
+ },
+ "position": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py"
+ },
+ "position": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "sourceHandle": "default",
+ "target": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06default-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29input"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010input"
+ },
+ {
+ "source": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "sourceHandle": "default",
+ "target": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "targetHandle": "input",
+ "id": "reactflow__edge-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9ddefault-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787input"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9input"
+ },
+ {
+ "source": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "sourceHandle": "default",
+ "target": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29default-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809einput"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7input"
+ },
+ {
+ "source": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "sourceHandle": "default",
+ "target": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "targetHandle": "default",
+ "id": "reactflow__edge-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010default-LINE-30feab30-6d4f-4274-8877-383382355e5fdefault"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "targetHandle": "default",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749default"
+ }
+ ],
+ "viewport": {
+ "x": 994.2991122110108,
+ "y": 573.4932402039965,
+ "zoom": 0.9719556784888205
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/block_data.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/block_data.json
new file mode 100644
index 00000000..1e31504a
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/block_data.json
@@ -0,0 +1,20 @@
+{
+ "docstring": {
+ "long_description": "",
+ "short_description": "Open a VISA connection to an Keithley 2450 SourceMeter.",
+ "parameters": [
+ {
+ "name": "device",
+ "type": "VisaDevice",
+ "description": "The connected VISA device."
+ }
+ ],
+ "returns": [
+ {
+ "name": "device_addr",
+ "type": "TextBlob",
+ "description": "The IP or VISA address of the VISA device."
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/example.md b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/example.md
new file mode 100644
index 00000000..2faf7340
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/example.md
@@ -0,0 +1,19 @@
+In this example, a Keithley 2450 to generate 1V and then sweep between 0 and 1V.
+
+First the necessary blocks were added:
+
+- `CONNECT_2450`
+- `BEEP_2450`
+- `RESET_2450`
+- `SOURCE_2450`
+- `MEASURE_SETTINGS_2450`
+- `MEASUREMENT_READ_2450`
+- `IV_SWEEP_2450`
+- `BIG_NUMBER`
+- `LINE`
+
+The instrument address was set for each `2450` block. The `SOURCE_2450` block was changed in order to source 1V. The parameters in the `MEASURE_SETTINGS_2450` block were changed as necessary. The `MEASUREMENT_READ_2450` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The `IV_SWEEP_2450` block output was connected to the `LINE` plot to show the output of the sweep.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py
new file mode 100644
index 00000000..8348be3c
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py
@@ -0,0 +1,105 @@
+from typing import Optional, Literal
+from flojoy import VisaConnection, flojoy, DataContainer, OrderedPair
+from time import sleep
+
+
+@flojoy(deps={"tm_devices": "1.0"}, inject_connection=True)
+def IV_SWEEP_2450(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+ sweep: Literal["voltage", "current"] = "voltage",
+ sense: Literal["2-wire", "4-wire"] = "2-wire",
+ start: float = 0,
+ stop: float = 1,
+ points: float = 100,
+ measurement_time: float = 1,
+ measurement_delay: float = 0.05,
+ y_limit: float = 1,
+ source_range: float = 1,
+) -> OrderedPair:
+ """Sweeps current or voltage and measures the opposite for the 2450.
+
+ Requires a CONNECT_2450 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_2450 block).
+ sweep : select, default=voltage
+ Select the sweep mode, the opposite unit is measured.
+ sense : select, default=2-wire
+ Use 2 or 4 wire sense/measurement mode.
+ start : float, default=0
+ The first x value of the sweep.
+ stop : float, default=1
+ The last x value of the sweep.
+ points : float, default=100
+ The number of points between start and stop.
+ measurement_time : float, default=1
+ How long to measure a single point, in seconds.
+ measurement_delay : float, default=0.05
+ How long to delay between two points, in seconds.
+ y_limit : float, default=1
+ The limit of the measured value.
+ source_range : float, default=1
+ The range of the x value.
+
+ Returns
+ -------
+ OrderedPair
+ Sweep values
+ """
+
+ # Retrieve oscilloscope instrument connection
+ smu = connection.get_handle()
+ smu.commands.reset()
+
+ # Set the source and measure functions.
+ if sweep == "current":
+ smu.commands.smu.measure.func = smu.commands.smu.FUNC_DC_VOLTAGE
+ smu.commands.smu.source.func = smu.commands.smu.FUNC_DC_CURRENT
+ else:
+ smu.commands.smu.measure.func = smu.commands.smu.FUNC_DC_CURRENT
+ smu.commands.smu.source.func = smu.commands.smu.FUNC_DC_VOLTAGE
+
+ # Configure measurement settings.
+ smu.commands.smu.terminals = smu.commands.smu.TERMINALS_FRONT
+ if sense == "2-wire":
+ smu.commands.smu.measure.sense = smu.commands.smu.SENSE_2WIRE
+ else:
+ smu.commands.smu.measure.sense = smu.commands.smu.SENSE_4WIRE
+ smu.commands.smu.measure.autorange = smu.commands.smu.ON
+ smu.commands.smu.measure.nplc = measurement_time
+
+ # Configure source settings.
+ smu.commands.smu.source.highc = smu.commands.smu.OFF
+ smu.commands.smu.source.range = source_range
+ smu.commands.smu.source.readback = smu.commands.smu.ON
+ if sweep == "current":
+ smu.commands.smu.source.vlimit.level = y_limit
+ else:
+ smu.commands.smu.source.ilimit.level = y_limit
+ smu.commands.smu.source.sweeplinear(
+ "IVSweep",
+ start,
+ stop,
+ points,
+ measurement_delay,
+ )
+
+ # Set the operation status bit 0 to high when the trigger model is active.
+ # See Event Numbers in 2450 reference manual.
+ smu.commands.status.operation.setmap(0, 2731, 2732)
+ smu.commands.trigger.model.initiate()
+
+ while True: # This is needed to wait for the trigger model to complete
+ sleep(0.5)
+ if not int(smu.commands.status.operation.condition):
+ break
+
+ # Get the data from the buffers:
+ buffer_data = smu.get_buffers("defbuffer1.sourcevalues", "defbuffer1")
+ x = buffer_data["defbuffer1.sourcevalues"]
+ y = buffer_data["defbuffer1"]
+
+ return OrderedPair(x=x, y=y)
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/app.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/app.json
new file mode 100644
index 00000000..bfc67574
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/app.json
@@ -0,0 +1,903 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "type": "HARDWARE",
+ "data": {
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "label": "BEEP 2450",
+ "func": "BEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "duration": {
+ "type": "float",
+ "default": 0.25,
+ "desc": "The duration of the beep in seconds.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "duration",
+ "value": 0.25
+ },
+ "frequency": {
+ "type": "float",
+ "default": 2000,
+ "desc": "The frequency, or tone, of the beep in Hz.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "frequency",
+ "value": 2000
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Beep"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py"
+ },
+ "position": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "label": "CONNECT 2450",
+ "func": "CONNECT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_2450",
+ "param": "device",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py"
+ },
+ "position": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "type": "HARDWARE",
+ "data": {
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "label": "IV SWEEP 2450",
+ "func": "IV_SWEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "sweep": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current"
+ ],
+ "default": "voltage",
+ "desc": "Select the sweep mode, the opposite unit is measured.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sweep",
+ "value": "voltage"
+ },
+ "sense": {
+ "type": "select",
+ "options": [
+ "2-wire",
+ "4-wire"
+ ],
+ "default": "2-wire",
+ "desc": "Use 2 or 4 wire sense/measurement mode.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sense",
+ "value": "2-wire"
+ },
+ "start": {
+ "type": "float",
+ "default": 0,
+ "desc": "The first x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "start",
+ "value": 0
+ },
+ "stop": {
+ "type": "float",
+ "default": 1,
+ "desc": "The last x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "stop",
+ "value": 1
+ },
+ "points": {
+ "type": "float",
+ "default": 100,
+ "desc": "The number of points between start and stop.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "points",
+ "value": 100
+ },
+ "measurement_time": {
+ "type": "float",
+ "default": 1,
+ "desc": "How long to measure a single point, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_time",
+ "value": 1
+ },
+ "measurement_delay": {
+ "type": "float",
+ "default": 0.05,
+ "desc": "How long to delay between two points, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_delay",
+ "value": 0.05
+ },
+ "y_limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "The limit of the measured value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "y_limit",
+ "value": 1
+ },
+ "source_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range of the x value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "source_range",
+ "value": 2
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair",
+ "desc": "Sweep values"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py"
+ },
+ "position": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "label": "MEASURE READ 2450",
+ "func": "MEASURE_READ_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_READ_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Reading"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py"
+ },
+ "position": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "label": "MEASURE SETTINGS 2450",
+ "func": "MEASURE_SETTINGS_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "measure": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current",
+ "resistance",
+ "power"
+ ],
+ "default": "voltage",
+ "desc": "Select the measure unit",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "measure",
+ "value": "voltage"
+ },
+ "wires": {
+ "type": "select",
+ "options": [
+ "2",
+ "4"
+ ],
+ "default": "2",
+ "desc": "Select 2-wire or 4-wire sense mode.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "wires",
+ "value": "2"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "6.5",
+ "desc": "Select the number of display digits.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "digits",
+ "value": "6.5"
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 0,
+ "desc": "The measurement range. 0 == AUTO.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "meas_range",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py"
+ },
+ "position": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "type": "HARDWARE",
+ "data": {
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "label": "OUTPUT 2450",
+ "func": "OUTPUT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "output": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "on",
+ "desc": "Turn the output on or off.",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "output",
+ "value": "on"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Output settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py"
+ },
+ "position": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "label": "RESET 2450",
+ "func": "RESET_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "RESET_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py"
+ },
+ "position": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "type": "HARDWARE",
+ "data": {
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "label": "SOURCE 2450",
+ "func": "SOURCE_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "current",
+ "voltage"
+ ],
+ "default": "voltage",
+ "desc": "The type of output to use.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "function",
+ "value": "voltage"
+ },
+ "level": {
+ "type": "float",
+ "default": 1,
+ "desc": "The fixed voltage or current to output.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "level",
+ "value": 1
+ },
+ "limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "Output limit (if function=voltage, current is limited and visa versa).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "limit",
+ "value": 1
+ },
+ "terminal": {
+ "type": "select",
+ "options": [
+ "front",
+ "rear"
+ ],
+ "default": "front",
+ "desc": "The panel to output from.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "terminal",
+ "value": "front"
+ },
+ "protect": {
+ "type": "select",
+ "options": [
+ "NONE",
+ "2V",
+ "5V",
+ "10V",
+ "20V",
+ "40V",
+ "60V",
+ "80V",
+ "100V",
+ "120V",
+ "140V",
+ "160V",
+ "180V"
+ ],
+ "default": "NONE",
+ "desc": "The overvoltage protection value.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "protect",
+ "value": "5V"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Source settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py"
+ },
+ "position": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "label": "LINE",
+ "func": "LINE",
+ "type": "VISUALIZATION",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|DataFrame|Matrix|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly Line visualization of the input data"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/LINE/LINE.py"
+ },
+ "position": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py"
+ },
+ "position": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "sourceHandle": "default",
+ "target": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06default-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29input"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010input"
+ },
+ {
+ "source": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "sourceHandle": "default",
+ "target": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "targetHandle": "input",
+ "id": "reactflow__edge-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9ddefault-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787input"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9input"
+ },
+ {
+ "source": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "sourceHandle": "default",
+ "target": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29default-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809einput"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7input"
+ },
+ {
+ "source": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "sourceHandle": "default",
+ "target": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "targetHandle": "default",
+ "id": "reactflow__edge-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010default-LINE-30feab30-6d4f-4274-8877-383382355e5fdefault"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "targetHandle": "default",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749default"
+ }
+ ],
+ "viewport": {
+ "x": 994.2991122110108,
+ "y": 573.4932402039965,
+ "zoom": 0.9719556784888205
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/block_data.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/block_data.json
new file mode 100644
index 00000000..f342c185
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/block_data.json
@@ -0,0 +1,65 @@
+{
+ "docstring": {
+ "long_description": "Requires a CONNECT_2450 block to create the connection.",
+ "short_description": "Sweeps current or voltage and measures the opposite for the 2450.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_2450 block)."
+ },
+ {
+ "name": "sweep",
+ "type": "select, default=voltage",
+ "description": "Select the sweep mode, the opposite unit is measured."
+ },
+ {
+ "name": "sense",
+ "type": "select, default=2-wire",
+ "description": "Use 2 or 4 wire sense/measurement mode."
+ },
+ {
+ "name": "start",
+ "type": "float, default=0",
+ "description": "The first x value of the sweep."
+ },
+ {
+ "name": "stop",
+ "type": "float, default=1",
+ "description": "The last x value of the sweep."
+ },
+ {
+ "name": "points",
+ "type": "float, default=100",
+ "description": "The number of points between start and stop."
+ },
+ {
+ "name": "measurement_time",
+ "type": "float, default=1",
+ "description": "How long to measure a single point, in seconds."
+ },
+ {
+ "name": "measurement_delay",
+ "type": "float, default=0.05",
+ "description": "How long to delay between two points, in seconds."
+ },
+ {
+ "name": "y_limit",
+ "type": "float, default=1",
+ "description": "The limit of the measured value."
+ },
+ {
+ "name": "source_range",
+ "type": "float, default=1",
+ "description": "The range of the x value."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "OrderedPair",
+ "description": "Sweep values"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/example.md b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/example.md
new file mode 100644
index 00000000..2faf7340
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/example.md
@@ -0,0 +1,19 @@
+In this example, a Keithley 2450 to generate 1V and then sweep between 0 and 1V.
+
+First the necessary blocks were added:
+
+- `CONNECT_2450`
+- `BEEP_2450`
+- `RESET_2450`
+- `SOURCE_2450`
+- `MEASURE_SETTINGS_2450`
+- `MEASUREMENT_READ_2450`
+- `IV_SWEEP_2450`
+- `BIG_NUMBER`
+- `LINE`
+
+The instrument address was set for each `2450` block. The `SOURCE_2450` block was changed in order to source 1V. The parameters in the `MEASURE_SETTINGS_2450` block were changed as necessary. The `MEASUREMENT_READ_2450` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The `IV_SWEEP_2450` block output was connected to the `LINE` plot to show the output of the sweep.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py
new file mode 100644
index 00000000..dbe980cc
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py
@@ -0,0 +1,32 @@
+from typing import Optional
+from flojoy import VisaConnection, flojoy, DataContainer, Scalar
+
+
+@flojoy(deps={"tm_devices": "1.0"}, inject_connection=True)
+def MEASURE_READ_2450(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+) -> Scalar:
+ """Returns the measurement reading from the 2450.
+
+ Use the MEASURE_SETTINGS_2450 block to change the measurement settings.
+
+ Requires a CONNECT_2450 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_2450 block).
+
+ Returns
+ -------
+ Scalar
+ Reading
+ """
+
+ # Retrieve oscilloscope instrument connection
+ smu = connection.get_handle()
+
+ c = float(smu.commands.smu.measure.read())
+
+ return Scalar(c=c)
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/app.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/app.json
new file mode 100644
index 00000000..bfc67574
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/app.json
@@ -0,0 +1,903 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "type": "HARDWARE",
+ "data": {
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "label": "BEEP 2450",
+ "func": "BEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "duration": {
+ "type": "float",
+ "default": 0.25,
+ "desc": "The duration of the beep in seconds.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "duration",
+ "value": 0.25
+ },
+ "frequency": {
+ "type": "float",
+ "default": 2000,
+ "desc": "The frequency, or tone, of the beep in Hz.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "frequency",
+ "value": 2000
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Beep"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py"
+ },
+ "position": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "label": "CONNECT 2450",
+ "func": "CONNECT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_2450",
+ "param": "device",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py"
+ },
+ "position": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "type": "HARDWARE",
+ "data": {
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "label": "IV SWEEP 2450",
+ "func": "IV_SWEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "sweep": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current"
+ ],
+ "default": "voltage",
+ "desc": "Select the sweep mode, the opposite unit is measured.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sweep",
+ "value": "voltage"
+ },
+ "sense": {
+ "type": "select",
+ "options": [
+ "2-wire",
+ "4-wire"
+ ],
+ "default": "2-wire",
+ "desc": "Use 2 or 4 wire sense/measurement mode.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sense",
+ "value": "2-wire"
+ },
+ "start": {
+ "type": "float",
+ "default": 0,
+ "desc": "The first x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "start",
+ "value": 0
+ },
+ "stop": {
+ "type": "float",
+ "default": 1,
+ "desc": "The last x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "stop",
+ "value": 1
+ },
+ "points": {
+ "type": "float",
+ "default": 100,
+ "desc": "The number of points between start and stop.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "points",
+ "value": 100
+ },
+ "measurement_time": {
+ "type": "float",
+ "default": 1,
+ "desc": "How long to measure a single point, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_time",
+ "value": 1
+ },
+ "measurement_delay": {
+ "type": "float",
+ "default": 0.05,
+ "desc": "How long to delay between two points, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_delay",
+ "value": 0.05
+ },
+ "y_limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "The limit of the measured value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "y_limit",
+ "value": 1
+ },
+ "source_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range of the x value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "source_range",
+ "value": 2
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair",
+ "desc": "Sweep values"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py"
+ },
+ "position": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "label": "MEASURE READ 2450",
+ "func": "MEASURE_READ_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_READ_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Reading"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py"
+ },
+ "position": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "label": "MEASURE SETTINGS 2450",
+ "func": "MEASURE_SETTINGS_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "measure": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current",
+ "resistance",
+ "power"
+ ],
+ "default": "voltage",
+ "desc": "Select the measure unit",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "measure",
+ "value": "voltage"
+ },
+ "wires": {
+ "type": "select",
+ "options": [
+ "2",
+ "4"
+ ],
+ "default": "2",
+ "desc": "Select 2-wire or 4-wire sense mode.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "wires",
+ "value": "2"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "6.5",
+ "desc": "Select the number of display digits.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "digits",
+ "value": "6.5"
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 0,
+ "desc": "The measurement range. 0 == AUTO.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "meas_range",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py"
+ },
+ "position": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "type": "HARDWARE",
+ "data": {
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "label": "OUTPUT 2450",
+ "func": "OUTPUT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "output": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "on",
+ "desc": "Turn the output on or off.",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "output",
+ "value": "on"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Output settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py"
+ },
+ "position": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "label": "RESET 2450",
+ "func": "RESET_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "RESET_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py"
+ },
+ "position": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "type": "HARDWARE",
+ "data": {
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "label": "SOURCE 2450",
+ "func": "SOURCE_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "current",
+ "voltage"
+ ],
+ "default": "voltage",
+ "desc": "The type of output to use.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "function",
+ "value": "voltage"
+ },
+ "level": {
+ "type": "float",
+ "default": 1,
+ "desc": "The fixed voltage or current to output.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "level",
+ "value": 1
+ },
+ "limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "Output limit (if function=voltage, current is limited and visa versa).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "limit",
+ "value": 1
+ },
+ "terminal": {
+ "type": "select",
+ "options": [
+ "front",
+ "rear"
+ ],
+ "default": "front",
+ "desc": "The panel to output from.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "terminal",
+ "value": "front"
+ },
+ "protect": {
+ "type": "select",
+ "options": [
+ "NONE",
+ "2V",
+ "5V",
+ "10V",
+ "20V",
+ "40V",
+ "60V",
+ "80V",
+ "100V",
+ "120V",
+ "140V",
+ "160V",
+ "180V"
+ ],
+ "default": "NONE",
+ "desc": "The overvoltage protection value.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "protect",
+ "value": "5V"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Source settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py"
+ },
+ "position": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "label": "LINE",
+ "func": "LINE",
+ "type": "VISUALIZATION",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|DataFrame|Matrix|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly Line visualization of the input data"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/LINE/LINE.py"
+ },
+ "position": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py"
+ },
+ "position": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "sourceHandle": "default",
+ "target": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06default-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29input"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010input"
+ },
+ {
+ "source": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "sourceHandle": "default",
+ "target": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "targetHandle": "input",
+ "id": "reactflow__edge-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9ddefault-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787input"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9input"
+ },
+ {
+ "source": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "sourceHandle": "default",
+ "target": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29default-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809einput"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7input"
+ },
+ {
+ "source": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "sourceHandle": "default",
+ "target": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "targetHandle": "default",
+ "id": "reactflow__edge-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010default-LINE-30feab30-6d4f-4274-8877-383382355e5fdefault"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "targetHandle": "default",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749default"
+ }
+ ],
+ "viewport": {
+ "x": 994.2991122110108,
+ "y": 573.4932402039965,
+ "zoom": 0.9719556784888205
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/block_data.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/block_data.json
new file mode 100644
index 00000000..10059055
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/block_data.json
@@ -0,0 +1,20 @@
+{
+ "docstring": {
+ "long_description": "Use the MEASURE_SETTINGS_2450 block to change the measurement settings.\n\nRequires a CONNECT_2450 block to create the connection.",
+ "short_description": "Returns the measurement reading from the 2450.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_2450 block)."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "Scalar",
+ "description": "Reading"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/example.md b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/example.md
new file mode 100644
index 00000000..2faf7340
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/example.md
@@ -0,0 +1,19 @@
+In this example, a Keithley 2450 to generate 1V and then sweep between 0 and 1V.
+
+First the necessary blocks were added:
+
+- `CONNECT_2450`
+- `BEEP_2450`
+- `RESET_2450`
+- `SOURCE_2450`
+- `MEASURE_SETTINGS_2450`
+- `MEASUREMENT_READ_2450`
+- `IV_SWEEP_2450`
+- `BIG_NUMBER`
+- `LINE`
+
+The instrument address was set for each `2450` block. The `SOURCE_2450` block was changed in order to source 1V. The parameters in the `MEASURE_SETTINGS_2450` block were changed as necessary. The `MEASUREMENT_READ_2450` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The `IV_SWEEP_2450` block output was connected to the `LINE` plot to show the output of the sweep.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py
new file mode 100644
index 00000000..6d83e2c3
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py
@@ -0,0 +1,64 @@
+from typing import Optional, Literal
+from flojoy import VisaConnection, flojoy, DataContainer, TextBlob
+
+
+@flojoy(deps={"tm_devices": "1.0"}, inject_connection=True)
+def MEASURE_SETTINGS_2450(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+ measure: Literal["voltage", "current", "resistance", "power"] = "voltage",
+ wires: Literal["2", "4"] = "2",
+ digits: Literal["3.5", "4.5", "5.5", "6.5"] = "6.5",
+ meas_range: float = 0,
+) -> TextBlob:
+ """Changes the measurement settings for the 2450.
+
+ Use the MEASURE_READ_2450 block to return a measurement.
+
+ Requires a CONNECT_2450 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_2450 block).
+ measure : select, default=voltage
+ Select the measure unit
+ wires : select, default=2
+ Select 2-wire or 4-wire sense mode.
+ digits : select, default=6.5
+ Select the number of display digits.
+ meas_range : int, default=0
+ The measurement range. 0 == AUTO.
+
+ Returns
+ -------
+ TextBlob
+ Measurement
+ """
+
+ # Retrieve oscilloscope instrument connection
+ smu = connection.get_handle()
+
+ smu.commands.smu.measure.displaydigits = f"smu.DIGITS_{digits[0]}_5"
+
+ match measure:
+ case "current":
+ smu.commands.smu.measure.func = "smu.FUNC_DC_CURRENT"
+ case "voltage":
+ smu.commands.smu.measure.func = "smu.FUNC_DC_VOLTAGE"
+ case "resistance":
+ smu.commands.smu.measure.func = "smu.FUNC_DC_RESISTANCE"
+ case "power":
+ smu.commands.smu.measure.func = "smu.FUNC_DC_POWER"
+
+ if wires == "2":
+ smu.commands.smu.SENSE_2WIRE
+ else:
+ smu.commands.smu.SENSE_4WIRE
+
+ if meas_range == 0:
+ smu.commands.smu.measure.autorange = "smu.ON"
+ else:
+ smu.commands.smu.measure.range = meas_range
+
+ return TextBlob(text_blob=f"Measure {measure}")
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/app.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/app.json
new file mode 100644
index 00000000..bfc67574
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/app.json
@@ -0,0 +1,903 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "type": "HARDWARE",
+ "data": {
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "label": "BEEP 2450",
+ "func": "BEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "duration": {
+ "type": "float",
+ "default": 0.25,
+ "desc": "The duration of the beep in seconds.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "duration",
+ "value": 0.25
+ },
+ "frequency": {
+ "type": "float",
+ "default": 2000,
+ "desc": "The frequency, or tone, of the beep in Hz.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "frequency",
+ "value": 2000
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Beep"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py"
+ },
+ "position": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "label": "CONNECT 2450",
+ "func": "CONNECT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_2450",
+ "param": "device",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py"
+ },
+ "position": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "type": "HARDWARE",
+ "data": {
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "label": "IV SWEEP 2450",
+ "func": "IV_SWEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "sweep": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current"
+ ],
+ "default": "voltage",
+ "desc": "Select the sweep mode, the opposite unit is measured.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sweep",
+ "value": "voltage"
+ },
+ "sense": {
+ "type": "select",
+ "options": [
+ "2-wire",
+ "4-wire"
+ ],
+ "default": "2-wire",
+ "desc": "Use 2 or 4 wire sense/measurement mode.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sense",
+ "value": "2-wire"
+ },
+ "start": {
+ "type": "float",
+ "default": 0,
+ "desc": "The first x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "start",
+ "value": 0
+ },
+ "stop": {
+ "type": "float",
+ "default": 1,
+ "desc": "The last x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "stop",
+ "value": 1
+ },
+ "points": {
+ "type": "float",
+ "default": 100,
+ "desc": "The number of points between start and stop.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "points",
+ "value": 100
+ },
+ "measurement_time": {
+ "type": "float",
+ "default": 1,
+ "desc": "How long to measure a single point, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_time",
+ "value": 1
+ },
+ "measurement_delay": {
+ "type": "float",
+ "default": 0.05,
+ "desc": "How long to delay between two points, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_delay",
+ "value": 0.05
+ },
+ "y_limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "The limit of the measured value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "y_limit",
+ "value": 1
+ },
+ "source_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range of the x value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "source_range",
+ "value": 2
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair",
+ "desc": "Sweep values"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py"
+ },
+ "position": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "label": "MEASURE READ 2450",
+ "func": "MEASURE_READ_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_READ_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Reading"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py"
+ },
+ "position": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "label": "MEASURE SETTINGS 2450",
+ "func": "MEASURE_SETTINGS_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "measure": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current",
+ "resistance",
+ "power"
+ ],
+ "default": "voltage",
+ "desc": "Select the measure unit",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "measure",
+ "value": "voltage"
+ },
+ "wires": {
+ "type": "select",
+ "options": [
+ "2",
+ "4"
+ ],
+ "default": "2",
+ "desc": "Select 2-wire or 4-wire sense mode.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "wires",
+ "value": "2"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "6.5",
+ "desc": "Select the number of display digits.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "digits",
+ "value": "6.5"
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 0,
+ "desc": "The measurement range. 0 == AUTO.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "meas_range",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py"
+ },
+ "position": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "type": "HARDWARE",
+ "data": {
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "label": "OUTPUT 2450",
+ "func": "OUTPUT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "output": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "on",
+ "desc": "Turn the output on or off.",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "output",
+ "value": "on"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Output settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py"
+ },
+ "position": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "label": "RESET 2450",
+ "func": "RESET_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "RESET_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py"
+ },
+ "position": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "type": "HARDWARE",
+ "data": {
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "label": "SOURCE 2450",
+ "func": "SOURCE_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "current",
+ "voltage"
+ ],
+ "default": "voltage",
+ "desc": "The type of output to use.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "function",
+ "value": "voltage"
+ },
+ "level": {
+ "type": "float",
+ "default": 1,
+ "desc": "The fixed voltage or current to output.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "level",
+ "value": 1
+ },
+ "limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "Output limit (if function=voltage, current is limited and visa versa).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "limit",
+ "value": 1
+ },
+ "terminal": {
+ "type": "select",
+ "options": [
+ "front",
+ "rear"
+ ],
+ "default": "front",
+ "desc": "The panel to output from.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "terminal",
+ "value": "front"
+ },
+ "protect": {
+ "type": "select",
+ "options": [
+ "NONE",
+ "2V",
+ "5V",
+ "10V",
+ "20V",
+ "40V",
+ "60V",
+ "80V",
+ "100V",
+ "120V",
+ "140V",
+ "160V",
+ "180V"
+ ],
+ "default": "NONE",
+ "desc": "The overvoltage protection value.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "protect",
+ "value": "5V"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Source settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py"
+ },
+ "position": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "label": "LINE",
+ "func": "LINE",
+ "type": "VISUALIZATION",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|DataFrame|Matrix|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly Line visualization of the input data"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/LINE/LINE.py"
+ },
+ "position": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py"
+ },
+ "position": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "sourceHandle": "default",
+ "target": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06default-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29input"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010input"
+ },
+ {
+ "source": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "sourceHandle": "default",
+ "target": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "targetHandle": "input",
+ "id": "reactflow__edge-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9ddefault-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787input"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9input"
+ },
+ {
+ "source": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "sourceHandle": "default",
+ "target": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29default-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809einput"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7input"
+ },
+ {
+ "source": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "sourceHandle": "default",
+ "target": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "targetHandle": "default",
+ "id": "reactflow__edge-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010default-LINE-30feab30-6d4f-4274-8877-383382355e5fdefault"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "targetHandle": "default",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749default"
+ }
+ ],
+ "viewport": {
+ "x": 994.2991122110108,
+ "y": 573.4932402039965,
+ "zoom": 0.9719556784888205
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/block_data.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/block_data.json
new file mode 100644
index 00000000..47411faa
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/block_data.json
@@ -0,0 +1,40 @@
+{
+ "docstring": {
+ "long_description": "Use the MEASURE_READ_2450 block to return a measurement.\n\nRequires a CONNECT_2450 block to create the connection.",
+ "short_description": "Changes the measurement settings for the 2450.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_2450 block)."
+ },
+ {
+ "name": "measure",
+ "type": "select, default=voltage",
+ "description": "Select the measure unit"
+ },
+ {
+ "name": "wires",
+ "type": "select, default=2",
+ "description": "Select 2-wire or 4-wire sense mode."
+ },
+ {
+ "name": "digits",
+ "type": "select, default=6.5",
+ "description": "Select the number of display digits."
+ },
+ {
+ "name": "meas_range",
+ "type": "int, default=0",
+ "description": "The measurement range. 0 == AUTO."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": "Measurement"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/example.md b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/example.md
new file mode 100644
index 00000000..2faf7340
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/example.md
@@ -0,0 +1,19 @@
+In this example, a Keithley 2450 to generate 1V and then sweep between 0 and 1V.
+
+First the necessary blocks were added:
+
+- `CONNECT_2450`
+- `BEEP_2450`
+- `RESET_2450`
+- `SOURCE_2450`
+- `MEASURE_SETTINGS_2450`
+- `MEASUREMENT_READ_2450`
+- `IV_SWEEP_2450`
+- `BIG_NUMBER`
+- `LINE`
+
+The instrument address was set for each `2450` block. The `SOURCE_2450` block was changed in order to source 1V. The parameters in the `MEASURE_SETTINGS_2450` block were changed as necessary. The `MEASUREMENT_READ_2450` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The `IV_SWEEP_2450` block output was connected to the `LINE` plot to show the output of the sweep.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py
new file mode 100644
index 00000000..c105e6f7
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py
@@ -0,0 +1,38 @@
+from typing import Optional, Literal
+from flojoy import VisaConnection, flojoy, DataContainer, TextBlob
+
+
+@flojoy(deps={"tm_devices": "1.0"}, inject_connection=True)
+def OUTPUT_2450(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+ output: Literal["on", "off"] = "on",
+) -> TextBlob:
+ """Turns the source output on or off.
+
+ Use the SOURCE_2450 block to change the source settings.
+
+ Requires a CONNECT_2450 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_2450 block).
+ output : select, default=off
+ Turn the output on or off.
+
+ Returns
+ -------
+ TextBlob
+ Output settings
+ """
+
+ # Retrieve oscilloscope instrument connection
+ smu = connection.get_handle()
+
+ if output == "on":
+ smu.commands.smu.source.output = "smu.ON"
+ else:
+ smu.commands.smu.source.output = "smu.OFF"
+
+ return TextBlob(text_blob=f"Output {output}")
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/app.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/app.json
new file mode 100644
index 00000000..bfc67574
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/app.json
@@ -0,0 +1,903 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "type": "HARDWARE",
+ "data": {
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "label": "BEEP 2450",
+ "func": "BEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "duration": {
+ "type": "float",
+ "default": 0.25,
+ "desc": "The duration of the beep in seconds.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "duration",
+ "value": 0.25
+ },
+ "frequency": {
+ "type": "float",
+ "default": 2000,
+ "desc": "The frequency, or tone, of the beep in Hz.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "frequency",
+ "value": 2000
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Beep"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py"
+ },
+ "position": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "label": "CONNECT 2450",
+ "func": "CONNECT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_2450",
+ "param": "device",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py"
+ },
+ "position": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "type": "HARDWARE",
+ "data": {
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "label": "IV SWEEP 2450",
+ "func": "IV_SWEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "sweep": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current"
+ ],
+ "default": "voltage",
+ "desc": "Select the sweep mode, the opposite unit is measured.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sweep",
+ "value": "voltage"
+ },
+ "sense": {
+ "type": "select",
+ "options": [
+ "2-wire",
+ "4-wire"
+ ],
+ "default": "2-wire",
+ "desc": "Use 2 or 4 wire sense/measurement mode.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sense",
+ "value": "2-wire"
+ },
+ "start": {
+ "type": "float",
+ "default": 0,
+ "desc": "The first x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "start",
+ "value": 0
+ },
+ "stop": {
+ "type": "float",
+ "default": 1,
+ "desc": "The last x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "stop",
+ "value": 1
+ },
+ "points": {
+ "type": "float",
+ "default": 100,
+ "desc": "The number of points between start and stop.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "points",
+ "value": 100
+ },
+ "measurement_time": {
+ "type": "float",
+ "default": 1,
+ "desc": "How long to measure a single point, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_time",
+ "value": 1
+ },
+ "measurement_delay": {
+ "type": "float",
+ "default": 0.05,
+ "desc": "How long to delay between two points, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_delay",
+ "value": 0.05
+ },
+ "y_limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "The limit of the measured value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "y_limit",
+ "value": 1
+ },
+ "source_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range of the x value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "source_range",
+ "value": 2
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair",
+ "desc": "Sweep values"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py"
+ },
+ "position": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "label": "MEASURE READ 2450",
+ "func": "MEASURE_READ_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_READ_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Reading"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py"
+ },
+ "position": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "label": "MEASURE SETTINGS 2450",
+ "func": "MEASURE_SETTINGS_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "measure": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current",
+ "resistance",
+ "power"
+ ],
+ "default": "voltage",
+ "desc": "Select the measure unit",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "measure",
+ "value": "voltage"
+ },
+ "wires": {
+ "type": "select",
+ "options": [
+ "2",
+ "4"
+ ],
+ "default": "2",
+ "desc": "Select 2-wire or 4-wire sense mode.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "wires",
+ "value": "2"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "6.5",
+ "desc": "Select the number of display digits.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "digits",
+ "value": "6.5"
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 0,
+ "desc": "The measurement range. 0 == AUTO.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "meas_range",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py"
+ },
+ "position": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "type": "HARDWARE",
+ "data": {
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "label": "OUTPUT 2450",
+ "func": "OUTPUT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "output": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "on",
+ "desc": "Turn the output on or off.",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "output",
+ "value": "on"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Output settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py"
+ },
+ "position": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "label": "RESET 2450",
+ "func": "RESET_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "RESET_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py"
+ },
+ "position": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "type": "HARDWARE",
+ "data": {
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "label": "SOURCE 2450",
+ "func": "SOURCE_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "current",
+ "voltage"
+ ],
+ "default": "voltage",
+ "desc": "The type of output to use.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "function",
+ "value": "voltage"
+ },
+ "level": {
+ "type": "float",
+ "default": 1,
+ "desc": "The fixed voltage or current to output.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "level",
+ "value": 1
+ },
+ "limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "Output limit (if function=voltage, current is limited and visa versa).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "limit",
+ "value": 1
+ },
+ "terminal": {
+ "type": "select",
+ "options": [
+ "front",
+ "rear"
+ ],
+ "default": "front",
+ "desc": "The panel to output from.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "terminal",
+ "value": "front"
+ },
+ "protect": {
+ "type": "select",
+ "options": [
+ "NONE",
+ "2V",
+ "5V",
+ "10V",
+ "20V",
+ "40V",
+ "60V",
+ "80V",
+ "100V",
+ "120V",
+ "140V",
+ "160V",
+ "180V"
+ ],
+ "default": "NONE",
+ "desc": "The overvoltage protection value.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "protect",
+ "value": "5V"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Source settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py"
+ },
+ "position": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "label": "LINE",
+ "func": "LINE",
+ "type": "VISUALIZATION",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|DataFrame|Matrix|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly Line visualization of the input data"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/LINE/LINE.py"
+ },
+ "position": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py"
+ },
+ "position": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "sourceHandle": "default",
+ "target": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06default-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29input"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010input"
+ },
+ {
+ "source": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "sourceHandle": "default",
+ "target": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "targetHandle": "input",
+ "id": "reactflow__edge-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9ddefault-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787input"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9input"
+ },
+ {
+ "source": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "sourceHandle": "default",
+ "target": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29default-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809einput"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7input"
+ },
+ {
+ "source": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "sourceHandle": "default",
+ "target": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "targetHandle": "default",
+ "id": "reactflow__edge-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010default-LINE-30feab30-6d4f-4274-8877-383382355e5fdefault"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "targetHandle": "default",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749default"
+ }
+ ],
+ "viewport": {
+ "x": 994.2991122110108,
+ "y": 573.4932402039965,
+ "zoom": 0.9719556784888205
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/block_data.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/block_data.json
new file mode 100644
index 00000000..6abea983
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/block_data.json
@@ -0,0 +1,25 @@
+{
+ "docstring": {
+ "long_description": "Use the SOURCE_2450 block to change the source settings.\n\nRequires a CONNECT_2450 block to create the connection.",
+ "short_description": "Turns the source output on or off.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_2450 block)."
+ },
+ {
+ "name": "output",
+ "type": "select, default=off",
+ "description": "Turn the output on or off."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": "Output settings"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/example.md b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/example.md
new file mode 100644
index 00000000..2faf7340
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/example.md
@@ -0,0 +1,19 @@
+In this example, a Keithley 2450 to generate 1V and then sweep between 0 and 1V.
+
+First the necessary blocks were added:
+
+- `CONNECT_2450`
+- `BEEP_2450`
+- `RESET_2450`
+- `SOURCE_2450`
+- `MEASURE_SETTINGS_2450`
+- `MEASUREMENT_READ_2450`
+- `IV_SWEEP_2450`
+- `BIG_NUMBER`
+- `LINE`
+
+The instrument address was set for each `2450` block. The `SOURCE_2450` block was changed in order to source 1V. The parameters in the `MEASURE_SETTINGS_2450` block were changed as necessary. The `MEASUREMENT_READ_2450` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The `IV_SWEEP_2450` block output was connected to the `LINE` plot to show the output of the sweep.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py
new file mode 100644
index 00000000..7e6038ea
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py
@@ -0,0 +1,28 @@
+from typing import Optional
+from flojoy import VisaConnection, flojoy, DataContainer, TextBlob
+
+
+@flojoy(inject_connection=True)
+def RESET_2450(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+) -> TextBlob:
+ """Resets the 2450 and clears buffers.
+
+ Requires a CONNECT_2450 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_2450 block).
+
+ Returns
+ -------
+ TextBlob
+ Reset
+ """
+
+ smu = connection.get_handle()
+ smu.commands.reset()
+
+ return TextBlob(text_blob="Reset 2450")
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/app.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/app.json
new file mode 100644
index 00000000..bfc67574
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/app.json
@@ -0,0 +1,903 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "type": "HARDWARE",
+ "data": {
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "label": "BEEP 2450",
+ "func": "BEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "duration": {
+ "type": "float",
+ "default": 0.25,
+ "desc": "The duration of the beep in seconds.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "duration",
+ "value": 0.25
+ },
+ "frequency": {
+ "type": "float",
+ "default": 2000,
+ "desc": "The frequency, or tone, of the beep in Hz.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "frequency",
+ "value": 2000
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Beep"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py"
+ },
+ "position": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "label": "CONNECT 2450",
+ "func": "CONNECT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_2450",
+ "param": "device",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py"
+ },
+ "position": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "type": "HARDWARE",
+ "data": {
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "label": "IV SWEEP 2450",
+ "func": "IV_SWEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "sweep": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current"
+ ],
+ "default": "voltage",
+ "desc": "Select the sweep mode, the opposite unit is measured.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sweep",
+ "value": "voltage"
+ },
+ "sense": {
+ "type": "select",
+ "options": [
+ "2-wire",
+ "4-wire"
+ ],
+ "default": "2-wire",
+ "desc": "Use 2 or 4 wire sense/measurement mode.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sense",
+ "value": "2-wire"
+ },
+ "start": {
+ "type": "float",
+ "default": 0,
+ "desc": "The first x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "start",
+ "value": 0
+ },
+ "stop": {
+ "type": "float",
+ "default": 1,
+ "desc": "The last x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "stop",
+ "value": 1
+ },
+ "points": {
+ "type": "float",
+ "default": 100,
+ "desc": "The number of points between start and stop.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "points",
+ "value": 100
+ },
+ "measurement_time": {
+ "type": "float",
+ "default": 1,
+ "desc": "How long to measure a single point, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_time",
+ "value": 1
+ },
+ "measurement_delay": {
+ "type": "float",
+ "default": 0.05,
+ "desc": "How long to delay between two points, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_delay",
+ "value": 0.05
+ },
+ "y_limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "The limit of the measured value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "y_limit",
+ "value": 1
+ },
+ "source_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range of the x value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "source_range",
+ "value": 2
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair",
+ "desc": "Sweep values"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py"
+ },
+ "position": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "label": "MEASURE READ 2450",
+ "func": "MEASURE_READ_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_READ_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Reading"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py"
+ },
+ "position": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "label": "MEASURE SETTINGS 2450",
+ "func": "MEASURE_SETTINGS_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "measure": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current",
+ "resistance",
+ "power"
+ ],
+ "default": "voltage",
+ "desc": "Select the measure unit",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "measure",
+ "value": "voltage"
+ },
+ "wires": {
+ "type": "select",
+ "options": [
+ "2",
+ "4"
+ ],
+ "default": "2",
+ "desc": "Select 2-wire or 4-wire sense mode.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "wires",
+ "value": "2"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "6.5",
+ "desc": "Select the number of display digits.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "digits",
+ "value": "6.5"
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 0,
+ "desc": "The measurement range. 0 == AUTO.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "meas_range",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py"
+ },
+ "position": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "type": "HARDWARE",
+ "data": {
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "label": "OUTPUT 2450",
+ "func": "OUTPUT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "output": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "on",
+ "desc": "Turn the output on or off.",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "output",
+ "value": "on"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Output settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py"
+ },
+ "position": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "label": "RESET 2450",
+ "func": "RESET_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "RESET_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py"
+ },
+ "position": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "type": "HARDWARE",
+ "data": {
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "label": "SOURCE 2450",
+ "func": "SOURCE_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "current",
+ "voltage"
+ ],
+ "default": "voltage",
+ "desc": "The type of output to use.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "function",
+ "value": "voltage"
+ },
+ "level": {
+ "type": "float",
+ "default": 1,
+ "desc": "The fixed voltage or current to output.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "level",
+ "value": 1
+ },
+ "limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "Output limit (if function=voltage, current is limited and visa versa).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "limit",
+ "value": 1
+ },
+ "terminal": {
+ "type": "select",
+ "options": [
+ "front",
+ "rear"
+ ],
+ "default": "front",
+ "desc": "The panel to output from.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "terminal",
+ "value": "front"
+ },
+ "protect": {
+ "type": "select",
+ "options": [
+ "NONE",
+ "2V",
+ "5V",
+ "10V",
+ "20V",
+ "40V",
+ "60V",
+ "80V",
+ "100V",
+ "120V",
+ "140V",
+ "160V",
+ "180V"
+ ],
+ "default": "NONE",
+ "desc": "The overvoltage protection value.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "protect",
+ "value": "5V"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Source settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py"
+ },
+ "position": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "label": "LINE",
+ "func": "LINE",
+ "type": "VISUALIZATION",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|DataFrame|Matrix|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly Line visualization of the input data"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/LINE/LINE.py"
+ },
+ "position": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py"
+ },
+ "position": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "sourceHandle": "default",
+ "target": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06default-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29input"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010input"
+ },
+ {
+ "source": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "sourceHandle": "default",
+ "target": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "targetHandle": "input",
+ "id": "reactflow__edge-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9ddefault-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787input"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9input"
+ },
+ {
+ "source": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "sourceHandle": "default",
+ "target": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29default-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809einput"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7input"
+ },
+ {
+ "source": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "sourceHandle": "default",
+ "target": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "targetHandle": "default",
+ "id": "reactflow__edge-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010default-LINE-30feab30-6d4f-4274-8877-383382355e5fdefault"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "targetHandle": "default",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749default"
+ }
+ ],
+ "viewport": {
+ "x": 994.2991122110108,
+ "y": 573.4932402039965,
+ "zoom": 0.9719556784888205
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/block_data.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/block_data.json
new file mode 100644
index 00000000..42b85f70
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/block_data.json
@@ -0,0 +1,20 @@
+{
+ "docstring": {
+ "long_description": "Requires a CONNECT_2450 block to create the connection.",
+ "short_description": "Resets the 2450 and clears buffers.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_2450 block)."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": "Reset"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/example.md b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/example.md
new file mode 100644
index 00000000..2faf7340
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/example.md
@@ -0,0 +1,19 @@
+In this example, a Keithley 2450 to generate 1V and then sweep between 0 and 1V.
+
+First the necessary blocks were added:
+
+- `CONNECT_2450`
+- `BEEP_2450`
+- `RESET_2450`
+- `SOURCE_2450`
+- `MEASURE_SETTINGS_2450`
+- `MEASUREMENT_READ_2450`
+- `IV_SWEEP_2450`
+- `BIG_NUMBER`
+- `LINE`
+
+The instrument address was set for each `2450` block. The `SOURCE_2450` block was changed in order to source 1V. The parameters in the `MEASURE_SETTINGS_2450` block were changed as necessary. The `MEASUREMENT_READ_2450` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The `IV_SWEEP_2450` block output was connected to the `LINE` plot to show the output of the sweep.
+
+The blocks were connected as shown and the app was run.
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py
new file mode 100644
index 00000000..03691fa6
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py
@@ -0,0 +1,75 @@
+from typing import Optional, Literal
+from flojoy import VisaConnection, flojoy, DataContainer, TextBlob
+
+
+@flojoy(deps={"tm_devices": "1.0"}, inject_connection=True)
+def SOURCE_2450(
+ connection: VisaConnection,
+ input: Optional[DataContainer] = None,
+ function: Literal["current", "voltage"] = "voltage",
+ level: float = 1.0,
+ limit: float = 1.0,
+ terminal: Literal["front", "rear"] = "front",
+ protect: Literal[
+ "NONE",
+ "2V",
+ "5V",
+ "10V",
+ "20V",
+ "40V",
+ "60V",
+ "80V",
+ "100V",
+ "120V",
+ "140V",
+ "160V",
+ "180V",
+ ] = "NONE",
+) -> TextBlob:
+ """Set the source output settings.
+
+ Use the OUTPUT_2450 block to turn the output on or off.
+
+ Requires a CONNECT_2450 block to create the connection.
+
+ Parameters
+ ----------
+ connection : VisaConnection
+ The VISA address (requires the CONNECTION_2450 block).
+ function : select, default=voltage
+ The type of output to use.
+ level : float, default=0
+ The fixed voltage or current to output.
+ limit : float, default=1
+ Output limit (if function=voltage, current is limited and visa versa).
+ terminal : select, default=front
+ The panel to output from.
+ protect : select, default=NONE
+ The overvoltage protection value.
+
+ Returns
+ -------
+ TextBlob
+ Source settings
+ """
+
+ # Retrieve oscilloscope instrument connection
+ smu = connection.get_handle()
+
+ smu.commands.smu.source.protect.level = f"smu.PROTECT_{protect}"
+
+ if terminal == "front":
+ smu.commands.smu.terminals = "smu.TERMINALS_FRONT"
+ else:
+ smu.commands.smu.terminals = "smu.TERMINALS_REAR"
+
+ if function == "current":
+ smu.commands.smu.source.func = "smu.FUNC_DC_CURRENT"
+ smu.commands.smu.source.vlimit.level = limit
+ else:
+ smu.commands.smu.source.func = "smu.FUNC_DC_VOLTAGE"
+ smu.commands.smu.source.ilimit.level = limit
+
+ smu.commands.smu.source.level = level
+
+ return TextBlob(text_blob="Source settings")
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/app.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/app.json
new file mode 100644
index 00000000..bfc67574
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/app.json
@@ -0,0 +1,903 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "type": "HARDWARE",
+ "data": {
+ "id": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "label": "BEEP 2450",
+ "func": "BEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "duration": {
+ "type": "float",
+ "default": 0.25,
+ "desc": "The duration of the beep in seconds.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "duration",
+ "value": 0.25
+ },
+ "frequency": {
+ "type": "float",
+ "default": 2000,
+ "desc": "The frequency, or tone, of the beep in Hz.",
+ "overload": null,
+ "functionName": "BEEP_2450",
+ "param": "frequency",
+ "value": 2000
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Beep"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py"
+ },
+ "position": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -448.3091293727178,
+ "y": -347.92345448716804
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "type": "HARDWARE",
+ "data": {
+ "id": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "label": "CONNECT 2450",
+ "func": "CONNECT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "device": {
+ "type": "VisaDevice",
+ "default": null,
+ "desc": "The connected VISA device.",
+ "overload": null,
+ "functionName": "CONNECT_2450",
+ "param": "device",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "The IP or VISA address of the VISA device."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py"
+ },
+ "position": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -674.0943355603956,
+ "y": -346.9914490190549
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "type": "HARDWARE",
+ "data": {
+ "id": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "label": "IV SWEEP 2450",
+ "func": "IV_SWEEP_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "sweep": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current"
+ ],
+ "default": "voltage",
+ "desc": "Select the sweep mode, the opposite unit is measured.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sweep",
+ "value": "voltage"
+ },
+ "sense": {
+ "type": "select",
+ "options": [
+ "2-wire",
+ "4-wire"
+ ],
+ "default": "2-wire",
+ "desc": "Use 2 or 4 wire sense/measurement mode.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "sense",
+ "value": "2-wire"
+ },
+ "start": {
+ "type": "float",
+ "default": 0,
+ "desc": "The first x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "start",
+ "value": 0
+ },
+ "stop": {
+ "type": "float",
+ "default": 1,
+ "desc": "The last x value of the sweep.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "stop",
+ "value": 1
+ },
+ "points": {
+ "type": "float",
+ "default": 100,
+ "desc": "The number of points between start and stop.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "points",
+ "value": 100
+ },
+ "measurement_time": {
+ "type": "float",
+ "default": 1,
+ "desc": "How long to measure a single point, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_time",
+ "value": 1
+ },
+ "measurement_delay": {
+ "type": "float",
+ "default": 0.05,
+ "desc": "How long to delay between two points, in seconds.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "measurement_delay",
+ "value": 0.05
+ },
+ "y_limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "The limit of the measured value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "y_limit",
+ "value": 1
+ },
+ "source_range": {
+ "type": "float",
+ "default": 1,
+ "desc": "The range of the x value.",
+ "overload": null,
+ "functionName": "IV_SWEEP_2450",
+ "param": "source_range",
+ "value": 2
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair",
+ "desc": "Sweep values"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py"
+ },
+ "position": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 492.2816086087546,
+ "y": 1.7974868009648617
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "label": "MEASURE READ 2450",
+ "func": "MEASURE_READ_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_READ_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Reading"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py"
+ },
+ "position": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 512.3891574605273,
+ "y": -320.65565183900117
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "type": "HARDWARE",
+ "data": {
+ "id": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "label": "MEASURE SETTINGS 2450",
+ "func": "MEASURE_SETTINGS_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "measure": {
+ "type": "select",
+ "options": [
+ "voltage",
+ "current",
+ "resistance",
+ "power"
+ ],
+ "default": "voltage",
+ "desc": "Select the measure unit",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "measure",
+ "value": "voltage"
+ },
+ "wires": {
+ "type": "select",
+ "options": [
+ "2",
+ "4"
+ ],
+ "default": "2",
+ "desc": "Select 2-wire or 4-wire sense mode.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "wires",
+ "value": "2"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "6.5",
+ "desc": "Select the number of display digits.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "digits",
+ "value": "6.5"
+ },
+ "meas_range": {
+ "type": "float",
+ "default": 0,
+ "desc": "The measurement range. 0 == AUTO.",
+ "overload": null,
+ "functionName": "MEASURE_SETTINGS_2450",
+ "param": "meas_range",
+ "value": 0
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Measurement"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py"
+ },
+ "position": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 26.597185633155945,
+ "y": -437.0939563812675
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "type": "HARDWARE",
+ "data": {
+ "id": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "label": "OUTPUT 2450",
+ "func": "OUTPUT_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "output": {
+ "type": "select",
+ "options": [
+ "on",
+ "off"
+ ],
+ "default": "on",
+ "desc": "Turn the output on or off.",
+ "overload": null,
+ "functionName": "OUTPUT_2450",
+ "param": "output",
+ "value": "on"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Output settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py"
+ },
+ "position": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 280.0082587419151,
+ "y": -318.62173032956696
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "type": "HARDWARE",
+ "data": {
+ "id": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "label": "RESET 2450",
+ "func": "RESET_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "RESET_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Reset"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py"
+ },
+ "position": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -226.13106763431557,
+ "y": -346.60560976610765
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "type": "HARDWARE",
+ "data": {
+ "id": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "label": "SOURCE 2450",
+ "func": "SOURCE_2450",
+ "type": "HARDWARE",
+ "ctrls": {
+ "connection": {
+ "type": "VisaConnection",
+ "default": null,
+ "desc": "The VISA address (requires the CONNECTION_2450 block).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "connection",
+ "value": "TCPIP::169.254.175.123::INSTR"
+ },
+ "function": {
+ "type": "select",
+ "options": [
+ "current",
+ "voltage"
+ ],
+ "default": "voltage",
+ "desc": "The type of output to use.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "function",
+ "value": "voltage"
+ },
+ "level": {
+ "type": "float",
+ "default": 1,
+ "desc": "The fixed voltage or current to output.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "level",
+ "value": 1
+ },
+ "limit": {
+ "type": "float",
+ "default": 1,
+ "desc": "Output limit (if function=voltage, current is limited and visa versa).",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "limit",
+ "value": 1
+ },
+ "terminal": {
+ "type": "select",
+ "options": [
+ "front",
+ "rear"
+ ],
+ "default": "front",
+ "desc": "The panel to output from.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "terminal",
+ "value": "front"
+ },
+ "protect": {
+ "type": "select",
+ "options": [
+ "NONE",
+ "2V",
+ "5V",
+ "10V",
+ "20V",
+ "40V",
+ "60V",
+ "80V",
+ "100V",
+ "120V",
+ "140V",
+ "160V",
+ "180V"
+ ],
+ "default": "NONE",
+ "desc": "The overvoltage protection value.",
+ "overload": null,
+ "functionName": "SOURCE_2450",
+ "param": "protect",
+ "value": "5V"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "input",
+ "id": "input",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "Source settings"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "tm_devices",
+ "v": "1.0"
+ }
+ ],
+ "path": "HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py"
+ },
+ "position": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 16.48308033026258,
+ "y": -220.1001132926403
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "label": "LINE",
+ "func": "LINE",
+ "type": "VISUALIZATION",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|DataFrame|Matrix|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly Line visualization of the input data"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/LINE/LINE.py"
+ },
+ "position": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 820.060590405619,
+ "y": -43.462075618890026
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "type": "VISUALIZATION",
+ "data": {
+ "id": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZATION",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": false
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "DATA/VISUALIZATION/PLOTLY/BIG_NUMBER/BIG_NUMBER.py"
+ },
+ "position": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 831.0144261253039,
+ "y": -361.6163345095765
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06",
+ "sourceHandle": "default",
+ "target": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "targetHandle": "input",
+ "id": "reactflow__edge-CONNECT_2450-72b8d59f-b577-4f92-b3df-705b3fc2cd06default-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29input"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010input"
+ },
+ {
+ "source": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "sourceHandle": "default",
+ "target": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "targetHandle": "input",
+ "id": "reactflow__edge-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9ddefault-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787input"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9input"
+ },
+ {
+ "source": "MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-MEASURE_SETTINGS_2450-2d6b2106-7975-4e13-9084-1432f534f5e9default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "sourceHandle": "default",
+ "target": "OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9d",
+ "targetHandle": "input",
+ "id": "reactflow__edge-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7default-OUTPUT_2450-e2cfabda-a18e-4170-a237-98e1dd262d9dinput"
+ },
+ {
+ "source": "BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29",
+ "sourceHandle": "default",
+ "target": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "targetHandle": "input",
+ "id": "reactflow__edge-BEEP_2450-8f32f6a8-a1b7-4902-bcd0-bcd1891d1c29default-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809einput"
+ },
+ {
+ "source": "RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809e",
+ "sourceHandle": "default",
+ "target": "SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7",
+ "targetHandle": "input",
+ "id": "reactflow__edge-RESET_2450-1417dc2d-b853-4330-9d4f-6f67c137809edefault-SOURCE_2450-0665121f-eef3-48f7-b080-2400359631a7input"
+ },
+ {
+ "source": "IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010",
+ "sourceHandle": "default",
+ "target": "LINE-30feab30-6d4f-4274-8877-383382355e5f",
+ "targetHandle": "default",
+ "id": "reactflow__edge-IV_SWEEP_2450-4e375cbe-903d-4b94-bda3-d17321ec8010default-LINE-30feab30-6d4f-4274-8877-383382355e5fdefault"
+ },
+ {
+ "source": "MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749",
+ "targetHandle": "default",
+ "id": "reactflow__edge-MEASURE_READ_2450-68952e00-42a8-458a-81c0-7d0d08398787default-BIG_NUMBER-da49fee0-f0ca-4054-8686-bb576f153749default"
+ }
+ ],
+ "viewport": {
+ "x": 994.2991122110108,
+ "y": 573.4932402039965,
+ "zoom": 0.9719556784888205
+ }
+ },
+ "textNodes": []
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/block_data.json b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/block_data.json
new file mode 100644
index 00000000..0656a9de
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/block_data.json
@@ -0,0 +1,45 @@
+{
+ "docstring": {
+ "long_description": "Use the OUTPUT_2450 block to turn the output on or off.\n\nRequires a CONNECT_2450 block to create the connection.",
+ "short_description": "Set the source output settings.",
+ "parameters": [
+ {
+ "name": "connection",
+ "type": "VisaConnection",
+ "description": "The VISA address (requires the CONNECTION_2450 block)."
+ },
+ {
+ "name": "function",
+ "type": "select, default=voltage",
+ "description": "The type of output to use."
+ },
+ {
+ "name": "level",
+ "type": "float, default=0",
+ "description": "The fixed voltage or current to output."
+ },
+ {
+ "name": "limit",
+ "type": "float, default=1",
+ "description": "Output limit (if function=voltage, current is limited and visa versa)."
+ },
+ {
+ "name": "terminal",
+ "type": "select, default=front",
+ "description": "The panel to output from."
+ },
+ {
+ "name": "protect",
+ "type": "select, default=NONE",
+ "description": "The overvoltage protection value."
+ }
+ ],
+ "returns": [
+ {
+ "name": null,
+ "type": "TextBlob",
+ "description": "Source settings"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/example.md b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/example.md
new file mode 100644
index 00000000..2faf7340
--- /dev/null
+++ b/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/example.md
@@ -0,0 +1,19 @@
+In this example, a Keithley 2450 to generate 1V and then sweep between 0 and 1V.
+
+First the necessary blocks were added:
+
+- `CONNECT_2450`
+- `BEEP_2450`
+- `RESET_2450`
+- `SOURCE_2450`
+- `MEASURE_SETTINGS_2450`
+- `MEASUREMENT_READ_2450`
+- `IV_SWEEP_2450`
+- `BIG_NUMBER`
+- `LINE`
+
+The instrument address was set for each `2450` block. The `SOURCE_2450` block was changed in order to source 1V. The parameters in the `MEASURE_SETTINGS_2450` block were changed as necessary. The `MEASUREMENT_READ_2450` block was connected to the `BIG_NUMBER` block in order to view the reading.
+
+The `IV_SWEEP_2450` block output was connected to the `LINE` plot to show the output of the sweep.
+
+The blocks were connected as shown and the app was run.
diff --git a/docs/package.json b/docs/package.json
index 04c770d3..0e7282e1 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -11,28 +11,28 @@
"format": "prettier --plugin=prettier-plugin-astro --plugin=prettier-plugin-tailwindcss --write ."
},
"dependencies": {
- "@astro-community/astro-embed-youtube": "^0.4.1",
+ "@astro-community/astro-embed-youtube": "^0.4.3",
"@astrojs/react": "^3.0.6",
- "@astrojs/starlight": "^0.13.0",
+ "@astrojs/starlight": "^0.14.0",
"@astrojs/starlight-tailwind": "^2.0.1",
"@astrojs/tailwind": "^5.0.2",
- "@fortawesome/fontawesome-svg-core": "^6.4.2",
- "@fortawesome/free-brands-svg-icons": "^6.4.2",
+ "@fortawesome/fontawesome-svg-core": "^6.5.0",
+ "@fortawesome/free-brands-svg-icons": "^6.5.0",
"@fortawesome/react-fontawesome": "^0.2.0",
- "@types/react": "^18.2.38",
+ "@types/react": "^18.2.39",
"@types/react-dom": "^18.2.17",
- "astro": "^3.6.0",
+ "astro": "^3.6.4",
"astro-robots-txt": "^1.0.0",
"class-variance-authority": "^0.7.0",
"clsx": "^2.0.0",
- "lucide-react": "^0.292.0",
+ "lucide-react": "^0.294.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-markdown": "^9.0.1",
"reactflow": "^11.10.1",
"rehype-katex": "^7.0.0",
"remark-math": "^6.0.0",
- "sharp": "^0.32.6",
+ "sharp": "^0.33.0",
"tailwindcss": "^3.3.5"
},
"devDependencies": {
diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml
index 783cd4ae..33fcd106 100644
--- a/docs/pnpm-lock.yaml
+++ b/docs/pnpm-lock.yaml
@@ -6,38 +6,38 @@ settings:
dependencies:
'@astro-community/astro-embed-youtube':
- specifier: ^0.4.1
- version: 0.4.1(astro@3.6.0)
+ specifier: ^0.4.3
+ version: 0.4.3(astro@3.6.4)
'@astrojs/react':
specifier: ^3.0.6
- version: 3.0.6(@types/react-dom@18.2.17)(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)(vite@5.0.2)
+ version: 3.0.6(@types/react-dom@18.2.17)(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)(vite@5.0.4)
'@astrojs/starlight':
- specifier: ^0.13.0
- version: 0.13.0(astro@3.6.0)
+ specifier: ^0.14.0
+ version: 0.14.0(astro@3.6.4)
'@astrojs/starlight-tailwind':
specifier: ^2.0.1
- version: 2.0.1(@astrojs/starlight@0.13.0)(@astrojs/tailwind@5.0.2)(tailwindcss@3.3.5)
+ version: 2.0.1(@astrojs/starlight@0.14.0)(@astrojs/tailwind@5.0.2)(tailwindcss@3.3.5)
'@astrojs/tailwind':
specifier: ^5.0.2
- version: 5.0.2(astro@3.6.0)(tailwindcss@3.3.5)
+ version: 5.0.2(astro@3.6.4)(tailwindcss@3.3.5)
'@fortawesome/fontawesome-svg-core':
- specifier: ^6.4.2
- version: 6.4.2
+ specifier: ^6.5.0
+ version: 6.5.0
'@fortawesome/free-brands-svg-icons':
- specifier: ^6.4.2
- version: 6.4.2
+ specifier: ^6.5.0
+ version: 6.5.0
'@fortawesome/react-fontawesome':
specifier: ^0.2.0
- version: 0.2.0(@fortawesome/fontawesome-svg-core@6.4.2)(react@18.2.0)
+ version: 0.2.0(@fortawesome/fontawesome-svg-core@6.5.0)(react@18.2.0)
'@types/react':
- specifier: ^18.2.38
- version: 18.2.38
+ specifier: ^18.2.39
+ version: 18.2.39
'@types/react-dom':
specifier: ^18.2.17
version: 18.2.17
astro:
- specifier: ^3.6.0
- version: 3.6.0
+ specifier: ^3.6.4
+ version: 3.6.4
astro-robots-txt:
specifier: ^1.0.0
version: 1.0.0
@@ -48,8 +48,8 @@ dependencies:
specifier: ^2.0.0
version: 2.0.0
lucide-react:
- specifier: ^0.292.0
- version: 0.292.0(react@18.2.0)
+ specifier: ^0.294.0
+ version: 0.294.0(react@18.2.0)
react:
specifier: ^18.2.0
version: 18.2.0
@@ -58,10 +58,10 @@ dependencies:
version: 18.2.0(react@18.2.0)
react-markdown:
specifier: ^9.0.1
- version: 9.0.1(@types/react@18.2.38)(react@18.2.0)
+ version: 9.0.1(@types/react@18.2.39)(react@18.2.0)
reactflow:
specifier: ^11.10.1
- version: 11.10.1(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
+ version: 11.10.1(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
rehype-katex:
specifier: ^7.0.0
version: 7.0.0
@@ -69,8 +69,8 @@ dependencies:
specifier: ^6.0.0
version: 6.0.0
sharp:
- specifier: ^0.32.6
- version: 0.32.6
+ specifier: ^0.33.0
+ version: 0.33.0
tailwindcss:
specifier: ^3.3.5
version: 3.3.5
@@ -101,12 +101,12 @@ packages:
'@jridgewell/trace-mapping': 0.3.20
dev: false
- /@astro-community/astro-embed-youtube@0.4.1(astro@3.6.0):
- resolution: {integrity: sha512-sS3zp3JpCkQl0yl5iCZSuCcankz0Ownjg0Ju5KdON4BJVZUh2gHySCCvqKpsNWwto2VESKi9v7KHi1/R386FZg==}
+ /@astro-community/astro-embed-youtube@0.4.3(astro@3.6.4):
+ resolution: {integrity: sha512-zXtPmR9yxrTo6cuLhH8v+r62bsXbsLJgsU2FiZalPr4bXJxAUQEIlG46S/qK0AEXi9uNShKqy4+zBaJ98xTVEg==}
peerDependencies:
- astro: ^2.0.0 || ^3.0.0-beta
+ astro: ^2.0.0 || ^3.0.0-beta || ^4.0.0-beta
dependencies:
- astro: 3.6.0
+ astro: 3.6.4
lite-youtube-embed: 0.2.0
dev: false
@@ -122,13 +122,13 @@ packages:
resolution: {integrity: sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==}
dev: false
- /@astrojs/markdown-remark@3.5.0(astro@3.6.0):
+ /@astrojs/markdown-remark@3.5.0(astro@3.6.4):
resolution: {integrity: sha512-q7vdIqzYhxpsfghg2YmkmSXCfp4w7lBTYP+SSHw89wVhC5Riltr3u8w2otBRxNLSByNi+ht/gGkFC23Shetytw==}
peerDependencies:
astro: ^3.0.0
dependencies:
'@astrojs/prism': 3.0.0
- astro: 3.6.0
+ astro: 3.6.4
github-slugger: 2.0.0
import-meta-resolve: 3.1.1
mdast-util-definitions: 6.0.0
@@ -146,16 +146,16 @@ packages:
- supports-color
dev: false
- /@astrojs/mdx@1.1.5(astro@3.6.0):
+ /@astrojs/mdx@1.1.5(astro@3.6.4):
resolution: {integrity: sha512-4bveyB1Lb1vWo2kdHJjQYoCytWlrIjAxHATHUTuYnBPmdPjsfy9wuCnb9rozwyyarDABx87CzG5gotBNYd+dVA==}
engines: {node: '>=18.14.1'}
peerDependencies:
astro: ^3.0.0
dependencies:
- '@astrojs/markdown-remark': 3.5.0(astro@3.6.0)
+ '@astrojs/markdown-remark': 3.5.0(astro@3.6.4)
'@mdx-js/mdx': 2.3.0
acorn: 8.11.2
- astro: 3.6.0
+ astro: 3.6.4
es-module-lexer: 1.4.1
estree-util-visit: 1.2.1
github-slugger: 2.0.0
@@ -179,7 +179,7 @@ packages:
prismjs: 1.29.0
dev: false
- /@astrojs/react@3.0.6(@types/react-dom@18.2.17)(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)(vite@5.0.2):
+ /@astrojs/react@3.0.6(@types/react-dom@18.2.17)(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)(vite@5.0.4):
resolution: {integrity: sha512-hjC02q8cPeyzw+LWe6V2dPTYf8OgfuZwxmH32tkhn3JC/VTz1AdO5rM7dgvbilLnUoL7qMGapODEkSl2mmW+oA==}
engines: {node: '>=18.14.1'}
peerDependencies:
@@ -188,9 +188,9 @@ packages:
react: ^17.0.2 || ^18.0.0
react-dom: ^17.0.2 || ^18.0.0
dependencies:
- '@types/react': 18.2.38
+ '@types/react': 18.2.39
'@types/react-dom': 18.2.17
- '@vitejs/plugin-react': 4.2.0(vite@5.0.2)
+ '@vitejs/plugin-react': 4.2.0(vite@5.0.4)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
ultrahtml: 1.5.2
@@ -206,29 +206,29 @@ packages:
zod: 3.22.4
dev: false
- /@astrojs/starlight-tailwind@2.0.1(@astrojs/starlight@0.13.0)(@astrojs/tailwind@5.0.2)(tailwindcss@3.3.5):
+ /@astrojs/starlight-tailwind@2.0.1(@astrojs/starlight@0.14.0)(@astrojs/tailwind@5.0.2)(tailwindcss@3.3.5):
resolution: {integrity: sha512-niMgFcR7NHcsBVy8UAN3F2gqhmoN5v83st5Hu4YzvUL+6SNwjQmIipXppXdN9+iVneRjPr6PLGzDfI+wnjSBWQ==}
peerDependencies:
'@astrojs/starlight': '>=0.9.0'
'@astrojs/tailwind': ^5.0.0
tailwindcss: ^3.3.3
dependencies:
- '@astrojs/starlight': 0.13.0(astro@3.6.0)
- '@astrojs/tailwind': 5.0.2(astro@3.6.0)(tailwindcss@3.3.5)
+ '@astrojs/starlight': 0.14.0(astro@3.6.4)
+ '@astrojs/tailwind': 5.0.2(astro@3.6.4)(tailwindcss@3.3.5)
tailwindcss: 3.3.5
dev: false
- /@astrojs/starlight@0.13.0(astro@3.6.0):
- resolution: {integrity: sha512-3SVWGP9Qze3UkM5Wozpx+5v9dh75ZFPSHRqzeuXNtctn5nHjlzvOgIIQnuyyNhIEQMfml1lo83jL3Vsf7Qk7Iw==}
+ /@astrojs/starlight@0.14.0(astro@3.6.4):
+ resolution: {integrity: sha512-wrve52CIIymvntjf2QCfCFpYrmZTyD1qObkvLImeGDVAAyNdUnNlj6MU6SkqQg2fQkJcX9Kh4zkwepm79zYveQ==}
peerDependencies:
astro: ^3.2.0
dependencies:
- '@astrojs/mdx': 1.1.5(astro@3.6.0)
+ '@astrojs/mdx': 1.1.5(astro@3.6.4)
'@astrojs/sitemap': 3.0.3
'@pagefind/default-ui': 1.0.4
'@types/mdast': 3.0.15
- astro: 3.6.0
- astro-expressive-code: 0.29.1(astro@3.6.0)
+ astro: 3.6.4
+ astro-expressive-code: 0.29.2(astro@3.6.4)
bcp-47: 2.1.0
execa: 8.0.1
hast-util-select: 5.0.5
@@ -244,13 +244,13 @@ packages:
- supports-color
dev: false
- /@astrojs/tailwind@5.0.2(astro@3.6.0)(tailwindcss@3.3.5):
+ /@astrojs/tailwind@5.0.2(astro@3.6.4)(tailwindcss@3.3.5):
resolution: {integrity: sha512-oXqeqmBlkQmsltrsU9nEWeXOtrZIAHW8dcmX7BCdrjzPnU6dPwWzAwhddNQ9ihKiWwsLnlbwQZIo2CDigcZlIA==}
peerDependencies:
astro: ^3.2.4
tailwindcss: ^3.0.24
dependencies:
- astro: 3.6.0
+ astro: 3.6.4
autoprefixer: 10.4.16(postcss@8.4.31)
postcss: 8.4.31
postcss-load-config: 4.0.2(postcss@8.4.31)
@@ -274,33 +274,33 @@ packages:
- supports-color
dev: false
- /@babel/code-frame@7.23.4:
- resolution: {integrity: sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==}
+ /@babel/code-frame@7.23.5:
+ resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/highlight': 7.23.4
chalk: 2.4.2
dev: false
- /@babel/compat-data@7.23.3:
- resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==}
+ /@babel/compat-data@7.23.5:
+ resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
engines: {node: '>=6.9.0'}
dev: false
- /@babel/core@7.23.3:
- resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==}
+ /@babel/core@7.23.5:
+ resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==}
engines: {node: '>=6.9.0'}
dependencies:
'@ampproject/remapping': 2.2.1
- '@babel/code-frame': 7.23.4
- '@babel/generator': 7.23.4
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.5
'@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3)
- '@babel/helpers': 7.23.4
- '@babel/parser': 7.23.4
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5)
+ '@babel/helpers': 7.23.5
+ '@babel/parser': 7.23.5
'@babel/template': 7.22.15
- '@babel/traverse': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/traverse': 7.23.5
+ '@babel/types': 7.23.5
convert-source-map: 2.0.0
debug: 4.3.4
gensync: 1.0.0-beta.2
@@ -310,11 +310,11 @@ packages:
- supports-color
dev: false
- /@babel/generator@7.23.4:
- resolution: {integrity: sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==}
+ /@babel/generator@7.23.5:
+ resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.5
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.20
jsesc: 2.5.2
@@ -324,15 +324,15 @@ packages:
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.5
dev: false
/@babel/helper-compilation-targets@7.22.15:
resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/compat-data': 7.23.3
- '@babel/helper-validator-option': 7.22.15
+ '@babel/compat-data': 7.23.5
+ '@babel/helper-validator-option': 7.23.5
browserslist: 4.22.1
lru-cache: 5.1.1
semver: 6.3.1
@@ -348,30 +348,30 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.22.15
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.5
dev: false
/@babel/helper-hoist-variables@7.22.5:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.5
dev: false
/@babel/helper-module-imports@7.22.15:
resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.5
dev: false
- /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3):
+ /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5):
resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.5
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-module-imports': 7.22.15
'@babel/helper-simple-access': 7.22.5
@@ -388,14 +388,14 @@ packages:
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.5
dev: false
/@babel/helper-split-export-declaration@7.22.6:
resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.5
dev: false
/@babel/helper-string-parser@7.23.4:
@@ -408,18 +408,18 @@ packages:
engines: {node: '>=6.9.0'}
dev: false
- /@babel/helper-validator-option@7.22.15:
- resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==}
+ /@babel/helper-validator-option@7.23.5:
+ resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
engines: {node: '>=6.9.0'}
dev: false
- /@babel/helpers@7.23.4:
- resolution: {integrity: sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw==}
+ /@babel/helpers@7.23.5:
+ resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.22.15
- '@babel/traverse': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/traverse': 7.23.5
+ '@babel/types': 7.23.5
transitivePeerDependencies:
- supports-color
dev: false
@@ -433,87 +433,87 @@ packages:
js-tokens: 4.0.0
dev: false
- /@babel/parser@7.23.4:
- resolution: {integrity: sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==}
+ /@babel/parser@7.23.5:
+ resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.5
dev: false
- /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.3):
+ /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5):
resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.5
'@babel/helper-plugin-utils': 7.22.5
dev: false
- /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.3):
+ /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.5):
resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.5
'@babel/helper-plugin-utils': 7.22.5
dev: false
- /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.3):
+ /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.5):
resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.5
'@babel/helper-plugin-utils': 7.22.5
dev: false
- /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.3):
+ /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.5):
resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.23.3
+ '@babel/core': 7.23.5
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-module-imports': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.3)
- '@babel/types': 7.23.4
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5)
+ '@babel/types': 7.23.5
dev: false
/@babel/template@7.22.15:
resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.23.4
- '@babel/parser': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/code-frame': 7.23.5
+ '@babel/parser': 7.23.5
+ '@babel/types': 7.23.5
dev: false
- /@babel/traverse@7.23.4:
- resolution: {integrity: sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg==}
+ /@babel/traverse@7.23.5:
+ resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/code-frame': 7.23.4
- '@babel/generator': 7.23.4
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.5
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-function-name': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/parser': 7.23.5
+ '@babel/types': 7.23.5
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
dev: false
- /@babel/types@7.23.4:
- resolution: {integrity: sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==}
+ /@babel/types@7.23.5:
+ resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.23.4
@@ -526,6 +526,14 @@ packages:
engines: {node: '>=10'}
dev: false
+ /@emnapi/runtime@0.44.0:
+ resolution: {integrity: sha512-ZX/etZEZw8DR7zAB1eVQT40lNo0jeqpb6dCgOvctB6FIQ5PoXfMuNY8+ayQfu8tNQbAB8gQWSSJupR8NxeiZXw==}
+ requiresBuild: true
+ dependencies:
+ tslib: 2.6.2
+ dev: false
+ optional: true
+
/@esbuild/android-arm64@0.18.20:
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines: {node: '>=12'}
@@ -535,8 +543,8 @@ packages:
dev: false
optional: true
- /@esbuild/android-arm64@0.19.7:
- resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==}
+ /@esbuild/android-arm64@0.19.8:
+ resolution: {integrity: sha512-B8JbS61bEunhfx8kasogFENgQfr/dIp+ggYXwTqdbMAgGDhRa3AaPpQMuQU0rNxDLECj6FhDzk1cF9WHMVwrtA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
@@ -553,8 +561,8 @@ packages:
dev: false
optional: true
- /@esbuild/android-arm@0.19.7:
- resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==}
+ /@esbuild/android-arm@0.19.8:
+ resolution: {integrity: sha512-31E2lxlGM1KEfivQl8Yf5aYU/mflz9g06H6S15ITUFQueMFtFjESRMoDSkvMo8thYvLBax+VKTPlpnx+sPicOA==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
@@ -571,8 +579,8 @@ packages:
dev: false
optional: true
- /@esbuild/android-x64@0.19.7:
- resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==}
+ /@esbuild/android-x64@0.19.8:
+ resolution: {integrity: sha512-rdqqYfRIn4jWOp+lzQttYMa2Xar3OK9Yt2fhOhzFXqg0rVWEfSclJvZq5fZslnz6ypHvVf3CT7qyf0A5pM682A==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
@@ -589,8 +597,8 @@ packages:
dev: false
optional: true
- /@esbuild/darwin-arm64@0.19.7:
- resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==}
+ /@esbuild/darwin-arm64@0.19.8:
+ resolution: {integrity: sha512-RQw9DemMbIq35Bprbboyf8SmOr4UXsRVxJ97LgB55VKKeJOOdvsIPy0nFyF2l8U+h4PtBx/1kRf0BelOYCiQcw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
@@ -607,8 +615,8 @@ packages:
dev: false
optional: true
- /@esbuild/darwin-x64@0.19.7:
- resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==}
+ /@esbuild/darwin-x64@0.19.8:
+ resolution: {integrity: sha512-3sur80OT9YdeZwIVgERAysAbwncom7b4bCI2XKLjMfPymTud7e/oY4y+ci1XVp5TfQp/bppn7xLw1n/oSQY3/Q==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
@@ -625,8 +633,8 @@ packages:
dev: false
optional: true
- /@esbuild/freebsd-arm64@0.19.7:
- resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==}
+ /@esbuild/freebsd-arm64@0.19.8:
+ resolution: {integrity: sha512-WAnPJSDattvS/XtPCTj1tPoTxERjcTpH6HsMr6ujTT+X6rylVe8ggxk8pVxzf5U1wh5sPODpawNicF5ta/9Tmw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
@@ -643,8 +651,8 @@ packages:
dev: false
optional: true
- /@esbuild/freebsd-x64@0.19.7:
- resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==}
+ /@esbuild/freebsd-x64@0.19.8:
+ resolution: {integrity: sha512-ICvZyOplIjmmhjd6mxi+zxSdpPTKFfyPPQMQTK/w+8eNK6WV01AjIztJALDtwNNfFhfZLux0tZLC+U9nSyA5Zg==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
@@ -661,8 +669,8 @@ packages:
dev: false
optional: true
- /@esbuild/linux-arm64@0.19.7:
- resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==}
+ /@esbuild/linux-arm64@0.19.8:
+ resolution: {integrity: sha512-z1zMZivxDLHWnyGOctT9JP70h0beY54xDDDJt4VpTX+iwA77IFsE1vCXWmprajJGa+ZYSqkSbRQ4eyLCpCmiCQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
@@ -679,8 +687,8 @@ packages:
dev: false
optional: true
- /@esbuild/linux-arm@0.19.7:
- resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==}
+ /@esbuild/linux-arm@0.19.8:
+ resolution: {integrity: sha512-H4vmI5PYqSvosPaTJuEppU9oz1dq2A7Mr2vyg5TF9Ga+3+MGgBdGzcyBP7qK9MrwFQZlvNyJrvz6GuCaj3OukQ==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
@@ -697,8 +705,8 @@ packages:
dev: false
optional: true
- /@esbuild/linux-ia32@0.19.7:
- resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==}
+ /@esbuild/linux-ia32@0.19.8:
+ resolution: {integrity: sha512-1a8suQiFJmZz1khm/rDglOc8lavtzEMRo0v6WhPgxkrjcU0LkHj+TwBrALwoz/OtMExvsqbbMI0ChyelKabSvQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
@@ -715,8 +723,8 @@ packages:
dev: false
optional: true
- /@esbuild/linux-loong64@0.19.7:
- resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==}
+ /@esbuild/linux-loong64@0.19.8:
+ resolution: {integrity: sha512-fHZWS2JJxnXt1uYJsDv9+b60WCc2RlvVAy1F76qOLtXRO+H4mjt3Tr6MJ5l7Q78X8KgCFudnTuiQRBhULUyBKQ==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
@@ -733,8 +741,8 @@ packages:
dev: false
optional: true
- /@esbuild/linux-mips64el@0.19.7:
- resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==}
+ /@esbuild/linux-mips64el@0.19.8:
+ resolution: {integrity: sha512-Wy/z0EL5qZYLX66dVnEg9riiwls5IYnziwuju2oUiuxVc+/edvqXa04qNtbrs0Ukatg5HEzqT94Zs7J207dN5Q==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
@@ -751,8 +759,8 @@ packages:
dev: false
optional: true
- /@esbuild/linux-ppc64@0.19.7:
- resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==}
+ /@esbuild/linux-ppc64@0.19.8:
+ resolution: {integrity: sha512-ETaW6245wK23YIEufhMQ3HSeHO7NgsLx8gygBVldRHKhOlD1oNeNy/P67mIh1zPn2Hr2HLieQrt6tWrVwuqrxg==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
@@ -769,8 +777,8 @@ packages:
dev: false
optional: true
- /@esbuild/linux-riscv64@0.19.7:
- resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==}
+ /@esbuild/linux-riscv64@0.19.8:
+ resolution: {integrity: sha512-T2DRQk55SgoleTP+DtPlMrxi/5r9AeFgkhkZ/B0ap99zmxtxdOixOMI570VjdRCs9pE4Wdkz7JYrsPvsl7eESg==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
@@ -787,8 +795,8 @@ packages:
dev: false
optional: true
- /@esbuild/linux-s390x@0.19.7:
- resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==}
+ /@esbuild/linux-s390x@0.19.8:
+ resolution: {integrity: sha512-NPxbdmmo3Bk7mbNeHmcCd7R7fptJaczPYBaELk6NcXxy7HLNyWwCyDJ/Xx+/YcNH7Im5dHdx9gZ5xIwyliQCbg==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
@@ -805,8 +813,8 @@ packages:
dev: false
optional: true
- /@esbuild/linux-x64@0.19.7:
- resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==}
+ /@esbuild/linux-x64@0.19.8:
+ resolution: {integrity: sha512-lytMAVOM3b1gPypL2TRmZ5rnXl7+6IIk8uB3eLsV1JwcizuolblXRrc5ShPrO9ls/b+RTp+E6gbsuLWHWi2zGg==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
@@ -823,8 +831,8 @@ packages:
dev: false
optional: true
- /@esbuild/netbsd-x64@0.19.7:
- resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==}
+ /@esbuild/netbsd-x64@0.19.8:
+ resolution: {integrity: sha512-hvWVo2VsXz/8NVt1UhLzxwAfo5sioj92uo0bCfLibB0xlOmimU/DeAEsQILlBQvkhrGjamP0/el5HU76HAitGw==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
@@ -841,8 +849,8 @@ packages:
dev: false
optional: true
- /@esbuild/openbsd-x64@0.19.7:
- resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==}
+ /@esbuild/openbsd-x64@0.19.8:
+ resolution: {integrity: sha512-/7Y7u77rdvmGTxR83PgaSvSBJCC2L3Kb1M/+dmSIvRvQPXXCuC97QAwMugBNG0yGcbEGfFBH7ojPzAOxfGNkwQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
@@ -859,8 +867,8 @@ packages:
dev: false
optional: true
- /@esbuild/sunos-x64@0.19.7:
- resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==}
+ /@esbuild/sunos-x64@0.19.8:
+ resolution: {integrity: sha512-9Lc4s7Oi98GqFA4HzA/W2JHIYfnXbUYgekUP/Sm4BG9sfLjyv6GKKHKKVs83SMicBF2JwAX6A1PuOLMqpD001w==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
@@ -877,8 +885,8 @@ packages:
dev: false
optional: true
- /@esbuild/win32-arm64@0.19.7:
- resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==}
+ /@esbuild/win32-arm64@0.19.8:
+ resolution: {integrity: sha512-rq6WzBGjSzihI9deW3fC2Gqiak68+b7qo5/3kmB6Gvbh/NYPA0sJhrnp7wgV4bNwjqM+R2AApXGxMO7ZoGhIJg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
@@ -895,8 +903,8 @@ packages:
dev: false
optional: true
- /@esbuild/win32-ia32@0.19.7:
- resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==}
+ /@esbuild/win32-ia32@0.19.8:
+ resolution: {integrity: sha512-AIAbverbg5jMvJznYiGhrd3sumfwWs8572mIJL5NQjJa06P8KfCPWZQ0NwZbPQnbQi9OWSZhFVSUWjjIrn4hSw==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
@@ -913,8 +921,8 @@ packages:
dev: false
optional: true
- /@esbuild/win32-x64@0.19.7:
- resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==}
+ /@esbuild/win32-x64@0.19.8:
+ resolution: {integrity: sha512-bfZ0cQ1uZs2PqpulNL5j/3w+GDhP36k1K5c38QdQg+Swy51jFZWWeIkteNsufkQxp986wnqRRsb/bHbY1WQ7TA==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
@@ -922,8 +930,8 @@ packages:
dev: false
optional: true
- /@expressive-code/core@0.29.1:
- resolution: {integrity: sha512-gz7K1r/S12vYPVUvhAdFcr+zdMbMhi7fPO2iTEEUCIhFUgOoUpOVjupFL+5q46URBGvoZTfmUJge1FBQmGstfA==}
+ /@expressive-code/core@0.29.2:
+ resolution: {integrity: sha512-QJv5rDqSpx8WcAE4cZE+9GE31NtkN3i1zdr0KmdgwcIAEixhgxCFfngMoHWYYcLQnBMCIsFCyHnS39SAL4ub0Q==}
dependencies:
'@ctrl/tinycolor': 3.6.1
hast-util-to-html: 8.0.4
@@ -932,61 +940,249 @@ packages:
postcss-nested: 6.0.1(postcss@8.4.31)
dev: false
- /@expressive-code/plugin-frames@0.29.1:
- resolution: {integrity: sha512-nnukQNBBpCSIZITBlFkxJ+4Eh+Hkmix6Db7k5lCBb6Qd/nXeodXFKWROvhtOzH6Jp1UWcpkNtBh3HVmATQRUzA==}
+ /@expressive-code/plugin-frames@0.29.2:
+ resolution: {integrity: sha512-qQoDHB3iW7+Jb38omXGcaMNCbcBnGOijREDU5VW8TkFKzwx63gxcia8EYzzuCK15A2Pa8/5YqgE+0RrwKTGXHA==}
dependencies:
- '@expressive-code/core': 0.29.1
+ '@expressive-code/core': 0.29.2
hastscript: 7.2.0
dev: false
- /@expressive-code/plugin-shiki@0.29.1:
- resolution: {integrity: sha512-4TOJzC8Y4fvLeM7PslH990j3x7luRCkXAWTm4L45ZrBLrU2+7SKn436/mM9k8G+Z1189+e9rSAUFwn1h/VY6QA==}
+ /@expressive-code/plugin-shiki@0.29.2:
+ resolution: {integrity: sha512-ZRcG0Rh7S98XzHqTVlZd4pMcXehv6bjSzdM0r0LT2LpCl5oAbzx5DBYCy6BFKu2Qc4UkhTm04obXZSWoAtSaGw==}
dependencies:
- '@expressive-code/core': 0.29.1
+ '@expressive-code/core': 0.29.2
shiki: 0.14.5
dev: false
- /@expressive-code/plugin-text-markers@0.29.1:
- resolution: {integrity: sha512-fEsI1n1IEisJl+M2ayHy0AbsHIynnpq1yzc4qJk/0sXpouLOMSgw5dKftSmPio+9fXQoNfmYKmJz+OkuPmdy0A==}
+ /@expressive-code/plugin-text-markers@0.29.2:
+ resolution: {integrity: sha512-2jhmKIUIizTTnkasFQMmonNNMKmKQxfIIIZcsCLZ0ZaJdBkU0OueAVfQbk0amsrsiPL2ihJ3iDh0JZE0Ztz0AA==}
dependencies:
- '@expressive-code/core': 0.29.1
+ '@expressive-code/core': 0.29.2
hastscript: 7.2.0
unist-util-visit-parents: 5.1.3
dev: false
- /@fortawesome/fontawesome-common-types@6.4.2:
- resolution: {integrity: sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==}
+ /@fortawesome/fontawesome-common-types@6.5.0:
+ resolution: {integrity: sha512-vYC8oN2l8meu05sRi1j3Iie/HNFAeIxpitYFhsUrBc11TxiMken9QdXnSQ0q16FYsOSt/6soxs5ghdk+VYGiog==}
engines: {node: '>=6'}
requiresBuild: true
dev: false
- /@fortawesome/fontawesome-svg-core@6.4.2:
- resolution: {integrity: sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==}
+ /@fortawesome/fontawesome-svg-core@6.5.0:
+ resolution: {integrity: sha512-5DrR+oxQr+ruRQ3CEVV8DSCT/q8Atm56+FzAs0P6eW/epW47OmecSpSwc/YTlJ3u5BfPKUBSGyPR2qjZ+5eIgA==}
engines: {node: '>=6'}
requiresBuild: true
dependencies:
- '@fortawesome/fontawesome-common-types': 6.4.2
+ '@fortawesome/fontawesome-common-types': 6.5.0
dev: false
- /@fortawesome/free-brands-svg-icons@6.4.2:
- resolution: {integrity: sha512-LKOwJX0I7+mR/cvvf6qIiqcERbdnY+24zgpUSouySml+5w8B4BJOx8EhDR/FTKAu06W12fmUIcv6lzPSwYKGGg==}
+ /@fortawesome/free-brands-svg-icons@6.5.0:
+ resolution: {integrity: sha512-LwIl3b5cH0xjmBS7mcy8+SsSsl/7J4xi3aP+Tr4rDUf2Tab8r1c8NcqC8wP5c+bgphGstyG3QPx7l4b9WtcO5Q==}
engines: {node: '>=6'}
requiresBuild: true
dependencies:
- '@fortawesome/fontawesome-common-types': 6.4.2
+ '@fortawesome/fontawesome-common-types': 6.5.0
dev: false
- /@fortawesome/react-fontawesome@0.2.0(@fortawesome/fontawesome-svg-core@6.4.2)(react@18.2.0):
+ /@fortawesome/react-fontawesome@0.2.0(@fortawesome/fontawesome-svg-core@6.5.0)(react@18.2.0):
resolution: {integrity: sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==}
peerDependencies:
'@fortawesome/fontawesome-svg-core': ~1 || ~6
react: '>=16.3'
dependencies:
- '@fortawesome/fontawesome-svg-core': 6.4.2
+ '@fortawesome/fontawesome-svg-core': 6.5.0
prop-types: 15.8.1
react: 18.2.0
dev: false
+ /@img/sharp-darwin-arm64@0.33.0:
+ resolution: {integrity: sha512-070tEheekI1LJWTGPC9WlQEa5UoKTXzzlORBHMX4TbfUxMiL336YHR8vBEUNsjse0RJCX8dZ4ZXwT595aEF1ug==}
+ engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-arm64': 1.0.0
+ dev: false
+ optional: true
+
+ /@img/sharp-darwin-x64@0.33.0:
+ resolution: {integrity: sha512-pu/nvn152F3qbPeUkr+4e9zVvEhD3jhwzF473veQfMPkOYo9aoWXSfdZH/E6F+nYC3qvFjbxbvdDbUtEbghLqw==}
+ engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-darwin-x64': 1.0.0
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-darwin-arm64@1.0.0:
+ resolution: {integrity: sha512-VzYd6OwnUR81sInf3alj1wiokY50DjsHz5bvfnsFpxs5tqQxESoHtJO6xyksDs3RIkyhMWq2FufXo6GNSU9BMw==}
+ engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-darwin-x64@1.0.0:
+ resolution: {integrity: sha512-dD9OznTlHD6aovRswaPNEy8dKtSAmNo4++tO7uuR4o5VxbVAOoEQ1uSmN4iFAdQneTHws1lkTZeiXPrcCkh6IA==}
+ engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-arm64@1.0.0:
+ resolution: {integrity: sha512-xTYThiqEZEZc0PRU90yVtM3KE7lw1bKdnDQ9kCTHWbqWyHOe4NpPOtMGy27YnN51q0J5dqRrvicfPbALIOeAZA==}
+ engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-arm@1.0.0:
+ resolution: {integrity: sha512-VwgD2eEikDJUk09Mn9Dzi1OW2OJFRQK+XlBTkUNmAWPrtj8Ly0yq05DFgu1VCMx2/DqCGQVi5A1dM9hTmxf3uw==}
+ engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-s390x@1.0.0:
+ resolution: {integrity: sha512-o9E46WWBC6JsBlwU4QyU9578G77HBDT1NInd+aERfxeOPbk0qBZHgoDsQmA2v9TbqJRWzoBPx1aLOhprBMgPjw==}
+ engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linux-x64@1.0.0:
+ resolution: {integrity: sha512-naldaJy4hSVhWBgEjfdBY85CAa4UO+W1nx6a1sWStHZ7EUfNiuBTTN2KUYT5dH1+p/xij1t2QSXfCiFJoC5S/Q==}
+ engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linuxmusl-arm64@1.0.0:
+ resolution: {integrity: sha512-OdorplCyvmSAPsoJLldtLh3nLxRrkAAAOHsGWGDYfN0kh730gifK+UZb3dWORRa6EusNqCTjfXV4GxvgJ/nPDQ==}
+ engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-libvips-linuxmusl-x64@1.0.0:
+ resolution: {integrity: sha512-FW8iK6rJrg+X2jKD0Ajhjv6y74lToIBEvkZhl42nZt563FfxkCYacrXZtd+q/sRQDypQLzY5WdLkVTbJoPyqNg==}
+ engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-arm64@0.33.0:
+ resolution: {integrity: sha512-dcomVSrtgF70SyOr8RCOCQ8XGVThXwe71A1d8MGA+mXEVRJ/J6/TrCbBEJh9ddcEIIsrnrkolaEvYSHqVhswQw==}
+ engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm64': 1.0.0
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-arm@0.33.0:
+ resolution: {integrity: sha512-4horD3wMFd5a0ddbDY8/dXU9CaOgHjEHALAddXgafoR5oWq5s8X61PDgsSeh4Qupsdo6ycfPPSSNBrfVQnwwrg==}
+ engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-arm': 1.0.0
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-s390x@0.33.0:
+ resolution: {integrity: sha512-TiVJbx38J2rNVfA309ffSOB+3/7wOsZYQEOlKqOUdWD/nqkjNGrX+YQGz7nzcf5oy2lC+d37+w183iNXRZNngQ==}
+ engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-s390x': 1.0.0
+ dev: false
+ optional: true
+
+ /@img/sharp-linux-x64@0.33.0:
+ resolution: {integrity: sha512-PaZM4Zi7/Ek71WgTdvR+KzTZpBqrQOFcPe7/8ZoPRlTYYRe43k6TWsf4GVH6XKRLMYeSp8J89RfAhBrSP4itNA==}
+ engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linux-x64': 1.0.0
+ dev: false
+ optional: true
+
+ /@img/sharp-linuxmusl-arm64@0.33.0:
+ resolution: {integrity: sha512-1QLbbN0zt+32eVrg7bb1lwtvEaZwlhEsY1OrijroMkwAqlHqFj6R33Y47s2XUv7P6Ie1PwCxK/uFnNqMnkd5kg==}
+ engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-arm64': 1.0.0
+ dev: false
+ optional: true
+
+ /@img/sharp-linuxmusl-x64@0.33.0:
+ resolution: {integrity: sha512-CecqgB/CnkvCWFhmfN9ZhPGMLXaEBXl4o7WtA6U3Ztrlh/s7FUKX4vNxpMSYLIrWuuzjiaYdfU3+Tdqh1xaHfw==}
+ engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ optionalDependencies:
+ '@img/sharp-libvips-linuxmusl-x64': 1.0.0
+ dev: false
+ optional: true
+
+ /@img/sharp-wasm32@0.33.0:
+ resolution: {integrity: sha512-Hn4js32gUX9qkISlemZBUPuMs0k/xNJebUNl/L6djnU07B/HAA2KaxRVb3HvbU5fL242hLOcp0+tR+M8dvJUFw==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [wasm32]
+ requiresBuild: true
+ dependencies:
+ '@emnapi/runtime': 0.44.0
+ dev: false
+ optional: true
+
+ /@img/sharp-win32-ia32@0.33.0:
+ resolution: {integrity: sha512-5HfcsCZi3l5nPRF2q3bllMVMDXBqEWI3Q8KQONfzl0TferFE5lnsIG0A1YrntMAGqvkzdW6y1Ci1A2uTvxhfzg==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
+ /@img/sharp-win32-x64@0.33.0:
+ resolution: {integrity: sha512-i3DtP/2ce1yKFj4OzOnOYltOEL/+dp4dc4dJXJBv6god1AFTcmkaA99H/7SwOmkCOBQkbVvA3lCGm3/5nDtf9Q==}
+ engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: false
+ optional: true
+
/@jridgewell/gen-mapping@0.3.3:
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
engines: {node: '>=6.0.0'}
@@ -1106,39 +1302,39 @@ packages:
dev: false
optional: true
- /@reactflow/background@11.3.6(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/background@11.3.6(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-06FPlSUOOMALEEs+2PqPAbpqmL7WDjrkbG2UsDr2d6mbcDDhHiV4tu9FYoz44SQvXo7ma9VRotlsaR4OiRcYsg==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.10.1(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.10.1(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.6(@types/react@18.2.38)(react@18.2.0)
+ zustand: 4.4.7(@types/react@18.2.39)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/controls@11.2.6(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/controls@11.2.6(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-4QHT92/ACVlZkvV+Hq44bAPV8WbMhkJl+/J0EbXcqQ1+an7cWJsF84eeelJw7R5J76RoaSSpKdsWsL2v7HAVlw==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.10.1(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.10.1(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.6(@types/react@18.2.38)(react@18.2.0)
+ zustand: 4.4.7(@types/react@18.2.39)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/core@11.10.1(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/core@11.10.1(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-GIh3usY1W3eVobx//OO9+Cwm+5evQBBdPGxDaeXwm25UqPMWRI240nXQA5F/5gL5Mwpf0DUC7DR2EmrKNQy+Rw==}
peerDependencies:
react: '>=17'
@@ -1154,19 +1350,19 @@ packages:
d3-zoom: 3.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.6(@types/react@18.2.38)(react@18.2.0)
+ zustand: 4.4.7(@types/react@18.2.39)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/minimap@11.7.6(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/minimap@11.7.6(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-kJEtyeQkTZYViLGebVWHVUJROMAGcvejvT+iX4DqKnFb5yK8E8LWlXQpRx2FrL9gDy80mJJaciy7IxnnQKE1bg==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.10.1(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.10.1(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
'@types/d3-selection': 3.0.10
'@types/d3-zoom': 3.0.8
classcat: 5.0.4
@@ -1174,136 +1370,136 @@ packages:
d3-zoom: 3.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.6(@types/react@18.2.38)(react@18.2.0)
+ zustand: 4.4.7(@types/react@18.2.39)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/node-resizer@2.2.6(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/node-resizer@2.2.6(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-1Xb6q97uP7hRBLpog9sRCNfnsHdDgFRGEiU+lQqGgPEAeYwl4nRjWa/sXwH6ajniKxBhGEvrdzOgEFn6CRMcpQ==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.10.1(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.10.1(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
d3-drag: 3.0.0
d3-selection: 3.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.6(@types/react@18.2.38)(react@18.2.0)
+ zustand: 4.4.7(@types/react@18.2.39)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/node-toolbar@1.3.6(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/node-toolbar@1.3.6(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-JXDEuZ0wKjZ8z7qK2bIst0eZPzNyVEsiHL0e93EyuqT4fA9icoyE0fLq2ryNOOp7MXgId1h7LusnH6ta45F0yQ==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.10.1(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.10.1(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.6(@types/react@18.2.38)(react@18.2.0)
+ zustand: 4.4.7(@types/react@18.2.39)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@rollup/rollup-android-arm-eabi@4.5.1:
- resolution: {integrity: sha512-YaN43wTyEBaMqLDYeze+gQ4ZrW5RbTEGtT5o1GVDkhpdNcsLTnLRcLccvwy3E9wiDKWg9RIhuoy3JQKDRBfaZA==}
+ /@rollup/rollup-android-arm-eabi@4.6.1:
+ resolution: {integrity: sha512-0WQ0ouLejaUCRsL93GD4uft3rOmB8qoQMU05Kb8CmMtMBe7XUDLAltxVZI1q6byNqEtU7N1ZX1Vw5lIpgulLQA==}
cpu: [arm]
os: [android]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-android-arm64@4.5.1:
- resolution: {integrity: sha512-n1bX+LCGlQVuPlCofO0zOKe1b2XkFozAVRoczT+yxWZPGnkEAKTTYVOGZz8N4sKuBnKMxDbfhUsB1uwYdup/sw==}
+ /@rollup/rollup-android-arm64@4.6.1:
+ resolution: {integrity: sha512-1TKm25Rn20vr5aTGGZqo6E4mzPicCUD79k17EgTLAsXc1zysyi4xXKACfUbwyANEPAEIxkzwue6JZ+stYzWUTA==}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-darwin-arm64@4.5.1:
- resolution: {integrity: sha512-QqJBumdvfBqBBmyGHlKxje+iowZwrHna7pokj/Go3dV1PJekSKfmjKrjKQ/e6ESTGhkfPNLq3VXdYLAc+UtAQw==}
+ /@rollup/rollup-darwin-arm64@4.6.1:
+ resolution: {integrity: sha512-cEXJQY/ZqMACb+nxzDeX9IPLAg7S94xouJJCNVE5BJM8JUEP4HeTF+ti3cmxWeSJo+5D+o8Tc0UAWUkfENdeyw==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-darwin-x64@4.5.1:
- resolution: {integrity: sha512-RrkDNkR/P5AEQSPkxQPmd2ri8WTjSl0RYmuFOiEABkEY/FSg0a4riihWQGKDJ4LnV9gigWZlTMx2DtFGzUrYQw==}
+ /@rollup/rollup-darwin-x64@4.6.1:
+ resolution: {integrity: sha512-LoSU9Xu56isrkV2jLldcKspJ7sSXmZWkAxg7sW/RfF7GS4F5/v4EiqKSMCFbZtDu2Nc1gxxFdQdKwkKS4rwxNg==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-linux-arm-gnueabihf@4.5.1:
- resolution: {integrity: sha512-ZFPxvUZmE+fkB/8D9y/SWl/XaDzNSaxd1TJUSE27XAKlRpQ2VNce/86bGd9mEUgL3qrvjJ9XTGwoX0BrJkYK/A==}
+ /@rollup/rollup-linux-arm-gnueabihf@4.6.1:
+ resolution: {integrity: sha512-EfI3hzYAy5vFNDqpXsNxXcgRDcFHUWSx5nnRSCKwXuQlI5J9dD84g2Usw81n3FLBNsGCegKGwwTVsSKK9cooSQ==}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-linux-arm64-gnu@4.5.1:
- resolution: {integrity: sha512-FEuAjzVIld5WVhu+M2OewLmjmbXWd3q7Zcx+Rwy4QObQCqfblriDMMS7p7+pwgjZoo9BLkP3wa9uglQXzsB9ww==}
+ /@rollup/rollup-linux-arm64-gnu@4.6.1:
+ resolution: {integrity: sha512-9lhc4UZstsegbNLhH0Zu6TqvDfmhGzuCWtcTFXY10VjLLUe4Mr0Ye2L3rrtHaDd/J5+tFMEuo5LTCSCMXWfUKw==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-linux-arm64-musl@4.5.1:
- resolution: {integrity: sha512-f5Gs8WQixqGRtI0Iq/cMqvFYmgFzMinuJO24KRfnv7Ohi/HQclwrBCYkzQu1XfLEEt3DZyvveq9HWo4bLJf1Lw==}
+ /@rollup/rollup-linux-arm64-musl@4.6.1:
+ resolution: {integrity: sha512-FfoOK1yP5ksX3wwZ4Zk1NgyGHZyuRhf99j64I5oEmirV8EFT7+OhUZEnP+x17lcP/QHJNWGsoJwrz4PJ9fBEXw==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-linux-x64-gnu@4.5.1:
- resolution: {integrity: sha512-CWPkPGrFfN2vj3mw+S7A/4ZaU3rTV7AkXUr08W9lNP+UzOvKLVf34tWCqrKrfwQ0NTk5GFqUr2XGpeR2p6R4gw==}
+ /@rollup/rollup-linux-x64-gnu@4.6.1:
+ resolution: {integrity: sha512-DNGZvZDO5YF7jN5fX8ZqmGLjZEXIJRdJEdTFMhiyXqyXubBa0WVLDWSNlQ5JR2PNgDbEV1VQowhVRUh+74D+RA==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-linux-x64-musl@4.5.1:
- resolution: {integrity: sha512-ZRETMFA0uVukUC9u31Ed1nx++29073goCxZtmZARwk5aF/ltuENaeTtRVsSQzFlzdd4J6L3qUm+EW8cbGt0CKQ==}
+ /@rollup/rollup-linux-x64-musl@4.6.1:
+ resolution: {integrity: sha512-RkJVNVRM+piYy87HrKmhbexCHg3A6Z6MU0W9GHnJwBQNBeyhCJG9KDce4SAMdicQnpURggSvtbGo9xAWOfSvIQ==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-win32-arm64-msvc@4.5.1:
- resolution: {integrity: sha512-ihqfNJNb2XtoZMSCPeoo0cYMgU04ksyFIoOw5S0JUVbOhafLot+KD82vpKXOurE2+9o/awrqIxku9MRR9hozHQ==}
+ /@rollup/rollup-win32-arm64-msvc@4.6.1:
+ resolution: {integrity: sha512-v2FVT6xfnnmTe3W9bJXl6r5KwJglMK/iRlkKiIFfO6ysKs0rDgz7Cwwf3tjldxQUrHL9INT/1r4VA0n9L/F1vQ==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-win32-ia32-msvc@4.5.1:
- resolution: {integrity: sha512-zK9MRpC8946lQ9ypFn4gLpdwr5a01aQ/odiIJeL9EbgZDMgbZjjT/XzTqJvDfTmnE1kHdbG20sAeNlpc91/wbg==}
+ /@rollup/rollup-win32-ia32-msvc@4.6.1:
+ resolution: {integrity: sha512-YEeOjxRyEjqcWphH9dyLbzgkF8wZSKAKUkldRY6dgNR5oKs2LZazqGB41cWJ4Iqqcy9/zqYgmzBkRoVz3Q9MLw==}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: false
optional: true
- /@rollup/rollup-win32-x64-msvc@4.5.1:
- resolution: {integrity: sha512-5I3Nz4Sb9TYOtkRwlH0ow+BhMH2vnh38tZ4J4mggE48M/YyJyp/0sPSxhw1UeS1+oBgQ8q7maFtSeKpeRJu41Q==}
+ /@rollup/rollup-win32-x64-msvc@4.6.1:
+ resolution: {integrity: sha512-0zfTlFAIhgz8V2G8STq8toAjsYYA6eci1hnXuyOTUFnymrtJwnS6uGKiv3v5UrPZkBlamLvrLV2iiaeqCKzb0A==}
cpu: [x64]
os: [win32]
requiresBuild: true
@@ -1319,8 +1515,8 @@ packages:
/@types/babel__core@7.20.5:
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
dependencies:
- '@babel/parser': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/parser': 7.23.5
+ '@babel/types': 7.23.5
'@types/babel__generator': 7.6.7
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.20.4
@@ -1329,20 +1525,20 @@ packages:
/@types/babel__generator@7.6.7:
resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.5
dev: false
/@types/babel__template@7.4.4:
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
dependencies:
- '@babel/parser': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/parser': 7.23.5
+ '@babel/types': 7.23.5
dev: false
/@types/babel__traverse@7.20.4:
resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==}
dependencies:
- '@babel/types': 7.23.4
+ '@babel/types': 7.23.5
dev: false
/@types/d3-array@3.2.1:
@@ -1601,11 +1797,11 @@ packages:
/@types/react-dom@18.2.17:
resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==}
dependencies:
- '@types/react': 18.2.38
+ '@types/react': 18.2.39
dev: false
- /@types/react@18.2.38:
- resolution: {integrity: sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==}
+ /@types/react@18.2.39:
+ resolution: {integrity: sha512-Oiw+ppED6IremMInLV4HXGbfbG6GyziY3kqAwJYOR0PNbkYDmLWQA3a95EhdSmamsvbkJN96ZNN+YD+fGjzSBA==}
dependencies:
'@types/prop-types': 15.7.11
'@types/scheduler': 0.16.8
@@ -1634,18 +1830,18 @@ packages:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: false
- /@vitejs/plugin-react@4.2.0(vite@5.0.2):
+ /@vitejs/plugin-react@4.2.0(vite@5.0.4):
resolution: {integrity: sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
vite: ^4.2.0 || ^5.0.0
dependencies:
- '@babel/core': 7.23.3
- '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.3)
- '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.3)
+ '@babel/core': 7.23.5
+ '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.5)
+ '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.5)
'@types/babel__core': 7.20.5
react-refresh: 0.14.0
- vite: 5.0.2
+ vite: 5.0.4
transitivePeerDependencies:
- supports-color
dev: false
@@ -1731,13 +1927,13 @@ packages:
hasBin: true
dev: false
- /astro-expressive-code@0.29.1(astro@3.6.0):
- resolution: {integrity: sha512-hvu8kDMr3KD3vqAyJj6KdTDLuebsgnFQdw6V8myJRj464BUMiqPgmufvkuxLrqDCTJvfARJdwf/Q/H3Rqu3mhQ==}
+ /astro-expressive-code@0.29.2(astro@3.6.4):
+ resolution: {integrity: sha512-fVslVRplAQGaZyVkAFOM1csHqWDkhPzBhXEMEKfjHCzk8CMnl5VPD9yljx48GizwbB0EId68uIc6xO2hoVK9rQ==}
peerDependencies:
astro: ^3.0.0-beta
dependencies:
- astro: 3.6.0
- remark-expressive-code: 0.29.1
+ astro: 3.6.4
+ remark-expressive-code: 0.29.2
dev: false
/astro-robots-txt@1.0.0:
@@ -1747,21 +1943,21 @@ packages:
zod: 3.22.4
dev: false
- /astro@3.6.0:
- resolution: {integrity: sha512-mRDzWXsaSBaN+juvunO4Ukq8HQ1WqrULlcZfKzaKEZEXvxiWmMKN9tH0onQH0EaQ7+f4nNR4VN9kYTM26uMrXQ==}
+ /astro@3.6.4:
+ resolution: {integrity: sha512-YatUyWEQ9GUC79Wc2zbovy6D6bXPW9++Z6PYs4GDamEDspUSnnzL/INB7WJqgFI0xAFk9jcUr+MZYjkdWqXYTw==}
engines: {node: '>=18.14.1', npm: '>=6.14.0'}
hasBin: true
dependencies:
'@astrojs/compiler': 2.3.2
'@astrojs/internal-helpers': 0.2.1
- '@astrojs/markdown-remark': 3.5.0(astro@3.6.0)
+ '@astrojs/markdown-remark': 3.5.0(astro@3.6.4)
'@astrojs/telemetry': 3.0.4
- '@babel/core': 7.23.3
- '@babel/generator': 7.23.4
- '@babel/parser': 7.23.4
- '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.3)
- '@babel/traverse': 7.23.4
- '@babel/types': 7.23.4
+ '@babel/core': 7.23.5
+ '@babel/generator': 7.23.5
+ '@babel/parser': 7.23.5
+ '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.5)
+ '@babel/traverse': 7.23.5
+ '@babel/types': 7.23.5
'@types/babel__core': 7.20.5
acorn: 8.11.2
boxen: 7.1.1
@@ -1775,7 +1971,7 @@ packages:
devalue: 4.3.2
diff: 5.1.0
es-module-lexer: 1.4.1
- esbuild: 0.19.7
+ esbuild: 0.19.8
estree-walker: 3.0.3
execa: 8.0.1
fast-glob: 3.3.2
@@ -1832,7 +2028,7 @@ packages:
postcss: ^8.1.0
dependencies:
browserslist: 4.22.1
- caniuse-lite: 1.0.30001564
+ caniuse-lite: 1.0.30001565
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.0
@@ -1842,7 +2038,9 @@ packages:
/b4a@1.6.4:
resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==}
+ requiresBuild: true
dev: false
+ optional: true
/bail@2.0.2:
resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
@@ -1875,11 +2073,13 @@ packages:
/bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+ requiresBuild: true
dependencies:
buffer: 5.7.1
inherits: 2.0.4
readable-stream: 3.6.2
dev: false
+ optional: true
/bl@5.1.0:
resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
@@ -1926,18 +2126,20 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001564
- electron-to-chromium: 1.4.591
+ caniuse-lite: 1.0.30001565
+ electron-to-chromium: 1.4.597
node-releases: 2.0.13
update-browserslist-db: 1.0.13(browserslist@4.22.1)
dev: false
/buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ requiresBuild: true
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
dev: false
+ optional: true
/buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
@@ -1956,8 +2158,8 @@ packages:
engines: {node: '>=14.16'}
dev: false
- /caniuse-lite@1.0.30001564:
- resolution: {integrity: sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==}
+ /caniuse-lite@1.0.30001565:
+ resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==}
dev: false
/ccount@2.0.1:
@@ -2011,7 +2213,9 @@ packages:
/chownr@1.1.4:
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+ requiresBuild: true
dev: false
+ optional: true
/ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
@@ -2040,8 +2244,8 @@ packages:
restore-cursor: 4.0.0
dev: false
- /cli-spinners@2.9.1:
- resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==}
+ /cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
dev: false
@@ -2248,14 +2452,18 @@ packages:
/decompress-response@6.0.0:
resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
engines: {node: '>=10'}
+ requiresBuild: true
dependencies:
mimic-response: 3.1.0
dev: false
+ optional: true
/deep-extend@0.6.0:
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
engines: {node: '>=4.0.0'}
+ requiresBuild: true
dev: false
+ optional: true
/dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
@@ -2308,8 +2516,8 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: false
- /electron-to-chromium@1.4.591:
- resolution: {integrity: sha512-vLv/P7wwAPKQoY+CVMyyI6rsTp+A14KGtPXx92oz1FY41AAqa9l6Wkizcixg0LDuJgyeo8xgNN9+9hsnGp66UA==}
+ /electron-to-chromium@1.4.597:
+ resolution: {integrity: sha512-0XOQNqHhg2YgRVRUrS4M4vWjFCFIP2ETXcXe/0KIQBjXE9Cpy+tgzzYfuq6HGai3hWq0YywtG+5XK8fyG08EjA==}
dev: false
/emoji-regex@10.3.0:
@@ -2326,9 +2534,11 @@ packages:
/end-of-stream@1.4.4:
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+ requiresBuild: true
dependencies:
once: 1.4.0
dev: false
+ optional: true
/entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
@@ -2369,34 +2579,34 @@ packages:
'@esbuild/win32-x64': 0.18.20
dev: false
- /esbuild@0.19.7:
- resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==}
+ /esbuild@0.19.8:
+ resolution: {integrity: sha512-l7iffQpT2OrZfH2rXIp7/FkmaeZM0vxbxN9KfiCwGYuZqzMg/JdvX26R31Zxn/Pxvsrg3Y9N6XTcnknqDyyv4w==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
- '@esbuild/android-arm': 0.19.7
- '@esbuild/android-arm64': 0.19.7
- '@esbuild/android-x64': 0.19.7
- '@esbuild/darwin-arm64': 0.19.7
- '@esbuild/darwin-x64': 0.19.7
- '@esbuild/freebsd-arm64': 0.19.7
- '@esbuild/freebsd-x64': 0.19.7
- '@esbuild/linux-arm': 0.19.7
- '@esbuild/linux-arm64': 0.19.7
- '@esbuild/linux-ia32': 0.19.7
- '@esbuild/linux-loong64': 0.19.7
- '@esbuild/linux-mips64el': 0.19.7
- '@esbuild/linux-ppc64': 0.19.7
- '@esbuild/linux-riscv64': 0.19.7
- '@esbuild/linux-s390x': 0.19.7
- '@esbuild/linux-x64': 0.19.7
- '@esbuild/netbsd-x64': 0.19.7
- '@esbuild/openbsd-x64': 0.19.7
- '@esbuild/sunos-x64': 0.19.7
- '@esbuild/win32-arm64': 0.19.7
- '@esbuild/win32-ia32': 0.19.7
- '@esbuild/win32-x64': 0.19.7
+ '@esbuild/android-arm': 0.19.8
+ '@esbuild/android-arm64': 0.19.8
+ '@esbuild/android-x64': 0.19.8
+ '@esbuild/darwin-arm64': 0.19.8
+ '@esbuild/darwin-x64': 0.19.8
+ '@esbuild/freebsd-arm64': 0.19.8
+ '@esbuild/freebsd-x64': 0.19.8
+ '@esbuild/linux-arm': 0.19.8
+ '@esbuild/linux-arm64': 0.19.8
+ '@esbuild/linux-ia32': 0.19.8
+ '@esbuild/linux-loong64': 0.19.8
+ '@esbuild/linux-mips64el': 0.19.8
+ '@esbuild/linux-ppc64': 0.19.8
+ '@esbuild/linux-riscv64': 0.19.8
+ '@esbuild/linux-s390x': 0.19.8
+ '@esbuild/linux-x64': 0.19.8
+ '@esbuild/netbsd-x64': 0.19.8
+ '@esbuild/openbsd-x64': 0.19.8
+ '@esbuild/sunos-x64': 0.19.8
+ '@esbuild/win32-arm64': 0.19.8
+ '@esbuild/win32-ia32': 0.19.8
+ '@esbuild/win32-x64': 0.19.8
dev: false
/escalade@3.1.1:
@@ -2481,15 +2691,17 @@ packages:
/expand-template@2.0.3:
resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
engines: {node: '>=6'}
+ requiresBuild: true
dev: false
+ optional: true
- /expressive-code@0.29.1:
- resolution: {integrity: sha512-KyEkbSRz2+2gbgtYviOb8xr+QhoAfRQe1VxLAmeZ99c57KAleBpfZHU7JeHj84vputFK6Ge6P87ou9ijD1DXbw==}
+ /expressive-code@0.29.2:
+ resolution: {integrity: sha512-UwC+GjYSUbonH8gYlHS4fmh0TSdyrdDry88GdVYVUiN2EI1nh7Duu8s2cpYvFsObPIeUXsbHLWTygBO1XhXtEQ==}
dependencies:
- '@expressive-code/core': 0.29.1
- '@expressive-code/plugin-frames': 0.29.1
- '@expressive-code/plugin-shiki': 0.29.1
- '@expressive-code/plugin-text-markers': 0.29.1
+ '@expressive-code/core': 0.29.2
+ '@expressive-code/plugin-frames': 0.29.2
+ '@expressive-code/plugin-shiki': 0.29.2
+ '@expressive-code/plugin-text-markers': 0.29.2
dev: false
/extend-shallow@2.0.1:
@@ -2505,7 +2717,9 @@ packages:
/fast-fifo@1.3.2:
resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
+ requiresBuild: true
dev: false
+ optional: true
/fast-glob@3.3.2:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
@@ -2565,7 +2779,9 @@ packages:
/fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+ requiresBuild: true
dev: false
+ optional: true
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -2595,7 +2811,9 @@ packages:
/github-from-package@0.0.0:
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+ requiresBuild: true
dev: false
+ optional: true
/github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
@@ -2976,7 +3194,9 @@ packages:
/ini@1.3.8:
resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ requiresBuild: true
dev: false
+ optional: true
/inline-style-parser@0.1.1:
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
@@ -3241,8 +3461,8 @@ packages:
yallist: 4.0.0
dev: false
- /lucide-react@0.292.0(react@18.2.0):
- resolution: {integrity: sha512-rRgUkpEHWpa5VCT66YscInCQmQuPCB1RFRzkkxMxg4b+jaL0V12E3riWWR2Sh5OIiUhCwGW/ZExuEO4Az32E6Q==}
+ /lucide-react@0.294.0(react@18.2.0):
+ resolution: {integrity: sha512-V7o0/VECSGbLHn3/1O67FUgBwWB+hmzshrgDVRJQhMh8uj5D3HBuIvhuAmQTtlupILSplwIZg5FTc4tTKMA2SA==}
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0
dependencies:
@@ -4114,7 +4334,9 @@ packages:
/mimic-response@3.1.0:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'}
+ requiresBuild: true
dev: false
+ optional: true
/minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -4124,11 +4346,15 @@ packages:
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ requiresBuild: true
dev: false
+ optional: true
/mkdirp-classic@0.5.3:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
+ requiresBuild: true
dev: false
+ optional: true
/mri@1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
@@ -4163,7 +4389,9 @@ packages:
/napi-build-utils@1.0.2:
resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
+ requiresBuild: true
dev: false
+ optional: true
/needle@2.9.1:
resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==}
@@ -4186,13 +4414,17 @@ packages:
/node-abi@3.51.0:
resolution: {integrity: sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA==}
engines: {node: '>=10'}
+ requiresBuild: true
dependencies:
semver: 7.5.4
dev: false
+ optional: true
/node-addon-api@6.1.0:
resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
+ requiresBuild: true
dev: false
+ optional: true
/node-releases@2.0.13:
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
@@ -4261,7 +4493,7 @@ packages:
dependencies:
chalk: 5.3.0
cli-cursor: 4.0.0
- cli-spinners: 2.9.1
+ cli-spinners: 2.9.2
is-interactive: 2.0.0
is-unicode-supported: 1.3.0
log-symbols: 5.1.0
@@ -4506,6 +4738,7 @@ packages:
resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
engines: {node: '>=10'}
hasBin: true
+ requiresBuild: true
dependencies:
detect-libc: 2.0.2
expand-template: 2.0.3
@@ -4520,6 +4753,7 @@ packages:
tar-fs: 2.1.1
tunnel-agent: 0.6.0
dev: false
+ optional: true
/preferred-pm@3.1.2:
resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==}
@@ -4639,10 +4873,12 @@ packages:
/pump@3.0.0:
resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+ requiresBuild: true
dependencies:
end-of-stream: 1.4.4
once: 1.4.0
dev: false
+ optional: true
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -4650,17 +4886,21 @@ packages:
/queue-tick@1.0.1:
resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
+ requiresBuild: true
dev: false
+ optional: true
/rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
+ requiresBuild: true
dependencies:
deep-extend: 0.6.0
ini: 1.3.8
minimist: 1.2.8
strip-json-comments: 2.0.1
dev: false
+ optional: true
/react-dom@18.2.0(react@18.2.0):
resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
@@ -4676,14 +4916,14 @@ packages:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
dev: false
- /react-markdown@9.0.1(@types/react@18.2.38)(react@18.2.0):
+ /react-markdown@9.0.1(@types/react@18.2.39)(react@18.2.0):
resolution: {integrity: sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==}
peerDependencies:
'@types/react': '>=18'
react: '>=18'
dependencies:
'@types/hast': 3.0.3
- '@types/react': 18.2.38
+ '@types/react': 18.2.39
devlop: 1.1.0
hast-util-to-jsx-runtime: 2.2.0
html-url-attributes: 3.0.0
@@ -4710,18 +4950,18 @@ packages:
loose-envify: 1.4.0
dev: false
- /reactflow@11.10.1(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0):
+ /reactflow@11.10.1(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Q616fElAc5/N37tMwjuRkkgm/VgmnLLTNNCj61z5mvJxae+/VXZQMfot1K6a5LLz9G3SVKqU97PMb9Ga1PRXew==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/background': 11.3.6(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/controls': 11.2.6(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/core': 11.10.1(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/minimap': 11.7.6(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/node-resizer': 2.2.6(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/node-toolbar': 1.3.6(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/background': 11.3.6(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/controls': 11.2.6(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.10.1(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/minimap': 11.7.6(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/node-resizer': 2.2.6(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/node-toolbar': 1.3.6(@types/react@18.2.39)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
@@ -4808,10 +5048,10 @@ packages:
- supports-color
dev: false
- /remark-expressive-code@0.29.1:
- resolution: {integrity: sha512-iRdN3XLEFLlUNqUCeBPlLgaZROI5lAM3OK7bnwrmQ0ubXJTfV3oET6WL0c5QGijoCZzzDapNiRlRZPrNDoL+5Q==}
+ /remark-expressive-code@0.29.2:
+ resolution: {integrity: sha512-XIsrURhMOJNOUkCSp0OQ3suAZxNIS6ZkubjOxlTLyViOuVPmvRIXp36t6om9PYSwbxesorM+DNJpsla297GzQQ==}
dependencies:
- expressive-code: 0.29.1
+ expressive-code: 0.29.2
hast-util-to-html: 8.0.4
unist-util-visit: 4.1.2
dev: false
@@ -4961,23 +5201,23 @@ packages:
fsevents: 2.3.3
dev: false
- /rollup@4.5.1:
- resolution: {integrity: sha512-0EQribZoPKpb5z1NW/QYm3XSR//Xr8BeEXU49Lc/mQmpmVVG5jPUVrpc2iptup/0WMrY9mzas0fxH+TjYvG2CA==}
+ /rollup@4.6.1:
+ resolution: {integrity: sha512-jZHaZotEHQaHLgKr8JnQiDT1rmatjgKlMekyksz+yk9jt/8z9quNjnKNRoaM0wd9DC2QKXjmWWuDYtM3jfF8pQ==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.5.1
- '@rollup/rollup-android-arm64': 4.5.1
- '@rollup/rollup-darwin-arm64': 4.5.1
- '@rollup/rollup-darwin-x64': 4.5.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.5.1
- '@rollup/rollup-linux-arm64-gnu': 4.5.1
- '@rollup/rollup-linux-arm64-musl': 4.5.1
- '@rollup/rollup-linux-x64-gnu': 4.5.1
- '@rollup/rollup-linux-x64-musl': 4.5.1
- '@rollup/rollup-win32-arm64-msvc': 4.5.1
- '@rollup/rollup-win32-ia32-msvc': 4.5.1
- '@rollup/rollup-win32-x64-msvc': 4.5.1
+ '@rollup/rollup-android-arm-eabi': 4.6.1
+ '@rollup/rollup-android-arm64': 4.6.1
+ '@rollup/rollup-darwin-arm64': 4.6.1
+ '@rollup/rollup-darwin-x64': 4.6.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.6.1
+ '@rollup/rollup-linux-arm64-gnu': 4.6.1
+ '@rollup/rollup-linux-arm64-musl': 4.6.1
+ '@rollup/rollup-linux-x64-gnu': 4.6.1
+ '@rollup/rollup-linux-x64-musl': 4.6.1
+ '@rollup/rollup-win32-arm64-msvc': 4.6.1
+ '@rollup/rollup-win32-ia32-msvc': 4.6.1
+ '@rollup/rollup-win32-x64-msvc': 4.6.1
fsevents: 2.3.3
dev: false
@@ -5061,6 +5301,37 @@ packages:
tar-fs: 3.0.4
tunnel-agent: 0.6.0
dev: false
+ optional: true
+
+ /sharp@0.33.0:
+ resolution: {integrity: sha512-99DZKudjm/Rmz+M0/26t4DKpXyywAOJaayGS9boEn7FvgtG0RYBi46uPE2c+obcJRtA3AZa0QwJot63gJQ1F0Q==}
+ engines: {libvips: '>=8.15.0', node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+ requiresBuild: true
+ dependencies:
+ color: 4.2.3
+ detect-libc: 2.0.2
+ semver: 7.5.4
+ optionalDependencies:
+ '@img/sharp-darwin-arm64': 0.33.0
+ '@img/sharp-darwin-x64': 0.33.0
+ '@img/sharp-libvips-darwin-arm64': 1.0.0
+ '@img/sharp-libvips-darwin-x64': 1.0.0
+ '@img/sharp-libvips-linux-arm': 1.0.0
+ '@img/sharp-libvips-linux-arm64': 1.0.0
+ '@img/sharp-libvips-linux-s390x': 1.0.0
+ '@img/sharp-libvips-linux-x64': 1.0.0
+ '@img/sharp-libvips-linuxmusl-arm64': 1.0.0
+ '@img/sharp-libvips-linuxmusl-x64': 1.0.0
+ '@img/sharp-linux-arm': 0.33.0
+ '@img/sharp-linux-arm64': 0.33.0
+ '@img/sharp-linux-s390x': 0.33.0
+ '@img/sharp-linux-x64': 0.33.0
+ '@img/sharp-linuxmusl-arm64': 0.33.0
+ '@img/sharp-linuxmusl-x64': 0.33.0
+ '@img/sharp-wasm32': 0.33.0
+ '@img/sharp-win32-ia32': 0.33.0
+ '@img/sharp-win32-x64': 0.33.0
+ dev: false
/shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
@@ -5100,15 +5371,19 @@ packages:
/simple-concat@1.0.1:
resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+ requiresBuild: true
dev: false
+ optional: true
/simple-get@4.0.1:
resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
+ requiresBuild: true
dependencies:
decompress-response: 6.0.0
once: 1.4.0
simple-concat: 1.0.1
dev: false
+ optional: true
/simple-swizzle@0.2.2:
resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
@@ -5166,10 +5441,12 @@ packages:
/streamx@2.15.5:
resolution: {integrity: sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==}
+ requiresBuild: true
dependencies:
fast-fifo: 1.3.2
queue-tick: 1.0.1
dev: false
+ optional: true
/string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
@@ -5243,7 +5520,9 @@ packages:
/strip-json-comments@2.0.1:
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
engines: {node: '>=0.10.0'}
+ requiresBuild: true
dev: false
+ optional: true
/style-to-object@0.4.4:
resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==}
@@ -5316,24 +5595,29 @@ packages:
/tar-fs@2.1.1:
resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
+ requiresBuild: true
dependencies:
chownr: 1.1.4
mkdirp-classic: 0.5.3
pump: 3.0.0
tar-stream: 2.2.0
dev: false
+ optional: true
/tar-fs@3.0.4:
resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==}
+ requiresBuild: true
dependencies:
mkdirp-classic: 0.5.3
pump: 3.0.0
tar-stream: 3.1.6
dev: false
+ optional: true
/tar-stream@2.2.0:
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
engines: {node: '>=6'}
+ requiresBuild: true
dependencies:
bl: 4.1.0
end-of-stream: 1.4.4
@@ -5341,14 +5625,17 @@ packages:
inherits: 2.0.4
readable-stream: 3.6.2
dev: false
+ optional: true
/tar-stream@3.1.6:
resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==}
+ requiresBuild: true
dependencies:
b4a: 1.6.4
fast-fifo: 1.3.2
streamx: 2.15.5
dev: false
+ optional: true
/thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
@@ -5398,11 +5685,19 @@ packages:
optional: true
dev: false
+ /tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+ requiresBuild: true
+ dev: false
+ optional: true
+
/tunnel-agent@0.6.0:
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+ requiresBuild: true
dependencies:
safe-buffer: 5.2.1
dev: false
+ optional: true
/type-fest@2.19.0:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
@@ -5680,8 +5975,8 @@ packages:
fsevents: 2.3.3
dev: false
- /vite@5.0.2:
- resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==}
+ /vite@5.0.4:
+ resolution: {integrity: sha512-RzAr8LSvM8lmhB4tQ5OPcBhpjOZRZjuxv9zO5UcxeoY2bd3kP3Ticd40Qma9/BqZ8JS96Ll/jeBX9u+LJZrhVg==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -5708,9 +6003,9 @@ packages:
terser:
optional: true
dependencies:
- esbuild: 0.19.7
+ esbuild: 0.19.8
postcss: 8.4.31
- rollup: 4.5.1
+ rollup: 4.6.1
optionalDependencies:
fsevents: 2.3.3
dev: false
@@ -5819,8 +6114,8 @@ packages:
resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
dev: false
- /zustand@4.4.6(@types/react@18.2.38)(react@18.2.0):
- resolution: {integrity: sha512-Rb16eW55gqL4W2XZpJh0fnrATxYEG3Apl2gfHTyDSE965x/zxslTikpNch0JgNjJA9zK6gEFW8Fl6d1rTZaqgg==}
+ /zustand@4.4.7(@types/react@18.2.39)(react@18.2.0):
+ resolution: {integrity: sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==}
engines: {node: '>=12.7.0'}
peerDependencies:
'@types/react': '>=16.8'
@@ -5834,7 +6129,7 @@ packages:
react:
optional: true
dependencies:
- '@types/react': 18.2.38
+ '@types/react': 18.2.39
react: 18.2.0
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
diff --git a/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510.mdx b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510.mdx
new file mode 100644
index 00000000..d06cd136
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510.mdx
@@ -0,0 +1,43 @@
+---
+title: CONNECT_DMM7510
+description: "Open a VISA connection to a Keithley DMM7510."
+slug: blocks/hardware/multimeters/keithley/dmm7510/connect-dmm7510
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/CONNECT_DMM7510.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/CONNECT_DMM7510/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510.mdx b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510.mdx
new file mode 100644
index 00000000..c1f48e76
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510.mdx
@@ -0,0 +1,43 @@
+---
+title: DIGITIZED_TIME_DMM7510
+description: "Measures digitized data vs time."
+slug: blocks/hardware/multimeters/keithley/dmm7510/digitized-time-dmm7510
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/DIGITIZED_TIME_DMM7510.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/DIGITIZED_TIME_DMM7510.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITIZED_TIME_DMM7510/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510.mdx b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510.mdx
new file mode 100644
index 00000000..97709013
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510.mdx
@@ -0,0 +1,43 @@
+---
+title: DIGITS_DMM7510
+description: "Changes the number of digits for measurements for the DMM7510."
+slug: blocks/hardware/multimeters/keithley/dmm7510/digits-dmm7510
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/DIGITS_DMM7510.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/DIGITS_DMM7510/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510.mdx b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510.mdx
new file mode 100644
index 00000000..c0fcefe4
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510.mdx
@@ -0,0 +1,43 @@
+---
+title: FUNCTION_DMM7510
+description: "Changes the measurement function for the DMM7510."
+slug: blocks/hardware/multimeters/keithley/dmm7510/function-dmm7510
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/FUNCTION_DMM7510.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/FUNCTION_DMM7510/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510.mdx b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510.mdx
new file mode 100644
index 00000000..25777546
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510.mdx
@@ -0,0 +1,43 @@
+---
+title: MEASUREMENT_FILTER_DMM7510
+description: "Changes the measurement filter settings for the DMM7510."
+slug: blocks/hardware/multimeters/keithley/dmm7510/measurement-filter-dmm7510
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/MEASUREMENT_FILTER_DMM7510.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_FILTER_DMM7510/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510.mdx b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510.mdx
new file mode 100644
index 00000000..52e32ef0
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510.mdx
@@ -0,0 +1,43 @@
+---
+title: MEASUREMENT_PARAMS_DMM7510
+description: "Changes the measurement settings for the DMM7510."
+slug: blocks/hardware/multimeters/keithley/dmm7510/measurement-params-dmm7510
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/MEASUREMENT_PARAMS_DMM7510.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/MEASUREMENT_PARAMS_DMM7510/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510.mdx b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510.mdx
new file mode 100644
index 00000000..92823f19
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510.mdx
@@ -0,0 +1,43 @@
+---
+title: READ_MEASUREMENT_DMM7510
+description: "Reads a single measurement from the DMM7510."
+slug: blocks/hardware/multimeters/keithley/dmm7510/read-measurement-dmm7510
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/READ_MEASUREMENT_DMM7510.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/READ_MEASUREMENT_DMM7510/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510.mdx b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510.mdx
new file mode 100644
index 00000000..9bc21e68
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510.mdx
@@ -0,0 +1,43 @@
+---
+title: RESET_DMM7510
+description: "Resets the DMM7510 and clears buffers."
+slug: blocks/hardware/multimeters/keithley/dmm7510/reset-dmm7510
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/RESET_DMM7510.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/MULTIMETERS/KEITHLEY/DMM7510/RESET_DMM7510/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/PROTOCOLS/GPIB/PROLOGIX/overview.mdx b/docs/src/content/docs/blocks/HARDWARE/PROTOCOLS/GPIB/PROLOGIX/overview.mdx
new file mode 100644
index 00000000..c562f6ac
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/PROTOCOLS/GPIB/PROLOGIX/overview.mdx
@@ -0,0 +1,18 @@
+---
+title: Prologix Overview
+description: "Welcome to Flojoy's Prologix Blocks page."
+slug: blocks/hardware/protocols/gpib/prologix
+sidebar:
+ order: 1
+---
+
+Coming soon...
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import BlockCategory from "@/components/BlockCategory.astro";
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450.mdx b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450.mdx
new file mode 100644
index 00000000..9b276ce6
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450.mdx
@@ -0,0 +1,43 @@
+---
+title: BEEP_2450
+description: "Causes the 2450 to beep audibly."
+slug: blocks/hardware/sourcemeters/keithley/2450/beep-2450
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/BEEP_2450.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/BEEP_2450/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450.mdx b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450.mdx
new file mode 100644
index 00000000..bb6e8704
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450.mdx
@@ -0,0 +1,43 @@
+---
+title: CONNECT_2450
+description: "Open a VISA connection to an Keithley 2450 SourceMeter."
+slug: blocks/hardware/sourcemeters/keithley/2450/connect-2450
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/CONNECT_2450.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/CONNECT_2450/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450.mdx b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450.mdx
new file mode 100644
index 00000000..1250da70
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450.mdx
@@ -0,0 +1,43 @@
+---
+title: IV_SWEEP_2450
+description: "Sweeps current or voltage and measures the opposite for the 2450."
+slug: blocks/hardware/sourcemeters/keithley/2450/iv-sweep-2450
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/IV_SWEEP_2450.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/IV_SWEEP_2450/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450.mdx b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450.mdx
new file mode 100644
index 00000000..0bf4d1bc
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450.mdx
@@ -0,0 +1,43 @@
+---
+title: MEASURE_READ_2450
+description: "Returns the measurement reading from the 2450."
+slug: blocks/hardware/sourcemeters/keithley/2450/measure-read-2450
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/MEASURE_READ_2450.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_READ_2450/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450.mdx b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450.mdx
new file mode 100644
index 00000000..df1443a8
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450.mdx
@@ -0,0 +1,43 @@
+---
+title: MEASURE_SETTINGS_2450
+description: "Changes the measurement settings for the 2450."
+slug: blocks/hardware/sourcemeters/keithley/2450/measure-settings-2450
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/MEASURE_SETTINGS_2450.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/MEASURE_SETTINGS_2450/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450.mdx b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450.mdx
new file mode 100644
index 00000000..47eef35a
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450.mdx
@@ -0,0 +1,43 @@
+---
+title: OUTPUT_2450
+description: "Turns the source output on or off."
+slug: blocks/hardware/sourcemeters/keithley/2450/output-2450
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/OUTPUT_2450.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/OUTPUT_2450/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450.mdx b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450.mdx
new file mode 100644
index 00000000..bb0b3f9c
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450.mdx
@@ -0,0 +1,43 @@
+---
+title: RESET_2450
+description: "Resets the 2450 and clears buffers."
+slug: blocks/hardware/sourcemeters/keithley/2450/reset-2450
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/RESET_2450.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/RESET_2450/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450.mdx b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450.mdx
new file mode 100644
index 00000000..1a2f9544
--- /dev/null
+++ b/docs/src/content/docs/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450.mdx
@@ -0,0 +1,43 @@
+---
+title: SOURCE_2450
+description: "Set the source output settings."
+slug: blocks/hardware/sourcemeters/keithley/2450/source-2450
+---
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
+
+import block_data from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/block_data.json";
+import PythonDocsDisplay from "@/components/PythonDocsDisplay.astro";
+
+
+
+Python Code
+
+import pythonCode from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py?raw";
+
+import { Code } from 'astro:components';
+
+
+
+[Find this Flojoy Block on GitHub](https://github.com/flojoy-ai/blocks/blob/main/blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/SOURCE_2450.py)
+
+
+
+## Example
+
+import GetHelpWidget from "@/components/GetHelpWidget.astro";
+
+
+
+import app from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/app.json";
+import AppDisplay from "@/components/AppDisplay.tsx";
+
+
+
+import Example from "@blocks/HARDWARE/SOURCEMETERS/KEITHLEY/2450/SOURCE_2450/example.md";
+
+
+
+{/* DO NOT EDIT THIS FILE! IT IS BEING AUTO GENERATED */}
+{/* PLEASE REFER TO THE CONTRIBUTION GUIDE ON THE DOCS PAGE */}
diff --git a/docs/src/content/docs/blocks/HARDWARE/overview.mdx b/docs/src/content/docs/blocks/HARDWARE/overview.mdx
index 1ad0f2d2..3a0ccd25 100644
--- a/docs/src/content/docs/blocks/HARDWARE/overview.mdx
+++ b/docs/src/content/docs/blocks/HARDWARE/overview.mdx
@@ -54,6 +54,11 @@ import BlockCategory from "@/components/BlockCategory.astro";
### MULTIMETERS
+#### KEITHLEY
+##### DMM7510
+
+
+
#### NI
##### USB_4065
@@ -125,6 +130,9 @@ import BlockCategory from "@/components/BlockCategory.astro";
### SOURCEMETERS
#### KEITHLEY
+##### 2450
+
+
##### 24XX
diff --git a/docs/src/content/docs/studio/installation.mdx b/docs/src/content/docs/studio/installation.mdx
index 3dbba832..0c1e3a9b 100644
--- a/docs/src/content/docs/studio/installation.mdx
+++ b/docs/src/content/docs/studio/installation.mdx
@@ -14,20 +14,14 @@ import packageJSON from "@root/package.json";
There are **2 steps** to install Flojoy Studio:
-## 1. Install Conda/Miniconda
+## 1. Install Python ~3.11
-If you haven't yet installed Conda/Miniconda on your machine, please install it
-first. We are using it to manage the underlying Python environment for all the
-magic behind Flojoy Studio. We also recommend installing Miniconda since it is
-more lightweight.
-
-You can find a detailed instruction [here](https://docs.conda.io/projects/miniconda/en/latest/miniconda-install.html).
-And if you are comfortable of using command line, you can also find a quick
-command line installation instruction [here](https://docs.conda.io/projects/miniconda/en/latest/index.html#quick-command-line-install).
+If you haven't yet installed Python ~3.11 on your machine, please install it
+first. You can install Python v3.11 from official website [here](https://www.python.org/downloads/release/python-3116)
## 2. Install Flojoy Studio
-Once you have Conda/Miniconda installed on your machine, you are ready to install
+Once you have Python ~3.11 installed on your machine, you are ready to install
Flojoy Studio. Simply choose the right installer for your machine and follow the
instructions.