EPICS sscan模块的使用举例-一维扫描

2023-12-20 20:44

本文主要是介绍EPICS sscan模块的使用举例-一维扫描,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一维扫描

在一个一维扫描的最简单合理配置中,使用了以下字段:

  • P1PV:一个定位器的名称(例如:"myMotor.VAL")
  • P1SP:起始位置,这是采集数据的第一个位置。
  • P1EP:结束位置,这是采集数据的最后一个位置。
  • NPTS:要扫描到的位置点总数。 
  • T1PV:探测器触发器PV的名称。在定位器到达每个位置点时将写入这个PV,并且它预计初始化某些数据采集操作。
  • D01PV:一个探测器(信号)PV的名称。在探测器触发器结束采集数据后,将记录下这个PV的值。

当一个扫描被启动时(通过1到EXSC字段),sscan记录指挥定位器移动到它的起始位置。sscan记录使用recDynLinkPutCallback()告诉定位器移动,并且等待产生的回调,表明这个定位器结束了,在进入此扫描的下个阶段前,触发探测器。也是使用recDynLinkPutCallback()触发这个探测器,并且在读取探测器并且继续执行另一个(移动,触发,读取)顺序来采集下个数据点前读取探测器。这个算法持续,直到sscan记录完成了NPTS步,或者扫描被取消(通过一个客户端写0到EXSC字段)。在扫描结尾,sscan记录填充一个访问过位置的数组(P1RA),以及一个采集的探测器数组(D01DA)。我们再过一遍,这次更加一般,更详细,并且包含了更多可用选项。

  • 定位器:你可以指定0到4个定位器。预计定位器告诉sscan记录它们何时结束移动。再所有定位器声明它们结束后,sscan记录在写入探测器触发器前等待一个用户指定的稳定时间(PDLY,通常0)。(如果没有定位器,则没有定位器稳定时间)。
  • 要访问的位置:这里有很多可能性。你可以为每个定位器指定[start, end, center, witdh, step-size]的任何集合;你可以为每个定位器装载一个位置表;或者你可以指定在一个扫描过程中定位器连续被移动。你可以指定定位器为绝对,或者相对扫描前位置。
  • 探测器触发器:探测器触发器在此方面作用非常像定位器,它们写一个值并且等待接下来的运行结束,但它们在每个数据点(TnCD)发送相同数据。在所有触发的探测器声明它们结束后,在在sscan记录从探测器信号PVs读取数据前,它等待用户指定的稳定时间(DDLY,通常0)。(如果没有探测器触发器,则没有探测器稳定时间)。
  • 探测器信号:一般,探测器信号是标量PVs,但它们可以是数组的PVs。如果这样,sscan记录将在扫描结束时从它们读取NPTS个值。如果数组值得PVs需要运行来采集它们得值,sscan记录可以写到一个数组触发器(A1PVA1CD,完全类似探测器触发器),并且在读取这些数组前等待任何后续运行。如果所有探测器信号是数组值的,使用数组采集类型可能更加。探测器信号值可以从扫描到扫描被累加,积累统计精度并且对任何定位误差或变量外部条件进行平均。

在扫描后:在扫描结束后,你可以使用PASM字段告诉定位器做什么。默认行为仅是把它们留在扫描结束时所在的位置,但你可以告诉它们返回它们的扫描前位置,或者到它们的起始位置,或者到从采集数据计算出的位置。(例如:在扫描过程中,指定探测器信号REFD达到它峰值的位置)。

以下本示例中使用到硬件:

1)KOHZU多轴控制器”ARIES”和”LYNX”:在本例中使用了三路电机驱动,启动后三个电机的PV名分别为ARIES:m1, ARIES:m2, ARIES:m3:

2)计时器/计数器:Ortec974A和NCT16,启用后的PV名为Ortect974A:Scaler1和NCT16:scaler1:

 3) sscan记录启动后,加载其控制界面:

a) Positioners设置:

在Positioners按钮下Read和Drive中分别填入要驱动电机的回读值和设定值。

我们这里填写Start,END和Step Size分别为-3,3,0.1分别代表电机的起始位置,终止位置和步长。

扫描模式选择线性,并且是绝对位置进行定位。

b) DetTrigers设置:

在1和2文本框中分别填入Ortec974A:Scaler1.CNT和NCT16:scanler1.CNT,它们分别用于触发Ortec974A计时/计数器和NCT16计时/计数器运行。

