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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/7936.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统【Centos7】设置防火墙教程

1. 查看防火墙状态 在终端输入以下命令&#xff1a; systemctl status firewalld 如果状态显示为“active”说明防火墙已经启动&#xff1b;如果状态显示为“inactive”说明防火墙没有启动。 2. 启动防火墙 在终端输入以下命令&#xff1a; systemctl start firewalld 3…

vue3自定义实现可过滤关键字的树形下拉选择框

背景 最近项目中有一个部门选择需求&#xff0c;一开始是用element-plus的级联下拉写的&#xff0c;但是由于层级过深&#xff0c;会出现级联下拉超出屏幕的情况&#xff0c;所以改用树形下拉&#xff0c;但是element没有相关组件&#xff0c;现记录下vue3js自定义实现可以根据…

Vector - CAPL - CRC算法介绍(续)

不常用CRC算法 目录 Crc_CalculateCRC8H2F 代码示例 Crc_CalculateCRC32P4 代码示例 Crc_CalculateCRC64 代码示例 Crc_CalculateCRC8H2F 功能&#xff1a;根据数据计算CRC8H2F的相应校验和。 data&#xff1a;待计算CRC8H2F校验和的数据 dataSize&#xff1a;待计算CRC…

JVM垃圾收集器与HotSpot的算法细节

目录 HotSpot的算法细节实现 根节点枚举 安全点 安全区域 记忆集与卡表 记忆集 作用 卡表&#xff08;Card Table&#xff09; 卡页&#xff08;Card Page&#xff09; 元素变脏&#xff08;Dirty&#xff09; 写屏障 写屏障 写前屏障&#xff08;Pre-Write Barrie…

【数据结构】顺序表

作者&#xff1a;日出等日落 专栏&#xff1a;数据结构 只有毅力才会使我们成功&#xff0c;而毅力的来源又在于毫不动摇&#xff0c;坚决采取为达到成功所需要的手段。 …

Ceph部署

1. 简介 Ceph是一个高性能、可扩容的分布式存储系统&#xff0c;它提供三大功能&#xff1a; 对象存储&#xff1a;提供RESTful接口&#xff0c;也提供多种编程语言绑定。兼容S3、Swift块存储&#xff1a;由RBD提供&#xff0c;可以直接作为磁盘挂载&#xff0c;内置了容灾机…

代码规范(以后会补充)

目录 为什么要规范代码 不规范的代码有什么特点 ​编辑 不规范的坏处 规范代码是什么样的 如何规范代码 1.代码中不要出现莫名其妙的数字 2.深度嵌套 3.注释 4.避免创建大函数 5.重复代码 6.变量命名 7.函数命名 8.命名时注意动词的使用 9. 常量值所有都大写 10. 避免变…

PMP备考资料:如何掌握PMP应考中的计算题?

计算题总体来说考得非常简单&#xff0c;题量也少&#xff0c;有时候只考3道、4道简单计算。所以这部分内容大家要细心严谨&#xff0c;不要因为粗心而丢掉分数。 01三点估算 通过考虑估算中的不确定性和风险&#xff0c;可以提高活动持续时间估算的准确性。这个概念源自计划…

映射的概念以及用法

映射的概念以及用法前言映射的定义映射的应用前言 在数学里&#xff0c;映射是个术语&#xff0c;指两个元素的集之间元素相互 “对应”的关系&#xff0c;为名词。映射&#xff0c;或者射影&#xff0c;在数学及相关的领域经常等同于函数&#xff0c;函数是从非空数集到非空数…

PyCharm解决Git冲突

技术背景 在前面的一篇博客中&#xff0c;我们介绍了Fork到自己名下的本地仓库如何与远程原始仓库创建链接的方法。在这篇文章中&#xff0c;我们将要讲解如何应对在这种异步开发的过程中经常有可能会遇到的Git冲突问题&#xff0c;在Pycharm这个专业的Python开发工具中集成了一…

