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"问题