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

  1. mkdir $HOME/EPICS
  2. cd $HOME/EPICS
  3. git clone --recursive https://github.com/epics-base/epics-base.git
  4. cd epics-base
  5. make

在编译之后,你应该通过添加以下到${HOME}/.profile或${HOME}/.bashrc两个文件之一:

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

EpicsHostArch是一个由EPICS提供的程序,它返回你系统的架构。因而以上代码应该适合每种架构。

1.4 测试EPICS

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

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

  1. [blctrl@rockygu EPICS]$ softIoc
  2. epics>

你可以用ctrl-c或者输入exit退出。

那不太令人印象深刻,但你至少知道EPICS被正确地安装了。所以,现在让我们尝试更复杂的事情,它将可以建议EPICS如何运行。

在你喜欢的任何目录中,准备一个文件test.db,其内容如:

  1. record(ai, "temperature:water")
  2. {
  3. field(DESC, "Water temperature in the fish tank")
  4. }

这个文件定义了一个名为temperature:water的记录,它是一个模拟输入记录(ai)。如你所想DESC代表描述。现在我们再次启动softIoc,但这次使用了这个记录数据库。

  1. [blctrl@rockygu EPICS]$ softIoc -d test.db
  2. Starting iocInit
  3. ############################################################################
  4. ## EPICS R7.0.6.2-DEV
  5. ## Rev. R7.0.6.1-106-g2f8272d3a17065693b29-dirty
  6. ############################################################################
  7. iocRun: All initialization complete
  8. epics>

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

  1. epics> dbl
  2. temperature:water
  3. epics>

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

  1. [blctrl@rockygu root]$ caget temperature:water
  2. temperature:water 0
  3. [blctrl@rockygu root]$ caget temperature:water.DESC
  4. temperature:water.DESC Water temperature in the fish tank
  5. [blctrl@rockygu root]$ caput temperature:water 21
  6. Old : temperature:water 0
  7. New : temperature:water 21
  8. [blctrl@rockygu root]$ caput temperature:water 24
  9. Old : temperature:water 21
  10. New : temperature:water 24
  11. [blctrl@rockygu root]$ caget temperature:water
  12. temperature:water 24

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

  1. [blctrl@rockygu root]$ camonitor temperature:water
  2. 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
  1. [blctrl@rockygu EPICS]$ caput temperature:water 15.5
  2. Old : temperature:water 24
  3. New : temperature:water 15.5
  4. [blctrl@rockygu EPICS]$ caput temperature:water 15.500001
  5. Old : temperature:water 15.5
  6. New : temperature:water 15.5
  7. [blctrl@rockygu EPICS]$ caput temperature:water 15.500002
  8. Old : temperature:water 15.5
  9. New : temperature:water 15.5
  10. [blctrl@rockygu EPICS]$ caput temperature:water 15.500003
  11. Old : temperature:water 15.5
  12. New : temperature:water 15.5
  1. [blctrl@rockygu root]$ camonitor -g8 temperature:water
  2. temperature:water 2022-06-12 17:19:00.186735 24
  3. temperature:water 2022-06-12 17:21:40.665269 15.5
  4. temperature:water 2022-06-12 17:21:51.569668 15.500001
  5. temperature:water 2022-06-12 17:21:58.426327 15.500002
  6. 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,因而它读为:

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

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

