EPICS Linux/Unbuntu 的安装说明(入门级)

EPLICS Unbuntu 的安装

EPICS 的安装

EPICS 官网

EPICS 官网 https://epics-controls.org/

EPICS入门

  1. 在Linux / UNIX / Darwin(Mac)上安装
    我们假设您或多或少了解EPICS是什么。在这里,我们想
    从头开始,直到拥有一台工作服务器的位置,提供一些
    PV来读取(caget或pvget)和写入(caput或pvput),然后我们从同一计算机或其他终端上的另一个终端上对其进行读写。在同一网络中的另一个网络上。如果要使用两台不同的计算机,则必须为两台计算机重复安装EPICS的步骤。
  2. 准备系统
    您需要make,c ++和libreadline才能从源代码进行编译。在macOS上,可以使用例如来安装这些依赖项homebrew。在Linux上,您可以使用apt-get install。
  3. 安装EPICS
mkdir $HOME/EPICS
cd $HOME/EPICS
git clone --recursive https://github.com/epics-base/epics-base.git
cd epics-base
make

设置全局变量进入 $HOME/.profile$HOME/.bashrc 加入下面的变量信息:

export EPICS_BASE=${HOME}/EPICS/epics-base
export EPICS_HOST_ARCH=$(${EPICS_BASE}/startup/EpicsHostArch)
export PATH=${EPICS_BASE}/bin/${EPICS_HOST_ARCH}:${PATH}

EpicsHostArch是EPICS提供的程序,可返回您的系统架构。因此,上面的代码对于每种体系结构都应该适用。

  1. 测试EPICS
    新建一个命令窗口 运行 softIoc 如果一切正常,您应该看到EPICS 提示
softIoc
epics>

您可以使用 ctrl+c 退出或通过键入 exit 退出

好的,这不是很令人印象深刻,但是至少您知道EPICS的安装正确。因此,现在让我们尝试更复杂的方法,有望有望提出EPICS的工作方式。

在任何目录你喜欢,准备一个文件test.db 并写入

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

该文件定义了一个称为 temperature:water 的记录实例,它是一个模拟输入 ai 记录。您可以想象 DESC 停留在 Description上。现在,我们 softIoc 再次开始,但是这次使用此记录数据库。

softIoc -d test.db

现在,在EPICS提示符下,您可以使用 dbl 命令列出可用的记录,您将看到类似

epics> dbl
temperature:water
epics>

打开一个新终端(命令2),然后尝试使用命令行工具 cagetcaput 。您会看到类似

your prompt> caget temperature:water
temperature:water              0
your prompt> caget temperature:water.DESC
temperature:water.DESC         Water temperature in the fish tank
your prompt> caput temperature:water 21
Old : temperature:water              0
New : temperature:water              21
your prompt> caput temperature:water 24
Old : temperature:water              21
New : temperature:water              24
your prompt> caget temperature:water 
temperature:water              24
 ... etc.

现在打开另一个终端(命令3),并尝试监听命令 camonitor

camonitor temperature:water

首先,看看从端子(命令2) 更改温度:(water)水值时会发生什么。使用 caput。然后,尝试将数值微调一些,例如15.500001、15.500002、15.500003……您会看到有 camonitor 反应,但读数没有变化。如果您想查看更多数字,可以运行

camonitor -g8 temperature:water

关于信道接入协议的更多细节,包括文档上 caputcagetcamonitor …命令行工具,请参阅信道访问参考手册

但是,在现实生活中,温度计返回的8位数字(在本示例中)不太可能都是有效的。因此,我们应该将流量限制在大约百分之一度的变化范围内。为此我们在文件中添加一行test.db,以便读取 【控制显示】

record(ai,“ temperature:water”)
{ 
        field(DESC,“实验室10中的水温”)
        field(MDEL,“ .01”)
}

MDEL代表 Monitor Deadband。如果现在运行

softIoc -d test.db

对于新的test.db文件,您将看到它 camonitor 仅对大于0.01的更改做出反应
这只是一个简单的例子。有关更多信息,请参考《记录参考手册

  1. 创建一个演示/测试IOC以测试CA和PVA
