EPICS synApps SSCAN模块

1、在这个模块中有什么?

1)代码

  • sscan记录
  • busy记录
  • recDynLink库
  • saveData数据存储客户端
  • scanparm记录

2)EPICS数据库

  • scan数据库
  • scanParms和alignParms数据库

3)MEDM显示窗口

  • scan*.adl
  • scan*_help.adl

2、简单扫描

1) 一维扫描

a) 进行NPTS次

  • 设置条件:例如,移动电机;等待结束
  • 触发探测器:例如:启动计数器;等待结束
  • 采集数据:读取探测器信号;存储在数组中

b) 写数据到磁盘

2) 多维扫描

a)  外层扫描的探测器触发执行内层扫描。

b)  saveData监视一个sscan记录集合,在扫描启动时决定扫描维度,并且根据要求记录数据。

c)  对扫描维度数目没有限制。

 3、扫描特性

1) 0-4定位器,0-4探测器触发器,0-70个探测器信号

  • 定位器和回读值是类型double
  • 探测器值是类型float

2)从标量器和/或数组PV采集

  • 数组PV的采集。NPTS个元素。

3)采集点数只受限于IOC内存

  • 标准的最大数是每个扫描维度2000(xi,yi)点。
  • 可以增加到~EPICS_CA_MAX_ARRAY_BYTES/8

4) 探测器/客户端等待,数据存储等待

  • 可以等待多个采集采集客户端
  • 仅一个数据存储客户端

5)暂停/继续,取消

  • 来自被取消扫描的数据被写到磁盘

6)双缓存:在扫描结束后,写1D采集数据

  • 在下个1D扫描时,可以写。

7) saveData写XDR-格式(".mda")文件到磁盘。

  • 在任何类型计算机上可以读取这些文件。

8) 一个定位器可以有私有扫描参数(scanparm记录)。

  • 用一个鼠标电机装载预设的扫描参数。
  • 对对齐有用。

9) 扫描结束后的操作包括:移动到峰位,谷位,+/-边界。

  • 可以例如通过一系列扫描跟踪一个峰位。

10)scanparm记录 + 扫描之后操作 = 自动化的1-D对齐

4、扫描实现

1)sscan记录是一个通道访问客户端

  • 受到扫描的PV‘s可以被托管于任何IOC
  • 使用recDynLink库来管理与PV的连接。
  • 使用ca_put_callback()来设置条件,触发探测器以及等待结束。
  • 在采集数据前使用ca_get_callback()。

2)saveData是一个通道访问客户端

  • 原则上,saveData可以监视托管于一个不同IOC的sscan记录。
  • 实际中,如果你能够避免它,不要做这件事。

3)扫描采集/存储可以运行在vxWorks,Linux或Solaris上。

  • 在synApps 5.1中新特性(EPICS 3.14)

4) sscan记录可以被任何通道访问客户端驱动。

  • 通过MEDM的手动操作是一个选项。
  • 可以用户编写的扫描控制软件。

5)扫描前/扫描后的链接

a) 在扫描启动和/或在扫描结束后,可以写一个常数值到任何数值或菜单PV。

b) 可以等待或者不等通过这个写操作启动的运行的结束。

c) 如果这个sscan记录是多维扫描的组成部分,在每次迭代时链接发挥作用。

d) 外层sscan记录可以写到这些链接,以及到它们写的值。

e) 这些链接可以写到它们自己sscan记录的START等字段,但可能没有使得其PV名(链接字段)变化。

5、MEDM用户操作界面

6、定位器选项 

1)扫描模式(.PnSM - 每个定位器)

  • 确定定位器如何移动以及移动到哪里

2)绝对/相对(.PnAR - 每个定位器)

  • 决定如何写定位器位置

3)定位器延迟(.PDLY - 影响所有定位器)

  • 在定位器稳定过程中,在结束它们的移动后的延时

4)在扫描后的移动(.PASM - 影响所有定位器)

  • 确定在扫描结束时,对定位器做什么(如果有)。

5) SCAN模式(.PnSM - 每个定位器)

a) LINERA:算术地计算等间隔位置

你通过设置以下任意三个指定定位器位置

sscan记录记录调整未设置参数。

