Giter Site home page Giter Site logo

pyvisa-mock's Introduction

pyvisa-mock

pyvisa-mock aims to provide similar functionality as pyvisa-sim, however, instead of a static YAML file providing query/response items, a dynamic python object is responsible for handling queries.

Example

from collections import defaultdict
from visa import ResourceManager
from visa_mock.base.base_mocker import BaseMocker, scpi
from visa_mock.base.register import register_resource

class MockerChannel(BaseMocker): 
    """
    A mocker channel for a multi channel voltage source. 
    Voltages are zero by default
    """
    
    def __init__(self, call_delay: float = 0.0):
        super().__init__(call_delay=call_delay)
        self._voltage = 0
    
    # Lets define handler functions. 
    
    @scpi(":VOLTage <voltage>") 
    def _set_voltage(self, voltage: float) -> None:
        self._voltage = voltage
    
    @scpi(":VOLTage?")
    def _get_voltage(self) -> float: 
        return self._voltage


class Mocker(BaseMocker):
    """
    The main mocker class. 
    """

    def __init__(self, call_delay: float = 0.0):
        super().__init__(call_delay=call_delay)
        self._channels = defaultdict(MockerChannel)

    @scpi("*IDN?")
    def idn(self) -> str: 
        """
        'vendor', 'model', 'serial', 'firmware'
        """
        return "Mocker,testing,00000,0.01"
    
    @scpi(":INSTRument:CHAnnel<channel>")
    def _get_channel(self, channel: int) -> MockerChannel:
        return self._channels[channel] 
        
register_resource("MOCK0::mock1::INSTR", Mocker())

rc = ResourceManager(visa_library="@mock")
res = rc.open_resource("MOCK0::mock1::INSTR")
res.write(":INSTR:CHANNEL1:VOLT 2.3")
reply = res.query(":INSTR:CHA1:VOLT?")  # This should return '2.3'
reply = res.query(":instrument:channel1:voltage?") # We can either use the short form or the long form

pyvisa-mock's People

Contributors

iansmith21 avatar liangosc avatar microsoft-github-operations[bot] avatar microsoftopensource avatar sohailc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

pyvisa-mock's Issues

Current repository status

Hello! I'm not sure where to ask so I ask here:
What's the current status of this repository? Is it actively supported? Will pyvisa-mock be available via pip? Will docs be published somewhere?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.