softIoc -d test.db

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

  1. [blctrl@rockygu EPICS]$ caput temperature:water 15.5
  2. Old : temperature:water 0
  3. New : temperature:water 15.5
  4. [blctrl@rockygu EPICS]$ caput temperature:water 15.5001
  5. Old : temperature:water 15.5
  6. New : temperature:water 15.5001
  7. [blctrl@rockygu EPICS]$ caput temperature:water 15.501
  8. Old : temperature:water 15.5001
  9. New : temperature:water 15.501
  10. [blctrl@rockygu EPICS]$ caput temperature:water 15.51
  11. Old : temperature:water 15.501
  12. New : temperature:water 15.51
  13. [blctrl@rockygu EPICS]$ caput temperature:water 15.52
  14. Old : temperature:water 15.51
  15. New : temperature:water 15.52
  1. [blctrl@rockygu root]$ camonitor temperature:water
  2. temperature:water <undefined> 0 UDF INVALID
  3. temperature:water 2022-06-12 17:25:53.235584 15.5
  4. temperature:water 2022-06-12 17:26:55.705535 15.52

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

  1. [blctrl@rockygu EPICS]$ mkdir -p TEST/testIoc
  2. [blctrl@rockygu EPICS]$ cd TEST/testIoc/
  3. [blctrl@rockygu testIoc]$ ls
  4. [blctrl@rockygu testIoc]$ makeBaseApp.pl -t example testIoc
  5. [blctrl@rockygu testIoc]$ makeBaseApp.pl -i -t example testIoc
  6. Using target architecture linux-x86_64 (only one available)
  7. The following applications are available:
  8. testIoc
  9. What application should the IOC(s) boot?
  10. The default uses the IOC's name, even if not listed above.
  11. Application name?
  12. [blctrl@rockygu testIoc]$ ls
  13. configure iocBoot Makefile testIocApp
  14. [blctrl@rockygu testIoc]$ cd iocBoot/ioctestIoc/
  15. [blctrl@rockygu testIoc]$ ls
  16. configure iocBoot Makefile testIocApp
  17. [blctrl@rockygu testIoc]$ make
  18. make -C ./configure install
  19. make[1]: Entering directory '/home/blctrl/EPICS/TEST/testIoc/configure'
  20. perl -CSD /EPICS/epics-base/bin/linux-x86_64/makeMakefile.pl O.linux-x86_64 ../..
  21. ...
  22. perl -CSD /EPICS/epics-base/bin/linux-x86_64/convertRelease.pl -t /home/blctrl/EPICS/TEST/testIoc envPaths
  23. make[2]: Leaving directory '/home/blctrl/EPICS/TEST/testIoc/iocBoot/ioctestIoc'
  24. make[1]: Leaving directory '/home/blctrl/EPICS/TEST/testIoc/iocBoot'
  25. [blctrl@rockygu testIoc]$ cd iocBoot/ioctestIoc/
  26. [blctrl@rockygu ioctestIoc]$ ls
  27. envPaths Makefile README st.cmd
  28. [blctrl@rockygu ioctestIoc]$ ./st.cmd
  29. #!../../bin/linux-x86_64/testIoc
  30. < envPaths
  31. epicsEnvSet("IOC","ioctestIoc")
  32. epicsEnvSet("TOP","/home/blctrl/EPICS/TEST/testIoc")
  33. epicsEnvSet("EPICS_BASE","/EPICS/epics-base")
  34. cd "/home/blctrl/EPICS/TEST/testIoc"
  35. ## Register all support components
  36. dbLoadDatabase "dbd/testIoc.dbd"
  37. testIoc_registerRecordDeviceDriver pdbbase
  38. ## Load record instances
  39. dbLoadTemplate "db/user.substitutions"
  40. dbLoadRecords "db/testIocVersion.db", "user=blctrl"
  41. dbLoadRecords "db/dbSubExample.db", "user=blctrl"
  42. #var mySubDebug 1
  43. #traceIocInit
  44. cd "/home/blctrl/EPICS/TEST/testIoc/iocBoot/ioctestIoc"
  45. iocInit
  46. Starting iocInit
  47. ############################################################################
  48. ## EPICS R7.0.6.2-DEV
  49. ## Rev. R7.0.6.1-106-g2f8272d3a17065693b29-dirty
  50. ############################################################################
  51. iocRun: All initialization complete
  52. ## Start any sequence programs
  53. #seq sncExample, "user=blctrl"
  54. epics> dbl
  55. blctrl:aSubExample
  56. blctrl:circle:angle
  57. blctrl:line:a
  58. blctrl:circle:x
  59. blctrl:circle:y
  60. blctrl:calcExample
  61. blctrl:calcExample1
  62. blctrl:calc1
  63. blctrl:calcExample2
  64. blctrl:calc2
  65. blctrl:calcExample3
  66. blctrl:calc3
  67. blctrl:line:b
  68. blctrl:aiExample
  69. blctrl:aiExample1
  70. blctrl:ai1
  71. blctrl:aiExample2
  72. blctrl:ai2
  73. blctrl:aiExample3
  74. blctrl:ai3
  75. blctrl:circle:step
  76. blctrl:circle:period
  77. blctrl:circle:tick
  78. blctrl:testIoc:version
  79. blctrl:subExample
  80. blctrl:compressExample
  81. blctrl:xxxExample
  82. epics>

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

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

1.6 添加asyn包

  1. cd $HOME/EPICS
  2. mkdir support
  3. cd support
  4. git clone https://github.com/epics-modules/asyn.git
  5. cd asyn

编辑$HOME/EPICS/support/asyn/configure/RELEASE并且像如下设置EPICS_BASE:

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

