EPICS ‘makeBaseApp’ IOC

IOC二进制程序

1) SoftIoc:执行带有ai, calc的*.db文件

EPICS ‘makeBaseApp’ IOC_第1张图片

2) softIocPVA:添加了PVAccess服务器

EPICS ‘makeBaseApp’ IOC_第2张图片

3) eipIoc:理解'field(DTYP, "EtherIP")'

EPICS ‘makeBaseApp’ IOC_第3张图片

如果我想要包含了PVA,EtherIP,AutoSave, Stream Device, ...?

EPICS ‘makeBaseApp’ IOC_第4张图片

EPICS IOC

1) 数据库

  • 记录
  • 远程访问
  • 访问安全

2) Sequencer

用于状态机的C代码

3) 设备支持

  • 包含已有设备支持? 很简单
  • 必须编写新设备(驱动)代码?难度不同。

EPICS ‘makeBaseApp’ IOC_第5张图片

softIoc, softIocPVA

1) 带有EPICS所带地数据库引擎,通道访问,可选地PVA

2) 需要autosave,sequencer, device support?

EPICS ‘makeBaseApp’ IOC_第6张图片

 创建你自己的IOC程序

'Host' vs ‘target’ IOCs

1) 基于主机的(host),即"软"IOC

  • 在编译它的相同主机(Linux, Mac, Windows)类型上运行的IOC
  • IOC仅是在这台主机上另一个程序
  • 在相同主机上可以运行很多IOCs
  • 示例:'softIoc' 'softIocPVA'

2) Target IOC

  • 从Linux交叉编译到vxWorks
  • 在vxWorks, RTEMS上运行
  • IOC是首要的,可能运行在目标机上的唯一程序

'makeBaseApp.pl'

1) 为自定义IOC创建骨架

  • 目录结构
  • Makefiles
  • 示例:*.db, *.st, driver/device/record *.c
  • IOC启动文件

2)两个示例:

a) makeBaseApp.pl  -t example:获取几乎所有东西;你删除所不需要的。

b) makeBaseApp.pl -t ioc:仅目录和Makefiles;你添加所需要的。

EPICS构建工具

1) make(GNU make), perl

2) 在Linux,Mac, Windows,FreeBSD,OSX,Windows,VxWorks,RTEMS,x86, x86_64, ppc, arm, ..上构建

3) AppDevGuide

4)  多年来对OSs,编译器很多变化,可用。

根据'example'模板的'demo'

# 选一个路径,在其下新建一个demo目录
[blctrl@main-machine ~]$ mkdir demo

# 进入新建的demo目录
[blctrl@main-machine ~]$ cd demo/
[blctrl@main-machine demo]$ ls

# 在demo目录下,用'demo'创建类型'example'的IOC程序
[blctrl@main-machine demo]$ makeBaseApp.pl -t example demo
[blctrl@main-machine demo]$ ls
configure  demoApp  Makefile

# 创建类型'example'的IOC启动设置,称它为'demo',因为它用于这个程序
# 当提示时,使用先前创建的'demo'程序作为这个IOC应该装载的程序
[blctrl@main-machine demo]$ makeBaseApp.pl -i -t example demo
Using target architecture linux-x86_64 (only one available)
The following applications are available:
    demo
What application should the IOC(s) boot? <直接回车>
The default uses the IOC's name, even if not listed above.
Application name?
[blctrl@main-machine demo]$ ls
configure  demoApp  iocBoot  Makefile

# 编译所有东西,没有报错,就是正确编译了
[blctrl@main-machine demo]$ make
make -C ./configure install
...
make[1]: Leaving directory '/home/blctrl/demo/iocBoot'
[blctrl@main-machine demo]$
[blctrl@main-machine demo]$ ls
bin  configure  db  dbd  demoApp  include  iocBoot  lib  Makefile