b) TABLE:定位器位置被包含在.PnPA数组中。

  • 这个数组必须包含至少.NPTS个值
  • 在启动扫描前,你必须安排这个数组要包含所需的位置
  • .PnPA数组一定不能被sscan记录重写

c) FLY:在定位器移动过程中,将采集数据。

通过设置START,END,定位器速度以及探测器采集时间,你指定在哪个位置采集数据。

执行以下算法:

  • 定位器移动到START;报告结束
  • 探测器被触发;报告结束
  • 采集第一个数据点
  • 定位器移动到END
  • 对以下进行NPTS-1次迭代:i) 探测器触发;报告结束;ii) 采集数据点

数据点的计时受控于探测器的采集时间

飞行定位器不报告结束(定位器在移动结束后可能仍然在运行。)

注意:从一个飞行模式定位器的回读计时是不准确的

 d) 混合扫描模式是可以的:

e) 不要被已有定位器模式限制

  • 一个定位器是你可以写入的任何东西
  • 可以使用calcout或transform,算术地指定位置,例如:采样轮
  • 可以通过插值表写入定位器:使用一个备用定位器回读来获取实际定位器到数据文件

 f) 绝对/相对(.PnAR - 每个定位器)

  • 如果.PnAR == "ABSOLUTE"(0),定位完全按指定来移动。
  • 如果.PnAR == "RELATIVE(1)",位置在被发送到定位器前,它被加到前次扫描位置。

g) 稳定时间(Settling) (.PDLY:影响所有定位器)

i) 如果指定了任何定位器PV,接着在所有定位器报告结束后,在进入sscan下个阶段前,sscan记录等待.PDLY秒。

  • 对在结束移动后,"响铃"的定位器有用。
  • 作为不能报告结束的定位器的解决办法

ii) 如果没有定位器,则忽略稳定时间。

iii) 调整稳定时间为系统时钟周期的最小整数倍。

h) 扫描后移动(.PASM - 影响所有定位器)

  • START:定位器只是被留在它们结束的位置。
  • START POS:定位器被移动到START位置。
  • PRIOR POS:定位器被移动到它们扫描前的位置。
  • PEAK POS:检测来自参考探测器的数据(由.REFD字段指定的编号,范围在[1..70]中)。如果找到峰位,定位器被移动到采集此峰位的位置。
  • VALLEY POS:类似,但是谷位替代峰位。
  • +EDGE POS:参考数据的导数峰位。
  • -EDGE POS:参考数据的导数谷位。
  • CNTR OF MASS:参考探测器数据的质心。如果多于一个定位器是活动的,在计算中将使用来自最小编号的活动定位器的数据。结果将应用于所有活动定位器。

7、探测器触发器

1)9-4个探测器触发器(.TnPV),用于启动数据采集。

2)类似于定位器,但发送的值(.TnCD)是常数。

3)在所有定位器结束后,以及在所有定位器稳定时间用完后,触发器执行。

4)在所有探测器触发器报告结束后,探测器稳定时间开始。

5)如果没有触发器,则忽略稳定时间。

6)在扫描过程中要被采集的PV’s

7)0-70个探测器(.D01PV - .D70PV)

8) 探测器选项

a) 采集类型(.ACQT)

i) SCALAR:

  • 在每个定位器位置,被采集的标量PV's
  • 在扫描结束,被采集的数组PV's(.NPTS个元素)

ii) 1D ARRAY:

  • 仅在所有探测器是数组值,才使用这种模式。
  • 定位器仅被移动到它们的START位置。
  • 在未来,可能支持数组值的定位器。

9) 采集模式(.ACQM)

a) NORMAL:按采集存储值。

b) ACCUMULATE:从下次扫描开始,加探测器值

c) ADD TO PREV:相同,但从前次扫描开始。

8、客户端等待

1) 在所有探测器触发器报告结束后,并且在采集数据前,sscan记录检查客户端等待。

2)客户端可以通过写1到.WAIT保持在此点的扫描(这增加了wait-count字段.WCNT)。

3)若干客户端可以使用这个字段。

4)当所有客户端完成写'0'到.WAIT,扫描采集数据。

5)如果客户端太慢,而不能写到.WAIT,扫描可以为它们设置.WCNT为这个值.AWCT。

6)在.AWCT个客户端完成写'0'到.WAIT前,扫描将暂停。