网络基础概念

本文目标&#xff1a; ①了解网络发展背景, 对局域网/广域网的概念有基本认识; ②了解网络协议的意义, 重点理解TCP/IP五层结构模型; ③学习网络传输的基本流程, 理解封装和分用; 1.计算机网络背景 OS与网络 在整个计算机体系中&#xff0c;是先由操作系统&#xff0c;再有网…

Windows下使用SSH密钥实现免密登陆Linux服务器

工具&#xff1a; win10、WinSCP 生成ssh密钥&#xff1a; 打开终端&#xff0c;使账号密码登录&#xff0c;输入命令 ssh-keygen -t rsa 会提示密钥存放路径&#xff0c;一般存放在默认路径&#xff0c;直接回车即可&#xff0c;中间会提示输入密码&#xff0c;这里需要注…

CC攻击原理以及如何防御策略

CC攻击原理以及如何防御策略 CC 攻击是一种 DDoS&#xff08;分布式拒绝服务&#xff09;&#xff0c;它似乎比其他 DDoS 攻击更具技术性。在这种攻击中&#xff0c;看不到假IP&#xff0c;看不到特别大的异常流量&#xff0c;但会导致服务器无法正常连接。 很多创业公司辛辛苦…

你是真的“C”——C语言测评总结

你是真的“C”——C语言测评总结&#x1f60e;前言&#x1f64c;BC146 添加逗号总结撒花&#x1f49e;&#x1f60e;博客昵称&#xff1a;博客小梦 &#x1f60a;最喜欢的座右铭&#xff1a;全神贯注的上吧&#xff01;&#xff01;&#xff01; &#x1f60a;作者简介&#xf…

TreEnhance: A Tree Search Method For Low-Light Image Enhancement 论文阅读笔记

这是2023年PR这个期刊的论文主要思想是&#xff0c;利用一系列预定义好的操作序列来进行增强&#xff0c;然后利用强化学习来学习增强序列的预测。所以训练阶段有两个交替进行的阶段&#xff0c;一个是蒙特卡洛树搜索阶段&#xff0c;第二个是训练深度强化学习的阶段。而测试的…

中级软件设计师备考---计算机组成与体系结构3

目录①磁盘工作原理②计算机总线③系统可靠性分析④校验码CRC循环校验码海明校验码①磁盘工作原理 计算题 ②计算机总线 概念题 ③系统可靠性分析 计算可靠度 ④校验码 码距&#xff1a;是指两个码字之间的不同位数。例如&#xff0c;1010和1111之间的码距是2&#xff0c…

160. 相交链表 ——【Leetcode每日一题】

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c…

生成式人工智能所面临的问题有哪些?

在生成式人工智能中工作需要混合技术、创造性和协作技能。通过发展这些技能&#xff0c;您将能够在这个令人兴奋且快速发展的领域应对具有挑战性的问题。 生成式人工智能是指一类机器学习技术&#xff0c;旨在生成与训练数据相似但不完全相同的新数据。 换句话说&#xff0c;…

【二分—STL】lower_bound()函数upper_bound()函数的使用总结

目录一、基本用法&#xff1a;二、具体到题目中如何应用1、数的范围2、递增三元组3、数组元素的目标和一、基本用法&#xff1a; lower_bound() 用于二分查找区间内第一个 大于等于某值(> x) 的迭代器位置 upper_bound() 用于二分查找区间内第一个 大于某值(> x) 的迭代器…

IP协议以及相关技术

这里写目录标题前言正文IP基本认识IP的作用IP和MAC的关系IP地址的基础知识IP地址定义IP地址分类(IPv4)无分类IP地址CIDR子网掩码IPv6基础知识相关技术DNS域名解析ARPDHCPNATICMPIGMP总结参考连接前言 大家好&#xff0c;我是练习两年半的Java练习生&#xff0c;今天我们来讲一…