当前位置: 首页 > 工具软件 > Autosave > 使用案例 >

pyepics --Auto-saving: simple save/restore PVs

姬乐池
2023-12-01

autosave模块为PVs提供了简单的save/restore功能,有函数save_pvs()和restore_pvs()以及一个AutoSaver类。这些类似于来自用于IOCs的synApps的autosave模块,在那个模块中,它们使用一个描述要保存的PVs兼容的request file,以及一个持有被保存值的兼容的save file。当前这里通过通道访问进行读和写,并且不需要与单个IOC相关联。

这个模块的使用需要安装pyparsing包。这是一个相当常见的第三方Python包,被包含在很多包管理器中,或者用诸如easy_install或pip安装,或者从PyPI下载。

Request和Save文件被设计成兼容synApps autosave。注意:支持用宏替换的file命令,所以你可以有一个像这样的Request:

# My.req
file "SimpleMotor.req", P=IOC:, Q=m1

这个SimpleMotor.req文件为:

# SimpleMotor.req
$(P)$(Q).VAL
$(P)$(Q).DIR
$(P)$(Q).FOFF

其能够用于一个SimpleMotor的很多实例。但没有用于查找request文件的自动化机制。你将需要在工作目录中包含这些或者指定绝对路径。

有这样一个文件,只要使用:

import epics.autosave
epics.autosave.save_pvs("My.req", "my_values.sav")

将保存对应的PVs的当前值到文件my_values.sav。之后一段时间,可以用以下恢复这些值:

import epics.autosave
epics.autosave.restore_pvs("my_values.sav")

保存的文件将与autosave机制保存的文件几乎相同格式,并且restore_pvs()函数可以使用来自autosave的save文件读取和恢复值。注意:这里的目的与标准autosave模块的目的(autosave模块被设计成保存值,使得在IOC启动时初始化PVs)非常不同。使用这里的函数将对保存的值进行一次caput()。

autosave.save_pvs(request_file, save_file)

保存在request_file中列出的当前值到save_file。

参数:

  1. request_file:读取要保存的PVs的Request文件的名称
  2. save_file:写入要保存的值的到这个文件。

如上所述,request_file按照来自synApps的autosave模块的规则。

autosave.restore_pvs(save_file)

从save_file读取值并且为相应的PVs恢复它们。

参数:

save_file:从这个名称的文件读取保存值

注意:restore_pvs()将恢复它能够的所有值,跳过它不能恢复的任何值。

Autosaver class

Autosaver类一种便捷方式:重复保存在一个request文件中列出的PVs,而不必重新连接所有PVs。Autosaver保留PV连接,并且提供一个保存当前PV值到一个文件的简单save()。默认,从这个请求文件和当前时间命名那个文件。这使得你做这样的事情:

#!/usr/bin/env python
# save PVs from a request file once per minute
import time
from epics.autosave import AutoSaver
my_saver = AutoSaver("My.req")

# save all PVs every minute for a day
t0 = time.time()
while True:
    if time.localtime().tm_sec < 5:
        my_saver.save()
        time.sleep(30 - time.localtime().tm_sec)
    if time.time() - t0 > 86400.0:
        break
    time.sleep(0.5)

这将用像My_2017Oct02_141800.sav名称的文件保存PVs。

class autosave.AutoSaver(request_file)

创建基于一个请求文件的自动化Saver。

参数:

request_file:请求文件的名称。

AutoSaver有两个方法:read_request_file()读取一个请求文件,而save()保存结果。

autosave.read_request_file(request_file)

读取和解析请求文件,开始进行PV连接。

参数:

request_file:请求文件的名称。

autosave.save(save_file=None, verbose=False)

读取当前PV值,写保存文件。

参数:

  1. save_file:保存文件的名称或者None。如果None,将使用请求文件的文件以及时间戳(转成秒)来构建一个文件名。注意:不需要检查重写文件。
  2. verbose:是否打印结果到屏幕[默认False]

可支持的文件类型

可以用autosave例程保存和恢复所有标量PV值。有一些对waveform(数组)数据的支持。例如,包含长字符串的waveform可以被保存和恢复。此外,可以保存和恢复在waveform中的数值数组。对于数组数据,结果可能不完全兼容autosave模块。

示例

一个使用autosave模块的简单示例:

import epics.autosave
# save values
epics.autosave.save_pvs("my_request_file.req",
                        "/tmp/my_recent_save.sav")

# wait 30 seconds
time.sleep(30)

# restore those values back
epics.autosave.restore_pvs("/tmp/my_recent_save.sav")
 类似资料: