pymeasure / pyleco

Python implementation of the Laboratory Experiment COntrol (LECO) protocol
MIT License
9 stars 3 forks source link
automation laboratory protocol python science

PyLECO

codecov pypi release conda-forge release DOI Common Changelog

Python reference implementation of the Laboratory Experiment COntrol (LECO) protocol.

Note: LECO is still under development, such that the code and API might change. The LECO protocol branch pyleco-state contains the assumptions used in this project, which are not yet accepted into the LECO main branch. See this documentation for the LECO definitions including these assumptions. These things might change, if LECO defines them differently.

For a tutorial on how to get started, see GETTING_STARTED.md.

You are welcome to contribute, for more information see CONTRIBUTING.md.

Quick Start

  1. Install Python,
  2. install PyLECO with pip install pyleco or conda install conda-forge::pyleco,
  3. import the package pyleco in your python scripts,
  4. and use it as desired.

LECO Overview

Network Topology

PyLECO is an implementation of LECO, for the full protocol specifications please visit https://github.com/pymeasure/leco-protocol. LECO offers a protocol for data exchange, for example for laboratory experimental control.

There exist two different communication protocols in LECO.

  1. The control protocol allows to exchange messages between any two Components in a LECO network, which is useful for controlling devices.
  2. The data protocol is a broadcasting protocol to send information to all those, who want to receive it, which is useful for regular measurement data or for log entries.

A LECO network needs at least one Coordinator (server), which routes the messages among the connected Components.

Each Component has a name unique in the network. This name consists in the name of the Coordinator they are connected to and their own name. For example N1.component1 is the full name of component1 connected to the Coordinator of the Namespace N1. That Coordinator itself is called N1.COORDINATOR, as Coordinators are always called COORDINATOR.

Remote Procedure Calls

The default messaging content of the control protocol are remote procedure calls (RPC) according to JSON-RPC. RPC means, that you execute a method (or procedure) on a remote Component. For example you have an Actor, which is for example a Component controlling a measurement instrument. In order to set the output of that measurement instrument, you want to call the set_output method of that instrument. For that purpose, you send a message which encodes exactly that (via jsonrpc): the method to call and the parameters of that method.

Usage of the Control Protocol

Minimum Setup

For a minimum setup, you need:

For example, you can use a Communicator instance to send/receive messages via LECO protocol. The following example requests the list of Components connected currently to the Coordinator:

from pyleco.utils.communicator import Communicator

c = Communicator(name="TestCommunicator")
connected_components = c.ask_rpc(method="send_local_components")
print(connected_components)

Instrument Control

Let's say you have an instrument with a pymeasure driver Driver, which you want to control.

You need to start (in different threads):

If you want to set some property of the instrument (e.g. instrument.voltage = 5), you can just use the director transparently: director.device.voltage = 5. In the background, the TransparentDirector, which does not have a device, sends a message to the Actor to set that parameter. The Actor in turn sets that parameter of the instrument driver, which in turn will send some command to the device to take an appropriate action (e.g. setting the voltage to 5 V).

Currently you cannot call methods in a similar, transparent way, without manual intervention. You can add RemoteCall descriptor (in transparent_director module) to the director for each method call you want to use. Afterwards you can use these methods transparently similar to the property shown above.

Overview of Offered Packages and Modules

PyLECO offers the following subpackages and modules. For more information and for examples see the docstrings of the relevant methods and classes.

PyLECO extras

The pyleco-extras package contains additional modules. Among them are GUIs controlling the DataLogger and the Starter.