所有的学习内容均来自于EPICS官网,在这里只是记录学习过程。
EPICS全称是Experimental Physics and Industrial Control System(实验物理和工业控制系统)。 EPICS是一组协作开发的开源软件工具,库和应用程序,在全球范围内用于为诸如粒子加速器,望远镜和其他大型科学实验等科学仪器创建分布式软实时控制系统。
如上图结构(同样也是EPICS的logo),主要分为3部分。上部分是客户端应用程序,下面是服务器应用,中间则为网络协议。服务应用和机器进行连接,客户端应用则和用户,而在这两者之间通过网络协议进行连接。 服务器会向客户端提供名为Process Variables(PVs)的访问途径。PVs实际上就是一些可以通过对应PVname来访问的数据,同时也是CA协议(Channel Access Protocol)的主要对象。它可以是任何和机器有关的数据,状态、参数等等。 我们可以举几个PV的例子:
BOOSTER:gateValvePosition ‘OPEN’ S3:DIPOLE:PS:setPoint 123.4 Amps APS:Mode ‘Stored Beam’ 前面为对应的PV名称,后面则是其对应的值。 除了提供值以外,PV同样有一些其他的属性,比如时间戳,当前的警报状态和严重性,工作范围和控制限值等等。
如上图,这就是一整个EPICS的软件工具包结构。 实际上,安装EPICS并不会创建控制系统,它实际上是数百个软件组成的. 有些是执行特定任务的单独程序,用于创建和运行图形用户界面、存档数据、监控报警等。 其他是用于监视或控制特定类型硬件的代码库,比如COTS设备(可编程逻辑控制器、示波器等)的IOC设备和驱动程序支持. 还有一些软件工具允许通用编程语言和工具与EPICS接口,像C/C++、Perl、Python、java、Matlab/OcthVE、C语言、LabVIEW等。 需要注意的是,几乎所有的EPICS代码都是开源的,可以根据需求随意修改。 有的时候,通过选择和配置现有的软件,你就可以建立一个EPICS控制系统,不需要任何代码,编写代码通常只是为了填补可用工具中的空白。
Epics可用于完成几乎所有典型的分布式控制系统(DCS)功能,例如: 技术设备远程监控、过滤闭环控制访问安全性设备运行约束报警检测、记录数据趋势、存档、检索、绘图自动排序模式和设备配置控制(保存/恢复)建模、仿真数据采集数据分析等等。
CA协议是EPICS使用的协议,它用到了2个Internet v4协议,UDP和TCP。 具体的协议过程如下:
EDM在寻找一个特定名称的PV,它首先会通过UDP广播询问谁有这个PV。所有的server都会监听,收到消息会便会检查自己有没有这个PV。
其中一个ioc发现自己有这个PV,它就会通过UDP回复,我有这个PV。
收到回复后,EDM便会与这个ioc建立TCP连接。
另外还有一些细节需要注意。 对于还没有找到的PV。
只要客户端发现beacon异常或者再新增请求PV时,搜索请求将被合并并通过UDP发送。
每次重复请求的间隔为30ms,每次间隔加倍,直到5s时并会保持该时长。
而一旦服务器相应,请求就会停止。
在发送100个包(大约8min)后,搜索的频率会降低。
client通常会选择第一个或前几个响应的ioc进行连接。 对于不存在的pv的请求可能会占据大量流量。
Beacon是由服务器发送的UDP广播包。 正常时,每个server会定期广播一个UDP beacon(heartbeat),EPICS_CA_BEACON_PERIOD默认是15s。 每次启动时,每个server会广播一系列beacons。 会以较小的间隔开始(25ms),之后每次间隔会加倍,当达到15s时,就会保持。这个阶段大概需要10个beacon或者40s,之后稳定下来。 这么做的原因是因为,客户端会监测所有来自server的beacon,不需要建立TCP,可以通过这些beacon来确定是否有新的server,或者有的server掉线,就这样通过确定连接状态,来决定是否重新搜索。
Beacon Anomalies体现在正常beacon间隔的变化。(不同server的正常可能不一样,这是可以根据需求配置的)。 如果client没有看到来自server的beacon,30s后client会通过其TCP连接发送消息,如果依然没有应答,则连接断开。 client会收到断开连接的每个通道的通知。 异常beacon间隔:短就是ioc重启了,长就是ioc掉线了。 异常会导致client去重连没有完成的请求。 有时候网络问题会表现的像Beacon Anomalies。
这一块我不太理解。(其实是英文没听太懂……)
当运行多个CA client时,它们都是需要监听beacon的,即监听同一个UDP端口。而UDP广播通常不会给到监听同一个端口的process。 CaRepeater就是为了解决这个问题。每个工作站中都会有一个CaRepeater,client在启动时会与其建立tcp连接。而CaRepeater会通过UDP来接收beacon。然后它就会将这些beacon转发给跟它建立连接的client。 EPICS_CA_REPEATER_PORT [usually 5065]
EPICS_CA_ADDR_LIST
告诉CA client 在哪里搜索PV。实际上是一个IP地址或主机名的列表(用空格分隔)。 ep:123.45.1.255 123.45.2.14 123.45.2.108
EPICS_CA_AUTO_ADDR_LIST 是:在搜索中包括上述默认地址 否:不搜索默认地址 默认值为“是”,如果设置了这个,则通常为“否”。
EPICS控制系统会包含一个或多个ioc。每个ioc会加载一至多个database来告诉自己该做什么。而每个database实际上是各种类型record的一个集合。
record
record则是具有以下特征的object:
一个特有的名字
对数据能执行操作
属性(fields)包含信息(data)
而EPICS中的record具有更多的特征:
一个特有的名字
可控的属性(fields)
由自己record类型决定的行为
可选的相关硬件IO(device support)
指向其他record的链接
其中每个field都可以通过名称单独访问。而record name+field name就组成了PV name。而这个PV name正是CA访问数据时所需的。当field名没有被给出时,会默认为.val。(即其值) record可以执行以下操作:
从其他record或硬件中获取数据。
进行计算
检测值是否在范围内并发出警报
向其他record和硬件写值
激活或禁用其他record
等待硬件信号(中断)
record的操作取决于其类型和它fields的设置。只有在处理record时record才会有动作。
在ioc database中,单个record的定义会被指定:
其record类型
一个或多个独有的名称
一些fields的初始值
在ioc中,每个record都是一个c结构的实例,其中每个field都有一个数据成员。 所有的record以一个标准fields集合(dbCommon)开始,包括指向record类型信息和field数据的指针。 record类型提供了所有fields的定义以及实现record的特有行为的代码。可以按需向应用程序中添加新的record类型。
field
field可以用于: What causes a record to process 从何处获取和放置数据 如何将原始IO数据转换为数值工程值 什么时候发出警报 何时通知监控该record的client值的更改 处理算法 需要为给定类型的record设置的所有内容 保存运行时数据 输入输出值 警报状态、严重性 处理时间戳 其他内部使用的数据
field的类型有: Integers整型 – char, short or long长短字符 – signed or unsigned有无符号 Floating-point numbers浮点数 – float or double Fixed length strings固定长度字符串 – 最大有效长度为40个字符 Enumerated/menu choices列举以及菜单选择 – 从最多16个字符串中选择一个 – 存储为短整数 Arrays of any of the above types上述任何类型的数组 Links – 和本ioc或者其他ioc的records – 和硬件信号 (device support) – 提供获取和放置值的方法 其他私人数据 – 无法远程访问
所有的records都会有这些fields
design fields | description |
---|---|
NAME | record的唯一规范名称(超过28字符可能导致问题) |
DESC | 描述(40字符) |
ASG | 访问安全组 |
SCAN | 扫描机制 |
PHAS | 阶段性扫描顺序 |
PINI | ioc初始化过程 |
PRIO | 调度优先级 |
SDIS | 扫描禁用输入链接 |
DISV | 扫描禁用值 |
DISS | 禁用严重性 |
FLNK | 前向链路 |
runtime fields | description |
---|---|
PROC | Force processing |
PACT | 进程激活 |
STAT | 警报状态 |
SEVR | 警报严重性 |
TPRO | 跟踪处理 |
UDF | 如果未定义record,则UDF非零 |
TIME | 上次处理record的时间 |
本文章使用limfx的vsocde插件快速发布