AndreaDO

导航

EPICS 的介绍和安装

EPICS平台的介绍和安装方法

EPICS的学习网址

https://epics-controls.org/
https://controlssoftware.sns.ornl.gov/training/2022_USPAS/

EPICS是什么

简介

EPICS(Experimental Physics and Industrial Control System)是一套开源的软件工具和应用程序,专门为构建分布式控制系统提供软件基础设施。它广泛应用于粒子加速器、大型实验设施、望远镜等需要高精度控制的领域。

EPICS 的核心优势在于:

  • 分布式架构: 可以有效管理大型复杂系统,各个组件之间通过网络通信。
  • 可扩展性: 能够适应不断变化的实验需求,灵活添加新的设备和功能。
  • 开放性: 基于开源协议,具有活跃的社区支持。
  • 跨平台: 支持多种操作系统,包括 Linux、Windows 和 macOS。

EPICS 的架构

EPICS 的架构主要由以下几个组件组成:

  • Channel Access(CA): EPICS 的核心通信协议,用于在不同设备和应用程序之间交换数据。
  • Archiver: 用于记录和存储系统中的数据,便于后续分析和故障诊断。
  • Alarm system: 提供报警功能,及时通知用户系统异常情况。
  • Sequence: 用于定义和执行复杂的控制序列。
  • Database: 用于存储系统的配置信息。

EPICS 的应用

EPICS 在以下领域有着广泛的应用:

  • 粒子加速器: 控制加速器中的各种设备,如磁铁、射频腔等。
  • 同步辐射光源: 控制光束线站的各种设备,如单色器、探测器等。
  • 核物理实验: 控制实验设备,如探测器、靶等。
  • 天文学: 控制望远镜和相关设备,如光谱仪、相机等。
  • 工业自动化: 用于控制生产线上的各种设备。

EPICS 的优势

EPCIS的安装

采用的环境是Linux的Ubuntu系统21
以下的安装步骤的基于官方的文档内容安装的

https://docs.epics-controls.org/en/latest/getting-started/installation-linux.html

系统的准备

需要在Ubuntu上安装了make,C++,libreadline,在Linux上使用apt-get-install

sudo apt install build-essential
sudo apt install libreadline-dev

sudo apt install build-essential 命令的主要作用是:

安装构建软件所需的必需工具包:这个命令会安装一系列用于编译和构建其他软件的工具,包括:
GCC(GNU Compiler Collection):一个功能强大的编译器集合,支持多种编程语言,如 C、C++。
make:一个自动化构建工具,根据 Makefile 中的规则来编译程序。
其他开发工具和库:一些其他的开发工具和库,为软件的构建提供支持。

libreadline-dev 是什么?
它是一个开发库,提供了丰富的函数和数据结构,可以帮助程序员轻松实现命令行接口的功能。
这些功能包括:
命令行历史记录: 能够记录用户输入过的命令,方便用户快速查找和重新执行。
命令行补全: 可以根据用户输入的命令提示可能的选项,提高输入效率。
行编辑: 支持行编辑功能,方便用户修改命令。

EPICS的参考手册的路径

https://epics.anl.gov/base/R3-15/7-docs/CAref.html#CommandTools

安装EPICS

命令如下

mkdir $HOME/EPICS
cd $HOME/EPICS
wget https://epics-controls.org/download/base/base-7.0.8.1.tar.gz
tar -xvf base-7.0.8.1.tar.gz
cd base-7.0.8.1
make

上面编译完成后,将路径加入到环境变量中:

sudo vim /etc/profile

加入路径

export PATH=$PATH:/home/lrj/EPICS/base-7.0.8.1/bin/linux-x86_64

测试EPICS简单使用

在终端中输入

softIoc

输出

epics> 

然后你输入exit退出,或者是按快捷键ctrl+C.这样就代表了你的EPICS安装正确了

接下来我们继续测试。准备一个test.db的文件

record(ai, "temperature:water")
{
    field(DESC, "Water temperature in the fish tank")
}

解释一下上面的内容:一个描述了水温的记录record,是一个ai(analog input) record ,
Desc作用是负责描述。

我们继续测试test.db

softIoc -d test.db

输出内容

Starting iocInit
############################################################################
## EPICS R7.0.8.1
## Rev. 2024-09-27T15:54+0800
## Rev. Date build date/time: 
############################################################################
iocRun: All initialization complete
epics>

我们输入一个命令 dbl ,作用是列出可用的记录

epics> dbl
temperature:water
epics> 

我们这个终端别关闭,我们开一个新终端,在上面测试一下工具caget和caput.
caget作用:是获取一个 PV(Process Variable)的值。这是 EPICS 中用于获取 PV 值的标准命令。
caput作用:是设置一个 PV新值。这是 EPICS 中用于设置PV 值的标准命令。
使用例子如下:

lrj@lrj-virtual-machine:~$ caget temperature:water
temperature:water              0
lrj@lrj-virtual-machine:~$ caget temperature:water.DESC
temperature:water.DESC         Water temperature in the fish tank
lrj@lrj-virtual-machine:~$ caput temperature:water 21
Old : temperature:water              0
New : temperature:water              21
lrj@lrj-virtual-machine:~$ caput temperature:water 24
Old : temperature:water              21
New : temperature:water              24
lrj@lrj-virtual-machine:~$ caget temperature:water
temperature:water              24
lrj@lrj-virtual-machine:~$ caget temperature:water
temperature:water              24

我们再打开第三个终端,输入命令camonitor,
camonitor temperature:water

camonitor temperature:water

输出

temperature:water              <undefined> 0 UDF INVALID
CA.Client.Exception...............................................
    Warning: "Identical process variable names on multiple servers"
    Context: "Channel: "temperature:water", Connecting to: 192.168.61.130:35413, Ignored: lrj-virtual-machine:5064"
    Source File: ../cac.cpp line 1321
    Current Time: Mon Sep 30 2024 13:38:29.156639644
..................................................................

此时你第二个终端改变一下温度
输入以下命令

lrj@lrj-virtual-machine:~$ caput temperature:water 22.1
Old : temperature:water              0
New : temperature:water              22.1
lrj@lrj-virtual-machine:~$ caput temperature:water 22.0002
Old : temperature:water              22.1
New : temperature:water              22.0002
lrj@lrj-virtual-machine:~$ caput temperature:water 23.1
Old : temperature:water              22.0002
New : temperature:water              23.1
lrj@lrj-virtual-machine:~$ caput temperature:water 23.2
Old : temperature:water              23.1
New : temperature:water              23.2

这个时候第三个终端实时输出了数据
内容如下

lrj@lrj-virtual-machine:~$ camonitor -g8 temperature:water
temperature:water              <undefined> 0 UDF INVALID
temperature:water              2024-09-30 14:08:04.339130 22.1  
temperature:water              2024-09-30 14:08:17.152787 22.0002  
^C
lrj@lrj-virtual-machine:~$ camonitor temperature:water
temperature:water              2024-09-30 14:08:17.152787 22.0002  
temperature:water              2024-09-30 14:09:24.805279 23.1  
temperature:water              2024-09-30 14:09:32.034575 23.2 

如果你执行到现在也没出什么问题,说明你EPICS基本上没问题了。

posted on 2024-10-11 11:29  AndreaDO  阅读(43)  评论(0编辑  收藏  举报