在Ubuntu下EPICS简介到创建第一个record详解

本文主要记录操作

将涵盖以下几点:

  1. 非常简要的介绍EPICS框架

  2. 搭建epics base环境并work

  3. 在epics base的基础上创建test IOC

  4. 搭建asyn以及StreamDevice环境

  5. ioc中database records field以及protocols简要理解

  6. 创建自己的第一个record

非常简要的EPICS框架介绍

EPICS做为一种软件工具包,有扩展性强,兼容性好并设计合理的软件架构。如图: 最上层有client program,包含了MEDM等各种可视化工具以及人机交互界面 中间是Channel Access通讯协议 下层有IOC(输入输出控制器),一个IOC可以挂载许多program 与IOC同级的还有CAS,我的理解是personal IOC,同样使用PV协议,参与CA通讯。

搭建epics base环境并work

做为EPICS最开始的一步,缺乏一些避坑的文档,大多数人这一步搭的很顺利,但是也有像我一样的非洲人踩了很多坑,特此记录一下

首先,检查下有没有g++,c++,gcc以及perl

which xxx 如果返回如/usr/bin/xxx就没啥问题,没有的话就install一下

  1. 在EPICS官网上下载EPICS base,下载完成后移动到新建的文件夹(epics-base)中 (这里特别要注意下,不要放在有中文的路径下,被坑惨了) 推荐/usr/local/,然后解压,这也文件所在目录就为/usr/local/epics-base/base-3.16.2

  2. cd进该目录,make启动,没有报错就成功了,幸运的同学一步就ok了,不幸的同学一般会遇到以下问题:

    • 环境变量没有配好,可以先找到startup里的EPICSHOSTARCH.pl,然后./EPICSHOSTARCH看下系统架构-->然后在根目录vim .bashrc在后面加上

    • 缺少readline --> sudo apt-get install libreadline-dev

    • cannot opern xxx.dbd -->把xxx软件在configure/RELEASE文件里注释掉

    • ⚠️如果出现以下问题,重新编译的时候要用make distclean

  3. make成功之后,EPICS BASE的环境基本上就OK了

在epics base的基础上创建test IOC

乘热打铁,有了基本环境之后,创建一个IOC看看什么样的

这里可以参考江易星写的博客“如何创建并运行一个ioc的例子” 很详细,基本上没有遇到什么其他的问题

相信到了这一步,很多人还是懵懵懂懂,不知道怎么用IOC,这里也放一个详细点的教程https://epics.anl.gov/base/R3-16/2-docs/AppDevGuide/AppDevGuide.html#DatabaseDefinition.html

但是这个教程有点太多太枯燥了,有点劝退,我们也可以先做下一步,一边边用IOC一边理解

搭建asyn以及StreamDevice环境

asyn和StreamDevice是使用IOC必不可少的装备。

asyn提供了与硬件设备通讯的驱动的支持,StreamDevice是在应用程序里调用asyn并实现合理复杂串行通信协议的方法。也就是说,asyn为StreamDevice提供了支持,StreamDevice是一种方法方案。

  1. asyn环境搭建

    • 其实asyn搭在哪都行,但是推荐可以都搭在epics-base下,便于管理,新建一个modules文件夹

      ```
      /epics-base
          /base-3.16.2
          /modules
             /asyn4-38
             /StreamDevice
          /IOCs
             /test
         ```
      
    • 下载 http://epics.anl.gov/modules/soft/asyn/ ,解压

    • 修改configure/RELEASE文件中的环境变量 EPICS_BASE指向自己装的位置

    • 注释IPAC和SNCSEQ(如果你没装也没用的话)

  2. StreamDevice环境搭建

    • 直接 git clone http://github.com/paulscherrer institute/StreamDevice.git

    >cd StreamDevice-steam_2_7_7 (进入该文件夹)
    >mkdir trash (创建文件夹)
    >mv GNUmakefile trash/ (移动文件 GNUmakefile 至文件夹 trash 中)
    >mkdir configure (创建文件夹)
    >cp -r ../asyn4-32/configure/* configure/
    >emacs configure/RELEASE #加 (修改文件)ASYN=$(EPICS_BASE)/../modules/asyn4-32
    >emacs src/devwaveformStream.c #加 #include <errlog.h>(已经有了就可以不加)
    >修改<top>中以及 src, srcSynApps, streamApp 下的 Makefile 中的 TOP 值。一共4个,修
    改值值 TOP 目录下
    #for example: emacs Makefile # 修改 TOP=./
    >emacs Makefile&
     #change “TOP = ..” to “TOP = .”
    #emacs ./src/Makefile
     # change “TOP = ../..” to “TOP = ..”
    #emacs ./streamApp/Makefile
      # change “TOP = ../..” to “TOP = ..”
    #emacs ./srcSynApps/Makefile   
      # change “TOP = ../..” to “TOP = ..”
    
    
  • 最后make

ioc中database records field以及protocols简要理解

搭建了modules的环境,在创建record之前,先大概理解以下record是什么?

EPICS系统通过网络访问IOC,运行IOC相当于服务器,IOC中加载db,dbd,protocol等文件

设备的各种变量做为一个record,记录在db文件中:如 电压电流等,每一个record都是一个object,详细例子可参考学姐的笔记

dbd文件毕竟像数据库的概念,定义了db文件的类型和格式,作用域等

protocol文件是用户对通讯协议进行更改再定义的文件,更像是一个函数,在record中调用

创建自己的第一个record

和创建test一样,我们在/usr/local/epics-base/IOCs/下再创建一个名为test的IOC

参考:https://www.limfx.pro/ReadArticle/326/streamdevice

详细教程:https://panda-wiki.gsi.de/foswiki/bin/view/DCS/EPICSstartUsingStreamDev

  1. 还是先

makeBaseApp.pl -t ioc test
makeBaseApp.pl -t ioc -i test
  1. 然后修改firstApp/src/Makefile文件 添加如下的内容:

  1. 找到configure/RELEASE文件,添加:

ASYN = Asyn模块的路径

STREAM = StreamDevice模块的路径

  1. 然后make(这里如果报错,首要检查以下asyn和StreamDevice是不是有问题)

  2. 定义一个string input的record 在dbd路径下创建一个first.db文件,写入

  1. 同一层创建testnew.proto文件,写入

  1. 然后修改iocBoot/ioctest下st.cmd

/dev/pts/1为虚拟终端,指定端口的波特率、数据位、奇偶校验等

  1. 运行./st.cmd

就可以看到record


本文章使用limfx的vsocde插件快速发布