首页 > 其他分享 >EPICS的学习1

EPICS的学习1

时间:2024-10-11 17:21:47浏览次数:7  
标签:PV 记录 EPICS 扫描 学习 字段 IOC 设备

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

如图
image

这时候我们打开另外一个终端,输入命令

camonitor $USER:random

如图
image

这个时候发现每隔一秒钟,值就会发生变化。

详细解析 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的规则、报警设置、记录保存等信息。

工作流程

  1. 启动softIoc: 系统找到softIoc的可执行文件并启动。
  2. 加载数据库: softIoc读取first.db文件,解析其中的内容,并根据定义创建相应的PV。
  3. 设置宏: 将系统环境变量$USER的值赋值给宏S
  4. 初始化IOC: softIoc完成一些初始化工作,例如建立与其他设备的连接。
  5. 开始运行: 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可以调试记录的处理过程。

字段的作用和关系

这些字段共同定义了记录的属性、行为和状态。例如:

  • NAMEDESC用于标识和描述记录。
  • SCANPHAS控制记录的扫描频率和顺序。
  • PINI决定记录是否在初始化时被处理。
  • FLNK可以创建记录之间的依赖关系,例如,一个计算型记录可以依赖于其他记录的输入值。
  • TIMESEVRSTATPACTUDFPROC用于记录的运行时状态和控制。

记录中的扫描

在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将原始数据转换为工程单位,使其更易于理解和使用。
  • DOLOMSLIVOADRVLDRVH是输出记录的特定字段,用于控制输出设备的行为。

标签:PV,记录,EPICS,扫描,学习,字段,IOC,设备
From: https://www.cnblogs.com/AndreaDO/p/18458710

相关文章

  • 数据资产 学习笔记(零)核心概念收录
    1、数据在常见的DIKW层次结构模型中,数据(Data)被视为一系列原始素材和原始资料,经由处理后形成有逻辑的信息(Information),人们通过组织化的信息分析出原因和机制,形成知识(Knowledge)再通过不断地应用与验证,逐渐形成智慧(Wisdom),并由此达成预测未来的可能。2、数据资产......
  • (29-6-02)通过回测、ARIMA 和 GRU 预测股票价格:深度学习模型预测(2)
    29.8.4 训练和测试数据集的划分训练和测试数据集的划分是机器学习中评估模型在未见数据上的表现的重要过程。通过将数据集分成两个部分:训练集用于训练模型,测试集用于评估模型的性能,我们可以更好地了解模型对新数据的泛化能力。这一过程可以帮助我们避免过拟合,即模型在训练......
  • 【机器学习(十三)】机器学习回归案例之股票价格预测分析—Sentosa_DSML社区版
    文章目录一、背景描述二、Python代码和Sentosa_DSML社区版算法实现对比(一)数据读入(二)特征工程(三)样本分区(四)模型训练和评估(五)模型可视化三、总结一、背景描述  股票价格是一种不稳定的时间序列,受多种因素的影响。影响股市的外部因素很多,主要有经济......
  • torch--yoloV5学习
    网络可视化工具:netronnetron官方的github链接:https://github.com/lutzroeder/netronnetron对pt格式的权重文件兼容性不好,直接使用netron工具打开,无法显示整个网络可以使用yolo代码中models/export.py脚本将pt权重文件转换为onnx格式,再用netron工具打开,就可以看yolov5网......
  • 如何用3个月零基础入门网络安全?_网络安全零基础怎么学习
    前言写这篇教程的初衷是很多朋友都想了解如何入门/转行网络安全,实现自己的“黑客梦”。文章的宗旨是:1.指出一些自学的误区2.提供客观可行的学习表3.推荐我认为适合小白学习的资源.大佬绕道哈!一、自学网络安全学习的误区和陷阱1.不要试图先成为一名程序员(以编程为基础......
  • 基于R语言机器学习遥感数据处理与模型空间预测
    随机森林作为一种集成学习方法,在处理复杂数据分析任务中特别是遥感数据分析中表现出色。通过构建大量的决策树并引入随机性,随机森林在降低模型方差和过拟合风险方面具有显著优势。在训练过程中,使用Bootstrap抽样生成不同的训练集,并在节点分裂时随机选择特征子集,这使得模型具备......
  • 2025选题推荐|基于微信小程序的公考学习平台的设计与实现
    作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与各位高校教师、企业......
  • 大语言模型学习路线:从入门到实战
    在人工智能领域,大语言模型(LargeLanguageModels,LLMs)正迅速成为一个热点话题。本学习路线旨在为有基本Python编程和深度学习基础的学习者提供一个清晰、系统的大模型学习指南,帮助你在这一领域快速成长。本学习路线更新至2024年02月,后期部分内容或工具可能需要更新。适......
  • C++ 算法学习——1.8 倍增与ST表
    在C++中,"倍增"(也称为"指数增长"或"指数级别增长")是一种算法优化技术,它通常用于解决一些需要频繁查询某个区间内的信息的问题,例如在处理动态规划、搜索等算法中。倍增思想的主要目的是通过预处理和存储一些中间结果,以加速后续的查询操作。具体来说,倍增思想通常包括以下步骤:......
  • C++ 算法学习——1.8 单调队列算法
    单调队列(MonotonicQueue)是一种特殊类型的队列,通常用于解决一些数组或序列相关的问题。和单调栈类似,单调队列也具有一些特定的性质,在解决一些问题时非常有用。以下是关于单调队列的一些重要点:定义:单调队列是一种数据结构,队列中的元素满足单调递增或单调递减的性质。应用:单......