
实验控制与数据获取软件是同步辐射的科学数据源头,同步辐射光源需要高效的实验控制和数据采集软件来支持多学科、多领域实验的复杂需求。统一的实验控制与数据获取软件架构是同步辐射实验线站自动化和智能化的基础。
实验控制与数据采集软件包含控制层和数据采集层,控制层是由分布式控制系统提供的集中管理软件接口及其在数据获取软件里的抽象映射。数据采集层有实验流程控制、多维飞行扫描控制、探测器数据采集存储控制、数据流组装、用户界面库和自动化应用等组件,应实现实验控制与数据接口的统一。其核心功能包括:
实验控制与数据采集软件与AI技术相融合,在控制层和数据采集层的技术上,增加AI层,使其具有AI基因。数据中心边云算力架构,为软件框架AI层提供在线AI算力基础,智能反馈算法和智能数据处理算法为AI层提供AI算法基础,数据流调度分发、存储为AI层提供数据基础。依托数据中心高性能服务器的预训练大预言模型构建同步辐射实验领域专用知识库,为实验设计者或实验用户提供全方位的知识检索和应用指导。
智能化的实验控制与数据采集软件是同步辐射科学实验的大数据中枢,实时上百种实验的多源设备产生的海量数据,进行实时数据清洗和标注,在线智能处理分析,形成标准化的适用于智能应用的数据流,直接接口智能数据分析等应用。
AI技术在同步辐射数据解析中发挥着重要作用,具体应用包括:
同步辐射实验控制与数据获取软件架构融入AI技术,可实现光束线站的智能控制和科学数据的智能采集、分析,AI技术的应用进一步提升了同步辐射大数据解析的能力,为科学实验提供了强有力的支持。未来,随着技术的不断融合,整个同步辐射实验控制与数据获取工作将快速迈入通用智能化和强智能化时代。
国际、国内流行的通用控制与数据获取软件框架基础(SSRF、HEPS、HALF etc.)
1.1.1 实验控制层
python
from ophyd import EpicsSignal, Device
class TemperatureSensor(Device):
temp = Component(EpicsSignal, 'PV:TEMP', kind='hinted')1.1.2 数据管理层
python
from suitcase.hdf5 import Serializer
serializer = Serializer('experiment.h5')
RE.subscribe(serializer)1.1.3 硬件控制层
1.1.4 可视化与界面
python
from tiled.client import from_uri
client = from_uri("http://localhost:8000")
subset = client['medium_image'][10:20, 30:40]┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ User Plan │→→→→│ RunEngine │→→→→│ Ophyd │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
▼ ▼ ▼
┌───────────────────────────────────────────────────────┐
│ DataBroker & Suitcase (MongoDB/HDF5) │
│┌─────────────┐┌─────────────┐┌─────────────┐┌─────────────┐│
││ Metadata │←→│ HDF5/JSON │←→│ Tiled │←→│ PyDM/PyQt ││
│└─────────────┘└─────────────┘└─────────────┘└─────────────┘│
└───────────────────────────────────────────────────────┘步骤1:初始化组件
from bluesky import RunEngine
from ophyd.sim import motor, det
import databroker
RE = RunEngine()
db = databroker.catalog['my_experiment']
serializer = suitcase.hdf5.Serializer('realtime.h5')
RE.subscribe(db.insert)
RE.subscribe(serializer)步骤2:执行实验计划
from bluesky.plans import scan
RE(scan([det], motor, -1, 1, 10))
serializer.close()步骤1:查询特定条件数据
headers = db.search({'plan_name': 'scan'})
for header in headers:
events = header.events
# 处理事件数据
步骤2:导出为JSON格式
from suitcase.jsonl import Serializer
json_serializer = Serializer('historical.jsonl')
for header in headers:
json_serializer('start', header.start)
json_serializer.close()示例:双电机同步扫描
from bluesky.plans import scan
from ophyd import EpicsMotor
motor1 = EpicsMotor('PV:MOTOR1', name='m1')
motor2 = EpicsMotor('PV:MOTOR2', name='m2')
def dual_scan():
yield from mv(motor1, 0, motor2, 0)
yield from scan([det], motor1, -1, 1, 10, motor2, -1, 1, 10)
RE(dual_scan())
pythondb.search({'device': 'temp_sensor', 'timestamp': {'$gt': '2025-07-01'}})依赖安装:
conda create -n bluesky_env python=3.10
conda activate bluesky_env
pip install bluesky ophyd databroker suitcase-hdf5 tiled pyepics
EPICS环境配置:
caproto-ioc random_walk --list-pvs
基于Bluesky的同步辐射控制与数据获取实验软件系统最佳组合为:
如何在该架构里加入AI软件层
1.1.1 AI推理引擎
import onnxruntime as ort
session = ort.InferenceSession("model.onnx")
results = session.run(None, {"input": data})1.1.2 AI数据流接口
LiveTable订阅实时数据流,示例:python
from bluesky.callbacks import LiveTable
RE.subscribe(LiveTable(['motor_pos', 'det_value']))python
headers = db.search({'plan_name': 'scan'})
training_data = [h.table() for h in headers]1.1.3 AI控制接口
python
from ophyd import EpicsSignal
motor = EpicsSignal('PV:MOTOR', name='motor')
motor.put(ai_optimized_position)
步骤1:初始化AI模型
python
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')步骤2:实时数据训练与推理
python
from bluesky.plans import scan
from bluesky.callbacks import LiveCallback
class AIOptimizer(LiveCallback):
def __init__(self, model):
self.model = model
def event(self, doc):
x = doc['data']['motor_pos']
y_pred = self.model.predict(x)
motor.put(y_pred)
optimizer = AIOptimizer(model)
RE.subscribe(optimizer)
RE(scan([det], motor, -1, 1, 10))步骤1:历史数据训练
python
headers = db.search({'device': 'temp_sensor'})
training_data = [h.table() for h in headers]
model.fit(training_data['timestamp'], training_data['temp_value'])步骤2:实时故障检测
python
class FaultDetector(LiveCallback):
def __init__(self, model, threshold=80):
self.model = model
self.threshold = threshold
def event(self, doc):
temp = doc['data']['temp_value']
if temp > self.threshold:
RE.stop()
print("故障预警:温度超限!")
detector = FaultDetector(model)
RE.subscribe(detector)步骤1:集成预训练模型
python
from transformers import AutoModelForImageClassification
model = AutoModelForImageClassification.from_pretrained("google/vit-base-patch16-224")步骤2:实时图像处理
python
class ImageAnalyzer(LiveCallback):
def __init__(self, model):
self.model = model
def event(self, doc):
image = doc['data']['detector_image']
results = model(image)
print(f"图像分类结果:{results.logits.argmax()}")
analyzer = ImageAnalyzer(model)
RE.subscribe(analyzer)python
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()python
model = tf.saved_model.load('model')
tf.config.experimental.set_visible_devices([gpu_device], 'GPU')python
from bluesky.kafka import BlueskyKafkaProducer
producer = BlueskyKafkaProducer(bootstrap_servers='localhost:9092')
RE.subscribe(producer)python
from elasticsearch import Elasticsearch
es = Elasticsearch()
results = es.search(index="experiment_data", body={"query": {"match_all": {}}})put方法实时修改设备参数,示例:python
motor.put(ai_optimized_value, wait=True)pythonif ai_value < SAFE_MIN or ai_value > SAFE_MAX: raise ValueError("AI生成值超出安全范围")依赖安装:
bash
pip install tensorflow onnxruntime scikit-learn transformers硬件配置:
python
RE = RunEngine()
db = databroker.Broker.named('temp')
RE.subscribe(db.insert)通过集成AI软件层,使软件框架具有AI基础工具,使开发人员更方便实现同步辐射实验的智能化应用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。