Bluesky是一个专为科学实验设计的实验控制与数据采集库,其核心优势在于支持实时数据流、详尽元数据管理、跨硬件复用、中断恢复能力及高度定制化特性。本文结合官方文档及实际应用场景,详细阐述如何利用Bluesky构建高效、可扩展的数据采集系统。
Bluesky生态系统包含以下关键模块:
通过Ophyd定义设备模型,示例如下:
from ophyd import Signal, Device
from ophyd.signal import EpicsSignal # 适用于EPICS设备 # 示例:定义温度传感器设备
class TemperatureSensor(Device):
temp = Component(EpicsSignal, 'PV:TEMP', kind='hinted') # 主读取信号
unit = Component(Signal, value='°C', kind='config') # 配置信号 # 实例化设备
sensor = TemperatureSensor(name='temp_sensor')
利用预组装计划或自定义计划实现实验逻辑:
python
from bluesky.plans import scan
from bluesky import RunEngine
RE = RunEngine()RE.subscribe(BestEffortCallback()) # 实时数据可视化
# 执行线性扫描(电机从-3到3,16个点)
RE(scan([sensor.temp], motor, -3, 3, 16))
python
from bluesky.plan_stubs import mv, sleep
def multi_stage_experiment():
yield from mv(motor, 0) # 移动电机到初始位置
yield from sleep(2) # 等待系统稳定
yield from scan([sensor.temp], motor, 0, 10, 20) # 第一阶段扫描
yield from mv(motor, 5) # 调整位置
yield from scan([sensor.temp], motor, 5, 15, 20)
# 第二阶段扫描
RE(multi_stage_experiment())
python
from suitcase.hdf5 import Serializer
# 初始化HDF5导出器
serializer = Serializer('experiment_data.h5')
RE.subscribe(serializer)
# 绑定导出回调 # 执行计划(数据自动写入HDF5)
RE(scan([sensor.temp], motor, -1, 1, 10))
serializer.close() # 确保数据完整写入
python
from databroker import catalog
cat = catalog['my_experiment']
headers = cat.search({'plan_name': 'scan'}) # 查询所有扫描实验
# 导出历史数据为JSON
from suitcase.jsonl import Serializer
json_serializer = Serializer('historical_data.jsonl')
for header in headers:
json_serializer('start', header.start)
json_serializer('event', header.events[0]) #
导出首个事件json_serializer.close()
RunEngine支持通过检查点(Checkpoint)实现安全恢复:
python
from bluesky.plan_stubs import checkpoint
def fault_tolerant_scan():
yield from checkpoint() # 设置恢复点
yield from mv(motor, 5)
try:
yield from scan([sensor.temp], motor, 5, 10, 10)
except Exception as e:
print(f"Error occurred: {e}")
RE.resume() # 从检查点恢复 RE(fault_tolerant_scan())
利用mv
计划实现多设备并行移动:
python
from ophyd.sim import motor1, motor2
# 并行移动两个电机
RE(mv(motor1, 1, motor2, 10))
# 同步到达目标位置
通过计划参数注入元数据:
python
RE(scan([sensor.temp], motor, -1, 1, 10), purpose='calibration', operator='Alice', sample='Si_wafer')
multiprocessing.Pool
)。cache.server.size_limit: 10e9
)。time.sleep
,改用bps.sleep
)。场景 | 技术方案 |
---|---|
同步辐射光束线控制 | Ophyd + Bluesky Plans + Tiled实时切片 |
中子散射实验 | DataBroker历史查询 + Suitcase批量导出 |
自动化测试平台 | 自定义Plan + 中断恢复 + 元数据追踪 |
远程数据访问 | Tiled Web API + 浏览器端数据可视化 |
Bluesky通过模块化设计实现了实验控制与数据采集的灵活集成,其核心价值在于:
建议结合具体实验需求,参考官方文档(Bluesky GitHub)进一步探索高级功能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。