c) Detectors设置:

01~04文本框填入Ortec974A:Scaler1.S1,Ortec974A:Scaler1.S2, NCT16:scanler1.S1和NCT16:scanler1.S2,它们分别对应Ortec974A的第1和2通道和 NCT16的第1和第2通道。

在启动sscan记录时,需要一个req文件配置存储那些PV,在此用到的req文件如下:

[prefix]
$(P)
$(Q)
$(R)[status]
$(P)saveData_status[message]
$(P)saveData_message[filename]
$(P)saveData_fileName[counter]       # scan counter
$(P)saveData_scanNumber[fileSystem] # scan file system
$(P)saveData_fileSystem[subdir]        # scan file subdirectory
$(P)saveData_subDir[basename]      # PV containing the desired data-file base name
$(P)saveData_baseName[fullPathName]
$(P)saveData_fullPathName[realTime1D] # if nonzero, write 1D data as it comes in
$(P)saveData_realTime1D[scanRecord]    # specify scan records to be monitored
$(P)scan1[extraPV]
$(P)m1.VAL "motor m1"
$(Q)Scaler1.S1 "Ortec974A T"
$(Q)Scaler1.S2 "Ortec974A CH1"
$(R)scaler1.S1 "NCT16  T"
$(R)scaler1.S2 "NCT16  CH1"

并且在启动脚本中,在iocInit后,执行以下程序,初始化sscan的存储配置:

saveData_Init("saveData.req", "P=ARIES:,Q=Ortec974A:,R=NCT16:")

点击scan_full.adl窗口上面的SAVE DATA按钮,弹出了scan_saveData.adl窗口:

填写保存路径和保存所用文件名。

进行测试,点击SCAN命令,点击开始扫描过程,等到扫描结束。

# cd /data/
# ls
aa  aabb_0001.mda

发现指定目录下产生了一个aabb_0001.mda的文件。使用工具命令将其转成ascii文件:

./mda2ascii /data/aabb_0001.mda
# ls
aa  aabb_0001.asc  aabb_0001.mda

查询数据内容如下,sscan完成了预设的扫描过程:

# cat aabb_0001.asc
## mda2ascii 1.4.2 generated output# MDA File Version = 1.4
# Scan number = 1
# Overall scan dimension = 1-D
# Total requested scan size = 61#  Extra PV: name, descr, values (, unit)# Extra PV 1: ARIES:m1.VAL, motor m1, "-3", mm
# Extra PV 2: Ortec974A:Scaler1.S1, Ortec974A T, "10",
# Extra PV 3: Ortec974A:Scaler1.S2, Ortec974A CH1, "50001",
# Extra PV 4: NCT16:scaler1.S2, NCT16  CH1, "20001",
# Extra PV 5: NCT16:scaler1.S1, NCT16  T, "1000000",# 1-D Scan
# Points completed = 61 of 61
# Scanner = ARIES:scan1
# Scan time = Dec 20, 2023 15:42:43.611534#  Positioner: name, descr, step mode, unit, rdbk name, rdbk descr, rdbk unit
#  Detector: name, descr, unit# Column Descriptions:
#    1  [     Index      ]
#    2  [1-D Positioner 1]  ARIES:m1.VAL, X, LINEAR, mm, , ,
#    3  [1-D Detector   1]  Ortec974A:Scaler1.S1, ,
#    4  [1-D Detector   2]  Ortec974A:Scaler1.S2, ,
#    5  [1-D Detector   3]  NCT16:scaler1.S2, ,
#    6  [1-D Detector   4]  NCT16:scaler1.S1, ,# 1-D Scan Values
1 -3 10 50001 20000 1000000
2 -2.9 10 50001 20001 1000000
3 -2.8 10 50001 20001 1000000
4 -2.7 10 50001 20000 1000000
5 -2.6 10 50001 20001 1000000
6 -2.5 10 50001 20000 1000000
7 -2.4 10 50001 20001 1000000
8 -2.3 10 50001 20001 1000000
9 -2.2 10 50001 20000 1000000
10 -2.1 10 50001 20001 1000000
11 -2 10 50001 20001 1000000
12 -1.9 10 50001 20001 1000000
13 -1.8 10 50001 20000 1000000
14 -1.7 10 50001 20000 1000000
15 -1.6 10 50001 20001 1000000
16 -1.5 10 50001 20000 1000000
17 -1.4 10 50001 20001 1000000
18 -1.3 10 50001 20001 1000000
19 -1.2 10 50001 20000 1000000
20 -1.1 10 50001 20000 1000000
21 -1 10 50001 20000 1000000
22 -0.9 10 50001 20000 1000000
23 -0.8 10 50001 20000 1000000
24 -0.7 10 50001 20000 1000000
25 -0.6 10 50001 20000 1000000
26 -0.5 10 50001 20000 1000000
27 -0.4 10 50001 19999 1000000
28 -0.3 10 50001 20000 1000000
29 -0.2 10 50001 20001 1000000
30 -0.1 10 50001 20000 1000000
31 1.52655666e-15 10 50001 20000 1000000
32 0.1 10 50001 20000 1000000
33 0.2 10 50001 20000 1000000
34 0.3 10 50001 20001 1000000
35 0.4 10 50001 20001 1000000
36 0.5 10 50001 20001 1000000
37 0.6 10 50001 20000 1000000
38 0.7 10 50001 20000 1000000
39 0.8 10 50001 20000 1000000
40 0.9 10 50001 20000 1000000
41 1 10 50001 20000 1000000
42 1.1 10 50001 19998 1000000
43 1.2 10 50001 20001 1000000
44 1.3 10 50001 20000 1000000
45 1.4 10 50001 20000 1000000
46 1.5 10 50001 20000 1000000
47 1.6 10 50001 20000 1000000
48 1.7 10 50000 20000 1000000
49 1.8 10 50001 20000 1000000
50 1.9 10 50001 20000 1000000
51 2 10 50001 20001 1000000
52 2.1 10 50001 20000 1000000
53 2.2 10 50001 20000 1000000
54 2.3 10 50001 20001 1000000
55 2.4 10 50001 20001 1000000
56 2.5 10 50001 20001 1000000
57 2.6 10 50001 20000 1000000
58 2.7 10 50001 20001 1000000
59 2.8 10 50001 20001 1000000
60 2.9 10 50001 20001 1000000
61 3 10 50001 20000 1000000