# 进入启动脚本目录
[blctrl@main-machine demo]$ cd iocBoot/iocdemo/
# 将执行权限赋给启动脚本
[blctrl@main-machine iocdemo]$ chmod +x st.cmd
# 执行启动脚本
[blctrl@main-machine iocdemo]$ ./st.cmd
#!../../bin/linux-x86_64/demo
< envPaths
epicsEnvSet("IOC","iocdemo")
epicsEnvSet("TOP","/home/blctrl/demo")
epicsEnvSet("EPICS_BASE","/usr/local/EPICS/base")
cd "/home/blctrl/demo"
## Register all support components
dbLoadDatabase "dbd/demo.dbd"
demo_registerRecordDeviceDriver pdbbase
## Load record instances
dbLoadTemplate "db/user.substitutions"
dbLoadRecords "db/demoVersion.db", "user=blctrl"
dbLoadRecords "db/dbSubExample.db", "user=blctrl"
#var mySubDebug 1
#traceIocInit
cd "/home/blctrl/demo/iocBoot/iocdemo"
iocInit
Starting iocInit
############################################################################
## EPICS R7.0.3.1
## EPICS Base built Sep  8 2022
############################################################################
iocRun: All initialization complete
## Start any sequence programs
#seq sncExample, "user=blctrl"
epics>

目录结构:关键文件

$ makeBaseApp.pl -t example demo

产生的目录结构:

  • configure/RELEASE
  • configure/CONFIG_SITE
  • demoApp/Db/*.db
  • demoApp/Db/*.substitutions
  • demoApp/Db/Makefile
  • demoApp/src/Makefile

$ makeBaseApp.pl -i -t example demo

产生的目录结构:

  • iocBoot/iocdemo/Makefile
  • iocBoot/iocdemo/st.cmd

configure/RELEASE

1) 定义EPICS base路径和其它模块

EPICS_BASE=/ics/tools/base-7.0.6
SNCSEQ=/ics/tools/seq-2.2.9
AUTOSAVE=/ics/tools/autosave0-R5-10-2

2)从3.15以来,包含了../RELEASE.local

basedir/RELEASE.local: 列出所有模块
basedir/top1/configure/RELEASE	– includes ../../RELEASE.local
basedir/top1/abcApp/		 	- uses EPICS base etc.
basedir/top1/iocBoot/		 	- IOC bootups
basedir/top2/configure/RELEASE 	– includes ../../RELEASE.local
basedir/top2/xyzApp/		 	- uses EPICS base etc. 
basedir/top2/iocBoot/		 	- IOC bootups

demoApp

1) xyzApp/Db:数据库文件

2) xyzApp/src:*Main.cpp, 序列,自定义设备支持,列出了所需的*.dbd和libs的Makefile

如何添加数据库文件:

1) 创建xyzApp/Db/another.db:对于简单的数据库,通过softIoc -d another.db测试。

2)添加到xyzApp/Db/Makefile:DB += another.db

3) make:现在它在db/another.db下

4)添加到iocBoot/iocwhatever/st.cmd:

dbLoadRecords "db/another.db", "macro=value"

5) 重启这个IOC

目录结构:生成的文件

  • **/O.Common
  • **/O.linux-x86_64
  • **/O.*
  • db/*
  • dbd/*
  • include/*
  • lib/*
  • bin/*

明白不同:

1) xyzApp/Db/*:数据库的'源'。编辑这些。

2) db/*:"安装的"数据库,可能有被替代的宏。将被下次'make'替代。

*.dbd:数据库描述

IOC记录类型,设备支持,...是可扩展的。

1) 实现新的记录类型,新的设备支持:为某个接口编写C/C++代码,编译。

2) 接着向核心IOC代码'注册'你的添加:*.dbd文件。

内部:vxWorks RTOS,原始的IOC目标,有运行时装载器和符号表。RTEMS, ..不需要提供这些。EPICS构建工具从*.dbd文件产生IOC启动源代码。

如何添加支持模块(设备, ...)

示例:'autosave'

1) 在configure/RELEASE中定义路径,或者在../RELEASE.local中更好

AUTOSAVE=/ics/tools/autosave-R5-10-2

2) 添加二进制和DBD文件到xyzApp/Db/Makefile:

yourProduct_DBD += asSupport.dbd

yourProduct_DBD += autosave

3) 在IOC启动文件中使用这个支持模块:

cd $(AUTOSAVE)

dbLoadRecords "db/save_restoreStatus.db", "P=demo"

set_requestfile_path("home/controls/var")

create_monitor_set(...)

有关如何使用一个支持模块,取决于特定的模块,包含提供的*.dbd, 二进制文件,IOC命令的名称。

概要

1) makeBaseApp.pl创建IOC框架

2)好习惯:

  • 使用makeBaseApp.pl -t exaple ... 来复制/粘贴。
  • 创建空的可操作设置,并且只拷贝进你所需的。 
  • 用小步做这件事。

3) 更多,见EPICS Application Developer‘s Guide.

你可能感兴趣的:(EPICS教程,EPICS)