{ "cells": [ { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. _virtualinstruments:\n", "\n", "|\n", "|\n", "\n", "Download This Notebook: :download:`VirtualInstruments.ipynb`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Virtual Instruments\n", " \n", "## Introduction" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. warning::\n", "\n", " The `vi` modules depends on `PyVISA\n", " `_ as well as some additional\n", " libraries. Make sure you've followed the instructions in the `installation\n", " tutorial `_ to ensure a working setup. \n", "\n", " Additionally, PyVISA can use a number of different backends to communicate\n", " with instruments. The installation of these is up to the user, but there are\n", " further instructions in the `PyVISA documentation `_\n", " By default, PyVISA uses it's Python VISA implementation, but certain instrument\n", " configurations require their manufacturer's specific VISA library be\n", " installed and used to communicate with instruments. For example, the\n", " Keysight IO libraries suite has to be used to communicate with their\n", " instruments over GPIB." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The virtual instrument module defines a consistent high-level interface for\n", "interacting with different types of instruments that can be controlled with SCPI\n", "(or other means). Primarily for scikit-rf, this is vector network analyzers\n", "(VNAs), but we are actively working on adding support for spectrum analyzers.\n", "\n", "For information on specific instruments, consult the [vi](../api/vi/index.rst)\n", "module's documentation.\n", "\n", "The currently supported instruments are (organized by manufacturer):\n", "\n", "### Rohde & Schwarz\n", "- [ZNA](../api/vi/generated/skrf.vi.vna.rohde_schwarz.ZNA.rst)\n", "- [ZVA](../api/vi/generated/skrf.vi.vna.rohde_schwarz.ZVA.rst)\n", "\n", "### Keysight\n", "- [FieldFox](../api/vi/generated/skrf.vi.vna.keysight.FieldFox.rst)\n", "- [PNA](../api/vi/generated/skrf.vi.vna.keysight.PNA.rst)\n", "\n", "### NanoVNA\n", "- [NanoVNA V2](../api/vi/generated/skrf.vi.vna.nanovna.NanoVNAv2.rst)" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. tip::\n", "\n", " You can help grow scikit-rf by adding support for more instruments! It's\n", " really not that complicated. Check out the `vi module documentation <../api/vi/index.rst>`_ to\n", " learn how." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Examples" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. note::\n", "\n", " You can download this Jupyter notebook and run it directly on your PC:\n", " :download:`VirtualInstruments.ipynb`\n", "\n", " Make sure to comment out any code that is not needed for your instrument." ] }, { "cell_type": "markdown", "metadata": {}, "source": "### Connecting to an instrument" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "from skrf import Frequency\n", "from skrf.vi.vna.keysight import PNA\n", "from skrf.vi.vna.nanovna import NanoVNAv2\n", "from skrf.vi.vna.rohde_schwarz import ZNA\n", "\n", "# Rohde & Schwarz ZNA over ethernet\n", "instr = ZNA(address=\"TCPIP::10.0.0.5::INSTR\")\n", "ch1 = instr.ch1\n", "\n", "# Keysight PNA over ethernet\n", "instr = PNA(address=\"TCPIP::10.0.0.5::INSTR\")\n", "ch1 = instr.ch1\n", "\n", "# NanoVNA V2 over USB\n", "instr = NanoVNAv2(\"ASRL/dev/ttyACM0::INSTR\") # Linux\n", "instr = NanoVNAv2(\"ASRL1::INSTR\") # Windows\n", "ch1 = instr # NanoVNA does not support channels\n", "\n", "print(instr.id)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Changing the frequency settings of an instrument" ] }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "freq = Frequency(start=1, stop=2, npoints = 101, unit=\"GHz\") # create frequency object\n", "ch1.frequency = freq # apply frequency" ] }, { "cell_type": "markdown", "metadata": {}, "source": "### Creating measurements on the instrument" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "# not supported on NanoVNA\n", "ch1.create_measurement(name=\"Temp_S11\", parameter=\"S11\")\n", "ch1.create_measurement(name=\"Temp_S22\", parameter=\"S22\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": "### Getting a 2-port network and plotting" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "ntwk = ch1.get_snp_network(ports=(1,2))\n", "ntwk.plot_s_db()" ] }, { "metadata": {}, "cell_type": "markdown", "source": "### Deleting measurements on the instrument" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "# not supported on NanoVNA\n", "ch1.delete_measurement(name=\"Temp_S11\")\n", "ch1.delete_measurement(name=\"Temp_S22\")" ] } ], "metadata": { "celltoolbar": "Raw Cell Format", "kernelspec": { "display_name": "Python 3.10.4 ('skrf')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" }, "vscode": { "interpreter": { "hash": "6e9ab46c0308d25f8ecf2297d605bcf30c0184a06f23fc8ad30aef47f26c08c0" } }, "nbsphinx": { "execute": "never" } }, "nbformat": 4, "nbformat_minor": 1 }