EPICS的学习1
本人因为工作需要学习EPICS的使用,于是去网上研究这个,发现资料不多,而且比较杂乱,而且基本上只能去看英文文档,故花费了自己不少的时间。决定将自己的学习整理成笔记,发在网上,以后有需要的可以也来学习和看看,如果对我的笔记中感到疑惑产生了问题,也可以在评论区提出。
安装EPICS在Linux上的步骤在上一个文档中,故不再谈,本文将简单讲解IOC并且举几个IOC的练习小例子。
IOC是什么
简单来说,IOC就是EPICS中负责控制和监测设备的程序。 它就像一个中介,将计算机与各种各样的实验设备、仪器或者工业控制系统连接起来。通过IOC,我们可以对这些设备进行读写操作,获取数据,并实现自动化控制。
EPICS中的IOC组成要素详解
IOC包含的有:数据库(Database),扫描仪(Scanner),记录支持(Record Support),设备驱动(Device Driver),PV变量(PV (Process Variable))。
1. 数据库
- 作用: 定义和管理系统中的所有设备、PV(Process Variable,过程变量)、报警、记录等信息。
- 内容: 数据库中包含了设备的类型、连接方式、PV的名称、数据类型、访问权限、报警阈值等。
- 重要性: 数据库是IOC的“大脑”,所有与控制相关的配置信息都存储在这里。
2. 扫描仪
- 作用: 定期读取PV的值,并根据配置进行更新或触发其他操作。
- 功能:
- 周期性读取: 按照预设的频率读取PV的值。
- 事件驱动: 当某个PV的值发生变化时触发扫描。
- 条件触发: 当满足特定的条件时触发扫描。
- 重要性: 扫描仪是实现数据实时采集和控制的基础。
3. 记录支持
- 作用: 记录系统中的各种事件和数据,用于分析、调试和存档。
- 功能:
- 历史数据记录: 记录PV随时间的变化。
- 报警记录: 记录报警事件的发生时间、原因等。
- 操作日志: 记录用户对系统的操作。
- 重要性: 记录支持为系统提供了重要的历史数据,有助于分析系统性能和故障原因。
4. 设备驱动
- 作用: 实现与各种硬件设备的通信,包括读写设备寄存器、控制设备状态等。
- 功能:
- 硬件接口: 提供与硬件设备通信的接口。
- 数据转换: 将硬件设备的数据转换成EPICS系统可以理解的数据格式。
- 错误处理: 处理设备通信过程中出现的错误。
- 重要性: 设备驱动是IOC与硬件设备交互的桥梁。
5. PV变量
- 作用: 代表系统中的一个物理量或状态。
- 类型: 包括模拟输入、模拟输出、数字输入、数字输出等多种类型。
- 属性: 每个PV都有相应的属性,如名称、数据类型、访问权限、报警阈值等。
- 重要性: PV是系统中数据的基本单位,所有的控制和监测都是围绕PV展开的。
总结
这些要素共同构成了一个完整的IOC系统:
- 数据库定义了系统的整体结构。
- 扫描仪负责数据的实时采集。
- 记录支持记录系统运行的历史数据。
- 设备驱动实现与硬件设备的通信。
- PV变量代表系统中的物理量。
通过这些要素的协同工作,IOC可以实现对实验设备或工业过程的自动化控制。
举例说明
假设我们有一个温度控制系统,IOC可以实现以下功能:
- 数据库: 定义温度传感器、加热器、设定温度等PV。
- 扫描仪: 定期读取温度传感器的值。
- 设备驱动: 控制加热器的开关。
- 记录支持: 记录温度随时间的变化。
- PV变量: “温度传感器”表示当前温度,“加热器状态”表示加热器是否开启。
当温度低于设定值时,扫描仪检测到这个变化,触发加热器开启,直到温度达到设定值。
IOC的使用
IOC通常是包含一个或者多个数据库
- 每个数据库都包含了记录record
每个记录record包含的内容
- 名称Name(在整个网络中是唯一的)
- 类型Type(决定字段及其功能)
- 字段Fields(属性,可以读取,大多数也可以在运行时写入)
- 支持到硬件设备的接口
- 链接到其他记录
记录records可以做的事情
记录的“行为”
- 从其他记录或硬件获取数据
- 执行计算
- 检查值范围,触发报警
- 写入其他记录或硬件
记录的行为取决于:
- 记录类型
- 字段值
- 设备支持
记录的处理时机:
- 定期处理
- 由事件或其他记录触发处理
除非记录被处理,否则不会发生任何操作。
例子1
让我们在当前目录创建一个first.db的文件
内容如下:
record(calc, "$(S):random")
{
field(SCAN, "1 second")
field(INPA, "10")
field(CALC, "RNDM*A")
}
然后我们在系统变量中创建一个$USER=Bob
sudo vim ~/.bash_profile
进入环境变量后...
export USER=BoB
source ~/.bash_profile
然后添加完成后,我们在当前目录下再执行
softIoc –m S=$USER –d first.db
如图
这时候我们打开另外一个终端,输入命令
camonitor $USER:random
如图
这个时候发现每隔一秒钟,值就会发生变化。
详细解析 softIoc -m S=$USER -d first.db 这条指令
指令的整体作用
这条指令主要用于启动一个EPICS(Experimental Physics and Industrial Control System)的IOC(Input Output Controller),并加载一个名为first.db
的数据库文件。这个IOC将根据数据库中的定义来管理和控制各种设备或过程变量。
参数解析
-
softIoc:
- 这是EPICS中一种常见的IOC类型,通常用于运行用户自定义的数据库。
- 它会读取数据库中的定义,创建相应的PV(Process Variable),并根据这些PV来控制设备或过程。
-
-m S=$USER:
-m
表示设置一个宏。S=$USER
表示将系统环境变量$USER
的值赋值给一个名为S
的宏。- 在
first.db
数据库文件中,凡是出现$S
的地方,都会被替换成当前登录用户的用户名。
-
-d first.db:
-d
表示指定要加载的数据库文件。first.db
是一个文本文件,其中包含了定义各种PV的规则、报警设置、记录保存等信息。
工作流程
- 启动softIoc: 系统找到softIoc的可执行文件并启动。
- 加载数据库: softIoc读取
first.db
文件,解析其中的内容,并根据定义创建相应的PV。 - 设置宏: 将系统环境变量
$USER
的值赋值给宏S
。 - 初始化IOC: softIoc完成一些初始化工作,例如建立与其他设备的连接。
- 开始运行: IOC开始运行,根据数据库中的定义来处理PV的读写操作。
详细解析 first.db 内容
record(calc, "$(S):random")
- 创建了一条记录record,类型为calc计算类型,名为$(S):random
下面的三个全是记录中的字段:
field(SCAN, "1 second")
- SCAN:字段名,表示扫描的含义
- 1 second,表示系统每隔一秒钟会对这个值更新
field(INPA, "10")
- INPA:字段名,表示记录的输入参数A
- 10,表示数值10
field(CALC, "RNDM*A")
- CALC:字段名,表示计算型记录
- RNDM*A,表示值为 随机数RNDM * A
然后回到第一个终端中,可以尝试dbl
,dbpr
,dbpf
这些命令.
- dbl命令用于快速浏览数据库中的记录,了解记录的类型和数量。
epics> dbl
BoB:random
- dbpr命令用于详细查看某个记录的字段信息,帮助理解记录的配置,(0-2)等级显示详细信息。
epics> dbpr BoB:random 0
A : 10 AMSG: ASG : B : 0
C : 0 CALC: RNDM*A D : 0 DESC:
DISA: 0 DISV: 1 E : 0 F : 0
G : 0 H : 0 I : 0 J : 0
K : 0 L : 0 NAME: BoB:random NAMSG:
SEVR: NO_ALARM STAT: NO_ALARM TPRO: 0 VAL : 9.506675822080
- dbpf命令用于修改记录的字段值,从而改变记录的行为。不过在本例子中,设置后过一秒值就会自动改变了
epics> dbpf BoB:random 2
DBF_DOUBLE: 2
下面是关于文档中的一些记录,如果不想看的可以跳过了。
记录的类型
EPICS(Experimental Physics and Industrial Control System)中的记录类型定义了记录的数据类型、功能和行为。下面是对常见记录类型的简要说明:
Analog Input/Output (ai/ao)
- 功能: 用于表示模拟量的输入和输出。
- 数据类型: 数字(通常为浮点数)。
- 映射: 可以将数字映射到工程单位(如温度、压力、电压等)。
- 用途: 常用于测量物理量、控制设备的输出等。
Binary Input/Output (bi/bo)
- 功能: 用于表示数字量的输入和输出。
- 数据类型: 位(bit)。
- 映射: 可以将位映射到字符串,表示不同的状态或信号。
- 用途: 常用于控制开关、信号灯等。
Calculation (calc)
- 功能: 用于进行计算,并将结果存储在记录中。
- 数据类型: 通常为数字。
- 计算公式: 可以定义复杂的计算公式,使用变量、常数和运算符。
- 用途: 常用于计算衍生数据、实现控制算法等。
Multi-Bit-Binary Input/Output (mbbi/mbbo)
- 功能: 用于表示多位数字量的输入和输出。
- 数据类型: 16位整数。
- 映射: 可以将16位整数的各个位映射到字符串,表示不同的状态或信号。
- 用途: 常用于表示状态机、编码器等。
其他记录类型
- stringin/out: 字符串输入/输出。
- longin/out: 长整数输入/输出。
- seq: 序列记录,用于存储一系列值。
- compress: 压缩记录,用于压缩数据。
- histogram: 直方图记录,用于统计数据的分布。
- waveform: 波形记录,用于存储波形数据。
- sub: 子记录,可以将一个记录作为另一个记录的子记录。
常见的字段名称
EPICS(Experimental Physics and Industrial Control System)中的记录(Record)由多个字段组成,这些字段定义了记录的属性、行为和状态。下面是对一些常见字段的解释:
Design Time字段(设计时字段)
- NAME: 记录的唯一名称,在整个网络中必须唯一。
- DESC: 记录的描述,用于解释记录的用途和功能。
- SCAN: 扫描机制,定义记录的扫描频率和方式。
- PHAS: 扫描相位,用于控制多个记录的扫描顺序。
- PINI: 是否在初始化时处理一次,用于控制记录的初始状态。
- FLNK: 前向链接,用于将一个记录与另一个记录连接起来,实现记录之间的依赖关系。
Runtime字段(运行时字段)
- TIME: 时间戳,记录上次处理的时间。
- SEVR, STAT: 报警严重性和状态,用于指示记录是否处于报警状态。
- PACT: 是否正在处理,用于指示记录是否处于活动状态。
- UDF: 是否未定义,用于指示记录是否从未被处理过。
- PROC: 强制处理,用于强制处理一个记录,即使它不在扫描周期内。
其他字段
- TPRO: 跟踪处理,设置为1可以调试记录的处理过程。
字段的作用和关系
这些字段共同定义了记录的属性、行为和状态。例如:
- NAME和DESC用于标识和描述记录。
- SCAN和PHAS控制记录的扫描频率和顺序。
- PINI决定记录是否在初始化时被处理。
- FLNK可以创建记录之间的依赖关系,例如,一个计算型记录可以依赖于其他记录的输入值。
- TIME、SEVR、STAT、PACT、UDF和PROC用于记录的运行时状态和控制。
记录中的扫描
在EPICS(Experimental Physics and Industrial Control System)系统中,记录扫描是一种机制,用于定期读取或更新记录中的数据。扫描的频率和方式由记录的SCAN和PHAS字段来控制。
SCAN字段
- "Passive"(默认): 当被其他记录引用时,记录会被动地进行扫描。
- 周期性扫描:
- ".1 second"、".2 second"、".5 second"、"1 second"、"2 second"、"5 second"、"10 second":指定扫描的周期。
- 事件驱动扫描:
- "Event":通过EVNT字段指定触发扫描的事件。
- "I/O Intr":如果设备支持,则由设备中断触发扫描。
PHAS字段
- 扫描顺序: PHAS字段用于为具有相同扫描周期的记录添加顺序。
- 优先级: PHAS的值越小,优先级越高。
- 初始值: 通常将第一个记录的PHAS设置为0,然后依次递增。
PINI字段
- 初始化处理: 将PINI设置为"YES"可以强制记录在系统启动时处理一次。
- 应用场景: 对于很少更改的记录,如操作员输入记录,可以设置PINI为"YES",确保记录在系统启动时具有初始值。
PROC字段
- 强制处理: 写入PROC字段可以强制处理一个记录,即使它不在扫描周期内。
- 调试用途: PROC字段通常用于调试或测试记录的行为。
扫描机制总结
- 被动扫描: 由其他记录引用触发。
- 周期性扫描: 根据指定的周期进行扫描。
- 事件驱动扫描: 由事件或设备中断触发。
- 扫描顺序: PHAS字段用于控制扫描顺序。
- 强制处理: PROC字段用于强制处理记录。
输入输出记录(Input/Output Records)
输入输出记录是EPICS(Experimental Physics and Industrial Control System)中用于与外部设备进行交互的基本记录类型。这些记录通常用于读取设备的输入数据或向设备发送输出命令。
常见的输入输出字段
- DTYP: 设备类型。指定了与该记录关联的设备的类型。
- INP/OUT: 输入/输出链接。定义了如何读取或写入设备的数据。格式取决于设备类型。
- RVAL: 原生值。通常是一个16位整数,表示从设备读取到的原始数据。
- VAL: 工程单位值。将原始值转换为有意义的工程单位(如温度、压力、电压等)。
输出记录的特定字段
- DOL: 期望输出链接。输出记录读取这个链接以获取VAL值,然后写入到OUT字段。
- OMSL: 输出模式选择。如果输出模式选择为闭环控制,则使用OMSL字段。
- IVOA: 无效输出操作。定义当输出操作无效时应该采取的措施。
- DRVL, DRVH: 驱动限制。定义输出设备的驱动限制,以防止超出范围的输出。
字段的作用和关系
- DTYP指定了设备类型,从而决定了如何与设备进行通信。
- INP/OUT定义了输入或输出的链接,可以是其他记录或设备的名称。
- RVAL存储从设备读取到的原始数据。
- VAL将原始数据转换为工程单位,使其更易于理解和使用。
- DOL、OMSL、IVOA、DRVL和DRVH是输出记录的特定字段,用于控制输出设备的行为。