本文主要记录操作
将涵盖以下几点:
非常简要的介绍EPICS框架
搭建epics base环境并work
在epics base的基础上创建test IOC
搭建asyn以及StreamDevice环境
ioc中database records field以及protocols简要理解
创建自己的第一个record
EPICS做为一种软件工具包,有扩展性强,兼容性好并设计合理的软件架构。如图: 最上层有client program,包含了MEDM等各种可视化工具以及人机交互界面 中间是Channel Access通讯协议 下层有IOC(输入输出控制器),一个IOC可以挂载许多program 与IOC同级的还有CAS,我的理解是personal IOC,同样使用PV协议,参与CA通讯。
做为EPICS最开始的一步,缺乏一些避坑的文档,大多数人这一步搭的很顺利,但是也有像我一样的非洲人踩了很多坑,特此记录一下
首先,检查下有没有g++,c++,gcc以及perl
which xxx
如果返回如/usr/bin/xxx就没啥问题,没有的话就install一下
在EPICS官网上下载EPICS base,下载完成后移动到新建的文件夹(epics-base)中 (这里特别要注意下,不要放在有中文的路径下,被坑惨了)
推荐/usr/local/,然后解压,这也文件所在目录就为/usr/local/epics-base/base-3.16.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
make成功之后,EPICS BASE的环境基本上就OK了
乘热打铁,有了基本环境之后,创建一个IOC看看什么样的
这里可以参考江易星写的博客“如何创建并运行一个ioc的例子” 很详细,基本上没有遇到什么其他的问题
相信到了这一步,很多人还是懵懵懂懂,不知道怎么用IOC,这里也放一个详细点的教程https://epics.anl.gov/base/R3-16/2-docs/AppDevGuide/AppDevGuide.html#DatabaseDefinition.html
但是这个教程有点太多太枯燥了,有点劝退,我们也可以先做下一步,一边边用IOC一边理解
asyn和StreamDevice是使用IOC必不可少的装备。
asyn提供了与硬件设备通讯的驱动的支持,StreamDevice是在应用程序里调用asyn并实现合理复杂串行通信协议的方法。也就是说,asyn为StreamDevice提供了支持,StreamDevice是一种方法方案。
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(如果你没装也没用的话)
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
搭建了modules的环境,在创建record之前,先大概理解以下record是什么?
EPICS系统通过网络访问IOC,运行IOC相当于服务器,IOC中加载db,dbd,protocol等文件
设备的各种变量做为一个record,记录在db文件中:如 电压电流等,每一个record都是一个object,详细例子可参考学姐的笔记
dbd文件毕竟像数据库的概念,定义了db文件的类型和格式,作用域等
protocol文件是用户对通讯协议进行更改再定义的文件,更像是一个函数,在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
还是先
makeBaseApp.pl -t ioc test
makeBaseApp.pl -t ioc -i test
然后修改firstApp/src/Makefile文件 添加如下的内容:
找到configure/RELEASE文件,添加:
ASYN = Asyn模块的路径
STREAM = StreamDevice模块的路径
然后make(这里如果报错,首要检查以下asyn和StreamDevice是不是有问题)
定义一个string input的record 在dbd路径下创建一个first.db文件,写入
同一层创建testnew.proto文件,写入
然后修改iocBoot/ioctest下st.cmd
/dev/pts/1为虚拟终端,指定端口的波特率、数据位、奇偶校验等
运行./st.cmd
就可以看到record
本文章使用limfx的vsocde插件快速发布