一、synApps是什么?
1) 一个用于同步束线用户的EPICS模块集合。
2) EPICS模块
alive, autosave, busy, calc, camac, caputRecorder, dac128V, delaygen, dxp, ip, ip330, ipUnidig, love, mca, measComp, modbus, motor, optics, quadEM, softGlue, sscan, std, vac, vme, xxx, softGlueZynq, iocZed
3)支持的子目录
documentation, configure, utils
二、synApps模块
1、模块包含了以下类型的支持:
1) 编译好的代码;库,例如:
- 记录和设备支持
- SNL(状态标记语言)程序
- 字符串计算,数组计算引擎
2)EPICS数据库和autosave-reqeust文件
- 数据库是一个用高级语言编写的程序。
- 可以运行一个数据库的一个或多个副本,每个副本具有它自己的私有过程变量(PV's)
- 数据库设计者推荐PV's按它们在一个.req文件中命名被自动存储。
3) 用于MEDM,caQtDM和CSS-BOY的显示文件
默认的用户界面
4) 文档
某些模块包含了iocBoot目录,基本用于测试
三、synApps包含的其它模块
- areaDetector(ADCore和ADSupport以及各种面探测器模块)
- asyn
- ipac
- seq
- stream
- devIocStats
- allenBradley
四、alive
发送一个IOC的运行状态到一台服务器
1)环境变量
2)vxWorks启动参数
3)启动时间
五、autosave
1) 记录所选EPICS PVs的最新值;在ioc重启时,恢复那些值
- 不是存档程序;仅保存最新值
- 不要与saveData混淆,saveData记录扫描数据
- 当包含一个PV's列表时,即使仅一个PV发生了变化,整个列表被记录。
2) 可以保存/恢复任何标量或数组值的PV
- 数组值的PV必须被保存在进行恢复操作的IOC上(通常,ioc's仅保存/恢复它们自己的PV's)
- DBF_MENU, DBF_ENUM PV's被由数值处理
3) 保存操作对标量使用通道访问。
4) 恢复操作对标量使用静态数据库访问
5) 用数据库访问保存和恢复数组。
6)用于保存文件的三个恢复选项:
a) 在记录/设备初始化前
- 电机位置必须在这时被恢复
- 数组不能在此时被恢复
- 在记录init前是DBF_NOACCESS的PV's不能再此时被恢复。
b) 在记录/设备初始化后
- 重写记录初始化的值
- 链接字段不能在此时被恢复
c) 在记录初始化前和后
- 在两个时间恢复'auto_settings.sav'文件
- 尝试在错误时间恢复一个PV是否一个错误
- 如果你在此时恢复一个电机位置,你覆盖了从硬件读取的值,而不写入硬件
7) PV列表可以使用include文件(例如:<database_name>.req),包含路径。
- 数据库开发者可以向数据库提供默认的include文件。
- 用户可以用自定义include文件覆盖
8) 触发保存
- 在列表中任何PV发生变边时
- 周期地
- 一个触发PV变化时
- 手动
9) 用户可以重载保存设置
10) 重启,autosave可以从文件服务器恢复
当前仅限vxWorks
11) 用户可以选择保存冗余文件
12) autosave通过EPICS PV's报告状态
13) 示例request文件
# PV名称
xxx:my_PV.VAL
xxx:my_array_PV.VAL
# 关键字 include文件的名称 宏替换
file motor_settings.req P=$(P),M=m1
...
14) 示例save文件
# save/restore V4.4 Automatically generated…
xxx:my_PV.VAL 1.0
xxx:my_array_PV.VAL @array@ { “0” “0.1” … “10.2” }
xxx:m1.DIR 0
xxx:m1.DHLM 100
xxx:m1.DLLM –100
...
15) configMenu支持手动保存/恢复
几乎用于softGlue和scan配置
六、busy
1)允许通道访问客户端和asyn驱动程序参与EPICS的结束报告
2)记录
a) busy,类似bo记录,但仅在VAL==0时,才执行转发链接(forward)
b) 使用示例
七、calc
支持计算在运行时输入的表达式
1) 记录
a) acalcout:类似calcout,但也支持数组表达式;用于可以指定wait-for-completion。
b) scalcout:类似calcout,但也支持字符串表达式;用于可以指定wait-for-completion。
c) swait:类似calcout,但使用recDynLink(没有"PP MS"属性,并且等待结束)。
d) transform:类似于共享一个PV数据池的16个calcout记录。
e) sseq:类似base中的seq,但能够获取和写入字符串;用于可以指定wait-for-completion。
2) 其它代码
a) 用于aSub记录的插值程序
b) 用于sub记录的计算平均程序
c) sseq-record编译器
3) 用于运行时编程的数据库,显示文件
- userCalc, userCalcout
- userStringCalc
- userArrayCalc
- userTransform
- userStringSeq
- userAve
- interpolation
4) 所有calc表达式的示例可以在synApps MEDM帮助窗口中找到
八、CAMAC
1) 与CAMAC机箱/模块进行通信
2) 记录
camac -- 用于实时camac控制的通用BCNAF/数据
3) 支持的设备
- VME总线适配器
- CAMAC crate控制器
- E500电机控制器
- RTC-018实时时钟
- QS-450四路scaler
九、caputRecorder
1) 支持记录和回放通道访问写入的序列
2)用于执行python函数的用户接口
十、configure
1) 配置在synApps中或者由synApps使用的所有模块
2) RELEASE
指定指向EPICS base的以及指向每个模块synApps/support的版本号和文件路径。
3)makeReleaseConsistent.pl
- 编辑synApps/support中每个模块的<module>/configure/RELEASE,使得符合synApps/support/configure/RELEASE
- 在synApps/support中“make release”使得这个脚本运行。
十一、dac128V
dac128V IndustryPack模块的设备支持,数据库和窗口文件。
- 8通道,12位DAC
- 存在运行时手动或者根据编写的算法运行一个DAC通道的支持,或者作为一个扫描定位器,或者作为最多~10Hz的PID反馈查看的组成,或者作为最高~10KHz的快速PID反馈查看的组成。
十二、delaygen
对延时生成器的设备支持,数据库和窗口文件。
1) Standord Reseach System DG535和DG645数字延时生成器。
2) Colby Instrument PDL 100A可编程延时线
3) 相关的同步辐射延时生成器
十三、documentation
顶层synApps文档
- synApps是什么?
- 如何部署它。
- 如何构建它。
- 如何从'xxx'示例模块产生一个用户程序。
- 如何使得用户程序适配一个特定硬件
十四、dxp
1) XIA DXP和Saturn谱学系统的记录、设备支持,数据库和窗口文件。
2)用于设置DXP参数的dxp记录
3) 对mca记录的设备支持
十五、ip
很多基于消息的设备的设备支持、SNL代码,数据库和窗口文件。
1) 原先,用于通过InstrstryPack硬件支持的设备。
2) 注意,这个支持的某些将不可避免过时了,或者待定访问硬件用于测试。
deviceCmdReplay
1) 用于在运行时为一条命令/应答消息写支持
2)scalcout来格式化输出字符串
3) asyn记录来写/读设备
4) scalcout记录解析应答
devXxStrParm设备支持
新支持应该使用stream/asyn
十六、ip330
用于IP330 ADC InstrutryPack模块的设备支持,数据库和窗口文件。
16/32通道,16位 ADC
1) ip330Scan用于ADC通道的周期的,平均的读取
2) 对MCA记录ip330Sweep,用于在一个飞扫中使用ip330作为一个波形示波器,或者记录模拟数据。
3) ip330PID用于在快反馈循环中使用ip330
十七、ipUnidig
1) 对IPUnidig数字I/O IndustryPack模块的设备支持,数据库和窗口文件。
2) IP-UD-I 24通道输入/输出/中断模块
3) DIO316I 48位数字I/O模块
十八、love
对Love控制器的支持
- 使用RS485 Octal串行IndustryPact模块,或者使用了232、485转换器的RS232模块。
- 对ao,ai,bo,bi和mbbi记录的asyn设备支持
- 用于Lovelink的asyn插值接口
- 示例程序,数据库和窗口文件,仅限vxWorks和Linux
- 提供了用于vxWorks和Linux的启动脚本来配置Ipac,asyn和插值接口。
十九、mca
1) 对多通道分析仪,多通道定标器和其它数组值探测器的支持。
2) mca记录
3) 设备支持
- Canberra 556 AIM模块(MCA和ICB控制器)
- DSA-2000以太网MCA
- 用于谱学的各种Canberra-ICB模块
- SIS 3801(Struck STR7201)和3820多通道定标器
二十、measComp
对Measurement Computing USB设备的支持
- USB-CTR08 8通道计时/计数模块
- USB-1608GX-2AO模拟I/O模块
- USB-4303(过时)计数/计时模块
二十一、modbus
1) 对modbus协议的支持
- 可编程逻辑控制器(PLCs)
- 其它modbus设备,诸如温度控制器
2) 使用asyn支持各种通信链路
二十二、motor
1) motor记录和设备支持
- 步进电机和伺服电机
- 软电机支持:a) 放置一个电机"面孔",例如:一个DAC通道;b) 通过一个非线性转换驱动一个硬件电机
- user/dial/raw坐标
- 回程差消除算法
- pre/post移动命令
- 很多其它特性
2) 支持的电机类型
- Oregon Micro Systems, Inc. (OMS) models; VME8, VME44, VME58, VS4, VX2, MAXv, PC68 and PC78.
- Newport models MM3000, MM4000/5/6, PM500, ESP300/301/100 and XPSC8.
- Schneider Electric (formally IMS) models IM483, MDrive and MForce.
- Advanced Control Systems, Corp. model MCB-4B.
- Mclennan models PM304 and PM600.
- Physik Instrumente (PI) GmbH & Co. model C-630, C-844, C-848, C-862/863, E-662, E-710 and E-816.
- MicroMo model MVP 2001 B02.
- Micos model MoCo dc controller, SMC hydra controller.
- Delta Tau PMAC2-VME controller.
- Faulhaber MCDC2805 servo controller.
- Parker Hannifin, Compumotor Division, 6K Series controllers.
- New Focus, models; 8750 and 8752.
- ACS Motion Control, SPiiPlus model.
- Spectra-Physics, Encoder Mike Controller, Model 18011.
- Thorlabs, Piezo Controller, Model MDT695.
- Animatics Corporation SmartMotor.
- piezosystem jena GmbH EDS data interface module.
- Kohzu SC-200, SC-400, SC-800 stepper motor controllers.
- attocube systems AG ANC150 Piezo Step Controller.
- Aerotech Soloist single-axis servo controller, Ensemble multi-axis digital servo controller.
- Hytec 8601 Industry Pack based 4-channel Stepper Motor Controller.
二十三、optics
1) 狭缝和镜子
- 四个虚拟定位器;两个真实电机
- 自动同步到电机位置
- 报告结束
2) 单色器
非色散双晶
- 几何:(Y1, Z2), (Y2, Z2)
- 晶体品种:Si, Ge, 金刚石,Si(77K)
- 米勒指数,可用的反射
- 运行模式:a) Use/Set b) Manual/Auto
- 管理垂直束线偏移
- 自动同步到电机位置
球星栅格
- 几何变量:a) 光栅密度;半径; b) 切线臂; c) 衍射级数 d) 输入/输出距离
- 运行模式:a) Use/Set b) 手动/自动
- 光栅条纹列表
- 手动同步到电机位置
色散双晶
1) 几何:嵌套,对称
2) 晶体种类:Si, Ge, 钻石, Si(77K)
3) 米勒指数,可用的反射面
4) 运行模式:a) Use/Set b) Manual/Auto c) Theta1 / Theta1&2/ Rock Theta2
5) 适应入射光束角度偏移
6) 自动同步到电机位置
光学平台
1) Table记录支持一个6自由度的光学平台
2) 四种几何:SRI, GEOCARS, NEWPORT和PNC
3) user/client可以写任何到(x,y,z,thetax, thetay, thetaz)或者写到底层电机记录
4) 平台绕用户指定的点转动
5) 平台数据库包含一个由菜单选择的转动点的列表
6) 可以从电机位置恢复平台位置
7) 部分支持少于6个自由度
8) 几何:a)SRI b)GeoCARS c)Newport d)PNC
9) 标定/sync:
- Use/Set:更改到[X,Y,..]。移动平台/更改标定
- Zero:重新定义当前[X,Y, ...]为0
- Sync:从电机,更新[X,Y,...],遵守校准
- Init:清除标定并且同步到电机
10) 平台记录设置电机速度,使得一起电机start/stop。
二十四、quadEM
支持4路输入的电表。
1) CAENels:AH401B, AH401D, AH501, AH501C和AH501D皮安表
2) APS四路电表
二十五、softGlue
支持基于FPGA的数字电子学
二十六、softGlueZynq
1) SoftGlue用于MicroZed和其它Zynq的基于FPGA的平台。
2) 在开发中。基本可以工作,但还未有中断支持。
3) 比SoftGlue更早来添加自定义组件。
4) analogProc是一个变体,它尝试成为一个SoftGlue。在非常初级的开发阶段。
5) 也见iocZed,它与synApps大部分剩下一起在*Zed平台部署softGlueZynq。
二十七、sscan
1) 支持用户编程的数据采集
- sscan记录执行扫描
- saveData保存数据到文件
- recDynLink执行sscanRecord链接
2)一维扫描
a) 进行NPTS次
- 设置条件:例如,移动电机;等待结束
- 触发探测器:例如:启动scaler;等待结束
- 采集数据:读取探测器信号;存入数组
b) 写数据到NFS文件
3) 多维扫描
a) 与1-D相同,但探测器触发器执行内层扫描
b) saveData监视一个sscan记录的集合,确定在扫描开始时扫描维度,并且按要求写数据。
4) 扫描特性
1) 三种1-D扫描类型:等步长,表格驱动,飞行
2)没有限制的数据点,扫描维度
3) 0-4个定位器,0-4个探测器触发器,0-70个探测器信号
4) 从scalar和一维数组值PV’s采集
5) 探测器/客户端等待,数据存储等待
6) 暂停/继续,取消
7) 双缓存:在下次1-D扫描过程中,可以写已经采集的一维数据
8) SaveData写自描述的XDR-格式(".mda")文件到NFS挂载的磁盘(目前,仅限vxWorks)
9) 一个定位器可以有私有的扫描参数(scanparm记录)。
10) 在扫描后操作包括移动到峰值,谷值和边沿
11) scanparm记录+扫描后操作=自动化1位对齐,因此,你可以容易地实现一个"对齐"按钮。
5) sscan记录
1) 执行1维扫描
2) 扫描前链接,可选的结束时回调
3) 定位器:任何可写,数值,标量的PV(菜单,枚举都可以)
4)探测器触发器:任何可读,数值,标量的或1D数组PV
5) 数组探测器:完全需要<scanRecord>.NPTS元素
6) 数组触发器:回调表示数组数据准备要读取
7)扫描后链接:可选的结束时回调
8) 暂停/继续
9) 取消(<scanRecord>.EXSC -> 0)等待回调,清理
10) (连续两次取消)杀死取消的回调
11) 与多个显示/数据采集客户端握手
12) 与数据存储客户端握手
6)与sscan记录一起使用的数据可视化工具
1) scanSee
2) dview, sview
3) utils/mdautils
4) utils/mdaExplorer
5) utils/mdaPythonUtils
二十八、std
1) Epid记录
扩展的PID记录
2) Scaler记录
用一个公共时钟,门和触发器控制一组计数器
3) 软电机数据库
a) 运行时可编程的软电机/transform/hard-motor数据库
b) 驱动一个电机经常一个非线性变换的快速方法
4) 四步数据库
a) 一个最终计算最多4步(设置条件,读取数据)
b) 原先维dichroism实验开发
5) PID控制
6) Femto电流放大器支持
7)genTweak, ramp_tweak
8) selector
9) pvHistory
10) Alarm clock, countdown timer
二十九、utils
1) changePrefix
通过复制xxx模块更改EPICS前缀
2) changePrefixloc
更改在一个ioc目录中所有文件的EPICS前缀
3) copyAdl
找到MEDM-display文件;复制到指定目录。
4) mdaExplorer, mdaPythonUtils, mdautils-src
显示,操作扫描数据(MDA)文件
5) snapDb
"冻结"一个userCalcs集合成为一个自定义数据库,显示
6) Subversion utilites
logModuleFromTag, releaseNotesFromTag, makeTar
三十、vac
支持真空测量和控制
1) vs, digitel记录
2) Granville-Phillips GP307, GP350
3) Televac MM200, CC10
4) Digitel 500/1500
5) Gamma MPC, MPCe, LPC, SPC
三十一、vme
1) VME记录
- 提供对VME总线的运行时访问
- 对测试硬件好用
- 一个不受支持的VME板卡的运行时编程控制
2) 对VME硬件的设备支持
-
Joerger scaler
-
APS bunch-clock generator
-
APS machine-status interface
-
Heidenhain encoder interpolator
-
Generic A32 VME interface
-
HP Laser interferometer
-
VMI4116 16-bit DAC
-
Acromag 9440 16-bit digital input
三十二、xxx
1) 原型用户目录
- 构建在synApps中所有东西成为一个装载模块
- 包含装载/配置在synApps中几乎所有东西的命令文件
- 包含示例顶层窗口文件
- 包含设置环境变量以及启动示例用户接口的示例脚本
- 包含用于所选VME和IndustryPack硬件的推荐地址/中断配置的表格
2) 使用这个模块的两种方式
a) 进行复制;运行changePrefix; 构建;自定义;运行一条束线
- 这是推荐的用法
- 详细说明在support/document
b) 引用/抓包
三十三、iocZed
一个用于MicroZed的"xxx"模块
1) 构建在synApps中所有东西,已经展示它在MicroZed中Linux处理器上运行
2) 当前:alive, asyn, autosave, busy, calc, caputRecorder, iocStats, seq, softGlueZynq, sscan, std, stream
三十四、对于开发者:synApps的特性
1) 扩展的运行记录
既不是同步也不是异步的记录
2) 结束时报告
当通过ca_put_callback()被写时,所有数据库正确地表现。
3) recDynLink链接
类似标准地EPICS链接,但没有"PP NMS"特性
4) GUI标准
用于菜单,PV值,链接等地默认颜色
5) 协调运动
在synApps中很多数据库(尤其在'optics'中)包含了若干电机的协调运行
6) 复杂数据库的初始化
某些公共的EPICS初始化问题在各种synApps数据库中被处理。
三十六、协调运动
1) 示例情况:数据库(transform记录)
狭缝,镜子,球星光栅单色器
2) 更复杂的情况:SNL代码
多晶单色器
3) 非常复杂的情况:自定义记录
光学平台,扫码
4) 标准一个有用的协调应该满足:
a) 报告完成给ca_put_callback()
b) 与CA客户端共享base定位器的控制
c) 从base定位器的状态恢复状态
三十七、结束时报告
1) 在单个ioc中包含的数据库的简单规定
在执行链中仅使用PP链接和转发(forward)链接
2) 数据库操作跨越多个ioc
使用带put_callback链接的记录跨越iocs:
- 带有异步设备支持的calcout
- sscan, swait
- sseq或sCalcout(.WAIT*=“Wait”
3) 在客户端执行部分操作的情况中
a) 数据库通过PP或put_callback链接设置一个busy记录
b) 当操作结束时CA客户端清除这个busy记录
4) 在部分操作是由一个CP链接驱动的情况中
与以上没有不同;CP链接时一个CA客户端
三十八、复杂数据库的初始化
1) 初始值:.VAL vs .DOL
- 大部分记录允许在数据库中设置.VAL字段
- 注意:.DOL不能用于常量字符串
2)用记录/设备初始化的保存恢复和交换
- 保存-恢复pass 0
- 记录/设备初始化-->设备支持可以使用pass-0值
- 保存-恢复pass 1 --> pass-1覆盖记录/设备-初始值
3) .PINI(在init时运行)使用和限制
a) 这是数据库初始化的正常机制
b) 如果你需要一个来自某个其它的.PINI初始化记录的值,而那个记录还未被运行?
c) 注意:在.PINI运行中不考虑.PHAS
4) 与链接警报竞争
a) 如果你有一个指向一个.UDF=1的记录的输入链接,你得到一个链接警报。
b) 在一个记录运行前.UDF=1。(在3.14.1+,数据库可以指定.UDF)。
c) transform记录在链接警报时可以取消执行。
5) CP链接的初始化问题
a) 你有一个指向一个字段的CP链接,这个字段一个计算结果。
b) 如果calc结果是与字段的初始值相同,你将有正确的值,但你将不知道你有正确的值,并且你将不直到确认要等多久。
c) transform记录总是提交它的初始计算结果。
6) 可编程的初始化链接字段
a) 必须用CA链接编写链接字段(因为锁集 recalc)
b)在CA运行前.PINI运行
c) 不能使用.PINI;从扫描任务驱动init;当init结束时,设置init记录为"Passive"。