将scan_full.adl中扫描模式设置成TABLE,可以按表格进行扫描:

扫描前准备:

caput ARIES:scan1.NPTS 6     # 设置扫描点数
caput -a ARIES:scan1.P1PA 6 -2 -1.5 0 1.2 1.8 2  # 设置使用的表格

然后点击SCAN开始扫描,等待扫描结束,查看产生的数据,如下,可以发现电机位置为在P1PA字段中设置的位置: 

# cat aabb_0002.asc
## mda2ascii 1.4.2 generated output# MDA File Version = 1.4
# Scan number = 2
# Overall scan dimension = 1-D
# Total requested scan size = 6#  Extra PV: name, descr, values (, unit)# Extra PV 1: ARIES:m1.VAL, motor m1, "-2", mm
# Extra PV 2: Ortec974A:Scaler1.S1, Ortec974A T, "10",
# Extra PV 3: Ortec974A:Scaler1.S2, Ortec974A CH1, "50001",
# Extra PV 4: NCT16:scaler1.S2, NCT16  CH1, "20000",
# Extra PV 5: NCT16:scaler1.S1, NCT16  T, "1000000",# 1-D Scan
# Points completed = 6 of 6
# Scanner = ARIES:scan1
# Scan time = Dec 20, 2023 15:57:42.174413#  Positioner: name, descr, step mode, unit, rdbk name, rdbk descr, rdbk unit
#  Detector: name, descr, unit# Column Descriptions:
#    1  [     Index      ]
#    2  [1-D Positioner 1]  ARIES:m1.VAL, X, TABLE, mm, , ,
#    3  [1-D Detector   1]  Ortec974A:Scaler1.S1, ,
#    4  [1-D Detector   2]  Ortec974A:Scaler1.S2, ,
#    5  [1-D Detector   3]  NCT16:scaler1.S2, ,
#    6  [1-D Detector   4]  NCT16:scaler1.S1, ,# 1-D Scan Values
1 -2 10 50001 20001 1000000
2 -1.5 10 50001 20000 1000000
3 0 10 50001 19999 1000000
4 1.2 10 50001 20001 1000000
5 1.8 10 50001 20000 1000000
6 2 10 50001 20001 1000000

这篇关于EPICS sscan模块的使用举例-一维扫描的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/517431

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的