自动扫描记录不同参量下的超导腔调谐器piezo对动态洛伦兹力失谐补偿

源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Program Name: auto record the raw data of detuning compensation by spoke cavity tuner piezo
# Author: Liu Ming
# Created Time: 8/18/2024 21:34 pm
# Descption: auto record the raw data of detuning compensation by spoke cavity tuner piezo

import pyvisa as visa
import csv
import time
import epics
import numpy as np

rm = visa.ResourceManager()
signal_generator = rm.open_resource('TCPIP0::127.0.0.1::inst0::INSTR')

for voltage in np.arange (4.0, 0, -0.4):

for phase in range(0, 360, 2):

signal_generator.write("SOURce2:VOLTage:AMPLitude {}".format(voltage))
signal_generator.write("SOURce2:Arb:Phase {}".format(phase))

start_time = time.time()
while time.time() - start_time < 15:
detuning = epics.caget('LRF:LLRF::SRF-s10:Cav_Freq')
fwd = epics.caget('LRF:LLRF::SRF-s10:Power_KLY_FWD')
rflt = epics.caget('LRF:LLRF::SRF-s10:Power_KLY_RFLT')

with open('20240820_Cavity2_detuning_data_9MVm_Piezo{}V_{}degree6points.csv'.format(30*voltage, phase), mode='a', newline='') as file:
writer = csv.writer(file)
writer.writerow(detuning)

with open('20240820_Cavity2_fwd_data_9MVm_Piezo{}V_{}degree6points.csv'.format(30*voltage, phase), mode='a', newline='') as file:
writer = csv.writer(file)
writer.writerow(fwd)

with open('20240820_Cavity2_rflt_data_9MVm_Piezo{}V_{}degree6points.csv'.format(30*voltage, phase), mode='a', newline='') as file:
writer = csv.writer(file)
writer.writerow(rflt)

time.sleep(1)

signal_generator.close()

这段代码主要用于控制信号发生器,获取实时数据,并将数据写入CSV文件。

  1. import pyvisa as visa: 导入PyVISA库并将其命名为visa,用于与仪器通信。

  2. import csv: 导入CSV库,用于读写CSV文件。

  3. import time: 导入时间库,用于添加延迟等待。

  4. import epics: 导入EPICS库,用于与实时控制系统通信。

  5. import numpy as np: 导入NumPy库并将其命名为np,用于处理数值计算。

  6. rm = visa.ResourceManager(): 创建PyVISA的资源管理器对象rm

  7. signal_generator = rm.open_resource('TCPIP0::127.0.0.1::inst0::INSTR'): 打开连接到IP地址为127.0.0.1的信号发生器。

  8. for voltage in np.arange (4.0, 0, -0.4):: 使用NumPy的arange函数生成从4.0到0的间隔为0.4的电压值序列,并遍历每个电压值。

  9. for phase in range(0, 360, 2):: 在每个电压值下,遍历相位值从0到360,步长为2。

  10. signal_generator.write("SOURce2:VOLTage:AMPLitude {}".format(voltage))signal_generator.write("SOURce2:Arb:Phase {}".format(phase)): 设置信号发生器的电压和相位值。

  11. start_time = time.time(): 记录当前时间作为起始时间。

  12. while time.time() - start_time < 15:: 在15秒内循环执行以下操作。

  13. ph_real = epics.caget('LRF:LLRF::SRF-s10:Power_KLY_RFLT')等代码:通过EPICS库获取实时数据,包括实时失谐量和幅度。

  14. 通过四个with open语句将实时数据写入不同的CSV文件中,文件名根据电压值和相位值动态生成。

  15. time.sleep(1): 程序暂停1秒,等待下一次数据采集。

  16. signal_generator.close(): 关闭信号发生器的连接。

这段代码主要实现了piezo在不同电压和相位条件下,控制信号发生器输出并获取实时数据,然后将数据写入CSV文件。