如果我想要包含了PVA,EtherIP,AutoSave, Stream Device, ...?
用于状态机的C代码
a) makeBaseApp.pl -t example:获取几乎所有东西;你删除所不需要的。
b) makeBaseApp.pl -t ioc:仅目录和Makefiles;你添加所需要的。
1) make(GNU make), perl
2) 在Linux,Mac, Windows,FreeBSD,OSX,Windows,VxWorks,RTEMS,x86, x86_64, ppc, arm, ..上构建
3) AppDevGuide
4) 多年来对OSs,编译器很多变化,可用。
# 选一个路径,在其下新建一个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
产生的目录结构:
$ makeBaseApp.pl -i -t example demo
产生的目录结构:
EPICS_BASE=/ics/tools/base-7.0.6
SNCSEQ=/ics/tools/seq-2.2.9
AUTOSAVE=/ics/tools/autosave0-R5-10-2
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
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
1) xyzApp/Db/*:数据库的'源'。编辑这些。
2) db/*:"安装的"数据库,可能有被替代的宏。将被下次'make'替代。
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)好习惯:
3) 更多,见EPICS Application Developer‘s Guide.