实验物理和工业控制系统(EPICS)由一个可以用于创建分布式控制系统的软件组件和工具组成。EPICS提供了期望来自一个分布式系统的代表性功能:
EPICS规模变化可以从非常大到非常小的系统。大型系统必须能够传输和存储海量数据,健壮和可靠,但也容错。单个组件的错误不应该使系统停摆。对于小型安装,设立一个不需要复杂或昂贵基础组件的控制系统一定是可能的。
对于现代的程序,数据管理变得越发重要。为长期存储采集的操作数据并且用原来格式提取它应该是可能的。EPICS提供了实现此目标的工具并且根据设施的需求裁剪数据管理。
EPICS一个最令人感激方面是遍布全球的活跃合作。合作成员乐于在问题上帮助其它使用者并且讨论新的想法。
从广义上将,EPICS工具集能够进行服务器和客户端程序创建。服务器提供对数据的访问,读或写,本地或通过一个网络。经常对连接物理组件的硬件进行读和写,但数据也可以在其它地方产生或使用。物理I/O是任何控制系统的中心任务,包括EPICS。
客户端可以显示,存储和操作数据。客户端软件范围涵盖(图形和命令行)用户接口到用于数据管理的强大服务。
一个基于EPICS控制系统的基本组件是:
1、IOC:输入/输出控制器。这是EPICS的I/O服务器组件。能够支持如数据库和网络通信的EPICS基本组件的几乎任何计算平台可以用成IOC。一个示例是一台常见桌面计算机,其它示例是基于像vxWorks或RTEMS的实时操作系统的系统并且运行在专用的像MicroTCA,VME或者CompacctPIC的模块计算平台。EPICS IOC也可以运行在像树莓派或类似的低成本硬件上。
2、CWS:或客户端工作站。这是一台能够运行各种EPICS工具和客户程序的计算机;代表性示例是用户接口工具和数据归档。CWS可以是台式计算机,一台服务器或者类似,并且通常运行一个像Linux,Widnows或MacOS的"常见"的操作系统。
3、LAN:局域网。这只是一个能够使IOCs和CWS相互通信的标准的基于以太网(或无线)通信网络。
一个简单的EPICS控制系统可以由一个或多个IOCs和通过一个LAN(下图)通信的客户工作站组成。分开客户端和服务器使得系统配置更容易并且也使系统更加健壮。能够在不停止运行下从系统添加和移除客户端和服务器。
一个简单的EPICS控制系统架构
除了一个"经典"EPICS控制系统的这些基本组件外,实现用于数据的服务器(即:服务,其不处理I/O(来自一个受控过程的实时值)或者连接了硬件)也是可能的。例如,这些其它服务能够提供配置或者标定数据,或者像粒子束建模的计算服务。由于所有服务"说"相同的协议以及交换相同类型的数据结构,数据源对客户端软件是透明的(即是:你不需要进一步知道数据来自哪里或者如何获取它。) 在这个意义上,IOC可以被视为服务器的一种特殊类型,其处理数据并且连接到真实的现场硬件(在很多情况中,但不是必需的)。
EPICS软件组件通道访问(CA)和pvAccess(PVA)提供了协议和结构体,它们在CWS上运行的客户端软件和任何数量IOCs以及其它服务之间使得能够网络透明通信。在之后章节更详细地提供有关CA和PVA。
EPICS的基本属性:
1、基于工具:EPICS提供了一个用于创建控制系统的交互工具和组件集合。这降低对自定义编程的需求到最小并且有助于确保统一操作接口。
2、分布式:能够支持任何数目的IOCs和CWSs。只要网络没有饱和,没有单个瓶颈。如果单个IOC变得饱和,其功能可以分布到若干IOCs。程序能够分布到很多CWSs,而不是在单个CWS上运行所有程序。
3、事件驱动:EPICS软件组件都最大可能地被设计成事件驱动。例如,一个EPICS客户端请求得到变化的通知而不是必须为变化请求IOC。这种设计致使资源的高效使用以及快速响应时间。
4、高性能:一个IOC能够提供处理每秒数万数据项(”数据记录“,见以下)。客户端和服务器使系统用最小的网络开销处理百万过程变量。
6、可扩展:作为分布式系统,EPICS能够从单个IOC和少量客户端扩展到数百个IOCs和百万I/O通道和过程变量。
7、健壮:单个组件的故障会使整个系统停摆。可以在不停止控制系统操作下添加组件(I/O客户端)到系统或从系统移除它。组件能够经受互联网络的简写故障并且在网络从故障恢复时自动恢复。
8、基于过程变量:相较于某些其它控制系统包,EPICS没有把控制系统(I/O)设备建模成对象(如在面向对象编程中),而是建模成描述受控过程或设备单个方面的数据实体,因而名称"过程变量"或"PV"。一个代表性PV可以代表各种属性中任何一种,诸如温度或(电)流。在过程控制系统中这个设计是代表性的。在附录中简短地讨论这种设计的优缺点。
EPICS IOC在其核心是一个软件实体或者一个进程,它包括以下软件组件:
1、IOC 数据库:内存驻留数据库,包含指定名称的各种记录的集合。这些记录服务以上提到的过程变量。
2、Scanners:用于在IOC数据库中运行记录的机制。
3、记录支持:每种记录类型有相关联的实现这种记录类型的功能的记录支持例程集合。
4、设备支持:设备支持例程绑定I/O数据到数据库记录。
5、设备驱动:设备驱动处理对外部设备的访问。
5、通道访问或pvAccess:外部设世界和IOC之间的接口。它提供了通过网络访问(EPICS)数据库的接口。
6、Squencer:一个有限状态机。严格讲,这是一个外部模块并且不包含在EPICS核心软件发行中。
我们简要地描述IOC地主要组件以及它们如何交互。
EPICS IOC组件
每个IOC的核心是一个过程数据库。这个数据库是内存驻留的(即是,不是存储在磁盘或其它永久存储设备上)并且与更知名的关系数据库(SQL)没有关系。
数据库定义IOC的功能:它提供什么过程数据,如何处理和存储数据。数据库能够包含任何数目的记录,其中每个记录属于一个特定的记录类型。记录类型定义这个记录处理的数据类型以及一个定义如何处理数据的函数集合。记录特定类型元数据,也称为"特性",包含在记录中来配置和支持操作。例如,一个模拟输入(ai)记录类型支持从硬件设备读入值并且把它们转成所需的(工程)单位。它也为预计的操作范围提供限制,并且超过这些限制时报警。EPICS支持一个大型和扩展的记录类型集合,例如ai(模拟输入),ao(模拟输出)等。
称为"字段"的元数据用来配置记录的行为。有很多所有记录类型共有的字段,而某些字段使专用于特定的记录类型。每个记录有一个记录名称并且每个字段有一个字段名称。记录名称必须在连接了相同TCP/IP子网的所有IOCs之间唯一,使得客户端软件能发现在子网上任何记录并且访问它的值和其它字段。
record(ai, "Cavity1:T") #type = ai, name = “Cavity1:T”
{
field(DESC, “Cavity Temperature”) #description
field(SCAN, “1 second”) #record update rate
field(DTYP, “XYZ ADC”) #Device type
field(INP, “#C1 S4”) #input channel
field(PREC, “1”) #display precision
field(LINR, “typeJdegC”) #conversion spec
field(EGU, “degrees C”) #engineering units
field(HOPR, “100”) #highest value on GUI
field(LOPR, “0”) #lowest value on GUI
field(HIGH, “65”) #High alarm limit
field(HSV, “MINOR”) #Severity of “high” alarm
}
一个EPICS数据库记录的示例。这里只定义了一个字段子集
数据记录可以相互之间链接。例如,记录可以从其它记录获取输入,触发其它记录运行,使能或禁用记录等等。
通过链接记录的组合一起,EPICS数据库变成了一种编程工具。使用这个工具,用这个数据库能够实现非常高级的功能。另外,由于这个逻辑驻留在IOC上,它不依赖任何客户端软件来运行。通过利用这个工具的优势,很多客户端程序能够是"薄的",并且只是显示或者在数据库记录中写值。以下图说明一个记录链接的简单示例:如果两个传感器T1和T的平均温度超过10°C,启动制冷器。这个数据库包含四个记录:两个模拟输入(ai),一个二进制输出(bo)和一个计算(calc)。
记录链接的示例
提供了数据结构,因而能够高效地访问这个数据库。因为大部分软件组件通过库例程访问这个数据库,所以它们不需要了解这个结构。
提供了四种基本的记录扫描类型:Periodic, Event, I/O Event和Passive。在一个IOC中能够混合所有这些方法。
1、Periodic:周期地运行一个记录。支持很多时间间隔,代表性范围从10Hz到0.01Hz。范围是可配置的来支持更高或更低速率。
2、Event:当任何IOC软件组件提交一个(EPICS软件)事件时,事件扫描发生,诸如一个新温度传感器测量值。
3、I/O Event:I/O事件扫描系统基于像处理器中断的外部事件处理记录。一个IOC设备驱动中断例程必须可用于接受外部中断。一个I/O事件不是一定要是传统意义的CPU中断的中断。
4、Passive:被动记录不是被定期扫描或者对事件。但,由于链接到它们的其它记录被运行了,或者由于诸如使用通道访问通过网络设置了新值,能够运行它们。
访问数据库不需要记录特定类型的知识;每种记录类型提供实现了所有记录特定行为的记录支持例程集合。因而,IOCs能够支持任何数目的记录和记录类型。类似地,记录支持不包含设备特定的知识,赋予了每种记录类型具有任意数目独立设备支持模块。如果访问这件硬件的方法比能够被设备支持处理的更复杂,则可以开发设备驱动。有时,在设备支持(当它是记录类型特定的时)和驱动(当代码处理设备特定细节时)之间分隔功能是一个好习惯。
不关联硬件的记录类型不需要设备支持或设备驱动。一个示例是从其它记录读取它输入,执行计算并且接着(可选地)转发结果到其它记录的("calc")记录。
IOC软件设计允许特定安装以及在一个安装中一个特定IOC选择记录类型、设备类型和驱动地唯一集合。剩下的IOC系统不受影响。
给出分离如何运行的概要,看一下记录支持的任务。每个记录支持模块必须提供由数据库scanners调用的记录处理例程。记录处理由以下功能的某些组合组成(所有记录类型不需要包含所有功能):
1、输入:读取输入。能够通过设备支持例程从硬件,通过数据库链接从其它数据库记录,或者通过通道访问(CA)或pvAccess(PVA)链接从其它IOCs获取输入。
2、转换:原始输入到工程单位或者从工程单位到原始输出值的转换。
3、输出:写输出。通过设备支持例程到硬件,在相同IOC内部通过数据库链接到其它数据库记录或者通过CA或PVA到其它IOCs,输出能够被定向。
4、产生警报:检查并产生警报。
5、监控:触发与CA或PVA回调相关的monitors.。
6、链接:触发链接记录的运行。
相同概念被应用于设备支持和设备驱动模块:每个支持模块必须定义一个函数集合,使其成为IOC软件的一部分。
在一个数据库值变化是发送通告的机制被称为"数据库监控"。监控设施使得一个客户端程序在数据库值变化时被通告,而不是必须持续查询这个数据库。可以配置这些来指定值变化,警报变化和/或存档变化。
数据库监控是由EPICS标准协议通道访问和pvAccess支持。
EPICS通过支持以下用于数据交换的网络协议,提供了对IOC数据库的网络透明访问。
通道访问是基于客户端/服务器模型。每个IOC提供一个通道访问服务器,它能够与任何数目的客户端建立通信。通道访问客户端服务在CWSs和IOCs都可用。一个客户端能够与任意数目的服务器通信。
基本的通道访问客户端服务是:
除了过程变量值外,可以请求以下更多信息("元数据")的任意组合:
通道访问提供了一个IOC驻留服务器,它等待通道访问搜索消息。这些是当通道访问搜索包含它使用过程变量的IOCs时由通道访问客户端(例如当一个操作接口任务启动时)产生的UDP广播。服务器接受所有搜索消息,检查是否有任何过程变量位于这个IOC中,并且如果找到了任何过程变量,用"I have it"消息应答给发送者。
一旦过程变量已经被定位了,通道访问客户端对每个包含这个客户端使用的过程变量的IOC发送连接请求。在IOC中的连接请求服务器接受这个请求并且建立一个到这个客户端的连接。每个连接被两个单独的任务管理:ca_get和ca_put。ca_add_event请求导致数据库监控被建立。数据库访问和/或记录支持例程通过对db_post_event的调用提供值更新(monitos)。
每个IOC提供连接管理服务。如果通道访问服务器故障(例如:它的IOC崩溃),客户端被通知,而当一个客户端故障(例如,它的任务崩溃),服务器被通知。如果一个客户端故障,服务器断开连接。如果一个服务器崩溃,当服务器重启时,客户端自动重建通信。
pvAccess是一个现代替换和在EPICS 7中对通道访问的可用替代方案。pvAccess向EPICS增加了很多功能,它增强了由通道访问提供的服务集。用pvAccess,以高效传递结构化数据并且能够处理大数据集;用很多优化已经实现这个pvAccess:
基本的pvAccess客户端服务类似于通道访问,有一些补充:
对于IOC,一个IOC驻留服务器(qsvr)提供接口来访问过程数据记录。对单个PV的基本访问提供对通道访问相当的功能。此外,qsrv提供合并来自不同数据库记录的数据成作为单元传输的结构体的数据结构的可能性。从EPICS 3.16以来,IOC核心能够确保对记录的原子访问,意味着qsvr提供的在结构中的数据被确保是单次运行的结果(或者更好的表述,当qsrv组装数据结构时记录不更改它们的值)。这也应用于puts,在运行记录前所有值被写入到被寻址的记录。这种方式,保证了对应一次操作的参数一致性。
像在通道访问中,qsvr等待搜索消息。服务器接受所有(UDP)搜索请求,检查任意过程变量是否位于这个IOC中,并且如果找到了任何过程变量,用"I have it"消息应答发送者。
在pvAccess中,一个客户端和服务器如何建立通信通道的过程稍微不同于通道访问并且包含两个阶段。第一个阶段是交换检查数据。在这个阶段,服务器传递给客户端要被交换的数据的结构。两边接着都能创建用于通信的必要占位结构。在第二个阶段,能够使用分配的数据结构交换实际的数据结构。
pvAccess类似于通道访问的连接管理服务。
应该注意:访问方法(pvAccess, 通道访问)不提供以记录访问EPICS数据库。这是一个用意明显的设计决定。这使得能够在不影响通过PVA或CA访问数据库的任何软件下在数据库结构中进行更改或者添加新的记录类型,并且它允许这些客户端与具有不同记录类型集的多个IOCs之间通信。
EPICS提供了在客户端工作站上执行的很多工具和服务。基于它们是否使用通道访问和/或pvAccess,它们可以被分为两组。CA/PVA工具是实时工具,即是:它们用于监控和控制IOCs。这些工具未被包含在EPICS “base”发行中并且必须单独下载。用不同语言和技术实现了这些工具,并且用户应该选择哪些工具最合适于它们的特定设置和基础设施。
已经开发了很多CA/PVA工具。以下是一些代表性示例。
1、VDCT:一个基于java的数据库配置工具,它可以用于设计和配置EPICS数据库,并且能够可视化这些记录和它们的连接。
2、SNC:状态标记编译器。它产生代表这个IOC Squencer工具的状态的C程序。
EPICS是基于"平面",即是:记录的非层级集,它代表控制系统的过程变量。这有很多优点和缺点:
优点:
缺点:
可以延伸这些列表并且讨论它们,但以上是最常见得。
没有简单的结论说这种模型比另外设计的模型更好或更差。它取决于使用情况以及在每种不同因素上关注的分量。
已经添加在EPICS 7中的新特性缓解了缺乏抽象性和原子操作。在EPICS 7中结构化数据模型允许代表抽象实体的复杂结构的构建。能够进一步从已有构建块构建这些实体,因而保持了灵活性;在某种程度上,这甚至好于严格建模,因为能够在之后的工作系统上添加抽象。已经增加了原子操作,到某种程度,在一个分布式系统中能够实现它们,因而移除了对复杂解决方法的需求。
严格将,一个记录的每个字段也可以被认为一个过程变量。但,为了这个讨论,采取把一个记录等价为一个PV的更简单方法足够了。