Ophyd是一个用于与硬件交互的Python库。它提供了一个抽象层,它使得实验编排和数据采集代码能够运行在特定设备和控制系统的细节上。
Ophyd一般与Bluesky运行引擎一起使用在实验编排和数据采集上。有时它也被以单独方式使用。
很多设施使用ophyd与使用EPICS的控制系统集成,但ophyd的设计和其某些目标是也与其它控制系统做集成。
- 把专用于设备活控制系统的细节放在了像trigger(), read()和set(...)的高级接口后面。
- 分组单独的控制通道(诸如:EPICS V3 PVs)为要作为具有内部协调单位的逻辑"设备",被配置和使用的。
- 分配具有对数据分析有意义的读取,它们将复制到元数据中。
- 通过"类型"(主读取,配置,工程/调试)归类读取,它们可以被选择性读取。
PyPI | pip install ophyd |
Conda | conda install -c conda-forge ophyd |
安装教程
本教程包含:
- 使用conda安装
- 使用Pip安装
- 从源代码安装
Conda
我们强烈推荐创建一个新环境。
conda create -n try-ophyd
conda activate try-ophyd
从由NSLS-II维护的nsls2forge conda通道安装Ophyd(这个conda包也将安装pyepics。并不是所有使用情况都需要它,但常见使用中使得Ophyd能与EPICS一起工作)。
conda install -c nsls2forge ophyd
最终,遵照EPICS手册,你也应该安装caproto来用模拟硬件一起运行EPICS服务器,以及bluesky用RunEngine编排扫描。
conda install -c nsls2forge bluesky caproto
Pip
我们推荐创建一个新环境。
python3 -m venv try-ophyd
source try-ophyd/bin/activate
从PyPI安装Ophyd
python3 -m pip install ophyd
如果你打算和EPICS一起使用ophyd,你也应该为ophyd安装要使用的EPICS客户端库-要么pyepics(推荐)或caproto(实验的)。
python3 -m pip install pyepics # 或者如果你有冒险精神,caproto
最终,按照EPICS教程,你也应该安装caproto来用仿真硬件运行EPICS服务器,以及bluesky用RunEngine编排扫描。
python3 -m pip install bluesky caproto[standard]
源
为本地开发安装一个可编辑的安装。
git clone https://github.com/bluesky/ophyd
cd ophyd
pip install -e .
单个EPICS PVs
在本教程中,我们将在ophyd中读,写和监视一个EPICS PV。
为教程进行设置
在你开始前,按照安装教程安装ophyd, pyepics, bluesky和caproto。
我们将启动实现了一个random walk的仿真硬件。它仅有两个PVs。一个PV是一个可调节的参数random_walk:dt,步与步之间的时间。另一个PV是random_walk:x,随机行走者的当前位置。
(bluesky-tutorials) [blctrl@localhost ~]$ python -m caproto.ioc_examples.random_walk --list-pvs
[I 13:16:15.935 server: 152] Asyncio server starting up...
[I 13:16:15.936 server: 159] Listening on 0.0.0.0:5064
[I 13:16:15.937 server: 196] Server startup complete.
[I 13:16:15.937 server: 198] PVs available:
random_walk:dt
random_walk:x
[root@localhost blctrl]# caget random_walk:dt
random_walk:dt 3
[root@localhost blctrl]# caget random_walk:x
random_walk:x 7.31709
启动你最喜欢的交互Python环境,诸如ipython或jupyter lab。
从Opyyd连接一个PV
让我们从Ophyd连接PV random_walk:dt。我们需要两部分信息:
- PV名,random_walk:dt
- 一个人性化名称。此名称用于标识这些读取并且将在任何下游数据分析或文件编写代码中被使用。我们可以选择,例如,time_delta。
(bluesky-tutorials) [blctrl@localhost ~]$ ipython
Python 3.8.18 (default, Sep 11 2023, 13:40:15)
Type 'copyright', 'credits' or 'license' for more information
IPython 8.12.3 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from ophyd.signal import EpicsSignal
In [2]: time_delta = EpicsSigna