由于此刻不需要IPAC=...和SNCSEQ=...,注释它们。整个文件应该读为:

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

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

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

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

  1. EPICS_BASE=${HOME}/EPICS/epics-base
  2. SUPPORT=${HOME}/EPICS/support
  3. 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发行版可能在不同目录中定位这些文件。

  1. PCRE_INCLUDE=/usr/include/pcre
  2. PCRE_LIB=/usr/lib

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

  1. PCRE_INCLUDE=/usr/include/pcre
  2. PCRE_LIB=/usr/lib64

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

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

EPICP安装与测试相关推荐

  1. my SQL下载安装,环境配置,以及密码忘记的解决,以及navicat for mysql下载,安装,测试连接...

    一.下载 在百度上搜索"mysql-5.6.24-winx64下载" 二.安装 选择安装路径,我的路径"C:\Soft\mysql-5.6.24-winx64" ...

  2. http_load安装与测试参数分析

    http_load安装与测试参数分析 http_load以并行复用的方式运行,用以测试 web 服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死. ...

  3. nginx 没有sbin目录_CentOS7下Nginx+ModSecurity配置、安装、测试教程

    " 最近在工作上遇到一点问题,问了大佬.百度,都没有很好地解决:经过大量搜索查阅以及试验,终于将问题解决.于是写下这篇文章以提醒自己,也可供读者参考." 环境:CentOS-7-x ...

  4. AutoBench+Httperf的安装、测试

    首先安装Httperf.主要是Httperf网路上给出的url均无法访问,因此在GitHub上找的源码工程,进行安装. 接下来介绍安装步骤,从Github下载下来的httperf包是zip. unzi ...

  5. 安装并测试nvenc linux sdk

    2019独角兽企业重金招聘Python工程师标准>>> nvidia在cuda之后推出一种官方生成更好视频处理技术nvenc. 网上相关资料很少, 也不知道这个东西到底怎么样,自己测 ...

  6. appium for mac 安装与测试ios说明

    一.安装 安装dmg,可以自己下载appium-1.4.0.dmg或者找rtx我要,文件过大不能添加附件. Appium提供了一个doctor,运行appium-doctor 如果有问题,Fix it ...

  7. Faste R-CNN的安装及测试

    一.拉取源码 下载 fast-rcnn 因下载解压后 caffe-fast-rcnn是空文件夹,故需要单独下 caffe-fast-rcnn-bcd9b4eadc7d8fbc433aeefd564e8 ...

  8. Faster R-CNN的安装及测试(Python版本和Matlab版本)

    rbg的Python版本 一.拉取源码 git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git 拉取完成后,在/h ...

  9. Eclipse JPBC library安装及测试

    Eclipse JPBC library安装及测试 资源下载路径: 安装配置: JPBC库是一个功能很强大的数学库,用于生成椭圆曲线,双线性等,但网上参考资料很少,重复度极高,该分栏用于安装,JPBC ...

最新文章

  1. 【OSX】OSX下采用MAMP的PHP替换系统自带PHP
  2. 安装Ubuntu 出现 SQUASFS error / sd 8:0:0:0 :[sdb] assuming drive cache:write through
  3. dropout层_深度学习两大基础Tricks:Dropout和BN详解
  4. fprintf函数的用法_MATLAB的21种特殊符号,总有一种你不知道的用法
  5. Maximal Rectangle
  6. 机器学习的一些注意事项
  7. db2 空值转换函数_Excel一键转换百分比
  8. ubuntu shell 直接输入密码
  9. Iostream通用输入/输出流类
  10. Unity游戏教程初步(一):开始之前
  11. Chrome网页下载提速小技巧
  12. JavaScript 学习笔记 超详细(b站pink老师)
  13. 关于项目上线(新浪云)
  14. 八个典型的大数据应用案例
  15. 线性代数笔记——第一章行列式
  16. 信息系统基础知识---信息系统工程
  17. oracle 11g安装包下载地址合集
  18. 平均路径损耗、小尺度衰落、大尺度衰落的区别
  19. Android图灵机器人的实现(一)
  20. kernel源代码标记:mainline 、longterm、stable、linux-next、snapshot的含义

热门文章

  1. Linux cut 命令
  2. 一维信号的频域特征分析python
  3. 实战篇-OpenSSL之AES加密算法-ECB模式
  4. 电脑控制台命令的简单操作方式(黑窗口)
  5. OpenCV系列四 --- 颜色通道分离与多通道图像混合
  6. 互联网巨头“死磕”不放弃的社交赛道还有生意吗?
  7. 重磅!L4级自动驾驶硬件方案来啦!
  8. MTK支持的DRM简介
  9. 松翰烧录器在keil仿真时闪退,解决方法
  10. 张柏芝、谢霆锋、陈冠希近半年行踪关系图,这个图很厉害,可以作为思维导图的工具...