mkdir -p $HOME/EPICS/TEST/testIoc
cd $HOME/EPICS/TEST/testIoc
makeBaseApp.pl -t example testIoc
makeBaseApp.pl -i -t example testIoc
make
cd iocBoot/ioctestIoc
chmod u+x st.cmd
ioctestIoc> ./st.cmd
#!../../bin/darwin-x86/testIoc
< envPaths 
epicsEnvSet("IOC","ioctestIoc") 
epicsEnvSet("TOP","/Users/maradona/EPICS/TEST/testIoc") 
epicsEnvSet("EPICS_BASE","/Users/maradona/EPICS/epics-base") 
cd "/Users/maradona/EPICS/TEST/testIoc" 
## Register all support components 
dbLoadDatabase "dbd/testIoc.dbd" 
testIoc_registerRecordDeviceDriver pdbbase 
## Load record instances dbLoadTemplate "db/user.substitutions" 
dbLoadRecords "db/testIocVersion.db", "user=junkes" 
dbLoadRecords "db/dbSubExample.db", "user=junkes" 
#var mySubDebug 1 
#traceIocInit 
cd "/Users/maradona/EPICS/TEST/testIoc/iocBoot/ioctestIoc" 
iocInit 
Starting iocInit 
############################################################################ 
## EPICS R7.0.1.2-DEV 
## EPICS Base built Mar 8 2018 
############################################################################ 
cas warning: Configured TCP port was unavailable. 
cas warning: Using dynamically assigned TCP port 52907, 
cas warning: but now two or more servers share the same UDP port. 
cas warning: Depending on your IP kernel this server may not be 
cas warning: reachable with UDP unicast (a host's IP in EPICS_CA_ADDR_LIST) 
iocRun: All initialization complete 
2018-03-09T13:07:02.475 Using dynamically assigned TCP port 52908. 
## Start any sequence programs 
#seq sncExample, "user=maradona" 
epics> dbl
maradona:circle:tick
maradona:compressExample
maradona:line:b
maradona:aiExample
maradona:aiExample1
maradona:ai1
maradona:aiExample2
 ... etc. ...
epics>

现在在另一个终端中,可以尝试使用命令行工具,例如

caget, caput, camonitor,
cainfo (Channel Access)
pvget, pvput, pvlist,
eget … (PVAccess)
  1. 添加asyn包
cd $HOME/EPICS
mkdir support
cd support
git clone https://github.com/epics-modules/asyn.git
cd asyn

编辑 $HOME/EPICS/support/asyn/configure/RELEASE 并设置 EPICS_BASE 为

EPICS_BASE=${HOME}/EPICS/epics-base

注释掉 IPAC=...SNCSEQ=…,因为目前不需要它们。整个文件应为:

 #RELEASE Location of external products
HOME=/Users/maradona
SUPPORT=$(HOME)/EPICS/support
-include $(TOP)/../configure/SUPPORT.$(EPICS_HOST_ARCH)
# IPAC is only necessary if support for Greensprings IP488 is required
# IPAC release V2-7 or later is required.
#IPAC=$(SUPPORT)/ipac-2-14
# SEQ is required for testIPServer
#SNCSEQ=$(SUPPORT)/seq-2-2-5
# EPICS_BASE 3.14.6 or later is required
EPICS_BASE=$(HOME)/EPICS/epics-base
-include $(TOP)/../configure/EPICS_BASE.$(EPICS_HOST_ARCH)

现在开始运行

make
  1. 安装StreamDevice(由PSI的Dirk Zimoch提供)
    StreamDevice没有其自己的位置和 top/configure 目录。期望将其放入已经存在的顶级目录结构中。我们可以简单地创建一个 makeBaseApp.pl 文件
cd $HOME/EPICS/support
mkdir stream
cd stream/
makeBaseApp.pl -t support
git clone https://github.com/paulscherrerinstitute/StreamDevice.git
cd StreamDevice/
rm GNUmakefile

现在我们必须编辑 $HOME/EPICS/support/stream/configure/RELEASE 。未注释的行必须阅读

# Variables and paths to dependent modules:
MODULES = ${HOME}/EPICS/support
# If using the sequencer, point SNCSEQ at its top directory:
#SNCSEQ = $(MODULES)/seq-ver
# EPICS_BASE should appear last so earlier modules can override stuff:
EPICS_BASE = ${HOME}/EPICS/epics-base
# These lines allow developers to override these RELEASE settings
# without having to modify this file directly.
-include $(TOP)/../RELEASE.local
#-include $(TOP)/../RELEASE.$(EPICS_HOST_ARCH).local
-include $(TOP)/configure/RELEASE.local
ASYN=$(MODULES)/asyn

请记住,$(NAME) 如果它是在同一文件中定义的,那是可行的,但 ${NAME}如果要使用shell变量,则必须使用大括号。编译器可能不喜欢某些替换。在这种情况下,请${NAME}使用完整路径替换变量,例如/Users/maradona/EPICS…

最后运行make 我们在目录中(…/EPICS/support/stream/StreamDevice)
创建输入/输出控制器(IOC)
IOC允许通过以太网与设备对话。为IOC 创建目录。例如 $HOME/EPICS/IOCs

为一个名为sampleIOC的IOC创建一个顶部

mkdir sampleIOC; cd sampleIOC
makeBaseApp.pl -t example sampleIOC
makeBaseApp.pl -i -t example sampleIOC
Using target architecture darwin-x86 (only one available)
The following applications are available:
sampleIOC
What application should the IOC(s) boot?
The default uses the IOC's name, even if not listed above.
Application name? (just return)

现在,通过运行make,构建了一个示例IOC,如演示/测试IOC 。接下来,我们要将asyn和StreamDevice添加到IOC。为此,我们将流和asyn库添加到Makefile中。编辑 sampleIOCApp/src/Makefile 并添加块

#add asyn and streamDevice to this IOC production libs
sampleIOC_LIBS += stream
sampleIOC_LIBS += asyn

应用程序也必须加载同步数据库和流.dbd使用StreamDevice。这可以放入一个生成的dbd,例如xxx支持.dbd 已经包含在生成文件。所以xxx支持.dbd现在读到:

cat sampleIOCApp/src/xxxSupport.dbd
include "xxxRecord.dbd"
device(xxx,CONSTANT,devXxxSoft,"SoftChannel")
#
include "stream.dbd"
include "asyn.dbd"
registrar(drvAsynIPPortRegisterCommands)
registrar(drvAsynSerialPortRegisterCommands)
registrar(vxi11RegisterCommands)

要查找dbd文件,必须在中添加这些文件的路径 configure/RELEASE

...
# Build variables that are NOT used in paths should be set in
# the CONFIG_SITE file.
# Variables and paths to dependent modules:
SUPPORT = ${HOME}/EPICS/support
ASYN=$(SUPPORT)/asyn
STREAM=$(SUPPORT)/stream
# If using the sequencer, point SNCSEQ at its top directory:
#SNCSEQ = $(MODULES)/seq-ver
 ...

如果make是之前完成,make distclean则可能是必需的。无论如何,然后make。新创建的IOC可以与以下命令一起运行:

cd iocBoot/iocsampleIOC/
chmod u+x st.cmd
 ./st.cmd

还不是很有趣,因为没有数据库文件也没有协议文件

ls -la sampleIOCApp/Db/
total 56
drwxr-xr-x 11 maradona  staff   374  Jun  1  16:47  .
drwxr-xr-x  5 maradona  staff   170  Jun  1  12:46  ..
-rw-r--r--  1 maradona  staff   523  Jun  1  12:46  Makefile
drwxr-xr-x  2 maradona  staff    68  Jun  1  16:47  O.Common
drwxr-xr-x  3 maradona  staff   102  Jun  1  16:47  O.darwin-x86
-rw-r--r--  1 maradona  staff  1761  Jun  1  12:46  circle.db
-rw-r--r--  1 maradona  staff  1274  Jun  1  12:46  dbExample1.db
-rw-r--r--  1 maradona  staff   921  Jun  1  12:46  dbExample2.db
-rw-r--r--  1 maradona  staff   286  Jun  1  12:46  dbSubExample.db
-rw-r--r--  1 maradona  staff   170  Jun  1  12:46  sampleIOCVersion.db
-rw-r--r--  1 maradona  staff   307  Jun  1  12:46  user.substitutions

请注意,这是一个Db目录,而不是db
./sampleIOC中的目录。对于Tektronix的MDOxxxx示波器,数据库(.db)和协议(.proto)文件可能类似于

cat MDO.db
record(stringin, $(P)$(R)idn){
    field(DESC, "Asks for info blabla")
    field(DTYP, "stream")
    field(INP, "@MDO.proto getStr(*IDN,99) $(PORT) $(A)")
    field(PINI, "YES")
}

cat MDO.proto
Terminator = LF;
getStr{
    out "$1?";
    in "%s";
    @replytimeout {out "$1?"; in "%s";}
}

现在,我们 sampleIOCApp/Db/Makefile 在信息中添加了
这些文件必须包含在编译中的信息。所以

cat sampleIOCApp/Db/Makefile
TOP=../..
include $(TOP)/configure/CONFIG
#----------------------------------------
# ADD MACRO DEFINITIONS BELOW HERE
# Install databases, templates & substitutions like this
DB += circle.db
DB += dbExample1.db
DB += dbExample2.db
DB += sampleIOCVersion.db
DB += dbSubExample.db
DB += user.substitutions
DB += MDO.db
DB += MDO.proto
# If .db template is not named *.template add
# _TEMPLATE = 
include $(TOP)/configure/RULES
#----------------------------------------
# ADD EXTRA GNUMAKE RULES BELOW HERE

同样,make在目录sampleIOC中。最后,我们添加IP端口配置,设置Stream路径并将数据库加载到st.cmd文件中。的内容st.cmd应为:

cat st.cmd

#!../../bin/darwin-x86/sampleIOC

#- You may have to change sampleIOC to something else
#- everywhere it appears in this file

< envPaths

epicsEnvSet ("STREAM_PROTOCOL_PATH","$(TOP)/db")

cd "${TOP}"

## Register all support components
dbLoadDatabase "dbd/sampleIOC.dbd"
sampleIOC_registerRecordDeviceDriver pdbbase

## Load record instances
dbLoadTemplate "db/user.substitutions"
dbLoadRecords "db/sampleIOCVersion.db", "user=UUUUUU"
dbLoadRecords "db/dbSubExample.db", "user=UUUUUU"

#IF if the user also defines EPICS_CAS_INTF_ADDR_LIST then beacon address
#list automatic configuration is constrained to the network interfaces specified
#therein, and therefore only the broadcast addresses of the specified LAN interfaces,
#and the destination addresses of all specified point-to-point links, will be automatically configured.
#epicsEnvSet ("EPICS_CAS_INTF_ADDR_LIST","aaa.aaa.aaa.aaa")

# connect to the device ... IP-Address ! Port 2025 used by textronix, see manual
drvAsynIPPortConfigure("L0","bbb.bbb.bbb.bbb:pppp",0,0,0)

## Load record instances
dbLoadRecords("db/MDO.db", "P=UUUUUU:,PORT=L0,R=MDO:,L=0,A=0")

#- Set this to see messages from mySub
#var mySubDebug 1

#- Run this to trace the stages of iocInit
#traceIocInit

cd "${TOP}/iocBoot/${IOC}"
iocInit

## Start any sequence programs
#seq sncExample, "user=UUUUUU"

在这里,您必须将UUUUUU替换为运行
EPICS IOC 的用户名(UserName)。bbb.bbb.bbb.bbb 是设备的IP(例如
示波器),而pppp是其侦听的端口。如果有两个网络接口(例如wlan和eth0),则可以使用 EPICS_CAS_INTF_ADDR_LIST

对于多个网络接口,可能需要以下命令:

export EPICS_CA_ADDR_LIST=ccc.ccc.ccc.ccc << Broadcast address of the network
export EPICS_CA_AUTO_ADDR_LIST=NO
  • 10
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
以下是在Linux安装EPICS的步骤: 1. 下载EPICS软件包: - 访问EPICS官方网站(https://epics.anl.gov/)并下载最新的EPICS Base软件包。 2. 解压EPICS软件包: - 打开终端,进入下载目录。 - 使用以下命令解压EPICS软件包: ```shell tar -xvf epics-base-x.x.x.tar.gz ``` 其,x.x.x是EPICS Base软件包的版本号。 3. 设置环境变量: - 打开终端,进入EPICS Base目录。 - 使用以下命令设置EPICS环境变量: ```shell source ./setEpicsEnv.sh ``` 这将设置EPICS的环境变量,使其在终端可用。 4. 编译EPICS Base: - 在EPICS Base目录,使用以下命令编译EPICS Base: ```shell make ``` 这将编译EPICS Base并生成所需的库文件和可执行文件。 5. 创建IOC实例: - 在EPICS Base目录,使用以下命令创建IOC实例: ```shell makeBaseApp.pl -t ioc myioc ``` 其,myioc是IOC实例的名称,可以根据需要进行更改。 6. 进入IOC实例目录: - 使用以下命令进入IOC实例目录: ```shell cd myioc ``` 7. 编译IOC实例: - 在IOC实例目录,使用以下命令编译IOC实例: ```shell make ``` 这将编译IOC实例并生成所需的库文件和可执行文件。 8. 运行IOC实例: - 在IOC实例目录,使用以下命令运行IOC实例: ```shell ./st.cmd ``` 这将启动IOC实例并运行EPICS应用程序。 请注意,上述步骤仅适用于EPICS Base的安装和IOC实例的创建。如果需要安装其他EPICS模块或进行更高级的配置,请参考EPICS官方文档或相关教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值