EPICS学习记录

所有的学习内容均来自于EPICS官网,在这里只是记录学习过程。

What is EPICS

Conception

EPICS全称是Experimental Physics and Industrial Control System(实验物理和工业控制系统)。 EPICS是一组协作开发的开源软件工具,库和应用程序,在全球范围内用于为诸如粒子加速器,望远镜和其他大型科学实验等科学仪器创建分布式软实时控制系统。

EPICS Control System Architecture

如上图结构(同样也是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 Software Toolkit

如上图,这就是一整个EPICS的软件工具包结构。 实际上,安装EPICS并不会创建控制系统,它实际上是数百个软件组成的. 有些是执行特定任务的单独程序,用于创建和运行图形用户界面、存档数据、监控报警等。 其他是用于监视或控制特定类型硬件的代码库,比如COTS设备(可编程逻辑控制器、示波器等)的IOC设备和驱动程序支持. 还有一些软件工具允许通用编程语言和工具与EPICS接口,像C/C++、Perl、Python、java、Matlab/OcthVE、C语言、LabVIEW等。 需要注意的是,几乎所有的EPICS代码都是开源的,可以根据需求随意修改。 有的时候,通过选择和配置现有的软件,你就可以建立一个EPICS控制系统,不需要任何代码,编写代码通常只是为了填补可用工具中的空白。

What can EPICS do

Epics可用于完成几乎所有典型的分布式控制系统(DCS)功能,例如: 技术设备远程监控、过滤闭环控制访问安全性设备运行约束报警检测、记录数据趋势、存档、检索、绘图自动排序模式和设备配置控制(保存/恢复)建模、仿真数据采集数据分析等等。

Channel Access Concepts

CA Concepts Process

CA协议是EPICS使用的协议,它用到了2个Internet v4协议,UDP和TCP。 具体的协议过程如下:

EDM在寻找一个特定名称的PV,它首先会通过UDP广播询问谁有这个PV。所有的server都会监听,收到消息会便会检查自己有没有这个PV。

其中一个ioc发现自己有这个PV,它就会通过UDP回复,我有这个PV。

收到回复后,EDM便会与这个ioc建立TCP连接。

另外还有一些细节需要注意。 对于还没有找到的PV。

  1. 只要客户端发现beacon异常或者再新增请求PV时,搜索请求将被合并并通过UDP发送。

  2. 每次重复请求的间隔为30ms,每次间隔加倍,直到5s时并会保持该时长。

  3. 而一旦服务器相应,请求就会停止。

  4. 在发送100个包(大约8min)后,搜索的频率会降低。

client通常会选择第一个或前几个响应的ioc进行连接。 对于不存在的pv的请求可能会占据大量流量。

Beacon

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 Anomalies体现在正常beacon间隔的变化。(不同server的正常可能不一样,这是可以根据需求配置的)。 如果client没有看到来自server的beacon,30s后client会通过其TCP连接发送消息,如果依然没有应答,则连接断开。 client会收到断开连接的每个通道的通知。 异常beacon间隔:短就是ioc重启了,长就是ioc掉线了。 异常会导致client去重连没有完成的请求。 有时候网络问题会表现的像Beacon Anomalies。

CaRepeater

这一块我不太理解。(其实是英文没听太懂……)

当运行多个CA client时,它们都是需要监听beacon的,即监听同一个UDP端口。而UDP广播通常不会给到监听同一个端口的process。 CaRepeater就是为了解决这个问题。每个工作站中都会有一个CaRepeater,client在启动时会与其建立tcp连接。而CaRepeater会通过UDP来接收beacon。然后它就会将这些beacon转发给跟它建立连接的client。 EPICS_CA_REPEATER_PORT [usually 5065]

Important Environment Variables

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 Database Principles

Database = Records + Fields + Links

EPICS控制系统会包含一个或多个ioc。每个ioc会加载一至多个database来告诉自己该做什么。而每个database实际上是各种类型record的一个集合。

record

record则是具有以下特征的object:

  1. 一个特有的名字

  2. 对数据能执行操作

  3. 属性(fields)包含信息(data)

而EPICS中的record具有更多的特征:

  1. 一个特有的名字

  2. 可控的属性(fields)

  3. 由自己record类型决定的行为

  4. 可选的相关硬件IO(device support)

  5. 指向其他record的链接

其中每个field都可以通过名称单独访问。而record name+field name就组成了PV name。而这个PV name正是CA访问数据时所需的。当field名没有被给出时,会默认为.val。(即其值) record可以执行以下操作:

  1. 从其他record或硬件中获取数据。

  2. 进行计算

  3. 检测值是否在范围内并发出警报

  4. 向其他record和硬件写值

  5. 激活或禁用其他record

  6. 等待硬件信号(中断)

record的操作取决于其类型和它fields的设置。只有在处理record时record才会有动作。

在ioc database中,单个record的定义会被指定:

  1. 其record类型

  2. 一个或多个独有的名称

  3. 一些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插件快速发布