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 的优势
-
可靠性: EPICS 在多年的实际应用中证明了其高可靠性。
-
灵活性: EPICS 可以定制化,以满足不同用户的需求。
-
社区支持: EPICS 有一个活跃的社区,提供丰富的文档和支持。
-
EPICS 官方网站: https://epics.anl.gov/about.php
-
EPICS 文档: https://epics.anl.gov/docs/index.php
-
EPICS 社区论坛: https://epics.anl.gov/about.php
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基本上没问题了。