Closed PeterKraus closed 3 months ago
Notes from our meeting on the 22th of May:
task_data()
call will be costly when files grow large; this idea might need further thought.Driver
-agnostic vocabulary for things like:
runtime
which limits a task run lengthsamplerate
which is the measurement rate for more basic Drivers
, ie how often the Driver
calls dev_get_data()
pollrate
which is the device polling rate for all Drivers
, i.e. how often the job calls task_data()
Driver
should be able to signal to the job once a task is finished
zmq
channel
arg of the Driver
interface can be optional, in which case all channels
sharing an address
get polled.can_queue
ToDo for tomato-1.0
:
Driver
(abstract) class and re-implement the example driver using it: by mid Junetomato-bronkhorst
by the end of June together with @alexn7-shepardtomato-drycal
, perhaps @NukP is interested in contributing?tomato-biologic
once Driver
class is available, with @g-kimbelltomato-1.0
release by end of Oct 2024@PeterKraus Can you elaborated on 'implement support for tomato-drycal' more? Do you mean writing a driver that handle the communication (write and read data) between tomato and the DryCal flow meter?
Yup, basically incorporating your work on the DryCal into tomato. We also have one in Berlin, so testing would be fairly easy.
@PeterKraus OK, I should be able to allocate time for this (hopefully it doesn't take long). I have a look at the driver folder in the Master branch and from what I talked to Graham, do I understand it correctly that you haven't finished designing the dummy driver? If so, I would wait until this is the case.
Motivation
In the
tomato-0.2
branch, the driver and job interfaces were basically merged into one piece of code: each job talked to each physical device separately, which was causing some race conditions (#28). With only one supported type of device, i.e. thebiologic
driver, this kind-of made sense at the time.In
tomato-1.0
, we want to pave the road for a "device dashboard", meaning the device statuses have to be accessible from outside of the jobs. As a reminder, the relationship between jobs and devices intomato-1.0
is shown below:Basically, each device (a digital twin of a physical device) is managed by a driver, and there is only one driver process running managing all devices of that type. All communication with the physical device is therefore handled by the driver, the individual physical devices (and channels within them) can be addressed when one knows the device address and channel.
Requirements
We would like the new driver interface to handle a wide range of physical devices, e.g.:
The rest of tomato should be completely driver-agnostic, i.e. everything relevant for the measurement comes from the driver (available parameters, units, adjustable limits, etc.). This means the list of techniques and parameters, i.e. the driver specific language (DSL), has to be defined and documented in the driver docs.
Some functionality, e.g. task scheduling or conditional interruption, should be probably implemented just once and made available to every driver via specific keywords. Currently I can think of the following examples:
tomato
calls the driver'sget_data()
every 60 seconds, and sends a stop signal after 10 minutes.Implementation
tomato-biologic
ortomato-bronkhorst
, for easier maintenance.Driver
class, which is inherited from and exposed by in these packages. The current model for the class looks like this: driver_proto_v01.txtDesign questions
tomato
-side?Driver
features (e.g. long acquisition time in GC requiring scheduling, or batching of requests for multi-channel devices)?