7)'客户端'包含用户,通过MEDM。

 9、数组触发器/等待

1) 在所有数据点已经被采集后,扫描可以触发为采集准备数组PVs的软件(例如:从硬件读取)

2) 当数组触发器声明结束时,采集数组PVs。

 10、扫描控制

1) SCAN

  • 写'1':启动这个sscan记录。
  • 写'0':停止这个sscan记录。(但对提供的数据库,总是使用'ABORT'按钮停止。)

2)GO/PAUSE

  • 暂停是立即的,在延时后,GO发生。

3) ABORT

a) 写'1'到'xxx:allstop.VAL',这应该停止电机。

b) 发送'stop'消息给在提供的数据库中所有sscan记录。

  • 第一个‘Abort’在待完成回调出现,以及数据存储客户端释放了先前的扫描数据数组后,尝试终止扫描。
  • 第二个'Abort'尝试仅等待数据存储客户端。
  • 第三个连续的'Abort'尝试杀死扫描,不关注后果。

11、一次点击扫描

scanparm记录执行编程好的线性扫描

1)为一个定位器保持扫描参数

2)写参数到一个特定的sscan记录。

3)可选地执行这个sscan记录

4)对位置对齐有用。

 12、数据存储

1) saveData监视sscan记录并且写它们地数据到被编号地文件。

2)握手允许流水式操作。

3)saveData地启动时init可以指定用每次扫描数据要写地PV‘s列表。

4)saveData写'MDA'文件。

  • 多维存档
  • 二进制,跨平台(XRD)格式
  • 为运行时访问优化了格式
  • 格式允许文件在每个写集合后被关闭。

5) 自动文件编号

  • 例如:'xxx_0123.mda', 'xxx_0124.mda'
  • 处理重叠:'xxx_0123.mda_01'

 6) 数据文件地位置

a) 'File System' + 'subdirectory'

b) vxWorks:

  • 文件系统是NFS挂载点
  • 要求:'//<hostname>'

c) Linux, Solaris

  • saveData不挂载这个文件系统(系统管理员做这件事)
  • 如果出现,'//<hostname>'被忽略

7) 在一个扫描进行中时(见'LOCK' PV),不能写到’File system‘或者'subdirectory'。

8)不要删除或者重命名saveData正在写入地目录。

9)只在注释PV’s在saveData.req中被命名时,才保存注释PV's。

13、saveData.req init文件

14、MDA文件格式

 也见:在sscan模块文档目录中'saveData_fileFormant.txt'。

14、其它数据采集相关的软件

1) 用于与synApps一起使用的数据可视化工具

  • 运行时查看扫描数据
  • 用于数据文件操作的离线工具
  • 支持1-3维数据
  • 分布式独立于ioc软件
  • 见课程"数据可视化"

2)CCD数据采集工具

a) CCD模块

b) 基于CCD支持的可移植的CA服务器,以及相关软件

  • 这两个方法允许一个EPICS CA客户端驱动数据采集
  • 这两个方法支持ca_put_callback(),根据sscan记录需要。

3) 读取.mda文件的Python软件,绘制1D扫描(过时)

15、结束报告

1) 用于被单个IOC包含数据库的方法

  • 在执行链中仅使用PP链接和转发链接

2) 数据库操作跨多个IOC:

用put_callback链接使用记录跨iocs

  • 带异步设备支持的calcout
  • sscan,swait(即:一个synApps "userCalc")
  • sseq或sCalcout(.WAIT*="Wait")

3) 在一个CA客户端执行这个操作的组成部分的情况中:

  • 数据库通过PP或put_callback链接设置一个busy记录
  • 当操作结束时,CA客户端清除这个busy记录

4) 在这个操作的组成部分是由一个CP链接驱动的情况中:

  • 与以上没有不同;一个CP链接时一个CA客户端

5)在执行链中仅使用PP链接和转发链接

6)与前相同,但对一个异步记录

7)提前"Done"报告,因为CA-链接执行不被跟踪

8)用PUT_CALLBACK链接修复了提前的DONE问题

 9)因为CA客户端运行不被跟踪,提前的"DONE":

 10)用"BUSY"记录修复了提前的"DONE"问题

猜你喜欢

转载自blog.csdn.net/yuyuyuliang00/article/details/130022806