1.1 EPICS有关于什么?

我们假设你多少知道EPICS是什么。这里我们从头开始并且达到这一点:我们有一台提供某些用于读取(caget或pvget)和写入(caput或pvput)的PVs的工作服务器,并且从在相同机器或者相同网络中另一台机器的另一个终端读和写它们,你将必须重复对应为它们安装EPICS的步骤。

1.2 准备你的系统

你需要make,C++和libreadline来从源代码编译。在macOS上,通过使用例如homebrew可以按照这些依赖。在Linux上,你可以使用apt-get install。在CentOS8上EPICS所需包的文档列出了构建EPICS base,sequencer, synapps模块和areaDetector所需的所有包。

1.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.4 测试EPICS

现在登出并且再次登录,使得你的新路径被正确设置。此外,用从终端直接导出开始,你可以执行以上三行代码。

运行softIoc并且如果每件事都正常,你应该见到一个EPICS提示符。

[blctrl@rockygu 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代表描述。现在我们再次启动softIoc,但这次使用了这个记录数据库。

[blctrl@rockygu EPICS]$ softIoc -d test.db
Starting iocInit
############################################################################
## EPICS R7.0.6.2-DEV
## Rev. R7.0.6.1-106-g2f8272d3a17065693b29-dirty
############################################################################
iocRun: All initialization complete
epics>

现在,从你的EPICS提示,你可以用dbl命令列出可用的记录并且你将见到像这样的东西:

epics> dbl
temperature:water
epics>

打开一个新终端(我们称它nr2),并且尝试命令行工具caget和caput。你将见到像这样的东西:

[blctrl@rockygu root]$ caget temperature:water
temperature:water              0
[blctrl@rockygu root]$ caget temperature:water.DESC
temperature:water.DESC         Water temperature in the fish tank
[blctrl@rockygu root]$ caput temperature:water 21
Old : temperature:water              0
New : temperature:water              21
[blctrl@rockygu root]$ caput temperature:water 24
Old : temperature:water              21
New : temperature:water              24
[blctrl@rockygu root]$ caget temperature:water
temperature:water              24

现在再打开另一个终端(nr3)并且按以下尝试camonitor:

[blctrl@rockygu root]$ camonitor temperature:water
temperature:water              2022-06-12 17:19:00.186735 24

首先看一下在你从终端nr2使用caput更改temperature:water值时发生什么。接着,尝试更改这个值某个微小量,就15.500001,15.500002,15.500003, ... 你将见到camonitor响应但读取没有变化。如果你想要看到更多数字,你可以运行:

camonitor -g8 temperature:water
[blctrl@rockygu EPICS]$ caput temperature:water 15.5
Old : temperature:water              24
New : temperature:water              15.5
[blctrl@rockygu EPICS]$ caput temperature:water 15.500001
Old : temperature:water              15.5
New : temperature:water              15.5
[blctrl@rockygu EPICS]$ caput temperature:water 15.500002
Old : temperature:water              15.5
New : temperature:water              15.5
[blctrl@rockygu EPICS]$ caput temperature:water 15.500003
Old : temperature:water              15.5
New : temperature:water              15.5
[blctrl@rockygu root]$ camonitor -g8 temperature:water
temperature:water              2022-06-12 17:19:00.186735 24
temperature:water              2022-06-12 17:21:40.665269 15.5
temperature:water              2022-06-12 17:21:51.569668 15.500001
temperature:water              2022-06-12 17:21:58.426327 15.500002
temperature:water              2022-06-12 17:22:00.335431 15.500003

有关通道访问协议的进一步细节,包括有关caput, caget, camonitor...命令行工具,请参考

EPICS R3.15 Channel Access Reference Manual (anl.gov)https://epics.anl.gov/base/R3-15/7-docs/CAref.html#CommandTools

在现实中,你的温度计(在本例中)返回的8个数字不可能都重要。我们应该限制量级更改为百分之一度。要做这件事,我们添加一行到文件test.db,因而它读为:

record(ai, "temperature:water")
{
field(DESC, "Water temperature in Lab 10")
field(MDEL, ".01")
}

MDEL代表监视死区。如果你现在用新的test.db文件运行:

softIoc -d test.db

你将看到camonitor只响应大于0.01的变化。这只是一个简单示例。更多信息请参考最新Record Reference Manual(https://epics.anl.gov/base/R3-15/7-docs/RecordReference.html)。

[blctrl@rockygu EPICS]$ caput temperature:water 15.5
Old : temperature:water              0
New : temperature:water              15.5
[blctrl@rockygu EPICS]$ caput temperature:water 15.5001
Old : temperature:water              15.5
New : temperature:water              15.5001
[blctrl@rockygu EPICS]$ caput temperature:water 15.501
Old : temperature:water              15.5001
New : temperature:water              15.501
[blctrl@rockygu EPICS]$ caput temperature:water 15.51
Old : temperature:water              15.501
New : temperature:water              15.51
[blctrl@rockygu EPICS]$ caput temperature:water 15.52
Old : temperature:water              15.51
New : temperature:water              15.52
[blctrl@rockygu root]$ camonitor  temperature:water
temperature:water              <undefined> 0 UDF INVALID
temperature:water              2022-06-12 17:25:53.235584 15.5
temperature:water              2022-06-12 17:26:55.705535 15.52

1.5 创建一个demo/test来测试ca和pva

[blctrl@rockygu EPICS]$ mkdir -p TEST/testIoc
[blctrl@rockygu EPICS]$ cd TEST/testIoc/
[blctrl@rockygu testIoc]$ ls
[blctrl@rockygu testIoc]$ makeBaseApp.pl -t example testIoc
[blctrl@rockygu testIoc]$ makeBaseApp.pl -i -t example testIoc
Using target architecture linux-x86_64 (only one available)
The following applications are available:testIoc
What application should the IOC(s) boot?
The default uses the IOC's name, even if not listed above.
Application name?
[blctrl@rockygu testIoc]$ ls
configure  iocBoot  Makefile  testIocApp
[blctrl@rockygu testIoc]$ cd iocBoot/ioctestIoc/
[blctrl@rockygu testIoc]$ ls
configure  iocBoot  Makefile  testIocApp
[blctrl@rockygu testIoc]$ make
make -C ./configure install
make[1]: Entering directory '/home/blctrl/EPICS/TEST/testIoc/configure'
perl -CSD /EPICS/epics-base/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64 ../..
...
perl -CSD /EPICS/epics-base/bin/linux-x86_64/convertRelease.pl -t /home/blctrl/EPICS/TEST/testIoc envPaths
make[2]: Leaving directory '/home/blctrl/EPICS/TEST/testIoc/iocBoot/ioctestIoc'
make[1]: Leaving directory '/home/blctrl/EPICS/TEST/testIoc/iocBoot'
[blctrl@rockygu testIoc]$ cd iocBoot/ioctestIoc/
[blctrl@rockygu ioctestIoc]$ ls
envPaths  Makefile  README  st.cmd
[blctrl@rockygu ioctestIoc]$ ./st.cmd
#!../../bin/linux-x86_64/testIoc
< envPaths
epicsEnvSet("IOC","ioctestIoc")
epicsEnvSet("TOP","/home/blctrl/EPICS/TEST/testIoc")
epicsEnvSet("EPICS_BASE","/EPICS/epics-base")
cd "/home/blctrl/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=blctrl"
dbLoadRecords "db/dbSubExample.db", "user=blctrl"
#var mySubDebug 1
#traceIocInit
cd "/home/blctrl/EPICS/TEST/testIoc/iocBoot/ioctestIoc"
iocInit
Starting iocInit
############################################################################
## EPICS R7.0.6.2-DEV
## Rev. R7.0.6.1-106-g2f8272d3a17065693b29-dirty
############################################################################
iocRun: All initialization complete
## Start any sequence programs
#seq sncExample, "user=blctrl"
epics> dbl
blctrl:aSubExample
blctrl:circle:angle
blctrl:line:a
blctrl:circle:x
blctrl:circle:y
blctrl:calcExample
blctrl:calcExample1
blctrl:calc1
blctrl:calcExample2
blctrl:calc2
blctrl:calcExample3
blctrl:calc3
blctrl:line:b
blctrl:aiExample
blctrl:aiExample1
blctrl:ai1
blctrl:aiExample2
blctrl:ai2
blctrl:aiExample3
blctrl:ai3
blctrl:circle:step
blctrl:circle:period
blctrl:circle:tick
blctrl:testIoc:version
blctrl:subExample
blctrl:compressExample
blctrl:xxxExample
epics>

现在在另一个终端中,可以尝试像以下的命令行工具:

caget, caput, camonitor, cainfo (Channel Access)
pvget, pvput, pvlist, eget, ... (PVAccess)

1.6 添加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

1.7 安装StreamDevice(由Dirk Zimoch编写,PSI)

cd $HOME/EPICS/support
git clone https://github.com/paulscherrerinstitute/StreamDevice.git
cd StreamDevice/
rm GNUmakefile

编辑$HOME/EPICS/support/StreamDevice/configure/RELEASE指定EPICS base的安装路径以及其它软件模块,例如:

EPICS_BASE=${HOME}/EPICS/epics-base
SUPPORT=${HOME}/EPICS/support
ASYN=$(SUPPORT)/asyn

记住:如果在相同文件中定义了它,$(NAME)有效。如果一个shell变量是meant,必须使用带有花括号的${NAME}。编译器不喜欢某些替换是可能的。在这种情况下,用像/Users/maradona/EPICS...的完整路径替换${NAME}。

sCalcout记录是synApps的组成部分。如果应该对这个记录的支持构建streamDevice,你必须首先至少安装来自synApps的calc模块。由于它被忽略了,现在用我们只要用#注释点那行。

#CALC=${HOME}/EPICS/support/synApps/calc

如果你想要启用正则表达式匹配,你需要PCRE包。对于大多数Linux系统,已经按照了它。在那种情况中,告诉StreamDevice PCRE头文件和库的位置。但预安装的包只能被用于host架构。因而,不要添加它们到RELEASE,而是到RELEASE.Common.linux-x86(如果linux-x86是你的EPICS_HOST_ARCH)。注意:不同的linux发行版可能在不同目录中定位这些文件。

PCRE_INCLUDE=/usr/include/pcre
PCRE_LIB=/usr/lib

对于64位安装,这个库的路径可能不同:

PCRE_INCLUDE=/usr/include/pcre
PCRE_LIB=/usr/lib64

如果你此时你对正则表达式匹配的支持不感兴趣,则你使用#注释掉在configure/RELEASE文件中指向PCRE的行。总是能在后面添加它。

最终(我们在目录中...EPICS/suppport/StreamDevice)运行make。

EPICS教程1 -- 在Linux/UNIX/DARWIN(MAC)上安装相关推荐

  1. Linux/Unix操作系统mac地址怎么查

    Linux/Unix操作系统mac地址怎么查 Linux/Unix操作系统熟悉的人都通常是用console命令控制台来进行相应的操作.  Linux/Unix操作系统查看网卡mac地址的方法可以通过以 ...

  2. mac电脑怎么装linux系统安装,苹果Mac电脑安装Windows 10的简明教程

    每次在Mac上安装Windows都是一件非常痛苦的事情,曾经为了装Win8把整台Mac的硬盘数据都弄丢了,最后通过龟速系统恢复模式恢复了MacOSX(50M电信光纤下载了3天才把系统下载完),相信和我 ...

  3. java安装_如何在 Mac 上安装 Java | Linux 中国

    macOS 用户可以运行 Java 的开源版本,以及用于云原生开发的新框架. 来源:https://linux.cn/article-12393-1.html 作者:Daniel Oh 译者:MCGA ...

  4. 【Python】扫盲帖:关于在Windows、Linux和Mac上安装设置Python的问题

    来源|Analytics Vidhya 概述 在Linux.Mac或Windows机器上安装Python时遇到的问题 一步一步安装Python及流行的数据科学工具 1 介绍 在你的机器上安装Pytho ...

  5. Mac上安装homebrew(类似于Linux上的apt-get)

    apt-get是Linux上的一个重要的工具,很多软件的安装.卸载.更新都会用到它. homebrew就是Mac上的"apt-get"啦. 但是,当前Mac上默认是没有这个工具的, ...

  6. anaconda 设置python3为主_关于在Windows、Linux和Mac上安装设置Python的问题

    介绍 在你的机器上安装Python是不是很困难?这实际上是我在数据科学初学者中看到的一个非常常见的问题.安装在理论上可能看起来很简单,但在现实中可能会有点问题. 我个人在尝试在我的Linux和Wind ...

  7. mac 上安装服务,查看服务,重启和关闭

    首先了解下的Mac的 homebrew ,官网:https://brew.sh/index_zh-cn.html 简单的说: Homebrew 能干什么? 答:使用 Homebrew 安装 Apple ...

  8. PHP入门--mac上安装php

    最近,要开始写PHP了... 我的内心是隐隐拒绝的,可我还是决定要学习一下PHP,然后去写PHP. 毕竟我们组做PHP的小伙伴们人那么好.毕竟19年我要拥抱变化. 一.PHP及其功能 (1)WEB网站 ...

  9. Linux redhat 5.4上安装MYDNS

    Linux redhat 5.4上安装MYDNS 一. 1,MYDNS 的简介: MyDNS是一个UNIX平台下的免费DNS服务器端软件.它被设计成直接从数据库中读取DNS记录软件,并且修改记录后也可 ...

最新文章

  1. SAP MM PR单据中采购组为空带来的问题
  2. ajax+jsp自动刷新
  3. mnn c++ windows 调用实例
  4. php txt删除重复行,php – 删除文本文件中的重复行
  5. 如何获取字符串中某个具体的数值--通过json.load转化成字典形式获取
  6. 关于idea右侧的maven project 如何调出来
  7. 23 MM配置-采购-采购信息记录-定义屏幕格式
  8. go home(2)-supprise
  9. 单片机c语言取反符号怎么打,arduino取反怎么写
  10. 计算机网络基础 课程设计体会,计算机网络课程设计心得体会.pdf
  11. 以stc15w408as为核心,基于gsm的红外报警技术报告
  12. 卸载工具Android,教你轻松卸载/删除Android手机内置游戏/软件
  13. 【Java】1、Java 基础入门
  14. uni-app 打开外部网页地址 web url
  15. 深度学习与计算机视觉教程(4) | 神经网络与反向传播(CV通关指南·完结)
  16. Android中级——色彩处理和图像处理
  17. Root检测与反检测
  18. WinZip Mac 7 Pro 序列号
  19. AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理、区块链和爬虫技术的智能会议系统》软件系统案例的界面简介、功能介绍分享之一、会前智能
  20. 关于ansys阶跃载荷与斜坡载荷

热门文章

  1. 团队管理——情绪价值
  2. 统一协同工作平台用户管理、单点登录以及任务集成接口说明
  3. 快速玩转ECS竞价实例
  4. Python Requests:两个例子说明get和post方法+用谷歌浏览器查看网络请求
  5. 忙碌中也要记得休息,这两款好玩的游戏推荐给你
  6. u盘读不出来怎么修复?可以试试这个方法
  7. git.exe 启动 慢_安化县利勃海尔挖掘机维修全车动作慢无力
  8. 好用的Chrome插件大全网站:插件小屋
  9. 浏览器查找文献\论文\资料\文档的小技巧
  10. 微信小程序GET请求总,如果参数中出现'+ ',' '加号符号,发送到后台会出现空格